1*b9829059Sjoerg //===-- umodsi3_test.c - Test __umodsi3 -----------------------------------===//
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 __umodsi3 for the compiler_rt library.
11*b9829059Sjoerg //
12*b9829059Sjoerg //===----------------------------------------------------------------------===//
13*b9829059Sjoerg
14*b9829059Sjoerg #include "int_lib.h"
15*b9829059Sjoerg #include <stdio.h>
16*b9829059Sjoerg
17*b9829059Sjoerg // Returns: a % b
18*b9829059Sjoerg
19*b9829059Sjoerg su_int __umodsi3(su_int a, su_int b);
20*b9829059Sjoerg
test__umodsi3(su_int a,su_int b,su_int expected_r)21*b9829059Sjoerg int test__umodsi3(su_int a, su_int b, su_int expected_r)
22*b9829059Sjoerg {
23*b9829059Sjoerg su_int r = __umodsi3(a, b);
24*b9829059Sjoerg if (r != expected_r)
25*b9829059Sjoerg printf("error in __umodsi3: %X %% %X = %X, expected %X\n",
26*b9829059Sjoerg a, b, r, expected_r);
27*b9829059Sjoerg return r != expected_r;
28*b9829059Sjoerg }
29*b9829059Sjoerg
30*b9829059Sjoerg su_int tests[][4] =
31*b9829059Sjoerg {
32*b9829059Sjoerg {0x00000000, 0x00000001, 0x00000000},
33*b9829059Sjoerg {0x00000000, 0x00000002, 0x00000000},
34*b9829059Sjoerg {0x00000000, 0x00000003, 0x00000000},
35*b9829059Sjoerg {0x00000000, 0x00000010, 0x00000000},
36*b9829059Sjoerg {0x00000000, 0x078644FA, 0x00000000},
37*b9829059Sjoerg {0x00000000, 0x0747AE14, 0x00000000},
38*b9829059Sjoerg {0x00000000, 0x7FFFFFFF, 0x00000000},
39*b9829059Sjoerg {0x00000000, 0x80000000, 0x00000000},
40*b9829059Sjoerg {0x00000000, 0xFFFFFFFD, 0x00000000},
41*b9829059Sjoerg {0x00000000, 0xFFFFFFFE, 0x00000000},
42*b9829059Sjoerg {0x00000000, 0xFFFFFFFF, 0x00000000},
43*b9829059Sjoerg {0x00000001, 0x00000001, 0x00000000},
44*b9829059Sjoerg {0x00000001, 0x00000002, 0x00000001},
45*b9829059Sjoerg {0x00000001, 0x00000003, 0x00000001},
46*b9829059Sjoerg {0x00000001, 0x00000010, 0x00000001},
47*b9829059Sjoerg {0x00000001, 0x078644FA, 0x00000001},
48*b9829059Sjoerg {0x00000001, 0x0747AE14, 0x00000001},
49*b9829059Sjoerg {0x00000001, 0x7FFFFFFF, 0x00000001},
50*b9829059Sjoerg {0x00000001, 0x80000000, 0x00000001},
51*b9829059Sjoerg {0x00000001, 0xFFFFFFFD, 0x00000001},
52*b9829059Sjoerg {0x00000001, 0xFFFFFFFE, 0x00000001},
53*b9829059Sjoerg {0x00000001, 0xFFFFFFFF, 0x00000001},
54*b9829059Sjoerg {0x00000002, 0x00000001, 0x00000000},
55*b9829059Sjoerg {0x00000002, 0x00000002, 0x00000000},
56*b9829059Sjoerg {0x00000002, 0x00000003, 0x00000002},
57*b9829059Sjoerg {0x00000002, 0x00000010, 0x00000002},
58*b9829059Sjoerg {0x00000002, 0x078644FA, 0x00000002},
59*b9829059Sjoerg {0x00000002, 0x0747AE14, 0x00000002},
60*b9829059Sjoerg {0x00000002, 0x7FFFFFFF, 0x00000002},
61*b9829059Sjoerg {0x00000002, 0x80000000, 0x00000002},
62*b9829059Sjoerg {0x00000002, 0xFFFFFFFD, 0x00000002},
63*b9829059Sjoerg {0x00000002, 0xFFFFFFFE, 0x00000002},
64*b9829059Sjoerg {0x00000002, 0xFFFFFFFF, 0x00000002},
65*b9829059Sjoerg {0x00000003, 0x00000001, 0x00000000},
66*b9829059Sjoerg {0x00000003, 0x00000002, 0x00000001},
67*b9829059Sjoerg {0x00000003, 0x00000003, 0x00000000},
68*b9829059Sjoerg {0x00000003, 0x00000010, 0x00000003},
69*b9829059Sjoerg {0x00000003, 0x078644FA, 0x00000003},
70*b9829059Sjoerg {0x00000003, 0x0747AE14, 0x00000003},
71*b9829059Sjoerg {0x00000003, 0x7FFFFFFF, 0x00000003},
72*b9829059Sjoerg {0x00000003, 0x80000000, 0x00000003},
73*b9829059Sjoerg {0x00000003, 0xFFFFFFFD, 0x00000003},
74*b9829059Sjoerg {0x00000003, 0xFFFFFFFE, 0x00000003},
75*b9829059Sjoerg {0x00000003, 0xFFFFFFFF, 0x00000003},
76*b9829059Sjoerg {0x00000010, 0x00000001, 0x00000000},
77*b9829059Sjoerg {0x00000010, 0x00000002, 0x00000000},
78*b9829059Sjoerg {0x00000010, 0x00000003, 0x00000001},
79*b9829059Sjoerg {0x00000010, 0x00000010, 0x00000000},
80*b9829059Sjoerg {0x00000010, 0x078644FA, 0x00000010},
81*b9829059Sjoerg {0x00000010, 0x0747AE14, 0x00000010},
82*b9829059Sjoerg {0x00000010, 0x7FFFFFFF, 0x00000010},
83*b9829059Sjoerg {0x00000010, 0x80000000, 0x00000010},
84*b9829059Sjoerg {0x00000010, 0xFFFFFFFD, 0x00000010},
85*b9829059Sjoerg {0x00000010, 0xFFFFFFFE, 0x00000010},
86*b9829059Sjoerg {0x00000010, 0xFFFFFFFF, 0x00000010},
87*b9829059Sjoerg {0x078644FA, 0x00000001, 0x00000000},
88*b9829059Sjoerg {0x078644FA, 0x00000002, 0x00000000},
89*b9829059Sjoerg {0x078644FA, 0x00000003, 0x00000000},
90*b9829059Sjoerg {0x078644FA, 0x00000010, 0x0000000A},
91*b9829059Sjoerg {0x078644FA, 0x078644FA, 0x00000000},
92*b9829059Sjoerg {0x078644FA, 0x0747AE14, 0x003E96E6},
93*b9829059Sjoerg {0x078644FA, 0x7FFFFFFF, 0x078644FA},
94*b9829059Sjoerg {0x078644FA, 0x80000000, 0x078644FA},
95*b9829059Sjoerg {0x078644FA, 0xFFFFFFFD, 0x078644FA},
96*b9829059Sjoerg {0x078644FA, 0xFFFFFFFE, 0x078644FA},
97*b9829059Sjoerg {0x078644FA, 0xFFFFFFFF, 0x078644FA},
98*b9829059Sjoerg {0x0747AE14, 0x00000001, 0x00000000},
99*b9829059Sjoerg {0x0747AE14, 0x00000002, 0x00000000},
100*b9829059Sjoerg {0x0747AE14, 0x00000003, 0x00000002},
101*b9829059Sjoerg {0x0747AE14, 0x00000010, 0x00000004},
102*b9829059Sjoerg {0x0747AE14, 0x078644FA, 0x0747AE14},
103*b9829059Sjoerg {0x0747AE14, 0x0747AE14, 0x00000000},
104*b9829059Sjoerg {0x0747AE14, 0x7FFFFFFF, 0x0747AE14},
105*b9829059Sjoerg {0x0747AE14, 0x80000000, 0x0747AE14},
106*b9829059Sjoerg {0x0747AE14, 0xFFFFFFFD, 0x0747AE14},
107*b9829059Sjoerg {0x0747AE14, 0xFFFFFFFE, 0x0747AE14},
108*b9829059Sjoerg {0x0747AE14, 0xFFFFFFFF, 0x0747AE14},
109*b9829059Sjoerg {0x7FFFFFFF, 0x00000001, 0x00000000},
110*b9829059Sjoerg {0x7FFFFFFF, 0x00000002, 0x00000001},
111*b9829059Sjoerg {0x7FFFFFFF, 0x00000003, 0x00000001},
112*b9829059Sjoerg {0x7FFFFFFF, 0x00000010, 0x0000000F},
113*b9829059Sjoerg {0x7FFFFFFF, 0x078644FA, 0x00156B65},
114*b9829059Sjoerg {0x7FFFFFFF, 0x0747AE14, 0x043D70AB},
115*b9829059Sjoerg {0x7FFFFFFF, 0x7FFFFFFF, 0x00000000},
116*b9829059Sjoerg {0x7FFFFFFF, 0x80000000, 0x7FFFFFFF},
117*b9829059Sjoerg {0x7FFFFFFF, 0xFFFFFFFD, 0x7FFFFFFF},
118*b9829059Sjoerg {0x7FFFFFFF, 0xFFFFFFFE, 0x7FFFFFFF},
119*b9829059Sjoerg {0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF},
120*b9829059Sjoerg {0x80000000, 0x00000001, 0x00000000},
121*b9829059Sjoerg {0x80000000, 0x00000002, 0x00000000},
122*b9829059Sjoerg {0x80000000, 0x00000003, 0x00000002},
123*b9829059Sjoerg {0x80000000, 0x00000010, 0x00000000},
124*b9829059Sjoerg {0x80000000, 0x078644FA, 0x00156B66},
125*b9829059Sjoerg {0x80000000, 0x0747AE14, 0x043D70AC},
126*b9829059Sjoerg {0x80000000, 0x7FFFFFFF, 0x00000001},
127*b9829059Sjoerg {0x80000000, 0x80000000, 0x00000000},
128*b9829059Sjoerg {0x80000000, 0xFFFFFFFD, 0x80000000},
129*b9829059Sjoerg {0x80000000, 0xFFFFFFFE, 0x80000000},
130*b9829059Sjoerg {0x80000000, 0xFFFFFFFF, 0x80000000},
131*b9829059Sjoerg {0xFFFFFFFD, 0x00000001, 0x00000000},
132*b9829059Sjoerg {0xFFFFFFFD, 0x00000002, 0x00000001},
133*b9829059Sjoerg {0xFFFFFFFD, 0x00000003, 0x00000001},
134*b9829059Sjoerg {0xFFFFFFFD, 0x00000010, 0x0000000D},
135*b9829059Sjoerg {0xFFFFFFFD, 0x078644FA, 0x002AD6C9},
136*b9829059Sjoerg {0xFFFFFFFD, 0x0747AE14, 0x01333341},
137*b9829059Sjoerg {0xFFFFFFFD, 0x7FFFFFFF, 0x7FFFFFFE},
138*b9829059Sjoerg {0xFFFFFFFD, 0x80000000, 0x7FFFFFFD},
139*b9829059Sjoerg {0xFFFFFFFD, 0xFFFFFFFD, 0x00000000},
140*b9829059Sjoerg {0xFFFFFFFD, 0xFFFFFFFE, 0xFFFFFFFD},
141*b9829059Sjoerg {0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFD},
142*b9829059Sjoerg {0xFFFFFFFE, 0x00000001, 0x00000000},
143*b9829059Sjoerg {0xFFFFFFFE, 0x00000002, 0x00000000},
144*b9829059Sjoerg {0xFFFFFFFE, 0x00000003, 0x00000002},
145*b9829059Sjoerg {0xFFFFFFFE, 0x00000010, 0x0000000E},
146*b9829059Sjoerg {0xFFFFFFFE, 0x078644FA, 0x002AD6CA},
147*b9829059Sjoerg {0xFFFFFFFE, 0x0747AE14, 0x01333342},
148*b9829059Sjoerg {0xFFFFFFFE, 0x7FFFFFFF, 0x00000000},
149*b9829059Sjoerg {0xFFFFFFFE, 0x80000000, 0x7FFFFFFE},
150*b9829059Sjoerg {0xFFFFFFFE, 0xFFFFFFFD, 0x00000001},
151*b9829059Sjoerg {0xFFFFFFFE, 0xFFFFFFFE, 0x00000000},
152*b9829059Sjoerg {0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFE},
153*b9829059Sjoerg {0xFFFFFFFF, 0x00000001, 0x00000000},
154*b9829059Sjoerg {0xFFFFFFFF, 0x00000002, 0x00000001},
155*b9829059Sjoerg {0xFFFFFFFF, 0x00000003, 0x00000000},
156*b9829059Sjoerg {0xFFFFFFFF, 0x00000010, 0x0000000F},
157*b9829059Sjoerg {0xFFFFFFFF, 0x078644FA, 0x002AD6CB},
158*b9829059Sjoerg {0xFFFFFFFF, 0x0747AE14, 0x01333343},
159*b9829059Sjoerg {0xFFFFFFFF, 0x7FFFFFFF, 0x00000001},
160*b9829059Sjoerg {0xFFFFFFFF, 0x80000000, 0x7FFFFFFF},
161*b9829059Sjoerg {0xFFFFFFFF, 0xFFFFFFFD, 0x00000002},
162*b9829059Sjoerg {0xFFFFFFFF, 0xFFFFFFFE, 0x00000001},
163*b9829059Sjoerg {0xFFFFFFFF, 0xFFFFFFFF, 0x00000000}
164*b9829059Sjoerg };
165*b9829059Sjoerg
main()166*b9829059Sjoerg int main()
167*b9829059Sjoerg {
168*b9829059Sjoerg const unsigned N = sizeof(tests) / sizeof(tests[0]);
169*b9829059Sjoerg unsigned i;
170*b9829059Sjoerg for (i = 0; i < N; ++i)
171*b9829059Sjoerg if (test__umodsi3(tests[i][0], tests[i][1], tests[i][2]))
172*b9829059Sjoerg return 1;
173*b9829059Sjoerg
174*b9829059Sjoerg return 0;
175*b9829059Sjoerg }
176