[RFC PATCH 16/19] riscv: Add accelerated strcmp routines
Jeff Law
jeffreyalaw@gmail.com
Fri Mar 31 05:06:27 GMT 2023
On 2/7/23 07:15, Christoph Müllner wrote:
> > diff --git a/sysdeps/riscv/multiarch/strcmp_zbb_unaligned.S
> > b/sysdeps/riscv/multiarch/strcmp_zbb_unaligned.S
[ ... ]
> > +
> > +ENTRY_ALIGN (STRCMP, 6)
> > + /* off...delta from src1 to src2. */
> > + sub off, src2, src1
> > + li m1, -1
> > + andi tmp, off, SZREG-1
> > + andi align1, src1, SZREG-1
> > + bnez tmp, L(misaligned8)
> > + bnez align1, L(mutual_align)
> > +
> > + .p2align 4
> > +L(loop_aligned):
> > + REG_L data1, 0(src1)
> > + add tmp, src1, off
> > + addi src1, src1, SZREG
> > + REG_L data2, 0(tmp)
So any thoughts on reducing the alignment? Based on the data I've seen
we very rarely ever take the branch to L(loop_aligned). So aligning
this particular label is of dubious value to begin with. As it stands
we have to emit 3 full sized nops to achieve the requested alignment and
they can burn most of an issue cycle.
While it's highly dependent on pipeline state, there's a reasonable
chance of shaving a cycle by reducing the alignment to p2align 3.
I haven't done much with analyzing the rest of the code as it just
hasn't been hot in any of the cases I've looked at.
I'd be comfortable with this going in as-is or with the alignment
adjustment. Obviously wiring it up via ifunc is dependent upon settling
the kernel->glibc interface.
Jeff
More information about the Libc-alpha
mailing list