diff options
Diffstat (limited to 'contrib/llvm-project/compiler-rt/lib/builtins/riscv/int_mul_impl.inc')
| -rw-r--r-- | contrib/llvm-project/compiler-rt/lib/builtins/riscv/int_mul_impl.inc | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/contrib/llvm-project/compiler-rt/lib/builtins/riscv/int_mul_impl.inc b/contrib/llvm-project/compiler-rt/lib/builtins/riscv/int_mul_impl.inc new file mode 100644 index 000000000000..53699b356f6a --- /dev/null +++ b/contrib/llvm-project/compiler-rt/lib/builtins/riscv/int_mul_impl.inc @@ -0,0 +1,33 @@ +//===-- int_mul_impl.inc - Integer multiplication -------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// Helpers used by __mulsi3, __muldi3. +// +//===----------------------------------------------------------------------===// + +#ifndef __mulxi3 +#error "__mulxi3 must be defined to use this generic implementation" +#endif + +	.text +	.align 2 + +	.globl __mulxi3 +	.type  __mulxi3, @function +__mulxi3: +	mv     a2, a0 +	mv     a0, zero +.L1: +	andi   a3, a1, 1 +	beqz   a3, .L2 +	add    a0, a0, a2 +.L2: +	srli   a1, a1, 1 +	slli   a2, a2, 1 +	bnez   a1, .L1 +	ret | 
