brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · 55b1dd0 Raw
147 lines · c
1// RUN: %clang_builtins %s %librt -o %t && %run %t2// REQUIRES: librt_has_mulosi43 4#include "int_lib.h"5#include <stdio.h>6 7// Returns: a * b8 9// Effects: aborts if a * b overflows10 11COMPILER_RT_ABI si_int __mulosi4(si_int a, si_int b, int *overflow);12 13int test__mulosi4(si_int a, si_int b, si_int expected, int expected_overflow)14{15  int ov;16  si_int x = __mulosi4(a, b, &ov);17  if (ov != expected_overflow)18    printf("error in __mulosi4: overflow=%d expected=%d\n",19	   ov, expected_overflow);20  else if (!expected_overflow && x != expected) {21    printf("error in __mulosi4: 0x%X * 0x%X = 0x%X (overflow=%d), "22	   "expected 0x%X (overflow=%d)\n",23	   a, b, x, ov, expected, expected_overflow);24    return 1;25  }26  return 0;27}28 29 30int main()31{32    if (test__mulosi4(0, 0, 0, 0))33        return 1;34    if (test__mulosi4(0, 1, 0, 0))35        return 1;36    if (test__mulosi4(1, 0, 0, 0))37        return 1;38    if (test__mulosi4(0, 10, 0, 0))39        return 1;40    if (test__mulosi4(10, 0, 0, 0))41        return 1;42    if (test__mulosi4(0, 0x1234567, 0, 0))43        return 1;44    if (test__mulosi4(0x1234567, 0, 0, 0))45        return 1;46 47    if (test__mulosi4(0, -1, 0, 0))48        return 1;49    if (test__mulosi4(-1, 0, 0, 0))50        return 1;51    if (test__mulosi4(0, -10, 0, 0))52        return 1;53    if (test__mulosi4(-10, 0, 0, 0))54        return 1;55    if (test__mulosi4(0, -0x1234567, 0, 0))56        return 1;57    if (test__mulosi4(-0x1234567, 0, 0, 0))58        return 1;59 60    if (test__mulosi4(1, 1, 1, 0))61        return 1;62    if (test__mulosi4(1, 10, 10, 0))63        return 1;64    if (test__mulosi4(10, 1, 10, 0))65        return 1;66    if (test__mulosi4(1, 0x1234567, 0x1234567, 0))67        return 1;68    if (test__mulosi4(0x1234567, 1, 0x1234567, 0))69        return 1;70 71    if (test__mulosi4(1, -1, -1, 0))72        return 1;73    if (test__mulosi4(1, -10, -10, 0))74        return 1;75    if (test__mulosi4(-10, 1, -10, 0))76        return 1;77    if (test__mulosi4(1, -0x1234567, -0x1234567, 0))78        return 1;79    if (test__mulosi4(-0x1234567, 1, -0x1234567, 0))80        return 1;81 82     if (test__mulosi4(0x7FFFFFFF, -2, 0x80000001, 1))83         return 1;84     if (test__mulosi4(-2, 0x7FFFFFFF, 0x80000001, 1))85         return 1;86    if (test__mulosi4(0x7FFFFFFF, -1, 0x80000001, 0))87        return 1;88    if (test__mulosi4(-1, 0x7FFFFFFF, 0x80000001, 0))89        return 1;90    if (test__mulosi4(0x7FFFFFFF, 0, 0, 0))91        return 1;92    if (test__mulosi4(0, 0x7FFFFFFF, 0, 0))93        return 1;94    if (test__mulosi4(0x7FFFFFFF, 1, 0x7FFFFFFF, 0))95        return 1;96    if (test__mulosi4(1, 0x7FFFFFFF, 0x7FFFFFFF, 0))97        return 1;98     if (test__mulosi4(0x7FFFFFFF, 2, 0x80000001, 1))99         return 1;100     if (test__mulosi4(2, 0x7FFFFFFF, 0x80000001, 1))101         return 1;102 103     if (test__mulosi4(0x80000000, -2, 0x80000000, 1))104         return 1;105     if (test__mulosi4(-2, 0x80000000, 0x80000000, 1))106         return 1;107     if (test__mulosi4(0x80000000, -1, 0x80000000, 1))108         return 1;109     if (test__mulosi4(-1, 0x80000000, 0x80000000, 1))110         return 1;111    if (test__mulosi4(0x80000000, 0, 0, 0))112        return 1;113    if (test__mulosi4(0, 0x80000000, 0, 0))114        return 1;115    if (test__mulosi4(0x80000000, 1, 0x80000000, 0))116        return 1;117    if (test__mulosi4(1, 0x80000000, 0x80000000, 0))118        return 1;119     if (test__mulosi4(0x80000000, 2, 0x80000000, 1))120         return 1;121     if (test__mulosi4(2, 0x80000000, 0x80000000, 1))122         return 1;123 124     if (test__mulosi4(0x80000001, -2, 0x80000001, 1))125         return 1;126     if (test__mulosi4(-2, 0x80000001, 0x80000001, 1))127         return 1;128    if (test__mulosi4(0x80000001, -1, 0x7FFFFFFF, 0))129        return 1;130    if (test__mulosi4(-1, 0x80000001, 0x7FFFFFFF, 0))131        return 1;132    if (test__mulosi4(0x80000001, 0, 0, 0))133        return 1;134    if (test__mulosi4(0, 0x80000001, 0, 0))135        return 1;136    if (test__mulosi4(0x80000001, 1, 0x80000001, 0))137        return 1;138    if (test__mulosi4(1, 0x80000001, 0x80000001, 0))139        return 1;140     if (test__mulosi4(0x80000001, 2, 0x80000000, 1))141         return 1;142     if (test__mulosi4(2, 0x80000001, 0x80000000, 1))143         return 1;144 145    return 0;146}147