]> Cypherpunks repositories - gostls13.git/commitdiff
strings,bytes: use inlineable function trampolines instead of linkname
authorKeith Randall <khr@google.com>
Mon, 5 Nov 2018 19:00:01 +0000 (11:00 -0800)
committerKeith Randall <khr@golang.org>
Thu, 8 Nov 2018 20:52:47 +0000 (20:52 +0000)
Cleans things up quite a bit.

There's still a few more, like runtime.cmpstring, which might also
be worth fixing.

Change-Id: Ide18dd621efc129cc686db223f47fa0b044b5580
Reviewed-on: https://go-review.googlesource.com/c/148578
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
45 files changed:
src/bytes/bytes.go
src/bytes/bytes_decl.go [deleted file]
src/cmd/vet/all/whitelist/386.txt
src/cmd/vet/all/whitelist/all.txt
src/cmd/vet/all/whitelist/amd64.txt
src/cmd/vet/all/whitelist/arm.txt
src/cmd/vet/all/whitelist/arm64.txt
src/cmd/vet/all/whitelist/mipsx.txt
src/cmd/vet/all/whitelist/nacl_amd64p32.txt
src/cmd/vet/all/whitelist/ppc64x.txt
src/cmd/vet/all/whitelist/s390x.txt
src/cmd/vet/all/whitelist/wasm.txt
src/internal/bytealg/compare_386.s
src/internal/bytealg/compare_amd64.s
src/internal/bytealg/compare_amd64p32.s
src/internal/bytealg/compare_arm.s
src/internal/bytealg/compare_arm64.s
src/internal/bytealg/compare_generic.go
src/internal/bytealg/compare_mipsx.s
src/internal/bytealg/compare_ppc64x.s
src/internal/bytealg/compare_s390x.s
src/internal/bytealg/compare_wasm.s
src/internal/bytealg/equal_386.s
src/internal/bytealg/equal_amd64.s
src/internal/bytealg/equal_amd64p32.s
src/internal/bytealg/equal_arm.s
src/internal/bytealg/equal_arm64.s
src/internal/bytealg/equal_mips64x.s
src/internal/bytealg/equal_mipsx.s
src/internal/bytealg/equal_ppc64x.s
src/internal/bytealg/equal_s390x.s
src/internal/bytealg/equal_wasm.s
src/internal/bytealg/indexbyte_386.s
src/internal/bytealg/indexbyte_amd64.s
src/internal/bytealg/indexbyte_amd64p32.s
src/internal/bytealg/indexbyte_arm.s
src/internal/bytealg/indexbyte_arm64.s
src/internal/bytealg/indexbyte_generic.go
src/internal/bytealg/indexbyte_mips64x.s
src/internal/bytealg/indexbyte_mipsx.s
src/internal/bytealg/indexbyte_ppc64x.s
src/internal/bytealg/indexbyte_s390x.s
src/internal/bytealg/indexbyte_wasm.s
src/strings/strings.go
src/strings/strings_decl.go [deleted file]

index 6492db088a056c439d4f7d8ff67525a8069edf14..daf4a32f26f29e25159ba1ec1c64f785536f1835 100644 (file)
@@ -12,6 +12,13 @@ import (
        "unicode/utf8"
 )
 
+// Equal returns a boolean reporting whether a and b
+// are the same length and contain the same bytes.
+// A nil argument is equivalent to an empty slice.
+func Equal(a, b []byte) bool {
+       return bytealg.Equal(a, b)
+}
+
 func equalPortable(a, b []byte) bool {
        if len(a) != len(b) {
                return false
@@ -24,6 +31,13 @@ func equalPortable(a, b []byte) bool {
        return true
 }
 
+// Compare returns an integer comparing two byte slices lexicographically.
+// The result will be 0 if a==b, -1 if a < b, and +1 if a > b.
+// A nil argument is equivalent to an empty slice.
+func Compare(a, b []byte) int {
+       return bytealg.Compare(a, b)
+}
+
 // explode splits s into a slice of UTF-8 sequences, one per Unicode code point (still slices of bytes),
 // up to a maximum of n byte slices. Invalid UTF-8 sequences are chopped into individual bytes.
 func explode(s []byte, n int) [][]byte {
@@ -83,6 +97,11 @@ func ContainsRune(b []byte, r rune) bool {
        return IndexRune(b, r) >= 0
 }
 
+// IndexByte returns the index of the first instance of c in b, or -1 if c is not present in b.
+func IndexByte(b []byte, c byte) int {
+       return bytealg.IndexByte(b, c)
+}
+
 func indexBytePortable(s []byte, c byte) int {
        for i, b := range s {
                if b == c {
diff --git a/src/bytes/bytes_decl.go b/src/bytes/bytes_decl.go
deleted file mode 100644 (file)
index af0f8b1..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package bytes
-
-//go:noescape
-
-// IndexByte returns the index of the first instance of c in b, or -1 if c is not present in b.
-func IndexByte(b []byte, c byte) int // in internal/bytealg
-
-//go:noescape
-
-// Equal returns a boolean reporting whether a and b
-// are the same length and contain the same bytes.
-// A nil argument is equivalent to an empty slice.
-func Equal(a, b []byte) bool // in internal/bytealg
-
-//go:noescape
-
-// Compare returns an integer comparing two byte slices lexicographically.
-// The result will be 0 if a==b, -1 if a < b, and +1 if a > b.
-// A nil argument is equivalent to an empty slice.
-func Compare(a, b []byte) int // in internal/bytealg
index f59094eb14fc2943b6ecfec912eac8fe3c1f6d63..2495d831aa43772c57a81033813c56f092abb004 100644 (file)
@@ -1,6 +1,5 @@
 // 386-specific vet whitelist. See readme.txt for details.
 
-internal/bytealg/compare_386.s: [386] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_386.s: [386] cannot check cross-package assembly function: cmpstring is in package runtime
 
 // startup code uses non-standard calling convention and intentionally
index 5425f84fc6e36247011f6d68499cff0f06e1c025..c2dabeece423e6f2de3b018752a758b9832b89c6 100644 (file)
@@ -11,11 +11,8 @@ go/types/scope.go: method WriteTo(w io.Writer, n int, recurse bool) should have
 
 // Nothing much to do about cross-package assembly. Unfortunate.
 runtime/asm_ARCHSUFF.s: [GOARCH] cannot check cross-package assembly function: call is in package reflect
-internal/bytealg/equal_ARCHSUFF.s: [GOARCH] cannot check cross-package assembly function: Equal is in package bytes
 internal/bytealg/equal_ARCHSUFF.s: [GOARCH] cannot check cross-package assembly function: memequal is in package runtime
 internal/bytealg/equal_ARCHSUFF.s: [GOARCH] cannot check cross-package assembly function: memequal_varlen is in package runtime
-internal/bytealg/indexbyte_ARCHSUFF.s: [GOARCH] cannot check cross-package assembly function: IndexByte is in package bytes
-internal/bytealg/indexbyte_ARCHSUFF.s: [GOARCH] cannot check cross-package assembly function: IndexByte is in package strings
 
 // The write barrier is called directly by the compiler, so no Go def
 runtime/asm_ARCHSUFF.s: [GOARCH] gcWriteBarrier: function gcWriteBarrier missing Go declaration
index 20e0d48d53233d6502c1bcff1a9964773716c6f7..94f782aa2fd2a70179fdbb9eb92f00ac7e30c7ec 100644 (file)
@@ -3,7 +3,6 @@
 // False positives.
 
 // Nothing much to do about cross-package assembly. Unfortunate.
-internal/bytealg/compare_amd64.s: [amd64] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_amd64.s: [amd64] cannot check cross-package assembly function: cmpstring is in package runtime
 
 // reflect trampolines intentionally omit arg size. Same for morestack.
index 8f98782f9404a0377d8bff03afd13da958205873..5dc2766e10d3011935eb79487f7790d85629dd61 100644 (file)
@@ -1,6 +1,5 @@
 // arm-specific vet whitelist. See readme.txt for details.
 
-internal/bytealg/compare_arm.s: [arm] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_arm.s: [arm] cannot check cross-package assembly function: cmpstring is in package runtime
 
 // Intentionally missing declarations.
index ee0292b41526081dce484eebf36fdc477efc624a..72528c5145a3799daba6f86547ed649263a596fa 100644 (file)
@@ -1,6 +1,5 @@
 // arm64-specific vet whitelist. See readme.txt for details.
 
-internal/bytealg/compare_arm64.s: [arm64] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_arm64.s: [arm64] cannot check cross-package assembly function: cmpstring is in package runtime
 
 // Intentionally missing declarations.
index 1a2cd3ff6242b8e9620349bf8cacbd3dd418313b..bd53e9acdf853c4f7e72f356946bda5edaa1fca6 100644 (file)
@@ -1,6 +1,5 @@
 // mips/mipsle-specific vet whitelist. See readme.txt for details.
 
-internal/bytealg/compare_mipsx.s: [GOARCH] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_mipsx.s: [GOARCH] cannot check cross-package assembly function: cmpstring is in package runtime
 
 runtime/tls_mipsx.s: [GOARCH] save_g: function save_g missing Go declaration
index 1ec11f7ca876ba4d87d65458e3a986b656123076..5625e3c55d0b46e7c7519e4f2338f4d709c830d1 100644 (file)
@@ -1,6 +1,5 @@
 // nacl/amd64p32-specific vet whitelist. See readme.txt for details.
 
-internal/bytealg/compare_amd64p32.s: [amd64p32] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_amd64p32.s: [amd64p32] cannot check cross-package assembly function: cmpstring is in package runtime
 
 // reflect trampolines intentionally omit arg size. Same for morestack.
index 65a904ed481fca1d6f01b7b233b37ed5ab5f66e6..39f8c0da31adbed881791e6004077f63e5dac739 100644 (file)
@@ -1,6 +1,5 @@
 // ppc64-specific vet whitelist. See readme.txt for details.
 
-internal/bytealg/compare_ppc64x.s: [GOARCH] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_ppc64x.s: [GOARCH] cannot check cross-package assembly function: cmpstring is in package runtime
 
 runtime/asm_ppc64x.s: [GOARCH] reginit: function reginit missing Go declaration
index 5bc48e5afcfb1df7d5a5b13f25c0b1d43cbdb344..4b8424203821250f0a5125377f6dcc83c48a75d6 100644 (file)
@@ -1,4 +1,3 @@
-internal/bytealg/compare_s390x.s: [s390x] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_s390x.s: [s390x] cannot check cross-package assembly function: cmpstring is in package runtime
 runtime/asm_s390x.s: [s390x] addmoduledata: function addmoduledata missing Go declaration
 runtime/memclr_s390x.s: [s390x] memclr_s390x_exrl_xc: function memclr_s390x_exrl_xc missing Go declaration
index 7a8037f085ed671db37e7865f378f3de1103e13e..d066e5b76f8f021902c6903bdfb62dc8e3fe619f 100644 (file)
@@ -3,7 +3,6 @@
 // False positives.
 
 // Nothing much to do about cross-package assembly. Unfortunate.
-internal/bytealg/compare_wasm.s: [wasm] cannot check cross-package assembly function: Compare is in package bytes
 internal/bytealg/compare_wasm.s: [wasm] cannot check cross-package assembly function: cmpstring is in package runtime
 
 // morestack intentionally omits arg size.
index f73e3f8b356110939a7cf58cb340cbd4ff887b9c..0981983d20f313bd5fd2f750afe89b6aab61f8fc 100644 (file)
@@ -13,15 +13,6 @@ TEXT ·Compare(SB),NOSPLIT,$0-28
        LEAL    ret+24(FP), AX
        JMP     cmpbody<>(SB)
 
-TEXT bytes·Compare(SB),NOSPLIT,$0-28
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVL    a_base+0(FP), SI
-       MOVL    a_len+4(FP), BX
-       MOVL    b_base+12(FP), DI
-       MOVL    b_len+16(FP), DX
-       LEAL    ret+24(FP), AX
-       JMP     cmpbody<>(SB)
-
 TEXT runtime·cmpstring(SB),NOSPLIT,$0-20
        MOVL    a_base+0(FP), SI
        MOVL    a_len+4(FP), BX
index 25effbc56f53969f9ad794343ff99ba6ed74ca9e..900b92a21e1e7958ae2a86e70debbe7e1cc9a0c3 100644 (file)
@@ -13,15 +13,6 @@ TEXT ·Compare(SB),NOSPLIT,$0-56
        LEAQ    ret+48(FP), R9
        JMP     cmpbody<>(SB)
 
-TEXT bytes·Compare(SB),NOSPLIT,$0-56
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVQ    a_base+0(FP), SI
-       MOVQ    a_len+8(FP), BX
-       MOVQ    b_base+24(FP), DI
-       MOVQ    b_len+32(FP), DX
-       LEAQ    ret+48(FP), R9
-       JMP     cmpbody<>(SB)
-
 TEXT runtime·cmpstring(SB),NOSPLIT,$0-40
        MOVQ    a_base+0(FP), SI
        MOVQ    a_len+8(FP), BX
index 4687fd8a0441a1a97b83962d281ed5d7afd1a434..cb4107386ef8cfcc66a3d968bc68c10547aea58e 100644 (file)
@@ -14,16 +14,6 @@ TEXT ·Compare(SB),NOSPLIT,$0-28
        MOVL    AX, ret+24(FP)
        RET
 
-TEXT bytes·Compare(SB),NOSPLIT,$0-28
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVL    a_base+0(FP), SI
-       MOVL    a_len+4(FP), BX
-       MOVL    b_base+12(FP), DI
-       MOVL    b_len+16(FP), DX
-       CALL    cmpbody<>(SB)
-       MOVL    AX, ret+24(FP)
-       RET
-
 TEXT runtime·cmpstring(SB),NOSPLIT,$0-20
        MOVL    a_base+0(FP), SI
        MOVL    a_len+4(FP), BX
index d58345223f061f89affd37def1af973861f577e3..c5bfdda33fb027fa16ada91e3b8aff7f04b82fdc 100644 (file)
@@ -13,15 +13,6 @@ TEXT ·Compare(SB),NOSPLIT|NOFRAME,$0-28
        ADD     $28, R13, R7
        B       cmpbody<>(SB)
 
-TEXT bytes·Compare(SB),NOSPLIT|NOFRAME,$0-28
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVW    a_base+0(FP), R2
-       MOVW    a_len+4(FP), R0
-       MOVW    b_base+12(FP), R3
-       MOVW    b_len+16(FP), R1
-       ADD     $28, R13, R7
-       B       cmpbody<>(SB)
-
 TEXT runtime·cmpstring(SB),NOSPLIT|NOFRAME,$0-20
        MOVW    a_base+0(FP), R2
        MOVW    a_len+4(FP), R0
index db614b6afe3fde54f5f746603a4e151f7eec5361..32e2ba200dacc3988f80a48d25f67256a6a75342 100644 (file)
@@ -13,15 +13,6 @@ TEXT ·Compare(SB),NOSPLIT|NOFRAME,$0-56
        MOVD    $ret+48(FP), R7
        B       cmpbody<>(SB)
 
-TEXT bytes·Compare(SB),NOSPLIT|NOFRAME,$0-56
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVD    a_base+0(FP), R2
-       MOVD    a_len+8(FP), R0
-       MOVD    b_base+24(FP), R3
-       MOVD    b_len+32(FP), R1
-       MOVD    $ret+48(FP), R7
-       B       cmpbody<>(SB)
-
 TEXT runtime·cmpstring(SB),NOSPLIT|NOFRAME,$0-40
        MOVD    a_base+0(FP), R2
        MOVD    a_len+8(FP), R0
index 5c35a1ac4abdfa06d2c890b8e291c7356ea99dca..2ac60f3df939d9c2a3e47cb83d735061c81ccc7d 100644 (file)
@@ -35,34 +35,6 @@ samebytes:
        return 0
 }
 
-//go:linkname bytes_Compare bytes.Compare
-func bytes_Compare(a, b []byte) int {
-       l := len(a)
-       if len(b) < l {
-               l = len(b)
-       }
-       if l == 0 || &a[0] == &b[0] {
-               goto samebytes
-       }
-       for i := 0; i < l; i++ {
-               c1, c2 := a[i], b[i]
-               if c1 < c2 {
-                       return -1
-               }
-               if c1 > c2 {
-                       return +1
-               }
-       }
-samebytes:
-       if len(a) < len(b) {
-               return -1
-       }
-       if len(a) > len(b) {
-               return +1
-       }
-       return 0
-}
-
 //go:linkname runtime_cmpstring runtime.cmpstring
 func runtime_cmpstring(a, b string) int {
        l := len(a)
index 85ba1a9455e0f1bd9b188bffd9a3f3604ee4ec75..9ac5ba56877521b751cab221778f8658fc22ae5f 100644 (file)
@@ -39,39 +39,6 @@ cmp_ret:
        MOVW    R8, ret+24(FP)
        RET
 
-TEXT bytes·Compare(SB),NOSPLIT,$0-28
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVW    a_base+0(FP), R3
-       MOVW    b_base+12(FP), R4
-       MOVW    a_len+4(FP), R1
-       MOVW    b_len+16(FP), R2
-       BEQ     R3, R4, samebytes
-       SGTU    R1, R2, R7
-       MOVW    R1, R8
-       CMOVN   R7, R2, R8      // R8 is min(R1, R2)
-
-       ADDU    R3, R8  // R3 is current byte in a, R8 is last byte in a to compare
-loop:
-       BEQ     R3, R8, samebytes
-
-       MOVBU   (R3), R6
-       ADDU    $1, R3
-       MOVBU   (R4), R7
-       ADDU    $1, R4
-       BEQ     R6, R7 , loop
-
-       SGTU    R6, R7, R8
-       MOVW    $-1, R6
-       CMOVZ   R8, R6, R8
-       JMP     cmp_ret
-samebytes:
-       SGTU    R1, R2, R6
-       SGTU    R2, R1, R7
-       SUBU    R7, R6, R8
-cmp_ret:
-       MOVW    R8, ret+24(FP)
-       RET
-
 TEXT runtime·cmpstring(SB),NOSPLIT,$0-20
        MOVW    a_base+0(FP), R3
        MOVW    a_len+4(FP), R1
index 67bfcd11163eeca9f305f8849f5fcd3dc0437df8..7819da31cd01172805b131caa7f2984833651e4d 100644 (file)
@@ -23,37 +23,6 @@ TEXT ·Compare(SB),NOSPLIT|NOFRAME,$0-56
        BR      cmpbodyBE<>(SB)
 #endif
 
-equal:
-       BEQ     CR6,done
-       MOVD    $1, R8
-       BGT     CR6,greater
-       NEG     R8
-
-greater:
-       MOVD    R8, (R7)
-       RET
-
-done:
-       MOVD    $0, (R7)
-       RET
-
-TEXT bytes·Compare(SB),NOSPLIT|NOFRAME,$0-56
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVD    a_base+0(FP), R5
-       MOVD    b_base+24(FP), R6
-       MOVD    a_len+8(FP), R3
-       CMP     R5,R6,CR7
-       MOVD    b_len+32(FP), R4
-       MOVD    $ret+48(FP), R7
-       CMP     R3,R4,CR6
-       BEQ     CR7,equal
-
-#ifdef GOARCH_ppc64le
-       BR      cmpbodyLE<>(SB)
-#else
-       BR      cmpbodyBE<>(SB)
-#endif
-
 equal:
        BEQ     CR6,done
        MOVD    $1, R8
index 4bc4624906690cdbf5762dc408b1a85eb8f18a97..539454870d3386df73d3fdbf5426347cc082dc79 100644 (file)
@@ -13,15 +13,6 @@ TEXT ·Compare(SB),NOSPLIT|NOFRAME,$0-56
        LA      ret+48(FP), R7
        BR      cmpbody<>(SB)
 
-TEXT bytes·Compare(SB),NOSPLIT|NOFRAME,$0-56
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       MOVD    a_base+0(FP), R3
-       MOVD    a_len+8(FP), R4
-       MOVD    b_base+24(FP), R5
-       MOVD    b_len+32(FP), R6
-       LA      ret+48(FP), R7
-       BR      cmpbody<>(SB)
-
 TEXT runtime·cmpstring(SB),NOSPLIT|NOFRAME,$0-40
        MOVD    a_base+0(FP), R3
        MOVD    a_len+8(FP), R4
index 1eb63c70dae89472d717523dd8ecf4811f5e48de..b2a20a08f6e5287bbb621e9a0ddd08bc4ece93d4 100644 (file)
@@ -15,17 +15,6 @@ TEXT ·Compare(SB), NOSPLIT, $0-56
        I64Store ret+48(FP)
        RET
 
-TEXT bytes·Compare(SB), NOSPLIT, $0-56
-       FUNCDATA $0, ·Compare·args_stackmap(SB)
-       Get SP
-       I64Load a_base+0(FP)
-       I64Load a_len+8(FP)
-       I64Load b_base+24(FP)
-       I64Load b_len+32(FP)
-       Call cmpbody<>(SB)
-       I64Store ret+48(FP)
-       RET
-
 TEXT runtime·cmpstring(SB), NOSPLIT, $0-40
        Get SP
        I64Load a_base+0(FP)
index 273389284ef12b98f12258e9011e22b849d7a2cd..ad7da0ea8b3a6e1806f2f0268b0dccb69c403094 100644 (file)
@@ -23,25 +23,6 @@ eq:
        MOVB    $1, ret+24(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT,$0-25
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       MOVL    a_len+4(FP), BX
-       MOVL    b_len+16(FP), CX
-       CMPL    BX, CX
-       JNE     neq
-       MOVL    a_base+0(FP), SI
-       MOVL    b_base+12(FP), DI
-       CMPL    SI, DI
-       JEQ     eq
-       LEAL    ret+24(FP), AX
-       JMP     memeqbody<>(SB)
-neq:
-       MOVB    $0, ret+24(FP)
-       RET
-eq:
-       MOVB    $1, ret+24(FP)
-       RET
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT,$0-13
        MOVL    a+0(FP), SI
index b695d9cf42c189d50acc09c2b2c391316491fd45..fa82589644512a8f106b381af24fd5f6abbe80e1 100644 (file)
@@ -23,25 +23,6 @@ eq:
        MOVB    $1, ret+48(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT,$0-49
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       MOVQ    a_len+8(FP), BX
-       MOVQ    b_len+32(FP), CX
-       CMPQ    BX, CX
-       JNE     neq
-       MOVQ    a_base+0(FP), SI
-       MOVQ    b_base+24(FP), DI
-       CMPQ    SI, DI
-       JEQ     eq
-       LEAQ    ret+48(FP), AX
-       JMP     memeqbody<>(SB)
-neq:
-       MOVB    $0, ret+48(FP)
-       RET
-eq:
-       MOVB    $1, ret+48(FP)
-       RET
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT,$0-25
        MOVQ    a+0(FP), SI
index 9be4274c114e8471d973c36797bb3d9fa617cefb..00d5c0afcc6a1486cb259214431c4a958606cbf2 100644 (file)
@@ -24,26 +24,6 @@ eq:
        MOVB    $1, ret+24(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT,$0-25
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       MOVL    a_len+4(FP), BX
-       MOVL    b_len+16(FP), CX
-       CMPL    BX, CX
-       JNE     neq
-       MOVL    a_base+0(FP), SI
-       MOVL    b_base+12(FP), DI
-       CMPL    SI, DI
-       JEQ     eq
-       CALL    memeqbody<>(SB)
-       MOVB    AX, ret+24(FP)
-       RET
-neq:
-       MOVB    $0, ret+24(FP)
-       RET
-eq:
-       MOVB    $1, ret+24(FP)
-       RET
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT,$0-17
        MOVL    a+0(FP), SI
index e8a92b3cf27977f34ac2bc47f355699e68fdc2c5..0d23260945c5cf2f3d1c8ff9b3d41cacae84b39d 100644 (file)
@@ -35,10 +35,6 @@ equal:
        MOVBU   R0, ret+24(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT,$0-25
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       JMP     ·Equal(SB)
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-13
        MOVW    a+0(FP), R1
index dd4840dae1339a7d5acffff4750e612929ec8084..2c6af01e0ae2f53fd6d96bae84a57332d7382415 100644 (file)
@@ -25,27 +25,6 @@ not_equal:
        MOVB    ZR, ret+48(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT,$0-49
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       MOVD    a_len+8(FP), R1
-       MOVD    b_len+32(FP), R3
-       CMP     R1, R3
-       // unequal lengths are not equal
-       BNE     not_equal
-       // short path to handle 0-byte case
-       CBZ     R1, equal
-       MOVD    a_base+0(FP), R0
-       MOVD    b_base+24(FP), R2
-       MOVD    $ret+48(FP), R8
-       B       memeqbody<>(SB)
-equal:
-       MOVD    $1, R0
-       MOVB    R0, ret+48(FP)
-       RET
-not_equal:
-       MOVB    ZR, ret+48(FP)
-       RET
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
        MOVD    size+16(FP), R1
index a005864483512295a7f81f3f4ba13ae87de9b5fc..a75b957e8b50ee2747544415ada82e219673ae86 100644 (file)
@@ -35,10 +35,6 @@ equal:
        MOVB    R1, ret+48(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT,$0-49
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       JMP     ·Equal(SB)
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
        MOVV    a+0(FP), R1
index 22ab450e66fd6bc222b4fe87fa28c1294466bf6f..70d579d5d434eadb178576ac688eb730f232eea4 100644 (file)
@@ -35,10 +35,6 @@ equal:
        MOVB    R1, ret+24(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT,$0-25
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       JMP     ·Equal(SB)
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT,$0-13
        MOVW    a+0(FP), R1
index 34d2a2574b7d5715dc09defa2c26a15fd6c482da..74ea34834dc4e7f1608a3eef3c66faec8962ed6a 100644 (file)
@@ -26,26 +26,6 @@ equal:
        MOVBZ   R3,ret+48(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT|NOFRAME,$0-49
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       MOVD    a_len+8(FP), R4
-       MOVD    b_len+32(FP), R5
-       CMP     R5, R4          // unequal lengths are not equal
-       BNE     noteq
-       MOVD    a_base+0(FP), R3
-       MOVD    b_base+24(FP), R4
-       MOVD    $ret+48(FP), R10
-       BR      memeqbody<>(SB)
-
-noteq:
-       MOVBZ   $0,ret+48(FP)
-       RET
-
-equal:
-       MOVD    $1,R3
-       MOVBZ   R3,ret+48(FP)
-       RET
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
        MOVD    a+0(FP), R3
index 84dbdbfe187d6569249ba6fb5d153a2702108c41..d7724747d4b765dcea5e722732f451b9f4a19741 100644 (file)
@@ -17,19 +17,6 @@ notequal:
        MOVB    $0, ret+48(FP)
        RET
 
-TEXT bytes·Equal(SB),NOSPLIT|NOFRAME,$0-49
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       MOVD    a_len+8(FP), R2
-       MOVD    b_len+32(FP), R6
-       MOVD    a_base+0(FP), R3
-       MOVD    b_base+24(FP), R5
-       LA      ret+48(FP), R7
-       CMPBNE  R2, R6, notequal
-       BR      memeqbody<>(SB)
-notequal:
-       MOVB    $0, ret+48(FP)
-       RET
-
 // memequal(a, b unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
        MOVD    a+0(FP), R3
index cb85a934c736e9652f1f589c6cdba129e782e825..cac3fb2d13702c0de18c5eb2c5d16a19bf18eeed 100644 (file)
@@ -25,27 +25,6 @@ TEXT ·Equal(SB), NOSPLIT, $0-49
        End
        RET
 
-TEXT bytes·Equal(SB), NOSPLIT, $0-49
-       FUNCDATA $0, ·Equal·args_stackmap(SB)
-       MOVD a_len+8(FP), R0
-       MOVD b_len+32(FP), R1
-       Get R0
-       Get R1
-       I64Eq
-       If
-               Get SP
-               I64Load a+0(FP)
-               I64Load b+24(FP)
-               Get R0
-               Call memeqbody<>(SB)
-               I64Store8 ret+48(FP)
-       Else
-               Get SP
-               I64Const $0
-               I64Store8 ret+48(FP)
-       End
-       RET
-
 // memequal(p, q unsafe.Pointer, size uintptr) bool
 TEXT runtime·memequal(SB), NOSPLIT, $0-25
        Get SP
index ce7645e771ad3a472bc41d045768f9557b16b857..8a030542d4cbb6cd05f934354d79cb9fd204145a 100644 (file)
@@ -32,11 +32,3 @@ TEXT ·IndexByteString(SB),NOSPLIT,$0-16
        SUBL    $1, DI
        MOVL    DI, ret+12(FP)
        RET
-
-TEXT bytes·IndexByte(SB),NOSPLIT,$0-20
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       JMP ·IndexByte(SB)
-
-TEXT strings·IndexByte(SB),NOSPLIT,$0-16
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       JMP ·IndexByteString(SB)
index 5bf8866476379d0df52127c6d856368feb717bde..f78093c539013e15af1813daf2256f3f19bc7d6a 100644 (file)
@@ -19,30 +19,6 @@ TEXT ·IndexByteString(SB), NOSPLIT, $0-32
        LEAQ ret+24(FP), R8
        JMP  indexbytebody<>(SB)
 
-       // Provide direct access to these functions from other packages.
-       // This is the equivlant of doing:
-       //     package bytes
-       //     func IndexByte(b []byte, c byte) int {
-       //         return bytealg.IndexByte(s, c)
-       //     }
-       // but involves no call overhead.
-       // TODO: remove this hack when midstack inlining is enabled?
-TEXT   bytes·IndexByte(SB), NOSPLIT, $0-40
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       MOVQ b_base+0(FP), SI
-       MOVQ b_len+8(FP), BX
-       MOVB c+24(FP), AL
-       LEAQ ret+32(FP), R8
-       JMP  indexbytebody<>(SB)
-
-TEXT   strings·IndexByte(SB), NOSPLIT, $0-32
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       MOVQ s_base+0(FP), SI
-       MOVQ s_len+8(FP), BX
-       MOVB c+16(FP), AL
-       LEAQ ret+24(FP), R8
-       JMP  indexbytebody<>(SB)
-
 // input:
 //   SI: data
 //   BX: data len
index a791c7396a8d927d8fc1e2c02c5d9e2df37ff143..c445a7ebc1364f6871937663454a49436e08ea6c 100644 (file)
@@ -21,24 +21,6 @@ TEXT ·IndexByteString(SB),NOSPLIT,$0-20
        MOVL AX, ret+16(FP)
        RET
 
-TEXT bytes·IndexByte(SB),NOSPLIT,$0-20
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       MOVL b_base+0(FP), SI
-       MOVL b_len+4(FP), BX
-       MOVB c+12(FP), AL
-       CALL indexbytebody<>(SB)
-       MOVL AX, ret+16(FP)
-       RET
-
-TEXT strings·IndexByte(SB),NOSPLIT,$0-20
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       MOVL s_base+0(FP), SI
-       MOVL s_len+4(FP), BX
-       MOVB c+8(FP), AL
-       CALL indexbytebody<>(SB)
-       MOVL AX, ret+16(FP)
-       RET
-
 // input:
 //   SI: data
 //   BX: data len
index 6c746c6869092f4a3b6508a9c7a1f83a92519d90..7d9bbb183d803c30a2e86cc39a169b0077c2ff33 100644 (file)
@@ -52,11 +52,3 @@ _sib_notfound:
        MOVW    $-1, R0
        MOVW    R0, ret+12(FP)
        RET
-
-TEXT bytes·IndexByte(SB),NOSPLIT,$0-20
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       JMP ·IndexByte(SB)
-
-TEXT strings·IndexByte(SB),NOSPLIT,$0-16
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       JMP ·IndexByteString(SB)
index 6991ccec15cd319e03ef87c89e05502f9260bec0..40843fbc5b443a022aa4ff5bc78be9a97761ffd9 100644 (file)
@@ -18,22 +18,6 @@ TEXT ·IndexByteString(SB),NOSPLIT,$0-32
        MOVD    $ret+24(FP), R8
        B       indexbytebody<>(SB)
 
-TEXT bytes·IndexByte(SB),NOSPLIT,$0-40
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       MOVD    b_base+0(FP), R0
-       MOVD    b_len+8(FP), R2
-       MOVBU   c+24(FP), R1
-       MOVD    $ret+32(FP), R8
-       B       indexbytebody<>(SB)
-
-TEXT strings·IndexByte(SB),NOSPLIT,$0-32
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       MOVD    s_base+0(FP), R0
-       MOVD    s_len+8(FP), R2
-       MOVBU   c+16(FP), R1
-       MOVD    $ret+24(FP), R8
-       B       indexbytebody<>(SB)
-
 // input:
 //   R0: data
 //   R1: byte to search
index ef7801e5e16552e297cea8485d26c98cf017f991..6bff31ceee49233c2526010e74235053f7994a58 100644 (file)
@@ -6,8 +6,6 @@
 
 package bytealg
 
-import _ "unsafe" // for go:linkname
-
 func IndexByte(b []byte, c byte) int {
        for i, x := range b {
                if x == c {
@@ -25,23 +23,3 @@ func IndexByteString(s string, c byte) int {
        }
        return -1
 }
-
-//go:linkname bytes_IndexByte bytes.IndexByte
-func bytes_IndexByte(b []byte, c byte) int {
-       for i, x := range b {
-               if x == c {
-                       return i
-               }
-       }
-       return -1
-}
-
-//go:linkname strings_IndexByte strings.IndexByte
-func strings_IndexByte(s string, c byte) int {
-       for i := 0; i < len(s); i++ {
-               if s[i] == c {
-                       return i
-               }
-       }
-       return -1
-}
index 9c421174b95778a6c0e66c72c0f14ab205b9b187..6ebf0dee24b79601ebbb1056a95488286b35af8e 100644 (file)
@@ -52,11 +52,3 @@ notfound:
        MOVV    $-1, R1
        MOVV    R1, ret+24(FP)
        RET
-
-TEXT bytes·IndexByte(SB),NOSPLIT,$0-40
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       JMP ·IndexByte(SB)
-
-TEXT strings·IndexByte(SB),NOSPLIT,$0-32
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       JMP ·IndexByteString(SB)
index bc7258f1d1fe88de3afa25b20f7d34b761a2bd74..e44440b5f9eebd774782f170a4ff47d1ffb0d1d5 100644 (file)
@@ -50,11 +50,3 @@ notfound:
        MOVW    $-1, R1
        MOVW    R1, ret+12(FP)
        RET
-
-TEXT bytes·IndexByte(SB),NOSPLIT,$0-20
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       JMP ·IndexByte(SB)
-
-TEXT strings·IndexByte(SB),NOSPLIT,$0-16
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       JMP ·IndexByteString(SB)
index 61b33bc9cb27b9358c0566ad41b463adfbca450f..6e14e80af1341fe92bf32e67841d95a2ff3f677a 100644 (file)
@@ -21,22 +21,6 @@ TEXT ·IndexByteString(SB),NOSPLIT|NOFRAME,$0-32
        MOVD    $ret+24(FP), R14  // R14 = &ret
        BR      indexbytebody<>(SB)
 
-TEXT bytes·IndexByte(SB),NOSPLIT|NOFRAME,$0-40
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       MOVD    b_base+0(FP), R3        // R3 = byte array pointer
-       MOVD    b_len+8(FP), R4         // R4 = length
-       MOVBZ   c+24(FP), R5            // R5 = byte
-       MOVD    $ret+32(FP), R14        // R14 = &ret
-       BR      indexbytebody<>(SB)
-
-TEXT strings·IndexByte(SB),NOSPLIT|NOFRAME,$0-32
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       MOVD    s_base+0(FP), R3  // R3 = string
-       MOVD    s_len+8(FP), R4   // R4 = length
-       MOVBZ   c+16(FP), R5      // R5 = byte
-       MOVD    $ret+24(FP), R14  // R14 = &ret
-       BR      indexbytebody<>(SB)
-
 TEXT indexbytebody<>(SB),NOSPLIT|NOFRAME,$0-0
        MOVD    R3,R17          // Save base address for calculating the index later.
        RLDICR  $0,R3,$60,R8    // Align address to doubleword boundary in R8.
index 24f5ce17fa00ec815c3e1bf18d3614a8d11a3ed0..cf88d92a24bb8bca9bd4d0b1000ba4e8d839c08a 100644 (file)
@@ -19,22 +19,6 @@ TEXT ·IndexByteString(SB),NOSPLIT|NOFRAME,$0-32
        MOVD    $ret+24(FP), R2 // &ret => R9
        BR      indexbytebody<>(SB)
 
-TEXT bytes·IndexByte(SB),NOSPLIT|NOFRAME,$0-40
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       MOVD    b_base+0(FP), R3// b_base => R3
-       MOVD    b_len+8(FP), R4 // b_len => R4
-       MOVBZ   c+24(FP), R5    // c => R5
-       MOVD    $ret+32(FP), R2 // &ret => R9
-       BR      indexbytebody<>(SB)
-
-TEXT strings·IndexByte(SB),NOSPLIT|NOFRAME,$0-32
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       MOVD    s_base+0(FP), R3// s_base => R3
-       MOVD    s_len+8(FP), R4 // s_len => R4
-       MOVBZ   c+16(FP), R5    // c => R5
-       MOVD    $ret+24(FP), R2 // &ret => R9
-       BR      indexbytebody<>(SB)
-
 // input:
 // R3: s
 // R4: s_len
index 5e64aa031ac4cf5df1448e8c309043add6283ac5..aae11b30a6eaaedaedca0442ac73ff74b7037031 100644 (file)
@@ -49,51 +49,6 @@ TEXT ·IndexByteString(SB), NOSPLIT, $0-32
 
        RET
 
-TEXT bytes·IndexByte(SB), NOSPLIT, $0-40
-       FUNCDATA $0, ·IndexByte·args_stackmap(SB)
-       Get SP
-       I64Load b_base+0(FP)
-       I32WrapI64
-       I32Load8U c+24(FP)
-       I64Load b_len+8(FP)
-       I32WrapI64
-       Call memchr<>(SB)
-       I64ExtendSI32
-       Set R0
-
-       I64Const $-1
-       Get R0
-       I64Load b_base+0(FP)
-       I64Sub
-       Get R0
-       I64Eqz $0
-       Select
-       I64Store ret+32(FP)
-
-       RET
-
-TEXT strings·IndexByte(SB), NOSPLIT, $0-32
-       FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
-       Get SP
-       I64Load s_base+0(FP)
-       I32WrapI64
-       I32Load8U c+16(FP)
-       I64Load s_len+8(FP)
-       I32WrapI64
-       Call memchr<>(SB)
-       I64ExtendSI32
-       Set R0
-
-       I64Const $-1
-       Get R0
-       I64Load s_base+0(FP)
-       I64Sub
-       Get R0
-       I64Eqz $0
-       Select
-       I64Store ret+24(FP)
-       RET
-
 // compiled with emscripten
 // params: s, c, len
 // ret: index
index 8ce2abfdf876c51c3136bfcb35dd70a36bfabd8c..a98f5d8ff13946380086722aa9b45939b0498fcd 100644 (file)
@@ -146,6 +146,11 @@ func LastIndex(s, substr string) int {
        return -1
 }
 
+// IndexByte returns the index of the first instance of c in s, or -1 if c is not present in s.
+func IndexByte(s string, c byte) int {
+       return bytealg.IndexByteString(s, c)
+}
+
 // IndexRune returns the index of the first instance of the Unicode code point
 // r, or -1 if rune is not present in s.
 // If r is utf8.RuneError, it returns the first instance of any
diff --git a/src/strings/strings_decl.go b/src/strings/strings_decl.go
deleted file mode 100644 (file)
index 6718c3a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package strings
-
-//go:noescape
-
-// IndexByte returns the index of the first instance of c in s, or -1 if c is not present in s.
-func IndexByte(s string, c byte) int // in internal/bytealg