blob: 87bc166869d753fc93afc9a4b3398e876d4a87a1 [file] [log] [blame]
From 14ddb3217fbb84c48903124ec6a3614b4707630d Mon Sep 17 00:00:00 2001
From: Mahesh Bodapati <mbodapat@xilinx.com>
Date: Thu, 12 Jan 2017 17:36:16 +0530
Subject: [PATCH 16/63] [Patch, microblaze]: Removed moddi3 routinue Using the
default moddi3 function as the existing implementation has many bugs
Signed-off-by:Nagaraju <nmekala@xilix.com>
Conflicts:
libgcc/config/microblaze/moddi3.S
---
libgcc/config/microblaze/moddi3.S | 121 ----------------------------------
libgcc/config/microblaze/t-microblaze | 3 +-
2 files changed, 1 insertion(+), 123 deletions(-)
delete mode 100644 libgcc/config/microblaze/moddi3.S
diff --git a/libgcc/config/microblaze/moddi3.S b/libgcc/config/microblaze/moddi3.S
deleted file mode 100644
index abfe4fc..0000000
--- a/libgcc/config/microblaze/moddi3.S
+++ /dev/null
@@ -1,121 +0,0 @@
-###################################
-#
-# Copyright (C) 2009-2019 Free Software Foundation, Inc.
-#
-# Contributed by Michael Eager <eager@eagercon.com>.
-#
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 3, or (at your option) any
-# later version.
-#
-# GCC is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-# License for more details.
-#
-# Under Section 7 of GPL version 3, you are granted additional
-# permissions described in the GCC Runtime Library Exception, version
-# 3.1, as published by the Free Software Foundation.
-#
-# You should have received a copy of the GNU General Public License and
-# a copy of the GCC Runtime Library Exception along with this program;
-# see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-# <http://www.gnu.org/licenses/>.
-#
-# modsi3.S
-#
-# modulo operation for 64 bit integers.
-#
-#######################################
-
-
-/* An executable stack is *not* required for these functions. */
-#ifdef __linux__
-.section .note.GNU-stack,"",%progbits
-.previous
-#endif
-
- .globl __moddi3
- .ent __moddi3
-__moddi3:
- .frame r1,0,r15
-
-#Change the stack pointer value and Save callee saved regs
- addik r1,r1,-24
- swi r25,r1,0
- swi r26,r1,4
- swi r27,r1,8 # used for sign
- swi r28,r1,12 # used for loop count
- swi r29,r1,16 # Used for div value High
- swi r30,r1,20 # Used for div value Low
-
-#Check for Zero Value in the divisor/dividend
- OR r9,r5,r6 # Check for the op1 being zero
- BEQID r9,$LaResult_Is_Zero # Result is zero
- OR r9,r7,r8 # Check for the dividend being zero
- BEQI r9,$LaDiv_By_Zero # Div_by_Zero # Division Error
- BGEId r5,$La1_Pos
- XOR r27,r5,r7 # Get the sign of the result
- RSUBI r6,r6,0 # Make dividend positive
- RSUBIC r5,r5,0 # Make dividend positive
-$La1_Pos:
- BGEI r7,$La2_Pos
- RSUBI r8,r8,0 # Make Divisor Positive
- RSUBIC r9,r9,0 # Make Divisor Positive
-$La2_Pos:
- ADDIK r4,r0,0 # Clear mod low
- ADDIK r3,r0,0 # Clear mod high
- ADDIK r29,r0,0 # clear div high
- ADDIK r30,r0,0 # clear div low
- ADDIK r28,r0,64 # Initialize the loop count
- # First part try to find the first '1' in the r5/r6
-$LaDIV1:
- ADD r6,r6,r6
- ADDC r5,r5,r5 # left shift logical r5
- BGEID r5,$LaDIV1
- ADDIK r28,r28,-1
-$LaDIV2:
- ADD r6,r6,r6
- ADDC r5,r5,r5 # left shift logical r5/r6 get the '1' into the Carry
- ADDC r4,r4,r4 # Move that bit into the Mod register
- ADDC r3,r3,r3 # Move carry into high mod register
- rsub r18,r7,r3 # Compare the High Parts of Mod and Divisor
- bnei r18,$L_High_EQ
- rsub r18,r6,r4 # Compare Low Parts only if Mod[h] == Divisor[h]
-$L_High_EQ:
- rSUB r26,r8,r4 # Subtract divisor[L] from Mod[L]
- rsubc r25,r7,r3 # Subtract divisor[H] from Mod[H]
- BLTi r25,$LaMOD_TOO_SMALL
- OR r3,r0,r25 # move r25 to mod [h]
- OR r4,r0,r26 # move r26 to mod [l]
- ADDI r30,r30,1
- ADDC r29,r29,r0
-$LaMOD_TOO_SMALL:
- ADDIK r28,r28,-1
- BEQi r28,$LaLOOP_END
- ADD r30,r30,r30 # Shift in the '1' into div [low]
- ADDC r29,r29,r29 # Move the carry generated into high
- BRI $LaDIV2 # Div2
-$LaLOOP_END:
- BGEI r27,$LaRETURN_HERE
- rsubi r30,r30,0
- rsubc r29,r29,r0
- BRI $LaRETURN_HERE
-$LaDiv_By_Zero:
-$LaResult_Is_Zero:
- or r29,r0,r0 # set result to 0 [High]
- or r30,r0,r0 # set result to 0 [Low]
-$LaRETURN_HERE:
-# Restore values of CSRs and that of r29 and the divisor and the dividend
-
- lwi r25,r1,0
- lwi r26,r1,4
- lwi r27,r1,8
- lwi r28,r1,12
- lwi r29,r1,16
- lwi r30,r1,20
- rtsd r15,8
- addik r1,r1,24
- .end __moddi3
-
diff --git a/libgcc/config/microblaze/t-microblaze b/libgcc/config/microblaze/t-microblaze
index 96959f0..8d954a4 100644
--- a/libgcc/config/microblaze/t-microblaze
+++ b/libgcc/config/microblaze/t-microblaze
@@ -1,8 +1,7 @@
-LIB2FUNCS_EXCLUDE += _divsi3 _modsi3 _moddi3 _mulsi3 _udivsi3 _umodsi3
+LIB2FUNCS_EXCLUDE += _divsi3 _modsi3 _mulsi3 _udivsi3 _umodsi3
LIB2ADD += \
$(srcdir)/config/microblaze/divsi3.S \
- $(srcdir)/config/microblaze/moddi3.S \
$(srcdir)/config/microblaze/modsi3.S \
$(srcdir)/config/microblaze/muldi3_hard.S \
$(srcdir)/config/microblaze/mulsi3.S \
--
2.7.4