brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 5df0198 Raw
101 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_negvti23// REQUIRES: int1284 5#include "int_lib.h"6#include <stdio.h>7 8#ifdef CRT_HAS_128BIT9 10// Returns: -a11 12// Effects: aborts if -a overflows13 14COMPILER_RT_ABI ti_int __negvti2(ti_int a);15COMPILER_RT_ABI ti_int __negti2(ti_int a);16 17int test__negvti2(ti_int a)18{19    ti_int x = __negvti2(a);20    ti_int expected = __negti2(a);21    if (x != expected)22    {23        twords at;24        at.all = a;25        twords xt;26        xt.all = x;27        twords expectedt;28        expectedt.all = expected;29        printf("error in __negvti2(0x%.16llX%.16llX) = 0x%.16llX%.16llX, "30               "expected 0x%.16llX%.16llX\n",31               at.s.high, at.s.low, xt.s.high, xt.s.low, expectedt.s.high, expectedt.s.low);32    }33    return x != expected;34}35 36#endif37 38int main()39{40#ifdef CRT_HAS_128BIT41    if (test__negvti2(0))42        return 1;43    if (test__negvti2(1))44        return 1;45    if (test__negvti2(-1))46        return 1;47    if (test__negvti2(2))48        return 1;49    if (test__negvti2(-2))50        return 1;51    if (test__negvti2(3))52        return 1;53    if (test__negvti2(-3))54        return 1;55    if (test__negvti2(make_ti(0x0000000000000000LL, 0x00000000FFFFFFFELL)))56        return 1;57    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000002LL)))58        return 1;59    if (test__negvti2(make_ti(0x0000000000000000LL, 0x00000000FFFFFFFFLL)))60        return 1;61    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000001LL)))62        return 1;63    if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000100000000LL)))64        return 1;65    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL)))66        return 1;67    if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000200000000LL)))68        return 1;69    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL)))70        return 1;71    if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000300000000LL)))72        return 1;73    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFD00000000LL)))74        return 1;75    if (test__negvti2(make_ti(0x0000000000000000LL, 0x7FFFFFFFFFFFFFFFLL)))76        return 1;77    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000000000000001LL)))78        return 1;79    if (test__negvti2(make_ti(0x0000000000000000LL, 0x7FFFFFFFFFFFFFFFLL)))80        return 1;81    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL)))82        return 1;83    if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000200000000LL)))84        return 1;85    if (test__negvti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL)))86        return 1;87    if (test__negvti2(make_ti(0x0000000000000000LL, 0x0000000100000000LL)))88        return 1;89//     if (test__negvti2(make_ti(0x8000000000000000LL, 0x0000000000000000LL))) // abort90//         return 1;91    if (test__negvti2(make_ti(0x8000000000000000LL, 0x0000000000000001LL)))92        return 1;93    if (test__negvti2(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))94        return 1;95 96#else97    printf("skipped\n");98#endif99   return 0;100}101