1 | // RUN: %clang_builtins %s %librt -o %t && %run %t |
2 | // REQUIRES: librt_has_ashrdi3 |
3 | |
4 | #include "int_lib.h" |
5 | #include <stdio.h> |
6 | |
7 | // Returns: arithmetic a >> b |
8 | |
9 | // Precondition: 0 <= b < bits_in_dword |
10 | |
11 | COMPILER_RT_ABI di_int __ashrdi3(di_int a, int b); |
12 | |
13 | int test__ashrdi3(di_int a, int b, di_int expected) |
14 | { |
15 | di_int x = __ashrdi3(a, b); |
16 | if (x != expected) |
17 | printf(format: "error in __ashrdi3: %llX >> %d = %llX, expected %llX\n" , |
18 | a, b, __ashrdi3(a, b), expected); |
19 | return x != expected; |
20 | } |
21 | |
22 | char assumption_1[sizeof(di_int) == 2*sizeof(si_int)] = {0}; |
23 | |
24 | int main() |
25 | { |
26 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 0, expected: 0x123456789ABCDEFLL)) |
27 | return 1; |
28 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 1, expected: 0x91A2B3C4D5E6F7LL)) |
29 | return 1; |
30 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 2, expected: 0x48D159E26AF37BLL)) |
31 | return 1; |
32 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 3, expected: 0x2468ACF13579BDLL)) |
33 | return 1; |
34 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 4, expected: 0x123456789ABCDELL)) |
35 | return 1; |
36 | |
37 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 28, expected: 0x12345678LL)) |
38 | return 1; |
39 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 29, expected: 0x91A2B3CLL)) |
40 | return 1; |
41 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 30, expected: 0x48D159ELL)) |
42 | return 1; |
43 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 31, expected: 0x2468ACFLL)) |
44 | return 1; |
45 | |
46 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 32, expected: 0x1234567LL)) |
47 | return 1; |
48 | |
49 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 33, expected: 0x91A2B3LL)) |
50 | return 1; |
51 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 34, expected: 0x48D159LL)) |
52 | return 1; |
53 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 35, expected: 0x2468ACLL)) |
54 | return 1; |
55 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 36, expected: 0x123456LL)) |
56 | return 1; |
57 | |
58 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 60, expected: 0)) |
59 | return 1; |
60 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 61, expected: 0)) |
61 | return 1; |
62 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 62, expected: 0)) |
63 | return 1; |
64 | if (test__ashrdi3(a: 0x0123456789ABCDEFLL, b: 63, expected: 0)) |
65 | return 1; |
66 | |
67 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 0, expected: 0xFEDCBA9876543210LL)) |
68 | return 1; |
69 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 1, expected: 0xFF6E5D4C3B2A1908LL)) |
70 | return 1; |
71 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 2, expected: 0xFFB72EA61D950C84LL)) |
72 | return 1; |
73 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 3, expected: 0xFFDB97530ECA8642LL)) |
74 | return 1; |
75 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 4, expected: 0xFFEDCBA987654321LL)) |
76 | return 1; |
77 | |
78 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 28, expected: 0xFFFFFFFFEDCBA987LL)) |
79 | return 1; |
80 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 29, expected: 0xFFFFFFFFF6E5D4C3LL)) |
81 | return 1; |
82 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 30, expected: 0xFFFFFFFFFB72EA61LL)) |
83 | return 1; |
84 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 31, expected: 0xFFFFFFFFFDB97530LL)) |
85 | return 1; |
86 | |
87 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 32, expected: 0xFFFFFFFFFEDCBA98LL)) |
88 | return 1; |
89 | |
90 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 33, expected: 0xFFFFFFFFFF6E5D4CLL)) |
91 | return 1; |
92 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 34, expected: 0xFFFFFFFFFFB72EA6LL)) |
93 | return 1; |
94 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 35, expected: 0xFFFFFFFFFFDB9753LL)) |
95 | return 1; |
96 | if (test__ashrdi3(a: 0xFEDCBA9876543210LL, b: 36, expected: 0xFFFFFFFFFFEDCBA9LL)) |
97 | return 1; |
98 | |
99 | if (test__ashrdi3(a: 0xAEDCBA9876543210LL, b: 60, expected: 0xFFFFFFFFFFFFFFFALL)) |
100 | return 1; |
101 | if (test__ashrdi3(a: 0xAEDCBA9876543210LL, b: 61, expected: 0xFFFFFFFFFFFFFFFDLL)) |
102 | return 1; |
103 | if (test__ashrdi3(a: 0xAEDCBA9876543210LL, b: 62, expected: 0xFFFFFFFFFFFFFFFELL)) |
104 | return 1; |
105 | if (test__ashrdi3(a: 0xAEDCBA9876543210LL, b: 63, expected: 0xFFFFFFFFFFFFFFFFLL)) |
106 | return 1; |
107 | return 0; |
108 | } |
109 | |