diff --git a/compiler-rt/lib/builtins/riscv/int_mul_impl.inc b/compiler-rt/lib/builtins/riscv/int_mul_impl.inc --- a/compiler-rt/lib/builtins/riscv/int_mul_impl.inc +++ b/compiler-rt/lib/builtins/riscv/int_mul_impl.inc @@ -10,7 +10,10 @@ // //===----------------------------------------------------------------------===// -#if !defined(__riscv_mul) +#ifndef __mulxi3 +#error "__mulxi3 must be defined to use this generic implementation" +#endif + .text .align 2 @@ -28,4 +31,3 @@ slli a2, a2, 1 bnez a1, .L1 ret -#endif diff --git a/compiler-rt/test/builtins/Unit/muldi3_test.c b/compiler-rt/test/builtins/Unit/muldi3_test.c --- a/compiler-rt/test/builtins/Unit/muldi3_test.c +++ b/compiler-rt/test/builtins/Unit/muldi3_test.c @@ -11,7 +11,7 @@ di_int x = __muldi3(a, b); if (x != expected) printf("error in __muldi3: %lld * %lld = %lld, expected %lld\n", - a, b, __muldi3(a, b), expected); + a, b, x, expected); return x != expected; } diff --git a/compiler-rt/test/builtins/Unit/riscv/mulsi3_test.c b/compiler-rt/test/builtins/Unit/mulsi3_test.c rename from compiler-rt/test/builtins/Unit/riscv/mulsi3_test.c rename to compiler-rt/test/builtins/Unit/mulsi3_test.c --- a/compiler-rt/test/builtins/Unit/riscv/mulsi3_test.c +++ b/compiler-rt/test/builtins/Unit/mulsi3_test.c @@ -1,13 +1,10 @@ -// REQUIRES: riscv32-target-arch // RUN: %clang_builtins %s %librt -o %t && %run %t +// REQUIRES: librt_has_mulsi3 #include "int_lib.h" #include #include -#if !defined(__riscv_mul) && __riscv_xlen == 32 -// Based on mulsi3_test.c - COMPILER_RT_ABI si_int __mulsi3(si_int a, si_int b); int test__mulsi3(si_int a, si_int b, si_int expected) @@ -15,14 +12,12 @@ si_int x = __mulsi3(a, b); if (x != expected) printf("error in __mulsi3: %d * %d = %d, expected %d\n", - a, b, __mulsi3(a, b), expected); + a, b, x, expected); return x != expected; } -#endif int main() { -#if !defined(__riscv_mul) && __riscv_xlen == 32 if (test__mulsi3(0, 0, 0)) return 1; if (test__mulsi3(0, 1, 0)) @@ -99,9 +94,6 @@ return 1; if (test__mulsi3(-8192, -4194303, 34359730176)) return 1; -#else - printf("skipped\n"); -#endif return 0; }