163 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_ashrti33// REQUIRES: int1284 5#include "int_lib.h"6#include <stdio.h>7 8#ifdef CRT_HAS_128BIT9 10// Returns: arithmetic a >> b11 12// Precondition: 0 <= b < bits_in_tword13 14COMPILER_RT_ABI ti_int __ashrti3(ti_int a, int b);15 16int test__ashrti3(ti_int a, int b, ti_int expected) {17 ti_int x = __ashrti3(a, b);18 if (x != expected) {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 __ashrti3: 0x%llX%.16llX >> %d = 0x%llX%.16llX,"26 " expected 0x%llX%.16llX\n",27 at.s.high, at.s.low, b, xt.s.high, xt.s.low, expectedt.s.high,28 expectedt.s.low);29 }30 return x != expected;31}32 33char assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};34 35#endif36 37int main()38{39#ifdef CRT_HAS_128BIT40 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 0,41 make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL)))42 return 1;43 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 1,44 make_ti(0xFF6E5D4C3B2A190ALL, 0xFF6E5D4C3B2A190ALL)))45 return 1;46 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 2,47 make_ti(0xFFB72EA61D950C85LL, 0x7FB72EA61D950C85LL)))48 return 1;49 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 3,50 make_ti(0xFFDB97530ECA8642LL, 0xBFDB97530ECA8642LL)))51 return 1;52 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 4,53 make_ti(0xFFEDCBA987654321LL, 0x5FEDCBA987654321LL)))54 return 1;55 56 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 28,57 make_ti(0xFFFFFFFFEDCBA987LL, 0x6543215FEDCBA987LL)))58 return 1;59 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 29,60 make_ti(0xFFFFFFFFF6E5D4C3LL, 0xB2A190AFF6E5D4C3LL)))61 return 1;62 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 30,63 make_ti(0xFFFFFFFFFB72EA61LL, 0xD950C857FB72EA61LL)))64 return 1;65 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 31,66 make_ti(0xFFFFFFFFFDB97530LL, 0xECA8642BFDB97530LL)))67 return 1;68 69 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 32,70 make_ti(0xFFFFFFFFFEDCBA98LL, 0x76543215FEDCBA98LL)))71 return 1;72 73 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 33,74 make_ti(0xFFFFFFFFFF6E5D4CLL, 0x3B2A190AFF6E5D4CLL)))75 return 1;76 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 34,77 make_ti(0xFFFFFFFFFFB72EA6LL, 0x1D950C857FB72EA6LL)))78 return 1;79 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 35,80 make_ti(0xFFFFFFFFFFDB9753LL, 0x0ECA8642BFDB9753LL)))81 return 1;82 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 36,83 make_ti(0xFFFFFFFFFFEDCBA9LL, 0x876543215FEDCBA9LL)))84 return 1;85 86 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 60,87 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xEDCBA9876543215FLL)))88 return 1;89 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 61,90 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xF6E5D4C3B2A190AFLL)))91 return 1;92 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 62,93 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFB72EA61D950C857LL)))94 return 1;95 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 63,96 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFDB97530ECA8642BLL)))97 return 1;98 99 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 64,100 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFEDCBA9876543215LL)))101 return 1;102 103 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 65,104 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFF6E5D4C3B2A190ALL)))105 return 1;106 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 66,107 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFB72EA61D950C85LL)))108 return 1;109 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 67,110 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFDB97530ECA8642LL)))111 return 1;112 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 68,113 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFEDCBA987654321LL)))114 return 1;115 116 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 92,117 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFEDCBA987LL)))118 return 1;119 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 93,120 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFF6E5D4C3LL)))121 return 1;122 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 94,123 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFB72EA61LL)))124 return 1;125 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 95,126 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFDB97530LL)))127 return 1;128 129 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 96,130 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFEDCBA98LL)))131 return 1;132 133 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 97,134 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFF6E5D4CLL)))135 return 1;136 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 98,137 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFB72EA6LL)))138 return 1;139 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 99,140 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFDB9753LL)))141 return 1;142 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 100,143 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFEDCBA9LL)))144 return 1;145 146 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 124,147 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))148 return 1;149 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 125,150 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))151 return 1;152 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 126,153 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))154 return 1;155 if (test__ashrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 127,156 make_ti(0xFFFFFFFFFFFFFFFFLL, 0xFFFFFFFFFFFFFFFFLL)))157 return 1;158#else159 printf("skipped\n");160#endif161 return 0;162}163