[PATCH 6/6] riscv: add vectorized rawmemchr

Kito Cheng kito.cheng@gmail.com
Fri May 22 08:48:28 GMT 2026


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


More information about the Newlib mailing list