[PATCH 11/12] RISC-V: strcmp() size optimized version: Use compressed registers

Kito Cheng kito.cheng@gmail.com
Wed Apr 9 07:18:29 GMT 2025


That's the optimized for performance path, so I would prefer to keep
the li there, otherwise we will increase 5/3 instruction count per
loop on RV32/RV64.


On Wed, Apr 9, 2025 at 2:54 PM m fally <marlene.fally@gmail.com> wrote:
>
> From: puranikvinit <kvp933.vinit@gmail.com>
>
> Swap uncompressed registers with compressed registers. Move the
> li instruction downwards, so t2 can be replaced with a5.
>
> Reviewed-by: Christian Herber <christian.herber@oss.nxp.com>
> Signed-off-by: puranikvinit <kvp933.vinit@gmail.com>
> ---
>  newlib/libc/machine/riscv/strcmp.S | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/newlib/libc/machine/riscv/strcmp.S b/newlib/libc/machine/riscv/strcmp.S
> index cc29b7b8b..b49569db5 100644
> --- a/newlib/libc/machine/riscv/strcmp.S
> +++ b/newlib/libc/machine/riscv/strcmp.S
> @@ -30,8 +30,6 @@ strcmp:
>
>  .size  strcmp, .-strcmp
>  #else
> -  li    t2, -1
> -
>  #if !(__riscv_misaligned_slow || __riscv_misaligned_fast)
>    or    a4, a0, a1
>    and   a4, a4, SZREG-1
> @@ -48,12 +46,13 @@ strcmp:
>      REG_L a2, \i*SZREG(a0)
>      REG_L a3, \i*SZREG(a1)
>
> -    and   t0, a2, a5
> -    or    t1, a2, a5
> -    add   t0, t0, a5
> -    or    t0, t0, t1
> +    and   a4, a2, a5
> +    or    t0, a2, a5
> +    add   a4, a4, a5
> +    or    a4, a4, t0
>
> -    bne   t0, t2, .Lnull\i
> +    li    a5, -1
> +    bne   a4, a5, .Lnull\i
>      .if \i+1-\n
>        bne   a2, a3, .Lmismatch
>      .else
> --
> 2.49.0
>


More information about the Newlib mailing list