xref: /aosp_15_r20/external/compiler-rt/test/builtins/Unit/umodsi3_test.c (revision 7c3d14c8b49c529e04be81a3ce6f5cc23712e4c6)
1*7c3d14c8STreehugger Robot //===-- umodsi3_test.c - Test __umodsi3 -----------------------------------===//
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 __umodsi3 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 __umodsi3(su_int a, su_int b);
20*7c3d14c8STreehugger Robot 
test__umodsi3(su_int a,su_int b,su_int expected_r)21*7c3d14c8STreehugger Robot int test__umodsi3(su_int a, su_int b, su_int expected_r)
22*7c3d14c8STreehugger Robot {
23*7c3d14c8STreehugger Robot     su_int r = __umodsi3(a, b);
24*7c3d14c8STreehugger Robot     if (r != expected_r)
25*7c3d14c8STreehugger Robot         printf("error in __umodsi3: %X %% %X = %X, expected %X\n",
26*7c3d14c8STreehugger Robot                a, b, r, expected_r);
27*7c3d14c8STreehugger Robot     return r != expected_r;
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, 0x00000000},
44*7c3d14c8STreehugger Robot {0x00000001, 0x00000002, 0x00000001},
45*7c3d14c8STreehugger Robot {0x00000001, 0x00000003, 0x00000001},
46*7c3d14c8STreehugger Robot {0x00000001, 0x00000010, 0x00000001},
47*7c3d14c8STreehugger Robot {0x00000001, 0x078644FA, 0x00000001},
48*7c3d14c8STreehugger Robot {0x00000001, 0x0747AE14, 0x00000001},
49*7c3d14c8STreehugger Robot {0x00000001, 0x7FFFFFFF, 0x00000001},
50*7c3d14c8STreehugger Robot {0x00000001, 0x80000000, 0x00000001},
51*7c3d14c8STreehugger Robot {0x00000001, 0xFFFFFFFD, 0x00000001},
52*7c3d14c8STreehugger Robot {0x00000001, 0xFFFFFFFE, 0x00000001},
53*7c3d14c8STreehugger Robot {0x00000001, 0xFFFFFFFF, 0x00000001},
54*7c3d14c8STreehugger Robot {0x00000002, 0x00000001, 0x00000000},
55*7c3d14c8STreehugger Robot {0x00000002, 0x00000002, 0x00000000},
56*7c3d14c8STreehugger Robot {0x00000002, 0x00000003, 0x00000002},
57*7c3d14c8STreehugger Robot {0x00000002, 0x00000010, 0x00000002},
58*7c3d14c8STreehugger Robot {0x00000002, 0x078644FA, 0x00000002},
59*7c3d14c8STreehugger Robot {0x00000002, 0x0747AE14, 0x00000002},
60*7c3d14c8STreehugger Robot {0x00000002, 0x7FFFFFFF, 0x00000002},
61*7c3d14c8STreehugger Robot {0x00000002, 0x80000000, 0x00000002},
62*7c3d14c8STreehugger Robot {0x00000002, 0xFFFFFFFD, 0x00000002},
63*7c3d14c8STreehugger Robot {0x00000002, 0xFFFFFFFE, 0x00000002},
64*7c3d14c8STreehugger Robot {0x00000002, 0xFFFFFFFF, 0x00000002},
65*7c3d14c8STreehugger Robot {0x00000003, 0x00000001, 0x00000000},
66*7c3d14c8STreehugger Robot {0x00000003, 0x00000002, 0x00000001},
67*7c3d14c8STreehugger Robot {0x00000003, 0x00000003, 0x00000000},
68*7c3d14c8STreehugger Robot {0x00000003, 0x00000010, 0x00000003},
69*7c3d14c8STreehugger Robot {0x00000003, 0x078644FA, 0x00000003},
70*7c3d14c8STreehugger Robot {0x00000003, 0x0747AE14, 0x00000003},
71*7c3d14c8STreehugger Robot {0x00000003, 0x7FFFFFFF, 0x00000003},
72*7c3d14c8STreehugger Robot {0x00000003, 0x80000000, 0x00000003},
73*7c3d14c8STreehugger Robot {0x00000003, 0xFFFFFFFD, 0x00000003},
74*7c3d14c8STreehugger Robot {0x00000003, 0xFFFFFFFE, 0x00000003},
75*7c3d14c8STreehugger Robot {0x00000003, 0xFFFFFFFF, 0x00000003},
76*7c3d14c8STreehugger Robot {0x00000010, 0x00000001, 0x00000000},
77*7c3d14c8STreehugger Robot {0x00000010, 0x00000002, 0x00000000},
78*7c3d14c8STreehugger Robot {0x00000010, 0x00000003, 0x00000001},
79*7c3d14c8STreehugger Robot {0x00000010, 0x00000010, 0x00000000},
80*7c3d14c8STreehugger Robot {0x00000010, 0x078644FA, 0x00000010},
81*7c3d14c8STreehugger Robot {0x00000010, 0x0747AE14, 0x00000010},
82*7c3d14c8STreehugger Robot {0x00000010, 0x7FFFFFFF, 0x00000010},
83*7c3d14c8STreehugger Robot {0x00000010, 0x80000000, 0x00000010},
84*7c3d14c8STreehugger Robot {0x00000010, 0xFFFFFFFD, 0x00000010},
85*7c3d14c8STreehugger Robot {0x00000010, 0xFFFFFFFE, 0x00000010},
86*7c3d14c8STreehugger Robot {0x00000010, 0xFFFFFFFF, 0x00000010},
87*7c3d14c8STreehugger Robot {0x078644FA, 0x00000001, 0x00000000},
88*7c3d14c8STreehugger Robot {0x078644FA, 0x00000002, 0x00000000},
89*7c3d14c8STreehugger Robot {0x078644FA, 0x00000003, 0x00000000},
90*7c3d14c8STreehugger Robot {0x078644FA, 0x00000010, 0x0000000A},
91*7c3d14c8STreehugger Robot {0x078644FA, 0x078644FA, 0x00000000},
92*7c3d14c8STreehugger Robot {0x078644FA, 0x0747AE14, 0x003E96E6},
93*7c3d14c8STreehugger Robot {0x078644FA, 0x7FFFFFFF, 0x078644FA},
94*7c3d14c8STreehugger Robot {0x078644FA, 0x80000000, 0x078644FA},
95*7c3d14c8STreehugger Robot {0x078644FA, 0xFFFFFFFD, 0x078644FA},
96*7c3d14c8STreehugger Robot {0x078644FA, 0xFFFFFFFE, 0x078644FA},
97*7c3d14c8STreehugger Robot {0x078644FA, 0xFFFFFFFF, 0x078644FA},
98*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000001, 0x00000000},
99*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000002, 0x00000000},
100*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000003, 0x00000002},
101*7c3d14c8STreehugger Robot {0x0747AE14, 0x00000010, 0x00000004},
102*7c3d14c8STreehugger Robot {0x0747AE14, 0x078644FA, 0x0747AE14},
103*7c3d14c8STreehugger Robot {0x0747AE14, 0x0747AE14, 0x00000000},
104*7c3d14c8STreehugger Robot {0x0747AE14, 0x7FFFFFFF, 0x0747AE14},
105*7c3d14c8STreehugger Robot {0x0747AE14, 0x80000000, 0x0747AE14},
106*7c3d14c8STreehugger Robot {0x0747AE14, 0xFFFFFFFD, 0x0747AE14},
107*7c3d14c8STreehugger Robot {0x0747AE14, 0xFFFFFFFE, 0x0747AE14},
108*7c3d14c8STreehugger Robot {0x0747AE14, 0xFFFFFFFF, 0x0747AE14},
109*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000001, 0x00000000},
110*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000002, 0x00000001},
111*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000003, 0x00000001},
112*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x00000010, 0x0000000F},
113*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x078644FA, 0x00156B65},
114*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x0747AE14, 0x043D70AB},
115*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x7FFFFFFF, 0x00000000},
116*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0x80000000, 0x7FFFFFFF},
117*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0xFFFFFFFD, 0x7FFFFFFF},
118*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0xFFFFFFFE, 0x7FFFFFFF},
119*7c3d14c8STreehugger Robot {0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF},
120*7c3d14c8STreehugger Robot {0x80000000, 0x00000001, 0x00000000},
121*7c3d14c8STreehugger Robot {0x80000000, 0x00000002, 0x00000000},
122*7c3d14c8STreehugger Robot {0x80000000, 0x00000003, 0x00000002},
123*7c3d14c8STreehugger Robot {0x80000000, 0x00000010, 0x00000000},
124*7c3d14c8STreehugger Robot {0x80000000, 0x078644FA, 0x00156B66},
125*7c3d14c8STreehugger Robot {0x80000000, 0x0747AE14, 0x043D70AC},
126*7c3d14c8STreehugger Robot {0x80000000, 0x7FFFFFFF, 0x00000001},
127*7c3d14c8STreehugger Robot {0x80000000, 0x80000000, 0x00000000},
128*7c3d14c8STreehugger Robot {0x80000000, 0xFFFFFFFD, 0x80000000},
129*7c3d14c8STreehugger Robot {0x80000000, 0xFFFFFFFE, 0x80000000},
130*7c3d14c8STreehugger Robot {0x80000000, 0xFFFFFFFF, 0x80000000},
131*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000001, 0x00000000},
132*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000002, 0x00000001},
133*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000003, 0x00000001},
134*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x00000010, 0x0000000D},
135*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x078644FA, 0x002AD6C9},
136*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x0747AE14, 0x01333341},
137*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x7FFFFFFF, 0x7FFFFFFE},
138*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0x80000000, 0x7FFFFFFD},
139*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0xFFFFFFFD, 0x00000000},
140*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0xFFFFFFFE, 0xFFFFFFFD},
141*7c3d14c8STreehugger Robot {0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFD},
142*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000001, 0x00000000},
143*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000002, 0x00000000},
144*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000003, 0x00000002},
145*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x00000010, 0x0000000E},
146*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x078644FA, 0x002AD6CA},
147*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x0747AE14, 0x01333342},
148*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x7FFFFFFF, 0x00000000},
149*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0x80000000, 0x7FFFFFFE},
150*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0xFFFFFFFD, 0x00000001},
151*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0xFFFFFFFE, 0x00000000},
152*7c3d14c8STreehugger Robot {0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFE},
153*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000001, 0x00000000},
154*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000002, 0x00000001},
155*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000003, 0x00000000},
156*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x00000010, 0x0000000F},
157*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x078644FA, 0x002AD6CB},
158*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x0747AE14, 0x01333343},
159*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x7FFFFFFF, 0x00000001},
160*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0x80000000, 0x7FFFFFFF},
161*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0xFFFFFFFD, 0x00000002},
162*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0xFFFFFFFE, 0x00000001},
163*7c3d14c8STreehugger Robot {0xFFFFFFFF, 0xFFFFFFFF, 0x00000000}
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__umodsi3(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