xref: /llvm-project/compiler-rt/test/builtins/Unit/ashrti3_test.c (revision 3834b0467ddc97ce0595e98eab805cd306ba4069)
1 // RUN: %clang_builtins %s %librt -o %t && %run %t
2 // REQUIRES: librt_has_ashrti3
3 // REQUIRES: int128
4 
5 #include "int_lib.h"
6 #include <stdio.h>
7 
8 #ifdef CRT_HAS_128BIT
9 
10 // Returns: arithmetic a >> b
11 
12 // Precondition:  0 <= b < bits_in_tword
13 
14 COMPILER_RT_ABI ti_int __ashrti3(ti_int a, int b);
15 
test__ashrti3(ti_int a,int b,ti_int expected)16 int 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 
33 char assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};
34 
35 #endif
36 
main()37 int main()
38 {
39 #ifdef CRT_HAS_128BIT
40     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 #else
159     printf("skipped\n");
160 #endif
161     return 0;
162 }
163