1*b9829059Sjoerg //===-- umodti3_test.c - Test __umodti3 -----------------------------------===//
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 __umodti3 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 tu_int __umodti3(tu_int a, tu_int b);
22*b9829059Sjoerg
test__umodti3(tu_int a,tu_int b,tu_int expected_r)23*b9829059Sjoerg int test__umodti3(tu_int a, tu_int b, tu_int expected_r)
24*b9829059Sjoerg {
25*b9829059Sjoerg tu_int r = __umodti3(a, b);
26*b9829059Sjoerg if (r != expected_r)
27*b9829059Sjoerg {
28*b9829059Sjoerg utwords at;
29*b9829059Sjoerg at.all = a;
30*b9829059Sjoerg utwords bt;
31*b9829059Sjoerg bt.all = b;
32*b9829059Sjoerg utwords rt;
33*b9829059Sjoerg rt.all = r;
34*b9829059Sjoerg utwords expected_rt;
35*b9829059Sjoerg expected_rt.all = expected_r;
36*b9829059Sjoerg printf("error in __umodti3: 0x%llX%.16llX %% 0x%llX%.16llX = "
37*b9829059Sjoerg "0x%llX%.16llX, expected 0x%llX%.16llX\n",
38*b9829059Sjoerg at.s.high, at.s.low, bt.s.high, bt.s.low, rt.s.high, rt.s.low,
39*b9829059Sjoerg expected_rt.s.high, expected_rt.s.low);
40*b9829059Sjoerg }
41*b9829059Sjoerg return r != expected_r;
42*b9829059Sjoerg }
43*b9829059Sjoerg
44*b9829059Sjoerg #endif
45*b9829059Sjoerg
main()46*b9829059Sjoerg int main()
47*b9829059Sjoerg {
48*b9829059Sjoerg #if __x86_64
49*b9829059Sjoerg if (test__umodti3(0, 1, 0))
50*b9829059Sjoerg return 1;
51*b9829059Sjoerg if (test__umodti3(2, 1, 0))
52*b9829059Sjoerg return 1;
53*b9829059Sjoerg if (test__umodti3(make_tu(0x8000000000000000uLL, 0), 1, 0x0uLL))
54*b9829059Sjoerg return 1;
55*b9829059Sjoerg if (test__umodti3(make_tu(0x8000000000000000uLL, 0), 2, 0x0uLL))
56*b9829059Sjoerg return 1;
57*b9829059Sjoerg if (test__umodti3(make_tu(0xFFFFFFFFFFFFFFFFuLL, 0xFFFFFFFFFFFFFFFFuLL),
58*b9829059Sjoerg 2, 0x1uLL))
59*b9829059Sjoerg return 1;
60*b9829059Sjoerg
61*b9829059Sjoerg #else
62*b9829059Sjoerg printf("skipped\n");
63*b9829059Sjoerg #endif
64*b9829059Sjoerg return 0;
65*b9829059Sjoerg }
66