Re: [PATCH v2 1/3] lib/string: optimized memcpy

From: Ben Dooks
Date: Fri Jul 02 2021 - 10:58:28 EST

On 02/07/2021 13:31, Matteo Croce wrote:
From: Matteo Croce <mcroce@xxxxxxxxxxxxx>

Rewrite the generic memcpy() to copy a word at time, without generating
unaligned accesses.

The procedure is made of three steps:
First copy data one byte at time until the destination buffer is aligned
to a long boundary.
Then copy the data one long at time shifting the current and the next long
to compose a long at every cycle.
Finally, copy the remainder one byte at time.

This is the improvement on RISC-V:

original aligned: 75 Mb/s
original unaligned: 75 Mb/s
new aligned: 114 Mb/s
new unaligned: 107 Mb/s

and this the binary size increase according to bloat-o-meter:

Function old new delta
memcpy 36 324 +288

Signed-off-by: Matteo Croce <mcroce@xxxxxxxxxxxxx>
lib/string.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 77 insertions(+), 3 deletions(-)

Doesn't arch/riscv/lib/memcpy.S also exist for an architecture
optimised version? I would have thought the lib/string.c version
was not being used?

Ben Dooks
Senior Engineer Codethink - Providing Genius