11.1Sjoerg//===-- umodsi3_test.c - Test __umodsi3 -----------------------------------===//
21.1Sjoerg//
31.1Sjoerg//                     The LLVM Compiler Infrastructure
41.1Sjoerg//
51.1Sjoerg// This file is dual licensed under the MIT and the University of Illinois Open
61.1Sjoerg// Source Licenses. See LICENSE.TXT for details.
71.1Sjoerg//
81.1Sjoerg//===----------------------------------------------------------------------===//
91.1Sjoerg//
101.1Sjoerg// This file tests __umodsi3 for the compiler_rt library.
111.1Sjoerg//
121.1Sjoerg//===----------------------------------------------------------------------===//
131.1Sjoerg
141.1Sjoerg#include "int_lib.h"
151.1Sjoerg#include <stdio.h>
161.1Sjoerg
171.1Sjoerg// Returns: a % b
181.1Sjoerg
191.1Sjoergsu_int __umodsi3(su_int a, su_int b);
201.1Sjoerg
211.1Sjoergint test__umodsi3(su_int a, su_int b, su_int expected_r)
221.1Sjoerg{
231.1Sjoerg    su_int r = __umodsi3(a, b);
241.1Sjoerg    if (r != expected_r)
251.1Sjoerg        printf("error in __umodsi3: %X %% %X = %X, expected %X\n",
261.1Sjoerg               a, b, r, expected_r);
271.1Sjoerg    return r != expected_r;
281.1Sjoerg}
291.1Sjoerg
301.1Sjoergsu_int tests[][4] =
311.1Sjoerg{
321.1Sjoerg{0x00000000, 0x00000001, 0x00000000},
331.1Sjoerg{0x00000000, 0x00000002, 0x00000000},
341.1Sjoerg{0x00000000, 0x00000003, 0x00000000},
351.1Sjoerg{0x00000000, 0x00000010, 0x00000000},
361.1Sjoerg{0x00000000, 0x078644FA, 0x00000000},
371.1Sjoerg{0x00000000, 0x0747AE14, 0x00000000},
381.1Sjoerg{0x00000000, 0x7FFFFFFF, 0x00000000},
391.1Sjoerg{0x00000000, 0x80000000, 0x00000000},
401.1Sjoerg{0x00000000, 0xFFFFFFFD, 0x00000000},
411.1Sjoerg{0x00000000, 0xFFFFFFFE, 0x00000000},
421.1Sjoerg{0x00000000, 0xFFFFFFFF, 0x00000000},
431.1Sjoerg{0x00000001, 0x00000001, 0x00000000},
441.1Sjoerg{0x00000001, 0x00000002, 0x00000001},
451.1Sjoerg{0x00000001, 0x00000003, 0x00000001},
461.1Sjoerg{0x00000001, 0x00000010, 0x00000001},
471.1Sjoerg{0x00000001, 0x078644FA, 0x00000001},
481.1Sjoerg{0x00000001, 0x0747AE14, 0x00000001},
491.1Sjoerg{0x00000001, 0x7FFFFFFF, 0x00000001},
501.1Sjoerg{0x00000001, 0x80000000, 0x00000001},
511.1Sjoerg{0x00000001, 0xFFFFFFFD, 0x00000001},
521.1Sjoerg{0x00000001, 0xFFFFFFFE, 0x00000001},
531.1Sjoerg{0x00000001, 0xFFFFFFFF, 0x00000001},
541.1Sjoerg{0x00000002, 0x00000001, 0x00000000},
551.1Sjoerg{0x00000002, 0x00000002, 0x00000000},
561.1Sjoerg{0x00000002, 0x00000003, 0x00000002},
571.1Sjoerg{0x00000002, 0x00000010, 0x00000002},
581.1Sjoerg{0x00000002, 0x078644FA, 0x00000002},
591.1Sjoerg{0x00000002, 0x0747AE14, 0x00000002},
601.1Sjoerg{0x00000002, 0x7FFFFFFF, 0x00000002},
611.1Sjoerg{0x00000002, 0x80000000, 0x00000002},
621.1Sjoerg{0x00000002, 0xFFFFFFFD, 0x00000002},
631.1Sjoerg{0x00000002, 0xFFFFFFFE, 0x00000002},
641.1Sjoerg{0x00000002, 0xFFFFFFFF, 0x00000002},
651.1Sjoerg{0x00000003, 0x00000001, 0x00000000},
661.1Sjoerg{0x00000003, 0x00000002, 0x00000001},
671.1Sjoerg{0x00000003, 0x00000003, 0x00000000},
681.1Sjoerg{0x00000003, 0x00000010, 0x00000003},
691.1Sjoerg{0x00000003, 0x078644FA, 0x00000003},
701.1Sjoerg{0x00000003, 0x0747AE14, 0x00000003},
711.1Sjoerg{0x00000003, 0x7FFFFFFF, 0x00000003},
721.1Sjoerg{0x00000003, 0x80000000, 0x00000003},
731.1Sjoerg{0x00000003, 0xFFFFFFFD, 0x00000003},
741.1Sjoerg{0x00000003, 0xFFFFFFFE, 0x00000003},
751.1Sjoerg{0x00000003, 0xFFFFFFFF, 0x00000003},
761.1Sjoerg{0x00000010, 0x00000001, 0x00000000},
771.1Sjoerg{0x00000010, 0x00000002, 0x00000000},
781.1Sjoerg{0x00000010, 0x00000003, 0x00000001},
791.1Sjoerg{0x00000010, 0x00000010, 0x00000000},
801.1Sjoerg{0x00000010, 0x078644FA, 0x00000010},
811.1Sjoerg{0x00000010, 0x0747AE14, 0x00000010},
821.1Sjoerg{0x00000010, 0x7FFFFFFF, 0x00000010},
831.1Sjoerg{0x00000010, 0x80000000, 0x00000010},
841.1Sjoerg{0x00000010, 0xFFFFFFFD, 0x00000010},
851.1Sjoerg{0x00000010, 0xFFFFFFFE, 0x00000010},
861.1Sjoerg{0x00000010, 0xFFFFFFFF, 0x00000010},
871.1Sjoerg{0x078644FA, 0x00000001, 0x00000000},
881.1Sjoerg{0x078644FA, 0x00000002, 0x00000000},
891.1Sjoerg{0x078644FA, 0x00000003, 0x00000000},
901.1Sjoerg{0x078644FA, 0x00000010, 0x0000000A},
911.1Sjoerg{0x078644FA, 0x078644FA, 0x00000000},
921.1Sjoerg{0x078644FA, 0x0747AE14, 0x003E96E6},
931.1Sjoerg{0x078644FA, 0x7FFFFFFF, 0x078644FA},
941.1Sjoerg{0x078644FA, 0x80000000, 0x078644FA},
951.1Sjoerg{0x078644FA, 0xFFFFFFFD, 0x078644FA},
961.1Sjoerg{0x078644FA, 0xFFFFFFFE, 0x078644FA},
971.1Sjoerg{0x078644FA, 0xFFFFFFFF, 0x078644FA},
981.1Sjoerg{0x0747AE14, 0x00000001, 0x00000000},
991.1Sjoerg{0x0747AE14, 0x00000002, 0x00000000},
1001.1Sjoerg{0x0747AE14, 0x00000003, 0x00000002},
1011.1Sjoerg{0x0747AE14, 0x00000010, 0x00000004},
1021.1Sjoerg{0x0747AE14, 0x078644FA, 0x0747AE14},
1031.1Sjoerg{0x0747AE14, 0x0747AE14, 0x00000000},
1041.1Sjoerg{0x0747AE14, 0x7FFFFFFF, 0x0747AE14},
1051.1Sjoerg{0x0747AE14, 0x80000000, 0x0747AE14},
1061.1Sjoerg{0x0747AE14, 0xFFFFFFFD, 0x0747AE14},
1071.1Sjoerg{0x0747AE14, 0xFFFFFFFE, 0x0747AE14},
1081.1Sjoerg{0x0747AE14, 0xFFFFFFFF, 0x0747AE14},
1091.1Sjoerg{0x7FFFFFFF, 0x00000001, 0x00000000},
1101.1Sjoerg{0x7FFFFFFF, 0x00000002, 0x00000001},
1111.1Sjoerg{0x7FFFFFFF, 0x00000003, 0x00000001},
1121.1Sjoerg{0x7FFFFFFF, 0x00000010, 0x0000000F},
1131.1Sjoerg{0x7FFFFFFF, 0x078644FA, 0x00156B65},
1141.1Sjoerg{0x7FFFFFFF, 0x0747AE14, 0x043D70AB},
1151.1Sjoerg{0x7FFFFFFF, 0x7FFFFFFF, 0x00000000},
1161.1Sjoerg{0x7FFFFFFF, 0x80000000, 0x7FFFFFFF},
1171.1Sjoerg{0x7FFFFFFF, 0xFFFFFFFD, 0x7FFFFFFF},
1181.1Sjoerg{0x7FFFFFFF, 0xFFFFFFFE, 0x7FFFFFFF},
1191.1Sjoerg{0x7FFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF},
1201.1Sjoerg{0x80000000, 0x00000001, 0x00000000},
1211.1Sjoerg{0x80000000, 0x00000002, 0x00000000},
1221.1Sjoerg{0x80000000, 0x00000003, 0x00000002},
1231.1Sjoerg{0x80000000, 0x00000010, 0x00000000},
1241.1Sjoerg{0x80000000, 0x078644FA, 0x00156B66},
1251.1Sjoerg{0x80000000, 0x0747AE14, 0x043D70AC},
1261.1Sjoerg{0x80000000, 0x7FFFFFFF, 0x00000001},
1271.1Sjoerg{0x80000000, 0x80000000, 0x00000000},
1281.1Sjoerg{0x80000000, 0xFFFFFFFD, 0x80000000},
1291.1Sjoerg{0x80000000, 0xFFFFFFFE, 0x80000000},
1301.1Sjoerg{0x80000000, 0xFFFFFFFF, 0x80000000},
1311.1Sjoerg{0xFFFFFFFD, 0x00000001, 0x00000000},
1321.1Sjoerg{0xFFFFFFFD, 0x00000002, 0x00000001},
1331.1Sjoerg{0xFFFFFFFD, 0x00000003, 0x00000001},
1341.1Sjoerg{0xFFFFFFFD, 0x00000010, 0x0000000D},
1351.1Sjoerg{0xFFFFFFFD, 0x078644FA, 0x002AD6C9},
1361.1Sjoerg{0xFFFFFFFD, 0x0747AE14, 0x01333341},
1371.1Sjoerg{0xFFFFFFFD, 0x7FFFFFFF, 0x7FFFFFFE},
1381.1Sjoerg{0xFFFFFFFD, 0x80000000, 0x7FFFFFFD},
1391.1Sjoerg{0xFFFFFFFD, 0xFFFFFFFD, 0x00000000},
1401.1Sjoerg{0xFFFFFFFD, 0xFFFFFFFE, 0xFFFFFFFD},
1411.1Sjoerg{0xFFFFFFFD, 0xFFFFFFFF, 0xFFFFFFFD},
1421.1Sjoerg{0xFFFFFFFE, 0x00000001, 0x00000000},
1431.1Sjoerg{0xFFFFFFFE, 0x00000002, 0x00000000},
1441.1Sjoerg{0xFFFFFFFE, 0x00000003, 0x00000002},
1451.1Sjoerg{0xFFFFFFFE, 0x00000010, 0x0000000E},
1461.1Sjoerg{0xFFFFFFFE, 0x078644FA, 0x002AD6CA},
1471.1Sjoerg{0xFFFFFFFE, 0x0747AE14, 0x01333342},
1481.1Sjoerg{0xFFFFFFFE, 0x7FFFFFFF, 0x00000000},
1491.1Sjoerg{0xFFFFFFFE, 0x80000000, 0x7FFFFFFE},
1501.1Sjoerg{0xFFFFFFFE, 0xFFFFFFFD, 0x00000001},
1511.1Sjoerg{0xFFFFFFFE, 0xFFFFFFFE, 0x00000000},
1521.1Sjoerg{0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFE},
1531.1Sjoerg{0xFFFFFFFF, 0x00000001, 0x00000000},
1541.1Sjoerg{0xFFFFFFFF, 0x00000002, 0x00000001},
1551.1Sjoerg{0xFFFFFFFF, 0x00000003, 0x00000000},
1561.1Sjoerg{0xFFFFFFFF, 0x00000010, 0x0000000F},
1571.1Sjoerg{0xFFFFFFFF, 0x078644FA, 0x002AD6CB},
1581.1Sjoerg{0xFFFFFFFF, 0x0747AE14, 0x01333343},
1591.1Sjoerg{0xFFFFFFFF, 0x7FFFFFFF, 0x00000001},
1601.1Sjoerg{0xFFFFFFFF, 0x80000000, 0x7FFFFFFF},
1611.1Sjoerg{0xFFFFFFFF, 0xFFFFFFFD, 0x00000002},
1621.1Sjoerg{0xFFFFFFFF, 0xFFFFFFFE, 0x00000001},
1631.1Sjoerg{0xFFFFFFFF, 0xFFFFFFFF, 0x00000000}
1641.1Sjoerg};
1651.1Sjoerg
1661.1Sjoergint main()
1671.1Sjoerg{
1681.1Sjoerg    const unsigned N = sizeof(tests) / sizeof(tests[0]);
1691.1Sjoerg    unsigned i;
1701.1Sjoerg    for (i = 0; i < N; ++i)
1711.1Sjoerg        if (test__umodsi3(tests[i][0], tests[i][1], tests[i][2]))
1721.1Sjoerg            return 1;
1731.1Sjoerg
1741.1Sjoerg    return 0;
1751.1Sjoerg}
176