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 __ashldi3(), __ashrdi3(), __lshldi3() to > * config/arm/bits/shift.S: New file.
Again, drop the bits/ R. > --- > libgcc/config/arm/bits/shift.S | 102 ++++++++++++++++++++++++++++++++ > libgcc/config/arm/lib1funcs.S | 103 +-------------------------------- > 2 files changed, 103 insertions(+), 102 deletions(-) > create mode 100644 libgcc/config/arm/bits/shift.S > > diff --git a/libgcc/config/arm/bits/shift.S b/libgcc/config/arm/bits/shift.S > new file mode 100644 > index 00000000000..94e466ac0d2 > --- /dev/null > +++ b/libgcc/config/arm/bits/shift.S > @@ -0,0 +1,102 @@ > + > +#ifdef L_lshrdi3 > + > + FUNC_START lshrdi3 > + FUNC_ALIAS aeabi_llsr lshrdi3 > + > +#ifdef __thumb__ > + lsrs al, r2 > + movs r3, ah > + lsrs ah, r2 > + mov ip, r3 > + subs r2, #32 > + lsrs r3, r2 > + orrs al, r3 > + negs r2, r2 > + mov r3, ip > + lsls r3, r2 > + orrs al, r3 > + RET > +#else > + subs r3, r2, #32 > + rsb ip, r2, #32 > + movmi al, al, lsr r2 > + movpl al, ah, lsr r3 > + orrmi al, al, ah, lsl ip > + mov ah, ah, lsr r2 > + RET > +#endif > + FUNC_END aeabi_llsr > + FUNC_END lshrdi3 > + > +#endif > + > +#ifdef L_ashrdi3 > + > + FUNC_START ashrdi3 > + FUNC_ALIAS aeabi_lasr ashrdi3 > + > +#ifdef __thumb__ > + lsrs al, r2 > + movs r3, ah > + asrs ah, r2 > + subs r2, #32 > + @ If r2 is negative at this point the following step would OR > + @ the sign bit into all of AL. That's not what we want... > + bmi 1f > + mov ip, r3 > + asrs r3, r2 > + orrs al, r3 > + mov r3, ip > +1: > + negs r2, r2 > + lsls r3, r2 > + orrs al, r3 > + RET > +#else > + subs r3, r2, #32 > + rsb ip, r2, #32 > + movmi al, al, lsr r2 > + movpl al, ah, asr r3 > + orrmi al, al, ah, lsl ip > + mov ah, ah, asr r2 > + RET > +#endif > + > + FUNC_END aeabi_lasr > + FUNC_END ashrdi3 > + > +#endif > + > +#ifdef L_ashldi3 > + > + FUNC_START ashldi3 > + FUNC_ALIAS aeabi_llsl ashldi3 > + > +#ifdef __thumb__ > + lsls ah, r2 > + movs r3, al > + lsls al, r2 > + mov ip, r3 > + subs r2, #32 > + lsls r3, r2 > + orrs ah, r3 > + negs r2, r2 > + mov r3, ip > + lsrs r3, r2 > + orrs ah, r3 > + RET > +#else > + subs r3, r2, #32 > + rsb ip, r2, #32 > + movmi ah, ah, lsl r2 > + movpl ah, al, lsl r3 > + orrmi ah, ah, al, lsr ip > + mov al, al, lsl r2 > + RET > +#endif > + FUNC_END aeabi_llsl > + FUNC_END ashldi3 > + > +#endif > + > diff --git a/libgcc/config/arm/lib1funcs.S b/libgcc/config/arm/lib1funcs.S > index acafff62448..c7a3b85bf2b 100644 > --- a/libgcc/config/arm/lib1funcs.S > +++ b/libgcc/config/arm/lib1funcs.S > @@ -1618,108 +1618,7 @@ LSYM(Lover12): > > /* Prevent __aeabi double-word shifts from being produced on SymbianOS. */ > #ifndef __symbian__ > - > -#ifdef L_lshrdi3 > - > - FUNC_START lshrdi3 > - FUNC_ALIAS aeabi_llsr lshrdi3 > - > -#ifdef __thumb__ > - lsrs al, r2 > - movs r3, ah > - lsrs ah, r2 > - mov ip, r3 > - subs r2, #32 > - lsrs r3, r2 > - orrs al, r3 > - negs r2, r2 > - mov r3, ip > - lsls r3, r2 > - orrs al, r3 > - RET > -#else > - subs r3, r2, #32 > - rsb ip, r2, #32 > - movmi al, al, lsr r2 > - movpl al, ah, lsr r3 > - orrmi al, al, ah, lsl ip > - mov ah, ah, lsr r2 > - RET > -#endif > - FUNC_END aeabi_llsr > - FUNC_END lshrdi3 > - > -#endif > - > -#ifdef L_ashrdi3 > - > - FUNC_START ashrdi3 > - FUNC_ALIAS aeabi_lasr ashrdi3 > - > -#ifdef __thumb__ > - lsrs al, r2 > - movs r3, ah > - asrs ah, r2 > - subs r2, #32 > - @ If r2 is negative at this point the following step would OR > - @ the sign bit into all of AL. That's not what we want... > - bmi 1f > - mov ip, r3 > - asrs r3, r2 > - orrs al, r3 > - mov r3, ip > -1: > - negs r2, r2 > - lsls r3, r2 > - orrs al, r3 > - RET > -#else > - subs r3, r2, #32 > - rsb ip, r2, #32 > - movmi al, al, lsr r2 > - movpl al, ah, asr r3 > - orrmi al, al, ah, lsl ip > - mov ah, ah, asr r2 > - RET > -#endif > - > - FUNC_END aeabi_lasr > - FUNC_END ashrdi3 > - > -#endif > - > -#ifdef L_ashldi3 > - > - FUNC_START ashldi3 > - FUNC_ALIAS aeabi_llsl ashldi3 > - > -#ifdef __thumb__ > - lsls ah, r2 > - movs r3, al > - lsls al, r2 > - mov ip, r3 > - subs r2, #32 > - lsls r3, r2 > - orrs ah, r3 > - negs r2, r2 > - mov r3, ip > - lsrs r3, r2 > - orrs ah, r3 > - RET > -#else > - subs r3, r2, #32 > - rsb ip, r2, #32 > - movmi ah, ah, lsl r2 > - movpl ah, al, lsl r3 > - orrmi ah, ah, al, lsr ip > - mov al, al, lsl r2 > - RET > -#endif > - FUNC_END aeabi_llsl > - FUNC_END ashldi3 > - > -#endif > - > +#include "bits/shift.S" > #endif /* __symbian__ */ > > #include "bits/clz2.S" >