119 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_negti23// REQUIRES: int1284 5#include "int_lib.h"6#include <stdio.h>7 8#ifdef CRT_HAS_128BIT9 10// Returns: -a11 12COMPILER_RT_ABI ti_int __negti2(ti_int a);13 14int test__negti2(ti_int a, ti_int expected)15{16 ti_int x = __negti2(a);17 if (x != expected)18 {19 twords at;20 at.all = a;21 twords xt;22 xt.all = x;23 twords expectedt;24 expectedt.all = expected;25 printf("error in __negti2: -0x%.16llX%.16llX = 0x%.16llX%.16llX, "26 "expected 0x%.16llX%.16llX\n",27 at.s.high, at.s.low, xt.s.high, xt.s.low, expectedt.s.high, expectedt.s.low);28 }29 return x != expected;30}31 32char assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};33 34#endif35 36int main()37{38#ifdef CRT_HAS_128BIT39 if (test__negti2(0, 0))40 return 1;41 if (test__negti2(1, -1))42 return 1;43 if (test__negti2(-1, 1))44 return 1;45 if (test__negti2(2, -2))46 return 1;47 if (test__negti2(-2, 2))48 return 1;49 if (test__negti2(3, -3))50 return 1;51 if (test__negti2(-3, 3))52 return 1;53 if (test__negti2(make_ti(0x0000000000000000LL, 0x00000000FFFFFFFELL),54 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000002LL)))55 return 1;56 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000002LL),57 make_ti(0x0000000000000000LL, 0x00000000FFFFFFFELL)))58 return 1;59 if (test__negti2(make_ti(0x0000000000000000LL, 0x00000000FFFFFFFFLL),60 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000001LL)))61 return 1;62 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000001LL),63 make_ti(0x0000000000000000LL, 0x00000000FFFFFFFFLL)))64 return 1;65 if (test__negti2(make_ti(0x0000000000000000LL, 0x0000000100000000LL),66 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL)))67 return 1;68 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL),69 make_ti(0x0000000000000000LL, 0x0000000100000000LL)))70 return 1;71 if (test__negti2(make_ti(0x0000000000000000LL, 0x0000000200000000LL),72 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL)))73 return 1;74 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL),75 make_ti(0x0000000000000000LL, 0x0000000200000000LL)))76 return 1;77 if (test__negti2(make_ti(0x0000000000000000LL, 0x0000000300000000LL),78 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFD00000000LL)))79 return 1;80 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFD00000000LL),81 make_ti(0x0000000000000000LL, 0x0000000300000000LL)))82 return 1;83 if (test__negti2(make_ti(0x0000000000000000LL, 0x7FFFFFFFFFFFFFFFLL),84 make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000000000000001LL)))85 return 1;86 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000000000000001LL),87 make_ti(0x0000000000000000LL, 0x7FFFFFFFFFFFFFFFLL)))88 return 1;89 if (test__negti2(make_ti(0x0000000000000000LL, 0x7FFFFFFFFFFFFFFFLL),90 make_ti(0xFFFFFFFFFFFFFFFFLL, 0x8000000000000001LL)))91 return 1;92 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL),93 make_ti(0x0000000000000000LL, 0x0000000200000000LL)))94 return 1;95 if (test__negti2(make_ti(0x0000000000000000LL, 0x0000000200000000LL),96 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFE00000000LL)))97 return 1;98 if (test__negti2(make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL),99 make_ti(0x0000000000000000LL, 0x0000000100000000LL)))100 return 1;101 if (test__negti2(make_ti(0x0000000000000000LL, 0x0000000100000000LL),102 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFF00000000LL)))103 return 1;104 if (test__negti2(make_ti(0x8000000000000000LL, 0x0000000000000000LL),105 make_ti(0x8000000000000000LL, 0x0000000000000000LL)))106 return 1;107 if (test__negti2(make_ti(0x8000000000000000LL, 0x0000000000000001LL),108 make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))109 return 1;110 if (test__negti2(make_ti(0x7FFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL),111 make_ti(0x8000000000000000LL, 0x0000000000000001LL)))112 return 1;113 114#else115 printf("skipped\n");116#endif117 return 0;118}119