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"
> 

Reply via email to