The branch main has been updated by mjg:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=b49a0db6628e6f953504ebc8712ed582471ccd05

commit b49a0db6628e6f953504ebc8712ed582471ccd05
Author:     Mateusz Guzik <[email protected]>
AuthorDate: 2021-02-09 15:18:58 +0000
Commit:     Mateusz Guzik <[email protected]>
CommitDate: 2021-02-09 15:23:18 +0000

    Revert "amd64: implement strlen in assembly"
    
    This reverts commit af366d353b84bdc4e730f0fc563853abc338271c.
    
    Trips over '\xa4' byte and terminates early, as found in
    lib/libc/gen/setdomainname_test:setdomainname_basic testcase
    
    However, keep moving libkern/strlen.c out of conf/files.
    
    Reported by:    lwhsu
---
 sys/amd64/amd64/support.S | 66 -----------------------------------------------
 sys/conf/files.amd64      |  1 +
 2 files changed, 1 insertion(+), 66 deletions(-)

diff --git a/sys/amd64/amd64/support.S b/sys/amd64/amd64/support.S
index a059b520c5d5..b623fba277db 100644
--- a/sys/amd64/amd64/support.S
+++ b/sys/amd64/amd64/support.S
@@ -697,72 +697,6 @@ ENTRY(fillw)
        ret
 END(fillw)
 
-/*
- * strlen(string)
- *       %rdi
- *
- * Uses the ((x - 0x01....01) & ~x & 0x80....80) trick.
- *
- * 0x01....01 is replaced with 0x0 - 0x01....01 so that it can be added
- * with leaq.
- *
- * For a description see either:
- * - "Hacker's Delight" by Henry S. Warren, Jr.
- * - "Optimizing subroutines in assembly language: An optimization guide for 
x86 platforms"
- *   by Agner Fog
- *
- * The latter contains a 32-bit variant of the same algorithm coded in 
assembly for i386.
- */
-ENTRY(strlen)
-       PUSH_FRAME_POINTER
-       movabsq $0xfefefefefefefeff,%r8
-       movabsq $0x8080808080808080,%r9
-
-       movq    %rdi,%r10
-       movq    %rdi,%rcx
-       testb   $7,%dil
-       jz      2f
-
-       /*
-        * Handle misaligned reads: align to 8 and fill
-        * the spurious bytes.
-        */
-       andq    $~7,%rdi
-       movq    (%rdi),%r11
-       shlq    $3,%rcx
-       movq    $-1,%rdx
-       shlq    %cl,%rdx
-       notq    %rdx
-       orq     %rdx,%r11
-
-       leaq    (%r11,%r8),%rcx
-       notq    %r11
-       andq    %r11,%rcx
-       andq    %r9,%rcx
-       jnz     3f
-
-       /*
-        * Main loop.
-        */
-       ALIGN_TEXT
-1:
-       leaq    8(%rdi),%rdi
-2:
-       movq    (%rdi),%r11
-       leaq    (%r11,%r8),%rcx
-       notq    %r11
-       andq    %rcx,%r11
-       andq    %r9,%rcx
-       jz      1b
-3:
-       bsfq    %rcx,%rcx
-       shrq    $3,%rcx
-       leaq    (%rcx,%rdi),%rax
-       subq    %r10,%rax
-       POP_FRAME_POINTER
-       ret
-END(strlen)
-
 /*****************************************************************************/
 /* copyout and fubyte family                                                 */
 /*****************************************************************************/
diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64
index 395f501198f8..98a78a8b1ef9 100644
--- a/sys/conf/files.amd64
+++ b/sys/conf/files.amd64
@@ -390,6 +390,7 @@ isa/syscons_isa.c           optional        sc
 isa/vga_isa.c                  optional        vga
 kern/imgact_aout.c             optional compat_aout
 kern/link_elf_obj.c            standard
+libkern/strlen.c               standard
 #
 # IA32 binary support
 #
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "[email protected]"

Reply via email to