This updates lib1funcs.S from Linux-6.10

Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
---
 arch/arm/lib32/lib1funcs.S | 80 +++++++++++++++++++++++++++++-----------------
 1 file changed, 51 insertions(+), 29 deletions(-)

diff --git a/arch/arm/lib32/lib1funcs.S b/arch/arm/lib32/lib1funcs.S
index bf1d0192d6..cd8af72737 100644
--- a/arch/arm/lib32/lib1funcs.S
+++ b/arch/arm/lib32/lib1funcs.S
@@ -27,11 +27,17 @@ 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.
 
-*/
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
 
 #include <linux/linkage.h>
 #include <asm/assembler.h>
+#include <asm/unwind.h>
 
+.syntax unified
 
 .macro ARM_DIV_BODY dividend, divisor, result, curbit
 
@@ -92,7 +98,7 @@ General Public License for more details.
        subhs   \dividend, \dividend, \divisor, lsr #3
        orrhs   \result,   \result,   \curbit,  lsr #3
        cmp     \dividend, #0                   @ Early termination?
-       movnes  \curbit,   \curbit,  lsr #4     @ No, any more bits to do?
+       movsne  \curbit,   \curbit,  lsr #4     @ No, any more bits to do?
        movne   \divisor,  \divisor, lsr #4
        bne     1b
 
@@ -163,7 +169,7 @@ General Public License for more details.
 
 #endif
 
-       @ Perform all needed substractions to keep only the reminder.
+       @ Perform all needed subtractions to keep only the reminder.
        @ Do comparisons in batch of 4 first.
        subs    \order, \order, #3              @ yes, 3 is intended here
        blt     2f
@@ -178,14 +184,14 @@ General Public License for more details.
        subhs   \dividend, \dividend, \divisor, lsr #3
        cmp     \dividend, #1
        mov     \divisor, \divisor, lsr #4
-       subges  \order, \order, #4
+       subsge  \order, \order, #4
        bge     1b
 
        tst     \order, #3
        teqne   \dividend, #0
        beq     5f
 
-       @ Either 1, 2 or 3 comparison/substractions are left.
+       @ Either 1, 2 or 3 comparison/subtractions are left.
 2:     cmn     \order, #2
        blt     4f
        beq     3f
@@ -201,12 +207,16 @@ General Public License for more details.
 .endm
 
 
-.section .text.__udivsi3
+#ifdef CONFIG_ARM_PATCH_IDIV
+       .align  3
+#endif
+
 ENTRY(__udivsi3)
 ENTRY(__aeabi_uidiv)
+UNWIND(.fnstart)
 
        subs    r2, r1, #1
-       moveq   pc, lr
+       reteq   lr
        bcc     Ldiv0
        cmp     r0, r1
        bls     11f
@@ -216,22 +226,23 @@ ENTRY(__aeabi_uidiv)
        ARM_DIV_BODY r0, r1, r2, r3
 
        mov     r0, r2
-       mov     pc, lr
+       ret     lr
 
 11:    moveq   r0, #1
        movne   r0, #0
-       mov     pc, lr
+       ret     lr
 
 12:    ARM_DIV2_ORDER r1, r2
 
        mov     r0, r0, lsr r2
-       mov     pc, lr
+       ret     lr
 
+UNWIND(.fnend)
 ENDPROC(__udivsi3)
 ENDPROC(__aeabi_uidiv)
 
-.section .text.__umodsi3
 ENTRY(__umodsi3)
+UNWIND(.fnstart)
 
        subs    r2, r1, #1                      @ compare divisor with 1
        bcc     Ldiv0
@@ -239,17 +250,22 @@ ENTRY(__umodsi3)
        moveq   r0, #0
        tsthi   r1, r2                          @ see if divisor is power of 2
        andeq   r0, r0, r2
-       movls   pc, lr
+       retls   lr
 
        ARM_MOD_BODY r0, r1, r2, r3
 
-       mov     pc, lr
+       ret     lr
 
+UNWIND(.fnend)
 ENDPROC(__umodsi3)
 
-.section .text.__divsi3
+#ifdef CONFIG_ARM_PATCH_IDIV
+       .align 3
+#endif
+
 ENTRY(__divsi3)
 ENTRY(__aeabi_idiv)
+UNWIND(.fnstart)
 
        cmp     r1, #0
        eor     ip, r0, r1                      @ save the sign of the result.
@@ -268,29 +284,30 @@ ENTRY(__aeabi_idiv)
 
        cmp     ip, #0
        rsbmi   r0, r0, #0
-       mov     pc, lr
+       ret     lr
 
 10:    teq     ip, r0                          @ same sign ?
        rsbmi   r0, r0, #0
-       mov     pc, lr
+       ret     lr
 
 11:    movlo   r0, #0
        moveq   r0, ip, asr #31
        orreq   r0, r0, #1
-       mov     pc, lr
+       ret     lr
 
 12:    ARM_DIV2_ORDER r1, r2
 
        cmp     ip, #0
        mov     r0, r3, lsr r2
        rsbmi   r0, r0, #0
-       mov     pc, lr
+       ret     lr
 
+UNWIND(.fnend)
 ENDPROC(__divsi3)
 ENDPROC(__aeabi_idiv)
 
-.section .text.__modsi3
 ENTRY(__modsi3)
+UNWIND(.fnstart)
 
        cmp     r1, #0
        beq     Ldiv0
@@ -308,44 +325,49 @@ ENTRY(__modsi3)
 
 10:    cmp     ip, #0
        rsbmi   r0, r0, #0
-       mov     pc, lr
+       ret     lr
 
+UNWIND(.fnend)
 ENDPROC(__modsi3)
 
 #ifdef CONFIG_AEABI
 
-.section .text.__aeabi_uidivmod
 ENTRY(__aeabi_uidivmod)
+UNWIND(.fnstart)
+UNWIND(.save {r0, r1, ip, lr}  )
 
        stmfd   sp!, {r0, r1, ip, lr}
        bl      __aeabi_uidiv
        ldmfd   sp!, {r1, r2, ip, lr}
        mul     r3, r0, r2
        sub     r1, r1, r3
-       mov     pc, lr
+       ret     lr
 
+UNWIND(.fnend)
 ENDPROC(__aeabi_uidivmod)
 
-.section .text.__aeabi_idivmod
 ENTRY(__aeabi_idivmod)
-
+UNWIND(.fnstart)
+UNWIND(.save {r0, r1, ip, lr}  )
        stmfd   sp!, {r0, r1, ip, lr}
        bl      __aeabi_idiv
        ldmfd   sp!, {r1, r2, ip, lr}
        mul     r3, r0, r2
        sub     r1, r1, r3
-       mov     pc, lr
+       ret     lr
 
+UNWIND(.fnend)
 ENDPROC(__aeabi_idivmod)
 
 #endif
 
-.section .text.Ldiv0
 Ldiv0:
-
+UNWIND(.fnstart)
+UNWIND(.pad #4)
+UNWIND(.save {lr})
        str     lr, [sp, #-8]!
        bl      __div0
        mov     r0, #0                  @ About as wrong as it could be.
        ldr     pc, [sp], #8
-
-
+UNWIND(.fnend)
+ENDPROC(Ldiv0)

-- 
2.39.5


Reply via email to