100 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_mulsi33 4#include "int_lib.h"5#include <stdio.h>6#include <limits.h>7 8COMPILER_RT_ABI si_int __mulsi3(si_int a, si_int b);9 10int test__mulsi3(si_int a, si_int b, si_int expected)11{12 si_int x = __mulsi3(a, b);13 if (x != expected)14 printf("error in __mulsi3: %d * %d = %d, expected %d\n",15 a, b, x, expected);16 return x != expected;17}18 19int main()20{21 if (test__mulsi3(0, 0, 0))22 return 1;23 if (test__mulsi3(0, 1, 0))24 return 1;25 if (test__mulsi3(1, 0, 0))26 return 1;27 if (test__mulsi3(0, 10, 0))28 return 1;29 if (test__mulsi3(10, 0, 0))30 return 1;31 if (test__mulsi3(0, INT_MAX, 0))32 return 1;33 if (test__mulsi3(INT_MAX, 0, 0))34 return 1;35 36 if (test__mulsi3(0, -1, 0))37 return 1;38 if (test__mulsi3(-1, 0, 0))39 return 1;40 if (test__mulsi3(0, -10, 0))41 return 1;42 if (test__mulsi3(-10, 0, 0))43 return 1;44 if (test__mulsi3(0, INT_MIN, 0))45 return 1;46 if (test__mulsi3(INT_MIN, 0, 0))47 return 1;48 49 if (test__mulsi3(1, 1, 1))50 return 1;51 if (test__mulsi3(1, 10, 10))52 return 1;53 if (test__mulsi3(10, 1, 10))54 return 1;55 if (test__mulsi3(1, INT_MAX, INT_MAX))56 return 1;57 if (test__mulsi3(INT_MAX, 1, INT_MAX))58 return 1;59 60 if (test__mulsi3(1, -1, -1))61 return 1;62 if (test__mulsi3(1, -10, -10))63 return 1;64 if (test__mulsi3(-10, 1, -10))65 return 1;66 if (test__mulsi3(1, INT_MIN, INT_MIN))67 return 1;68 if (test__mulsi3(INT_MIN, 1, INT_MIN))69 return 1;70 71 if (test__mulsi3(46340, 46340, 2147395600))72 return 1;73 if (test__mulsi3(-46340, 46340, -2147395600))74 return 1;75 if (test__mulsi3(46340, -46340, -2147395600))76 return 1;77 if (test__mulsi3(-46340, -46340, 2147395600))78 return 1;79 80 if (test__mulsi3(4194303, 8192, 34359730176))81 return 1;82 if (test__mulsi3(-4194303, 8192, -34359730176))83 return 1;84 if (test__mulsi3(4194303, -8192, -34359730176))85 return 1;86 if (test__mulsi3(-4194303, -8192, 34359730176))87 return 1;88 89 if (test__mulsi3(8192, 4194303, 34359730176))90 return 1;91 if (test__mulsi3(-8192, 4194303, -34359730176))92 return 1;93 if (test__mulsi3(8192, -4194303, -34359730176))94 return 1;95 if (test__mulsi3(-8192, -4194303, 34359730176))96 return 1;97 98 return 0;99}100