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