From: Daniel Engel <g...@danielengel.com>

gcc/libgcc/ChangeLog:
2021-01-07 Daniel Engel <g...@danielengel.com>

        * config/arm/lib1funcs.S: Move __clzsi2() and __clzdi2() to
        * config/arm/bits/clz2.S: New file.
---
 libgcc/config/arm/bits/clz2.S | 124 ++++++++++++++++++++++++++++++++++
 libgcc/config/arm/lib1funcs.S | 123 +--------------------------------
 2 files changed, 125 insertions(+), 122 deletions(-)
 create mode 100644 libgcc/config/arm/bits/clz2.S

diff --git a/libgcc/config/arm/bits/clz2.S b/libgcc/config/arm/bits/clz2.S
new file mode 100644
index 00000000000..1c8f10a5b29
--- /dev/null
+++ b/libgcc/config/arm/bits/clz2.S
@@ -0,0 +1,124 @@
+
+#ifdef L_clzsi2
+#ifdef NOT_ISA_TARGET_32BIT
+FUNC_START clzsi2
+       movs    r1, #28
+       movs    r3, #1
+       lsls    r3, r3, #16
+       cmp     r0, r3 /* 0x10000 */
+       bcc     2f
+       lsrs    r0, r0, #16
+       subs    r1, r1, #16
+2:     lsrs    r3, r3, #8
+       cmp     r0, r3 /* #0x100 */
+       bcc     2f
+       lsrs    r0, r0, #8
+       subs    r1, r1, #8
+2:     lsrs    r3, r3, #4
+       cmp     r0, r3 /* #0x10 */
+       bcc     2f
+       lsrs    r0, r0, #4
+       subs    r1, r1, #4
+2:     adr     r2, 1f
+       ldrb    r0, [r2, r0]
+       adds    r0, r0, r1
+       bx lr
+.align 2
+1:
+.byte 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0
+       FUNC_END clzsi2
+#else
+ARM_FUNC_START clzsi2
+# if defined (__ARM_FEATURE_CLZ)
+       clz     r0, r0
+       RET
+# else
+       mov     r1, #28
+       cmp     r0, #0x10000
+       do_it   cs, t
+       movcs   r0, r0, lsr #16
+       subcs   r1, r1, #16
+       cmp     r0, #0x100
+       do_it   cs, t
+       movcs   r0, r0, lsr #8
+       subcs   r1, r1, #8
+       cmp     r0, #0x10
+       do_it   cs, t
+       movcs   r0, r0, lsr #4
+       subcs   r1, r1, #4
+       adr     r2, 1f
+       ldrb    r0, [r2, r0]
+       add     r0, r0, r1
+       RET
+.align 2
+1:
+.byte 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0
+# endif /* !defined (__ARM_FEATURE_CLZ) */
+       FUNC_END clzsi2
+#endif
+#endif /* L_clzsi2 */
+
+#ifdef L_clzdi2
+#if !defined (__ARM_FEATURE_CLZ)
+
+# ifdef NOT_ISA_TARGET_32BIT
+FUNC_START clzdi2
+       push    {r4, lr}
+       cmp     xxh, #0
+       bne     1f
+#  ifdef __ARMEB__
+       movs    r0, xxl
+       bl      __clzsi2
+       adds    r0, r0, #32
+       b 2f
+1:
+       bl      __clzsi2
+#  else
+       bl      __clzsi2
+       adds    r0, r0, #32
+       b 2f
+1:
+       movs    r0, xxh
+       bl      __clzsi2
+#  endif
+2:
+       pop     {r4, pc}
+# else /* NOT_ISA_TARGET_32BIT */
+ARM_FUNC_START clzdi2
+       do_push {r4, lr}
+       cmp     xxh, #0
+       bne     1f
+#  ifdef __ARMEB__
+       mov     r0, xxl
+       bl      __clzsi2
+       add     r0, r0, #32
+       b 2f
+1:
+       bl      __clzsi2
+#  else
+       bl      __clzsi2
+       add     r0, r0, #32
+       b 2f
+1:
+       mov     r0, xxh
+       bl      __clzsi2
+#  endif
+2:
+       RETLDM  r4
+       FUNC_END clzdi2
+# endif /* NOT_ISA_TARGET_32BIT */
+
+#else /* defined (__ARM_FEATURE_CLZ) */
+
+ARM_FUNC_START clzdi2
+       cmp     xxh, #0
+       do_it   eq, et
+       clzeq   r0, xxl
+       clzne   r0, xxh
+       addeq   r0, r0, #32
+       RET
+       FUNC_END clzdi2
+
+#endif
+#endif /* L_clzdi2 */
+
diff --git a/libgcc/config/arm/lib1funcs.S b/libgcc/config/arm/lib1funcs.S
index b4541bae791..f5aa5505e9d 100644
--- a/libgcc/config/arm/lib1funcs.S
+++ b/libgcc/config/arm/lib1funcs.S
@@ -1722,128 +1722,7 @@ LSYM(Lover12):
 
 #endif /* __symbian__ */
 
-#ifdef L_clzsi2
-#ifdef NOT_ISA_TARGET_32BIT
-FUNC_START clzsi2
-       movs    r1, #28
-       movs    r3, #1
-       lsls    r3, r3, #16
-       cmp     r0, r3 /* 0x10000 */
-       bcc     2f
-       lsrs    r0, r0, #16
-       subs    r1, r1, #16
-2:     lsrs    r3, r3, #8
-       cmp     r0, r3 /* #0x100 */
-       bcc     2f
-       lsrs    r0, r0, #8
-       subs    r1, r1, #8
-2:     lsrs    r3, r3, #4
-       cmp     r0, r3 /* #0x10 */
-       bcc     2f
-       lsrs    r0, r0, #4
-       subs    r1, r1, #4
-2:     adr     r2, 1f
-       ldrb    r0, [r2, r0]
-       adds    r0, r0, r1
-       bx lr
-.align 2
-1:
-.byte 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0
-       FUNC_END clzsi2
-#else
-ARM_FUNC_START clzsi2
-# if defined (__ARM_FEATURE_CLZ)
-       clz     r0, r0
-       RET
-# else
-       mov     r1, #28
-       cmp     r0, #0x10000
-       do_it   cs, t
-       movcs   r0, r0, lsr #16
-       subcs   r1, r1, #16
-       cmp     r0, #0x100
-       do_it   cs, t
-       movcs   r0, r0, lsr #8
-       subcs   r1, r1, #8
-       cmp     r0, #0x10
-       do_it   cs, t
-       movcs   r0, r0, lsr #4
-       subcs   r1, r1, #4
-       adr     r2, 1f
-       ldrb    r0, [r2, r0]
-       add     r0, r0, r1
-       RET
-.align 2
-1:
-.byte 4, 3, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0
-# endif /* !defined (__ARM_FEATURE_CLZ) */
-       FUNC_END clzsi2
-#endif
-#endif /* L_clzsi2 */
-
-#ifdef L_clzdi2
-#if !defined (__ARM_FEATURE_CLZ)
-
-# ifdef NOT_ISA_TARGET_32BIT
-FUNC_START clzdi2
-       push    {r4, lr}
-       cmp     xxh, #0
-       bne     1f
-#  ifdef __ARMEB__
-       movs    r0, xxl
-       bl      __clzsi2
-       adds    r0, r0, #32
-       b 2f
-1:
-       bl      __clzsi2
-#  else
-       bl      __clzsi2
-       adds    r0, r0, #32
-       b 2f
-1:
-       movs    r0, xxh
-       bl      __clzsi2
-#  endif
-2:
-       pop     {r4, pc}
-# else /* NOT_ISA_TARGET_32BIT */
-ARM_FUNC_START clzdi2
-       do_push {r4, lr}
-       cmp     xxh, #0
-       bne     1f
-#  ifdef __ARMEB__
-       mov     r0, xxl
-       bl      __clzsi2
-       add     r0, r0, #32
-       b 2f
-1:
-       bl      __clzsi2
-#  else
-       bl      __clzsi2
-       add     r0, r0, #32
-       b 2f
-1:
-       mov     r0, xxh
-       bl      __clzsi2
-#  endif
-2:
-       RETLDM  r4
-       FUNC_END clzdi2
-# endif /* NOT_ISA_TARGET_32BIT */
-
-#else /* defined (__ARM_FEATURE_CLZ) */
-
-ARM_FUNC_START clzdi2
-       cmp     xxh, #0
-       do_it   eq, et
-       clzeq   r0, xxl
-       clzne   r0, xxh
-       addeq   r0, r0, #32
-       RET
-       FUNC_END clzdi2
-
-#endif
-#endif /* L_clzdi2 */
+#include "bits/clz2.S"
 
 #ifdef L_ctzsi2
 #ifdef NOT_ISA_TARGET_32BIT
-- 
2.25.1

Reply via email to