From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=1.0 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, SPF_HELO_PASS,SPF_PASS autolearn=no autolearn_force=no version=3.4.6 Authentication-Results: gnuweeb.org; dmarc=none (p=none dis=none) header.from=1wt.eu Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=163.172.96.212; helo=1wt.eu; envelope-from=w@1wt.eu; receiver= Received: from 1wt.eu (ded1.1wt.eu [163.172.96.212]) by gnuweeb.org (Postfix) with ESMTP id 84F6024B376 for ; Fri, 1 Sep 2023 18:47:01 +0700 (WIB) Received: (from willy@localhost) by mail.home.local (8.17.1/8.17.1/Submit) id 381Bkiql019545; Fri, 1 Sep 2023 13:46:44 +0200 Date: Fri, 1 Sep 2023 13:46:44 +0200 From: Willy Tarreau To: David Laight Cc: "'Ammar Faizi'" , Thomas =?iso-8859-1?Q?Wei=DFschuh?= , Nicholas Rosenberg , Alviro Iskandar Setiawan , Michael William Jonathan , GNU/Weeb Mailing List , Linux Kernel Mailing List Subject: Re: [RFC PATCH v1 0/5] nolibc x86-64 string functions Message-ID: References: <20230830135726.1939997-1-ammarfaizi2@gnuweeb.org> <5a821292d96a4dbc84c96ccdc6b5b666@AcuMS.aculab.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5a821292d96a4dbc84c96ccdc6b5b666@AcuMS.aculab.com> List-Id: On Fri, Sep 01, 2023 at 11:34:18AM +0000, David Laight wrote: > From: Ammar Faizi > > 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 : > > 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