Re: [PATCH 6/6] riscv: add vectorized rawmemchr

Kito Cheng <[email protected]> Fri, 22 May 2026 16:48:28 +0800
Newsgroups gmane.comp.lib.newlib
Message-ID <CA+yXCZDG68ziwnKuAo=W77rB1Aq5D5uH5rFEaZTHVutYg+y1dg@mail.gmail.com>
> +++ b/newlib/libc/machine/riscv/rawmemchr-asm.S
> @@ -0,0 +1,30 @@
> +#if defined(__riscv_vector) && !defined(__OPTIMIZE_SIZE__) && !defined(PREFER_SIZE_OVER_SPEED)
> +.text
> +.option push
> +.option arch, +zve32x
> +.global rawmemchr
> +.type rawmemchr, @function
> +rawmemchr:
> +#if __riscv_landing_pad
> +  lpad 0
> +#endif
> +  andi a1, a1, 0xff
> +.Lloop:
> +  vsetvli t0, zero, e8, m8, ta, ma

Same comment as memccpy

> +
> +  vle8ff.v v0, (a0)
> +  vmseq.vx v8, v0, a1
> +  vfirst.m a2, v8
> +
> +  bgez a2, .Lfound
> +
> +  csrr a3, vl
> +  add a0, a0, a3
> +  j .Lloop
> +
> +.Lfound:
> +  add a0, a0, a2
> +  ret
> +.size rawmemchr, .-rawmemchr
> +.option pop
> +#endif