On 11/01/2021 11:10, g...@danielengel.com wrote: > 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.
No, please don't push these down into a subdirectory. They do not represent a clear subfunctional distinction, so creating a load of disk hierarcy is just confusing. Just put the code in config/arm/clz.S Otherwise this is just a re-org, so it's OK. R. > --- > 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 >