1*b9829059Sjoerg //===-- ashlti3_test.c - Test __ashlti3 -----------------------------------===//
2*b9829059Sjoerg //
3*b9829059Sjoerg // The LLVM Compiler Infrastructure
4*b9829059Sjoerg //
5*b9829059Sjoerg // This file is dual licensed under the MIT and the University of Illinois Open
6*b9829059Sjoerg // Source Licenses. See LICENSE.TXT for details.
7*b9829059Sjoerg //
8*b9829059Sjoerg //===----------------------------------------------------------------------===//
9*b9829059Sjoerg //
10*b9829059Sjoerg // This file tests __ashlti3 for the compiler_rt library.
11*b9829059Sjoerg //
12*b9829059Sjoerg //===----------------------------------------------------------------------===//
13*b9829059Sjoerg
14*b9829059Sjoerg #if __x86_64
15*b9829059Sjoerg
16*b9829059Sjoerg #include "int_lib.h"
17*b9829059Sjoerg #include <stdio.h>
18*b9829059Sjoerg
19*b9829059Sjoerg // Returns: a << b
20*b9829059Sjoerg
21*b9829059Sjoerg // Precondition: 0 <= b < bits_in_tword
22*b9829059Sjoerg
23*b9829059Sjoerg ti_int __ashlti3(ti_int a, si_int b);
24*b9829059Sjoerg
test__ashlti3(ti_int a,si_int b,ti_int expected)25*b9829059Sjoerg int test__ashlti3(ti_int a, si_int b, ti_int expected)
26*b9829059Sjoerg {
27*b9829059Sjoerg ti_int x = __ashlti3(a, b);
28*b9829059Sjoerg if (x != expected)
29*b9829059Sjoerg {
30*b9829059Sjoerg twords at;
31*b9829059Sjoerg at.all = a;
32*b9829059Sjoerg twords bt;
33*b9829059Sjoerg bt.all = b;
34*b9829059Sjoerg twords xt;
35*b9829059Sjoerg xt.all = x;
36*b9829059Sjoerg twords expectedt;
37*b9829059Sjoerg expectedt.all = expected;
38*b9829059Sjoerg printf("error in __ashlti3: 0x%llX%.16llX << %d = 0x%llX%.16llX,"
39*b9829059Sjoerg " expected 0x%llX%.16llX\n",
40*b9829059Sjoerg at.s.high, at.s.low, b, xt.s.high, xt.s.low,
41*b9829059Sjoerg expectedt.s.high, expectedt.s.low);
42*b9829059Sjoerg }
43*b9829059Sjoerg return x != expected;
44*b9829059Sjoerg }
45*b9829059Sjoerg
46*b9829059Sjoerg char assumption_1[sizeof(ti_int) == 2*sizeof(di_int)] = {0};
47*b9829059Sjoerg
48*b9829059Sjoerg #endif
49*b9829059Sjoerg
main()50*b9829059Sjoerg int main()
51*b9829059Sjoerg {
52*b9829059Sjoerg #if __x86_64
53*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 0,
54*b9829059Sjoerg make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL)))
55*b9829059Sjoerg return 1;
56*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 1,
57*b9829059Sjoerg make_ti(0xFDB97530ECA8642BLL, 0xFDB97530ECA8642ALL)))
58*b9829059Sjoerg return 1;
59*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 2,
60*b9829059Sjoerg make_ti(0xFB72EA61D950C857LL, 0XFB72EA61D950C854LL)))
61*b9829059Sjoerg return 1;
62*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 3,
63*b9829059Sjoerg make_ti(0xF6E5D4C3B2A190AFLL, 0xF6E5D4C3B2A190A8LL)))
64*b9829059Sjoerg return 1;
65*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 4,
66*b9829059Sjoerg make_ti(0xEDCBA9876543215FLL, 0xEDCBA98765432150LL)))
67*b9829059Sjoerg return 1;
68*b9829059Sjoerg
69*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 28,
70*b9829059Sjoerg make_ti(0x876543215FEDCBA9LL, 0x8765432150000000LL)))
71*b9829059Sjoerg return 1;
72*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 29,
73*b9829059Sjoerg make_ti(0x0ECA8642BFDB9753LL, 0x0ECA8642A0000000LL)))
74*b9829059Sjoerg return 1;
75*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 30,
76*b9829059Sjoerg make_ti(0x1D950C857FB72EA6LL, 0x1D950C8540000000LL)))
77*b9829059Sjoerg return 1;
78*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 31,
79*b9829059Sjoerg make_ti(0x3B2A190AFF6E5D4CLL, 0x3B2A190A80000000LL)))
80*b9829059Sjoerg return 1;
81*b9829059Sjoerg
82*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 32,
83*b9829059Sjoerg make_ti(0x76543215FEDCBA98LL, 0x7654321500000000LL)))
84*b9829059Sjoerg return 1;
85*b9829059Sjoerg
86*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 33,
87*b9829059Sjoerg make_ti(0xECA8642BFDB97530LL, 0xECA8642A00000000LL)))
88*b9829059Sjoerg return 1;
89*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 34,
90*b9829059Sjoerg make_ti(0xD950C857FB72EA61LL, 0xD950C85400000000LL)))
91*b9829059Sjoerg return 1;
92*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 35,
93*b9829059Sjoerg make_ti(0xB2A190AFF6E5D4C3LL, 0xB2A190A800000000LL)))
94*b9829059Sjoerg return 1;
95*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 36,
96*b9829059Sjoerg make_ti(0x6543215FEDCBA987LL, 0x6543215000000000LL)))
97*b9829059Sjoerg return 1;
98*b9829059Sjoerg
99*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 60,
100*b9829059Sjoerg make_ti(0x5FEDCBA987654321LL, 0x5000000000000000LL)))
101*b9829059Sjoerg return 1;
102*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 61,
103*b9829059Sjoerg make_ti(0xBFDB97530ECA8642LL, 0xA000000000000000LL)))
104*b9829059Sjoerg return 1;
105*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 62,
106*b9829059Sjoerg make_ti(0x7FB72EA61D950C85LL, 0x4000000000000000LL)))
107*b9829059Sjoerg return 1;
108*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 63,
109*b9829059Sjoerg make_ti(0xFF6E5D4C3B2A190ALL, 0x8000000000000000LL)))
110*b9829059Sjoerg return 1;
111*b9829059Sjoerg
112*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 64,
113*b9829059Sjoerg make_ti(0xFEDCBA9876543215LL, 0x0000000000000000LL)))
114*b9829059Sjoerg return 1;
115*b9829059Sjoerg
116*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 65,
117*b9829059Sjoerg make_ti(0xFDB97530ECA8642ALL, 0x0000000000000000LL)))
118*b9829059Sjoerg return 1;
119*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 66,
120*b9829059Sjoerg make_ti(0xFB72EA61D950C854LL, 0x0000000000000000LL)))
121*b9829059Sjoerg return 1;
122*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 67,
123*b9829059Sjoerg make_ti(0xF6E5D4C3B2A190A8LL, 0x0000000000000000LL)))
124*b9829059Sjoerg return 1;
125*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 68,
126*b9829059Sjoerg make_ti(0xEDCBA98765432150LL, 0x0000000000000000LL)))
127*b9829059Sjoerg return 1;
128*b9829059Sjoerg
129*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 92,
130*b9829059Sjoerg make_ti(0x8765432150000000LL, 0x0000000000000000LL)))
131*b9829059Sjoerg return 1;
132*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 93,
133*b9829059Sjoerg make_ti(0x0ECA8642A0000000LL, 0x0000000000000000LL)))
134*b9829059Sjoerg return 1;
135*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 94,
136*b9829059Sjoerg make_ti(0x1D950C8540000000LL, 0x0000000000000000LL)))
137*b9829059Sjoerg return 1;
138*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 95,
139*b9829059Sjoerg make_ti(0x3B2A190A80000000LL, 0x0000000000000000LL)))
140*b9829059Sjoerg return 1;
141*b9829059Sjoerg
142*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 96,
143*b9829059Sjoerg make_ti(0x7654321500000000LL, 0x0000000000000000LL)))
144*b9829059Sjoerg return 1;
145*b9829059Sjoerg
146*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 97,
147*b9829059Sjoerg make_ti(0xECA8642A00000000LL, 0x0000000000000000LL)))
148*b9829059Sjoerg return 1;
149*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 98,
150*b9829059Sjoerg make_ti(0xD950C85400000000LL, 0x0000000000000000LL)))
151*b9829059Sjoerg return 1;
152*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 99,
153*b9829059Sjoerg make_ti(0xB2A190A800000000LL, 0x0000000000000000LL)))
154*b9829059Sjoerg return 1;
155*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 100,
156*b9829059Sjoerg make_ti(0x6543215000000000LL, 0x0000000000000000LL)))
157*b9829059Sjoerg return 1;
158*b9829059Sjoerg
159*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 124,
160*b9829059Sjoerg make_ti(0x5000000000000000LL, 0x0000000000000000LL)))
161*b9829059Sjoerg return 1;
162*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 125,
163*b9829059Sjoerg make_ti(0xA000000000000000LL, 0x0000000000000000LL)))
164*b9829059Sjoerg return 1;
165*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 126,
166*b9829059Sjoerg make_ti(0x4000000000000000LL, 0x0000000000000000LL)))
167*b9829059Sjoerg return 1;
168*b9829059Sjoerg if (test__ashlti3(make_ti(0xFEDCBA9876543215LL, 0xFEDCBA9876543215LL), 127,
169*b9829059Sjoerg make_ti(0x8000000000000000LL, 0x0000000000000000LL)))
170*b9829059Sjoerg return 1;
171*b9829059Sjoerg #else
172*b9829059Sjoerg printf("skipped\n");
173*b9829059Sjoerg #endif
174*b9829059Sjoerg return 0;
175*b9829059Sjoerg }
176