brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 625726f Raw
163 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_lshrti33// REQUIRES: int1284 5#include "int_lib.h"6#include <stdio.h>7 8#ifdef CRT_HAS_128BIT9 10// Returns: logical a >> b11 12// Precondition:  0 <= b < bits_in_dword13 14COMPILER_RT_ABI ti_int __lshrti3(ti_int a, int b);15 16int test__lshrti3(ti_int a, int b, ti_int expected) {17  ti_int x = __lshrti3(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 __lshrti3: 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__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 0,41                      make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL)))42        return 1;43    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 1,44                      make_ti(0x7F6E5D4C3B2A190ALL, 0xFF6E5D4C3B2A190ALL)))45        return 1;46    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 2,47                      make_ti(0x3FB72EA61D950C85LL, 0x7FB72EA61D950C85LL)))48        return 1;49    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 3,50                      make_ti(0x1FDB97530ECA8642LL, 0xBFDB97530ECA8642LL)))51        return 1;52    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 4,53                      make_ti(0x0FEDCBA987654321LL, 0x5FEDCBA987654321LL)))54        return 1;55 56    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 28,57                      make_ti(0x0000000FEDCBA987LL, 0x6543215FEDCBA987LL)))58        return 1;59    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 29,60                      make_ti(0x00000007F6E5D4C3LL, 0xB2A190AFF6E5D4C3LL)))61        return 1;62    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 30,63                      make_ti(0x00000003FB72EA61LL, 0xD950C857FB72EA61LL)))64        return 1;65    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 31,66                      make_ti(0x00000001FDB97530LL, 0xECA8642BFDB97530LL)))67        return 1;68 69    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 32,70                      make_ti(0x00000000FEDCBA98LL, 0x76543215FEDCBA98LL)))71        return 1;72 73    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 33,74                      make_ti(0x000000007F6E5D4CLL, 0x3B2A190AFF6E5D4CLL)))75        return 1;76    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 34,77                      make_ti(0x000000003FB72EA6LL, 0x1D950C857FB72EA6LL)))78        return 1;79    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 35,80                      make_ti(0x000000001FDB9753LL, 0x0ECA8642BFDB9753LL)))81        return 1;82    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 36,83                      make_ti(0x000000000FEDCBA9LL, 0x876543215FEDCBA9LL)))84        return 1;85 86    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 60,87                      make_ti(0x000000000000000FLL, 0xEDCBA9876543215FLL)))88        return 1;89    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 61,90                      make_ti(0x0000000000000007LL, 0xF6E5D4C3B2A190AFLL)))91        return 1;92    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 62,93                      make_ti(0x0000000000000003LL, 0xFB72EA61D950C857LL)))94        return 1;95    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 63,96                      make_ti(0x0000000000000001LL, 0xFDB97530ECA8642BLL)))97        return 1;98 99    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 64,100                      make_ti(0x0000000000000000LL, 0xFEDCBA9876543215LL)))101        return 1;102 103    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 65,104                      make_ti(0x0000000000000000LL, 0x7F6E5D4C3B2A190ALL)))105        return 1;106    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 66,107                      make_ti(0x0000000000000000LL, 0x3FB72EA61D950C85LL)))108        return 1;109    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 67,110                      make_ti(0x0000000000000000LL, 0x1FDB97530ECA8642LL)))111        return 1;112    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 68,113                      make_ti(0x0000000000000000LL, 0x0FEDCBA987654321LL)))114        return 1;115 116    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 92,117                      make_ti(0x0000000000000000LL, 0x0000000FEDCBA987LL)))118        return 1;119    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 93,120                      make_ti(0x0000000000000000LL, 0x00000007F6E5D4C3LL)))121        return 1;122    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 94,123                      make_ti(0x0000000000000000LL, 0x00000003FB72EA61LL)))124        return 1;125    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 95,126                      make_ti(0x0000000000000000LL, 0x00000001FDB97530LL)))127        return 1;128 129    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 96,130                      make_ti(0x0000000000000000LL, 0x00000000FEDCBA98LL)))131        return 1;132 133    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 97,134                      make_ti(0x0000000000000000LL, 0x000000007F6E5D4CLL)))135        return 1;136    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 98,137                      make_ti(0x0000000000000000LL, 0x000000003FB72EA6LL)))138        return 1;139    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 99,140                      make_ti(0x0000000000000000LL, 0x000000001FDB9753LL)))141        return 1;142    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 100,143                      make_ti(0x0000000000000000LL, 0x000000000FEDCBA9LL)))144        return 1;145 146    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 124,147                      make_ti(0x0000000000000000LL, 0x000000000000000FLL)))148        return 1;149    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 125,150                      make_ti(0x0000000000000000LL, 0x0000000000000007LL)))151        return 1;152    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 126,153                      make_ti(0x0000000000000000LL, 0x0000000000000003LL)))154        return 1;155    if (test__lshrti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 127,156                      make_ti(0x0000000000000000LL, 0x0000000000000001LL)))157        return 1;158#else159    printf("skipped\n");160#endif161    return 0;162}163