1###################################-*-asm*- 2# 3# Copyright (C) 2009-2020 Free Software Foundation, Inc. 4# 5# Contributed by Michael Eager <eager@eagercon.com>. 6# 7# This file is free software; you can redistribute it and/or modify it 8# under the terms of the GNU General Public License as published by the 9# Free Software Foundation; either version 3, or (at your option) any 10# later version. 11# 12# GCC is distributed in the hope that it will be useful, but WITHOUT 13# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15# License for more details. 16# 17# Under Section 7 of GPL version 3, you are granted additional 18# permissions described in the GCC Runtime Library Exception, version 19# 3.1, as published by the Free Software Foundation. 20# 21# You should have received a copy of the GNU General Public License and 22# a copy of the GCC Runtime Library Exception along with this program; 23# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24# <http://www.gnu.org/licenses/>. 25# 26# mulsi3.S 27# 28# Multiply operation for 32 bit integers. 29# Input : Operand1 in Reg r5 30# Operand2 in Reg r6 31# Output: Result [op1 * op2] in Reg r3 32# 33####################################### 34 35/* An executable stack is *not* required for these functions. */ 36#ifdef __linux__ 37.section .note.GNU-stack,"",%progbits 38.previous 39#endif 40 41 .globl __mulsi3 42 .ent __mulsi3 43 .type __mulsi3,@function 44__mulsi3: 45 .frame r1,0,r15 46 add r3,r0,r0 47 BEQI r5,$L_Result_Is_Zero # Multiply by Zero 48 BEQI r6,$L_Result_Is_Zero # Multiply by Zero 49 BGEId r5,$L_R5_Pos 50 XOR r4,r5,r6 # Get the sign of the result 51 RSUBI r5,r5,0 # Make r5 positive 52$L_R5_Pos: 53 BGEI r6,$L_R6_Pos 54 RSUBI r6,r6,0 # Make r6 positive 55$L_R6_Pos: 56 bri $L1 57$L2: 58 add r5,r5,r5 59$L1: 60 srl r6,r6 61 addc r7,r0,r0 62 beqi r7,$L2 63 bneid r6,$L2 64 add r3,r3,r5 65 blti r4,$L_NegateResult 66 rtsd r15,8 67 nop 68$L_NegateResult: 69 rtsd r15,8 70 rsub r3,r3,r0 71$L_Result_Is_Zero: 72 rtsd r15,8 73 addi r3,r0,0 74 .end __mulsi3 75 .size __mulsi3, . - __mulsi3 76