1*7c3d14c8STreehugger Robot //===-- udivsi3_test.c - Test __udivsi3 -----------------------------------===//
2*7c3d14c8STreehugger Robot //
3*7c3d14c8STreehugger Robot // The LLVM Compiler Infrastructure
4*7c3d14c8STreehugger Robot //
5*7c3d14c8STreehugger Robot // This file is dual licensed under the MIT and the University of Illinois Open
6*7c3d14c8STreehugger Robot // Source Licenses. See LICENSE.TXT for details.
7*7c3d14c8STreehugger Robot //
8*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
9*7c3d14c8STreehugger Robot //
10*7c3d14c8STreehugger Robot // This file tests __udivsi3 for the compiler_rt library.
11*7c3d14c8STreehugger Robot //
12*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===//
13*7c3d14c8STreehugger Robot
14*7c3d14c8STreehugger Robot #include "int_lib.h"
15*7c3d14c8STreehugger Robot #include <stdio.h>
16*7c3d14c8STreehugger Robot
17*7c3d14c8STreehugger Robot // Returns: a / b
18*7c3d14c8STreehugger Robot
19*7c3d14c8STreehugger Robot COMPILER_RT_ABI su_int __udivsi3(su_int a, su_int b);
20*7c3d14c8STreehugger Robot
test__udivsi3(su_int a,su_int b,su_int expected_q)21*7c3d14c8STreehugger Robot int test__udivsi3(su_int a, su_int b, su_int expected_q)
22*7c3d14c8STreehugger Robot {
23*7c3d14c8STreehugger Robot su_int q = __udivsi3(a, b);
24*7c3d14c8STreehugger Robot if (q != expected_q)
25*7c3d14c8STreehugger Robot printf("error in __udivsi3: %X / %X = %X, expected %X\n",
26*7c3d14c8STreehugger Robot a, b, q, expected_q);
27*7c3d14c8STreehugger Robot return q != expected_q;
28*7c3d14c8STreehugger Robot }
29*7c3d14c8STreehugger Robot
30*7c3d14c8STreehugger Robot su_int tests[][4] =
31*7c3d14c8STreehugger Robot {
32*7c3d14c8STreehugger Robot {0x00000000, 0x00000001, 0x00000000},
33*7c3d14c8STreehugger Robot {0x00000000, 0x00000002, 0x00000000},
34*7c3d14c8STreehugger Robot {0x00000000, 0x00000003, 0x00000000},
35*7c3d14c8STreehugger Robot {0x00000000, 0x00000010, 0x00000000},
36*7c3d14c8STreehugger Robot {0x00000000, 0x078644FA, 0x00000000},
37*7c3d14c8STreehugger Robot {0x00000000, 0x0747AE14, 0x00000000},
38*7c3d14c8STreehugger Robot {0x00000000, 0x7FFFFFFF, 0x00000000},
39*7c3d14c8STreehugger Robot {0x00000000, 0x80000000, 0x00000000},
40*7c3d14c8STreehugger Robot {0x00000000, 0xFFFFFFFD, 0x00000000},
41*7c3d14c8STreehugger Robot {0x00000000, 0xFFFFFFFE, 0x00000000},
42*7c3d14c8STreehugger Robot {0x00000000, 0xFFFFFFFF, 0x00000000},
43*7c3d14c8STreehugger Robot {0x00000001, 0x00000001, 0x00000001},
44*7c3d14c8STreehugger Robot {0x00000001, 0x00000002, 0x00000000},
45*7c3d14c8STreehugger Robot {0x00000001, 0x00000003, 0x00000000},
46*7c3d14c8STreehugger Robot {0x00000001, 0x00000010, 0x00000000},
47*7c3d14c8STreehugger Robot {0x00000001, 0x078644FA, 0x00000000},
48*7c3d14c8STreehugger Robot {0x00000001, 0x0747AE14, 0x00000000},
49*7c3d14c8STreehugger Robot {0x00000001, 0x7FFFFFFF, 0x00000000},
50*7c3d14c8STreehugger Robot {0x00000001, 0x80000000, 0x00000000},
51*7c3d14c8STreehugger Robot {0x00000001, 0xFFFFFFFD, 0x00000000},
52*7c3d14c8STreehugger Robot {0x00000001, 0xFFFFFFFE, 0x00000000},
53*7c3d14c8STreehugger Robot {0x00000001, 0xFFFFFFFF, 0x00000000},
54*7c3d14c8STreehugger Robot {0x00000002, 0x00000001, 0x00000002},
55*7c3d14c8STreehugger Robot {0x00000002, 0x00000002, 0x00000001},
56*7c3d14c8STreehugger Robot {0x00000002, 0x00000003, 0x00000000},
57*7c3d14c8STreehugger Robot {0x00000002, 0x00000010, 0x00000000},
58*7c3d14c8STreehugger Robot {0x00000002, 0x078644FA, 0x00000000},
59*7c3d14c8STreehugger Robot {0x00000002, 0x0747AE14, 0x00000000},
60*7c3d14c8STreehugger Robot {0x00000002, 0x7FFFFFFF, 0x00000000},
61*7c3d14c8STreehugger Robot {0x00000002, 0x80000000, 0x00000000},
62*7c3d14c8STreehugger Robot {0x00000002, 0xFFFFFFFD, 0x00000000},
63*7c3d14c8STreehugger Robot {0x00000002, 0xFFFFFFFE, 0x00000000},
64*7c3d14c8STreehugger Robot {0x00000002, 0xFFFFFFFF, 0x00000000},
65*7c3d14c8STreehugger Robot {0x00000003, 0x00000001, 0x00000003},
66*7c3d14c8STreehugger Robot {0x00000003, 0x00000002, 0x00000001},
67*7c3d14c8STreehugger Robot {0x00000003, 0x00000003, 0x00000001},
68*7c3d14c8STreehugger Robot {0x00000003, 0x00000010, 0x00000000},
69*7c3d14c8STreehugger Robot {0x00000003, 0x078644FA, 0x00000000},
70*7c3d14c8STreehugger Robot {0x00000003, 0x0747AE14, 0x00000000},
71*7c3d14c8STreehugger Robot {0x00000003, 0x7FFFFFFF, 0x00000000},
72*7c3d14c8STreehugger Robot {0x00000003, 0x80000000, 0x00000000},
73*7c3d14c8STreehugger Robot {0x00000003, 0xFFFFFFFD, 0x00000000},
74*7c3d14c8STreehugger Robot {0x00000003, 0xFFFFFFFE, 0x00000000},
75*7c3d14c8STreehugger Robot {0x00000003, 0xFFFFFFFF, 0x00000000},
76*7c3d14c8STreehugger Robot {0x00000010, 0x00000001, 0x00000010},
77*7c3d14c8STreehugger Robot {0x00000010, 0x00000002, 0x00000008},
78*7c3d14c8STreehugger Robot {0x00000010, 0x00000003, 0x00000005},
79*7c3d14c8STreehugger Robot {0x00000010, 0x00000010, 0x00000001},
80*7c3d14c8STreehugger Robot {0x00000010, 0x078644FA, 0x00000000},
81*7c3d14c8STreehugger Robot {0x00000010, 0x0747AE14, 0x00000000},
82*7c3d14c8STreehugger Robot {0x00000010, 0x7FFFFFFF, 0x00000000},
83*7c3d14c8STreehugger Robot {0x00000010, 0x80000000, 0x00000000},
84*7c3d14c8STreehugger Robot {0x00000010, 0xFFFFFFFD, 0x00000000},
85*7c3d14c8STreehugger Robot {0x00000010, 0xFFFFFFFE, 0x00000000},
86*7c3d14c8STreehugger Robot {0x00000010, 0xFFFFFFFF, 0x00000000},
87*7c3d14c8STreehugger Robot {0x078644FA, 0x00000001, 0x078644FA},
88*7c3d14c8STreehugger Robot {0x078644FA, 0x00000002, 0x03C3227D},
89*7c3d14c8STreehugger Robot {0x078644FA, 0x00000003, 0x028216FE},
90*7c3d14c8STreehugger Robot {0x078644FA, 0x00000010, 0x0078644F},
91*7c3d14c8STreehugger Robot {0x078644FA, 0x078644FA, 0x00000001},
92*7c3d14c8STreehugger Robot {0x078644FA, 0x0747AE14, 0x00000001},
93*7c3d14c8STreehugger Robot {0x078644FA, 0x7FFFFFFF, 0x00000000},
94*7c3d14c8STreehugger Robot {0x078644FA, 0x80000000, 0x00000000},
95*7c3d14c8STreehugger Robot {0x078644FA, 0xFFFFFFFD, 0x00000000},
96*7c3d14c8STreehugger Robot {0x078644FA, 0xFFFFFFFE, 0x00000000},
97*7c3d14c8STreehugger Robot {0x078644FA, 0xFFFFFFFF, 0x00000000},
98*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000001, 0x0747AE14},
99*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000002, 0x03A3D70A},
100*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000003, 0x026D3A06},
101*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000010, 0x00747AE1},
102*7c3d14c8STreehugger Robot {0x0747AE14, 0x078644FA, 0x00000000},
103*7c3d14c8STreehugger Robot {0x0747AE14, 0x0747AE14, 0x00000001},
104*7c3d14c8STreehugger Robot {0x0747AE14, 0x7FFFFFFF, 0x00000000},
105*7c3d14c8STreehugger Robot {0x0747AE14, 0x80000000, 0x00000000},
106*7c3d14c8STreehugger Robot {0x0747AE14, 0xFFFFFFFD, 0x00000000},
107*7c3d14c8STreehugger Robot {0x0747AE14, 0xFFFFFFFE, 0x00000000},
108*7c3d14c8STreehugger Robot {0x0747AE14, 0xFFFFFFFF, 0x00000000},
109*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000001, 0x7FFFFFFF},
110*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000002, 0x3FFFFFFF},
111*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000003, 0x2AAAAAAA},
112*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000010, 0x07FFFFFF},
113*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x078644FA, 0x00000011},
114*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x0747AE14, 0x00000011},
115*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x7FFFFFFF, 0x00000001},
116*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x80000000, 0x00000000},
117*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0xFFFFFFFD, 0x00000000},
118*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0xFFFFFFFE, 0x00000000},
119*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0xFFFFFFFF, 0x00000000},
120*7c3d14c8STreehugger Robot {0x80000000, 0x00000001, 0x80000000},
121*7c3d14c8STreehugger Robot {0x80000000, 0x00000002, 0x40000000},
122*7c3d14c8STreehugger Robot {0x80000000, 0x00000003, 0x2AAAAAAA},
123*7c3d14c8STreehugger Robot {0x80000000, 0x00000010, 0x08000000},
124*7c3d14c8STreehugger Robot {0x80000000, 0x078644FA, 0x00000011},
125*7c3d14c8STreehugger Robot {0x80000000, 0x0747AE14, 0x00000011},
126*7c3d14c8STreehugger Robot {0x80000000, 0x7FFFFFFF, 0x00000001},
127*7c3d14c8STreehugger Robot {0x80000000, 0x80000000, 0x00000001},
128*7c3d14c8STreehugger Robot {0x80000000, 0xFFFFFFFD, 0x00000000},
129*7c3d14c8STreehugger Robot {0x80000000, 0xFFFFFFFE, 0x00000000},
130*7c3d14c8STreehugger Robot {0x80000000, 0xFFFFFFFF, 0x00000000},
131*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000001, 0xFFFFFFFD},
132*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000002, 0x7FFFFFFE},
133*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000003, 0x55555554},
134*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000010, 0x0FFFFFFF},
135*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x078644FA, 0x00000022},
136*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x0747AE14, 0x00000023},
137*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x7FFFFFFF, 0x00000001},
138*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x80000000, 0x00000001},
139*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0xFFFFFFFD, 0x00000001},
140*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0xFFFFFFFE, 0x00000000},
141*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0xFFFFFFFF, 0x00000000},
142*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000001, 0xFFFFFFFE},
143*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000002, 0x7FFFFFFF},
144*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000003, 0x55555554},
145*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000010, 0x0FFFFFFF},
146*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x078644FA, 0x00000022},
147*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x0747AE14, 0x00000023},
148*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x7FFFFFFF, 0x00000002},
149*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x80000000, 0x00000001},
150*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0xFFFFFFFD, 0x00000001},
151*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0xFFFFFFFE, 0x00000001},
152*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0xFFFFFFFF, 0x00000000},
153*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000001, 0xFFFFFFFF},
154*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000002, 0x7FFFFFFF},
155*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000003, 0x55555555},
156*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000010, 0x0FFFFFFF},
157*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x078644FA, 0x00000022},
158*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x0747AE14, 0x00000023},
159*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x7FFFFFFF, 0x00000002},
160*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x80000000, 0x00000001},
161*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0xFFFFFFFD, 0x00000001},
162*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0xFFFFFFFE, 0x00000001},
163*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0xFFFFFFFF, 0x00000001}
164*7c3d14c8STreehugger Robot };
165*7c3d14c8STreehugger Robot
main()166*7c3d14c8STreehugger Robot int main()
167*7c3d14c8STreehugger Robot {
168*7c3d14c8STreehugger Robot const unsigned N = sizeof(tests) / sizeof(tests[0]);
169*7c3d14c8STreehugger Robot unsigned i;
170*7c3d14c8STreehugger Robot for (i = 0; i < N; ++i)
171*7c3d14c8STreehugger Robot if (test__udivsi3(tests[i][0], tests[i][1], tests[i][2]))
172*7c3d14c8STreehugger Robot return 1;
173*7c3d14c8STreehugger Robot
174*7c3d14c8STreehugger Robot return 0;
175*7c3d14c8STreehugger Robot }
176