1// RUN: %clang_builtins %s %librt -o %t && %run %t
2// REQUIRES: librt_has_umoddi3
3
4#include "int_lib.h"
5#include <stdio.h>
6
7// Returns: a % b
8
9COMPILER_RT_ABI du_int __umoddi3(du_int a, du_int b);
10
11int test__umoddi3(du_int a, du_int b, du_int expected_r)
12{
13 du_int r = __umoddi3(a, b);
14 if (r != expected_r)
15 printf(format: "error in __umoddi3: %lld %% %lld = %lld, expected %lld\n",
16 a, b, r, expected_r);
17 return r != expected_r;
18}
19
20int main()
21{
22 if (test__umoddi3(a: 0, b: 1, expected_r: 0))
23 return 1;
24 if (test__umoddi3(a: 2, b: 1, expected_r: 0))
25 return 1;
26 if (test__umoddi3(a: 0x8000000000000000uLL, b: 1, expected_r: 0x0uLL))
27 return 1;
28 if (test__umoddi3(a: 0x8000000000000000uLL, b: 2, expected_r: 0x0uLL))
29 return 1;
30 if (test__umoddi3(a: 0xFFFFFFFFFFFFFFFFuLL, b: 2, expected_r: 0x1uLL))
31 return 1;
32
33 return 0;
34}
35

source code of compiler-rt/test/builtins/Unit/umoddi3_test.c