The recent patch to convert all thumb1 code in libgcc to unified syntax
ommitted the conditional code that is used only when building the
library for minimal size.  This patch fixes this case.

I've also fixed the COND macro so that a single definition is always
used that is for unified syntax.  This eliminates a warning that is now
being seen from the assembler when compiling the ieee fp support code.

        PR target/94220
        * config/arm/lib1funcs.asm (COND): Use a single definition for
        unified syntax.
        (aeabi_uidivmod): Unified syntax when optimizing Thumb for size.
        (aeabi_idivmod): Likewise.
        (divsi3_skip_div0_test): Likewise.
---
 libgcc/config/arm/lib1funcs.S | 33 +++++++++++++++++----------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/libgcc/config/arm/lib1funcs.S b/libgcc/config/arm/lib1funcs.S
index e8d2158f8d6..a094417e786 100644
--- a/libgcc/config/arm/lib1funcs.S
+++ b/libgcc/config/arm/lib1funcs.S
@@ -226,7 +226,6 @@ LSYM(Lend_fde):
 .endm
 #define do_push        push
 #define do_pop pop
-#define COND(op1, op2, cond) op1 ## op2 ## cond
 /* Perform an arithmetic operation with a variable shift operand.  This
    requires two instructions and a scratch register on Thumb-2.  */
 .macro shiftop name, dest, src1, src2, shiftop, shiftreg, tmp
@@ -241,12 +240,13 @@ LSYM(Lend_fde):
 .endm
 #define do_push        stmfd sp!,
 #define do_pop ldmfd sp!,
-#define COND(op1, op2, cond) op1 ## cond ## op2
 .macro shiftop name, dest, src1, src2, shiftop, shiftreg, tmp
        \name \dest, \src1, \src2, \shiftop \shiftreg
 .endm
 #endif
 +#define COND(op1, op2, cond) op1 ## op2 ## cond
+
 #ifdef __ARM_EABI__
 .macro ARM_LDIV0 name signed
        cmp     r0, #0
@@ -494,7 +494,8 @@ pc          .req    r15
  /*
------------------------------------------------------------------------ */
 /*             Bodies of the division and modulo routines.                 */
-/*
------------------------------------------------------------------------ */     
+/*
------------------------------------------------------------------------ */
+
 .macro ARM_DIV_BODY dividend, divisor, result, curbit
  #if defined (__ARM_FEATURE_CLZ) && ! defined (__OPTIMIZE_SIZE__)
@@ -1136,8 +1137,8 @@ FUNC_START aeabi_uidivmod
        push    {r0, r1, lr}
        bl      LSYM(udivsi3_skip_div0_test)
        POP     {r1, r2, r3}
-       mul     r2, r0
-       sub     r1, r1, r2
+       muls    r2, r0
+       subs    r1, r1, r2
        bx      r3
 # else
        /* Both the quotient and remainder are calculated simultaneously
@@ -1151,7 +1152,7 @@ FUNC_START aeabi_uidivmod
 ARM_FUNC_START aeabi_uidivmod
        cmp     r1, #0
        beq     LSYM(Ldiv0)
-       mov     r2, r0 +        mov     r2, r0
        udiv    r0, r0, r1
        mls     r1, r0, r1, r2
        RET
@@ -1235,29 +1236,29 @@ LSYM(Lover10):
        beq     LSYM(Ldiv0)
 LSYM(divsi3_skip_div0_test):
        push    { work }
-       mov     work, dividend
-       eor     work, divisor           @ Save the sign of the result.
+       movs    work, dividend
+       eors    work, divisor           @ Save the sign of the result.
        mov     ip, work
-       mov     curbit, #1
-       mov     result, #0
+       movs    curbit, #1
+       movs    result, #0
        cmp     divisor, #0
        bpl     LSYM(Lover10)
-       neg     divisor, divisor        @ Loops below use unsigned.
+       negs    divisor, divisor        @ Loops below use unsigned.
 LSYM(Lover10):
        cmp     dividend, #0
        bpl     LSYM(Lover11)
-       neg     dividend, dividend
+       negs    dividend, dividend
 LSYM(Lover11):
        cmp     dividend, divisor
        blo     LSYM(Lgot_result)
        THUMB_DIV_MOD_BODY 0
 -      mov     r0, result
+       movs    r0, result
        mov     work, ip
        cmp     work, #0
        bpl     LSYM(Lover12)
-       neg     r0, r0
+       negs    r0, r0
 LSYM(Lover12):
        pop     { work }
        RET
@@ -1348,8 +1349,8 @@ FUNC_START aeabi_idivmod
        push    {r0, r1, lr}
        bl      LSYM(divsi3_skip_div0_test)
        POP     {r1, r2, r3}
-       mul     r2, r0
-       sub     r1, r1, r2
+       muls    r2, r0
+       subs    r1, r1, r2
        bx      r3
 # else
        /* Both the quotient and remainder are calculated simultaneously
-- 
2.26.0

Reply via email to