162cfcf62SDimitry Andric//===-- int_mul_impl.inc - Integer multiplication -------------------------===//
262cfcf62SDimitry Andric//
362cfcf62SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
462cfcf62SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
562cfcf62SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
662cfcf62SDimitry Andric//
762cfcf62SDimitry Andric//===----------------------------------------------------------------------===//
862cfcf62SDimitry Andric//
962cfcf62SDimitry Andric// Helpers used by __mulsi3, __muldi3.
1062cfcf62SDimitry Andric//
1162cfcf62SDimitry Andric//===----------------------------------------------------------------------===//
1262cfcf62SDimitry Andric
13*e8d8bef9SDimitry Andric#ifndef __mulxi3
14*e8d8bef9SDimitry Andric#error "__mulxi3 must be defined to use this generic implementation"
15*e8d8bef9SDimitry Andric#endif
16*e8d8bef9SDimitry Andric
1762cfcf62SDimitry Andric	.text
1862cfcf62SDimitry Andric	.align 2
1962cfcf62SDimitry Andric
2062cfcf62SDimitry Andric	.globl __mulxi3
2162cfcf62SDimitry Andric	.type  __mulxi3, @function
2262cfcf62SDimitry Andric__mulxi3:
2362cfcf62SDimitry Andric	mv     a2, a0
2462cfcf62SDimitry Andric	mv     a0, zero
2562cfcf62SDimitry Andric.L1:
2662cfcf62SDimitry Andric	andi   a3, a1, 1
2762cfcf62SDimitry Andric	beqz   a3, .L2
2862cfcf62SDimitry Andric	add    a0, a0, a2
2962cfcf62SDimitry Andric.L2:
3062cfcf62SDimitry Andric	srli   a1, a1, 1
3162cfcf62SDimitry Andric	slli   a2, a2, 1
3262cfcf62SDimitry Andric	bnez   a1, .L1
3362cfcf62SDimitry Andric	ret
34