Re: [PATCH] riscv: avoid vrgather in RVV memcmp mismatch path

Pincheng Wang <[email protected]> Thu, 11 Jun 2026 22:00:23 +0800
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Hi all,

Gentle ping. :)

BR,
Pincheng Wang

On 2026/5/29 9:29, Pincheng Wang wrote:
> vfirst.m already returns the byte offset of the first mismatch in the
> current vector chunk. Use that offset to reload the two differing bytes
> with lbu instead of extracting them with vrgather.vx and vmv.x.s.
> 
> The vector gather path can be more expensive on some implementations and
> also increases vector register pressure. This keeps the mismatch path
> shorter while preserving the memcmp result.
> 
> Signed-off-by: Pincheng Wang <[email protected]>
> ---
>   newlib/libc/machine/riscv/memcmp-asm.S | 10 ++++------
>   1 file changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/newlib/libc/machine/riscv/memcmp-asm.S b/newlib/libc/machine/riscv/memcmp-asm.S
> index b05df9521..1cf1680e2 100644
> --- a/newlib/libc/machine/riscv/memcmp-asm.S
> +++ b/newlib/libc/machine/riscv/memcmp-asm.S
> @@ -28,12 +28,10 @@ memcmp:
>     li a0, 0
>     ret
>   .Lfound:
> -  vrgather.vx v16, v0, a4
> -  vrgather.vx v24, v8, a4
> -  vmv.x.s a0, v16
> -  vmv.x.s a4, v24
> -  andi a0, a0, 0xff
> -  andi a4, a4, 0xff
> +  add a0, a0, a4
> +  add a1, a1, a4
> +  lbu a0, 0(a0)
> +  lbu a4, 0(a1)
>     sub a0, a0, a4
>     ret
>   .size memcmp, .-memcmp