]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: remove unused prefetch functions
authorMartin Möhrmann <moehrmann@google.com>
Mon, 22 May 2017 05:42:42 +0000 (07:42 +0200)
committerMartin Möhrmann <moehrmann@google.com>
Tue, 8 Aug 2017 06:43:49 +0000 (06:43 +0000)
The only non test user of the assembler prefetch functions is the
heapBits.prefetch function which is itself unused.

The runtime prefetch functions have no functionality on most platforms
and are not inlineable since they are written in assembler. The function
call overhead eliminates the performance gains that could be achieved with
prefetching and would degrade performance for platforms where the functions
are no-ops.

If prefetch functions are needed back again later they can be improved
by avoiding the function call overhead and implementing them as intrinsics.

Change-Id: I52c553cf3607ffe09f0441c6e7a0a818cb21117d
Reviewed-on: https://go-review.googlesource.com/44370
Run-TryBot: Martin Möhrmann <moehrmann@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
12 files changed:
src/runtime/asm_386.s
src/runtime/asm_amd64.s
src/runtime/asm_amd64p32.s
src/runtime/asm_arm.s
src/runtime/asm_arm64.s
src/runtime/asm_mips64x.s
src/runtime/asm_mipsx.s
src/runtime/asm_ppc64x.s
src/runtime/asm_s390x.s
src/runtime/mbitmap.go
src/runtime/runtime1.go
src/runtime/stubs.go

index 5bbf2866f30c37db604be3432a559acb009e063b..19fc601259cf6c832c446481d7674fbd17884814 100644 (file)
@@ -1637,19 +1637,6 @@ TEXT runtime·goexit(SB),NOSPLIT,$0-0
        // traceback from goexit1 must hit code range of goexit
        BYTE    $0x90   // NOP
 
-// Prefetching doesn't seem to help.
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-4
-       RET
-
 // Add a module's moduledata to the linked list of moduledata objects. This
 // is called from .init_array by a function generated in the linker and so
 // follows the platform ABI wrt register preservation -- it only touches AX,
index 6405be92defe925dcc3352cf6f877e07d69bb34c..ad19e21be778d1b09114e5a6d649c49527141cf4 100644 (file)
@@ -2339,26 +2339,6 @@ TEXT runtime·goexit(SB),NOSPLIT,$0-0
        // traceback from goexit1 must hit code range of goexit
        BYTE    $0x90   // NOP
 
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-8
-       MOVQ    addr+0(FP), AX
-       PREFETCHT0      (AX)
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-8
-       MOVQ    addr+0(FP), AX
-       PREFETCHT1      (AX)
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-8
-       MOVQ    addr+0(FP), AX
-       PREFETCHT2      (AX)
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-8
-       MOVQ    addr+0(FP), AX
-       PREFETCHNTA     (AX)
-       RET
-
 // This is called from .init_array and follows the platform, not Go, ABI.
 TEXT runtime·addmoduledata(SB),NOSPLIT,$0-0
        PUSHQ   R15 // The access to global variables below implicitly uses R15, which is callee-save
index 6367b3fef407436180cdf01b655d8a27162996fd..379ee1c7ccc66b385363c6fd86da7fed4c87b861 100644 (file)
@@ -1042,27 +1042,6 @@ TEXT runtime·goexit(SB),NOSPLIT,$0-0
        // traceback from goexit1 must hit code range of goexit
        BYTE    $0x90   // NOP
 
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-4
-       MOVL    addr+0(FP), AX
-       PREFETCHT0      (AX)
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-4
-       MOVL    addr+0(FP), AX
-       PREFETCHT1      (AX)
-       RET
-
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-4
-       MOVL    addr+0(FP), AX
-       PREFETCHT2      (AX)
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-4
-       MOVL    addr+0(FP), AX
-       PREFETCHNTA     (AX)
-       RET
-
 TEXT ·checkASM(SB),NOSPLIT,$0-1
        MOVB    $1, ret+0(FP)
        RET
index 09b6759749c0487fb09a0363550d22de696c65ce..2c875fca779e9a2c28d7dcfb84ebcc72f30dccd2 100644 (file)
@@ -973,18 +973,6 @@ TEXT runtime·goexit(SB),NOSPLIT,$-4-0
        // traceback from goexit1 must hit code range of goexit
        MOVW    R0, R0  // NOP
 
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-4
-       RET
-
 // x -> x/1000000, x%1000000, called from Go with args, results on stack.
 TEXT runtime·usplit(SB),NOSPLIT,$0-12
        MOVW    x+0(FP), R0
index 30ecec7675ecda55a0846856bd2143c3916cabc1..9d6d963d7fdfb2683793d33e206eef1461ec9056 100644 (file)
@@ -931,19 +931,6 @@ TEXT runtime·goexit(SB),NOSPLIT,$-8-0
        MOVD    R0, R0  // NOP
        BL      runtime·goexit1(SB)    // does not return
 
-// TODO(aram): use PRFM here.
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-8
-       RET
-
 TEXT runtime·sigreturn(SB),NOSPLIT,$0-0
        RET
 
index 57d45785f16b66509232dad162774fb1eac2885e..4763a42dcd5ae8c7d82d491e6549f55de8477081 100644 (file)
@@ -823,18 +823,6 @@ TEXT runtime·goexit(SB),NOSPLIT,$-8-0
        // traceback from goexit1 must hit code range of goexit
        NOR     R0, R0  // NOP
 
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-8
-       RET
-
 TEXT ·checkASM(SB),NOSPLIT,$0-1
        MOVW    $1, R1
        MOVB    R1, ret+0(FP)
index 536c3156b558825295a850e80994547d3d780c5f..b3e85f98658daa05e3ef7f994ad7de37360302b9 100644 (file)
@@ -903,18 +903,6 @@ TEXT runtime·goexit(SB),NOSPLIT,$-4-0
        // traceback from goexit1 must hit code range of goexit
        NOR     R0, R0  // NOP
 
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-4
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-4
-       RET
-
 TEXT ·checkASM(SB),NOSPLIT,$0-1
        MOVW    $1, R1
        MOVB    R1, ret+0(FP)
index 616861ea7d9d58e4ece6030efe06c20092100ded..002a084147cf66ab1c676ac0ad6c41c6cdfe2126 100644 (file)
@@ -1353,18 +1353,6 @@ TEXT runtime·goexit(SB),NOSPLIT|NOFRAME,$0-0
        // traceback from goexit1 must hit code range of goexit
        MOVD    R0, R0  // NOP
 
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-8
-       RET
-
 TEXT runtime·sigreturn(SB),NOSPLIT,$0-0
        RET
 
index 20e740b927ea1e629fbd00a55b4b4d30c47f956c..0379c546d60a4d2fbefc5c43bd92fc69f1ced31a 100644 (file)
@@ -949,18 +949,6 @@ TEXT runtime·goexit(SB),NOSPLIT|NOFRAME,$0-0
        // traceback from goexit1 must hit code range of goexit
        BYTE $0x07; BYTE $0x00; // 2-byte nop
 
-TEXT runtime·prefetcht0(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht1(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetcht2(SB),NOSPLIT,$0-8
-       RET
-
-TEXT runtime·prefetchnta(SB),NOSPLIT,$0-8
-       RET
-
 TEXT runtime·sigreturn(SB),NOSPLIT,$0-0
        RET
 
index 2a9f1b83e591336b05ca16d85b85bcad90c036e6..23afc7dd04e5e49010cfcef0884a41820a569fd3 100644 (file)
@@ -449,11 +449,6 @@ func heapBitsForObject(p, refBase, refOff uintptr) (base uintptr, hbits heapBits
        return
 }
 
-// prefetch the bits.
-func (h heapBits) prefetch() {
-       prefetchnta(uintptr(unsafe.Pointer((h.bitp))))
-}
-
 // next returns the heapBits describing the next pointer-sized word in memory.
 // That is, if h describes address p, h.next() describes p+ptrSize.
 // Note that next does not modify h. The caller must record the result.
index c0733481a895f0ba6278fbf812a1a1a603040603..3ae30ab59e82c71eb5a0d10d4c0b62a3b3b1f811 100644 (file)
@@ -99,10 +99,6 @@ var test_z64, test_x64 uint64
 func testAtomic64() {
        test_z64 = 42
        test_x64 = 0
-       prefetcht0(uintptr(unsafe.Pointer(&test_z64)))
-       prefetcht1(uintptr(unsafe.Pointer(&test_z64)))
-       prefetcht2(uintptr(unsafe.Pointer(&test_z64)))
-       prefetchnta(uintptr(unsafe.Pointer(&test_z64)))
        if atomic.Cas64(&test_z64, test_x64, 1) {
                throw("cas64 failed")
        }
index c4f32a84825c9cdbb81136909f21ac17c9bf557f..d9a7aa09662f4ae519adaf7a2a66b81823b15a3f 100644 (file)
@@ -276,11 +276,6 @@ func call1073741824(typ, fn, arg unsafe.Pointer, n, retoffset uint32)
 
 func systemstack_switch()
 
-func prefetcht0(addr uintptr)
-func prefetcht1(addr uintptr)
-func prefetcht2(addr uintptr)
-func prefetchnta(addr uintptr)
-
 // round n up to a multiple of a.  a must be a power of 2.
 func round(n, a uintptr) uintptr {
        return (n + a - 1) &^ (a - 1)