Messages in this thread | | | Date | Fri, 1 Sep 2023 13:46:44 +0200 | From | Willy Tarreau <> | Subject | Re: [RFC PATCH v1 0/5] nolibc x86-64 string functions |
| |
On Fri, Sep 01, 2023 at 11:34:18AM +0000, David Laight wrote: > From: Ammar Faizi <ammarfaizi2@gnuweeb.org> > > Sent: 30 August 2023 14:57 > > > > This is an RFC patchset for nolibc x86-64 string functions. There are 5 > > patches in this series. > > > > ## Patch 1-3: Use `rep movsb`, `rep stosb`, and `rep cmpsb` for: > > - memcpy() and memmove() > > - memset() > > - memcmp() > > respectively. They can simplify the generated ASM code. > > > ... > > After this series: > > ``` > > 000000000000140a <memmove>: > > 140a: 48 89 f8 mov %rdi,%rax > > 140d: 48 89 d1 mov %rdx,%rcx > > 1410: 48 8d 7c 0f ff lea -0x1(%rdi,%rcx,1),%rdi > > 1415: 48 8d 74 0e ff lea -0x1(%rsi,%rcx,1),%rsi > > 141a: fd std > > 141b: f3 a4 rep movsb %ds:(%rsi),%es:(%rdi) > > 141d: fc cld > > 141e: c3 ret > > Isn't that completely broken? > > You need to select between forwards and backwards moves. > Since forwards moves are preferred it is best to do > if (dst - src < len) > backards_copy() > else > formwards_copy() > > David
You're completely right indeed, reminds me about the copy_up/copy_down that were not used anymore :-)
Willy
| |