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 __ctzsi2() to > * config/arm/bits/ctz2.S: New file.
Similar to the previous patch, just use ctz.S without the bits subdir. > --- > libgcc/config/arm/bits/ctz2.S | 65 +++++++++++++++++++++++++++++++++++ > libgcc/config/arm/lib1funcs.S | 65 +---------------------------------- > 2 files changed, 66 insertions(+), 64 deletions(-) > create mode 100644 libgcc/config/arm/bits/ctz2.S > > diff --git a/libgcc/config/arm/bits/ctz2.S b/libgcc/config/arm/bits/ctz2.S > new file mode 100644 > index 00000000000..f0422d1fbba > --- /dev/null > +++ b/libgcc/config/arm/bits/ctz2.S > @@ -0,0 +1,65 @@ > + > +#ifdef L_ctzsi2 > +#ifdef NOT_ISA_TARGET_32BIT > +FUNC_START ctzsi2 > + negs r1, r0 > + ands r0, r0, r1 > + 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] > + subs r0, r0, r1 > + bx lr > +.align 2 > +1: > +.byte 27, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31 > + FUNC_END ctzsi2 > +#else > +ARM_FUNC_START ctzsi2 > + rsb r1, r0, #0 > + and r0, r0, r1 > +# if defined (__ARM_FEATURE_CLZ) > + clz r0, r0 > + rsb r0, r0, #31 > + 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] > + sub r0, r0, r1 > + RET > +.align 2 > +1: > +.byte 27, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31 > +# endif /* !defined (__ARM_FEATURE_CLZ) */ > + FUNC_END ctzsi2 > +#endif > +#endif /* L_clzsi2 */ > + > diff --git a/libgcc/config/arm/lib1funcs.S b/libgcc/config/arm/lib1funcs.S > index f5aa5505e9d..acafff62448 100644 > --- a/libgcc/config/arm/lib1funcs.S > +++ b/libgcc/config/arm/lib1funcs.S > @@ -1723,70 +1723,7 @@ LSYM(Lover12): > #endif /* __symbian__ */ > > #include "bits/clz2.S" > - > -#ifdef L_ctzsi2 > -#ifdef NOT_ISA_TARGET_32BIT > -FUNC_START ctzsi2 > - negs r1, r0 > - ands r0, r0, r1 > - 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] > - subs r0, r0, r1 > - bx lr > -.align 2 > -1: > -.byte 27, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31 > - FUNC_END ctzsi2 > -#else > -ARM_FUNC_START ctzsi2 > - rsb r1, r0, #0 > - and r0, r0, r1 > -# if defined (__ARM_FEATURE_CLZ) > - clz r0, r0 > - rsb r0, r0, #31 > - 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] > - sub r0, r0, r1 > - RET > -.align 2 > -1: > -.byte 27, 28, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31 > -# endif /* !defined (__ARM_FEATURE_CLZ) */ > - FUNC_END ctzsi2 > -#endif > -#endif /* L_clzsi2 */ > +#include "bits/ctz2.S" > > /* ------------------------------------------------------------------------ > */ > /* These next two sections are here despite the fact that they contain Thumb >