[PATCH 6/6] riscv: add vectorized rawmemchr
Kito Cheng
kito.cheng@gmail.com
Fri May 22 08:51:05 GMT 2026
Kito Cheng <kito.cheng@gmail.com> 於 2026年5月22日週五 下午4:48寫道:
>
> > +++ 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
But this is valid since it's VLMAX here
>
> > +
> > + 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