]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.garbage] runtime: add prefetcht0, prefetcht1, prefetcht2, prefetcht3, prefetchnt...
authorRuss Cox <rsc@golang.org>
Fri, 21 Nov 2014 20:57:10 +0000 (15:57 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 21 Nov 2014 20:57:10 +0000 (15:57 -0500)
We don't know what we need yet, so add them all.
Add them even on x86 architectures (as no-ops) so that
the GC can refer to them unconditionally.

Eventually we'll know what we want and probably
have just one 'prefetch' with an appropriate meaning
on each architecture.

LGTM=rlh
R=rlh
CC=golang-codereviews
https://golang.org/cl/179160043

src/runtime/asm_386.s
src/runtime/asm_amd64.s
src/runtime/asm_amd64p32.s
src/runtime/asm_arm.s
src/runtime/asm_power64x.s
src/runtime/runtime1.go
src/runtime/stubs.go

index a02bb5556f37b783fc0ddc8f4e23f34fba9212c8..7cc64a3a495c58838164971d019d3138c534c0e6 100644 (file)
@@ -2285,3 +2285,23 @@ TEXT runtime·getg(SB),NOSPLIT,$0-4
        MOVL    AX, ret+0(FP)
        RET
 
+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
index 6e3f5ff6ca91d96eaaa18c3fea53c9eb4b726735..14be2fe92d0047563d03502a8499b78c79c6d6f3 100644 (file)
@@ -2228,3 +2228,23 @@ TEXT runtime·getg(SB),NOSPLIT,$0-8
        MOVQ    g(CX), AX
        MOVQ    AX, ret+0(FP)
        RET
+
+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
index cead3cd075d11beeb0a97e49b91d4cb7d4df7c55..60c438c1d85912353505a8975e205aea0235b0f6 100644 (file)
@@ -1079,3 +1079,24 @@ TEXT runtime·getg(SB),NOSPLIT,$0-4
        MOVL    g(CX), AX
        MOVL    AX, ret+0(FP)
        RET
+
+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
index 583c7ba50115606230793c4fe1e56c60032dc847..c6c98b4439e925467c237f35cbe8cbaa5c284ca5 100644 (file)
@@ -1320,3 +1320,15 @@ TEXT runtime·goexit(SB),NOSPLIT,$-4-0
 TEXT runtime·getg(SB),NOSPLIT,$-4-4
        MOVW    g, ret+0(FP)
        RET
+
+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
index ba900c2b3f5fe827e3bbe6f119ab29711ed67fd0..6169202ea6d169eb8a57e58d1f2aa9a5f92c012b 100644 (file)
@@ -986,3 +986,15 @@ TEXT _cgo_topofstack(SB),NOSPLIT,$0
 TEXT runtime·goexit(SB),NOSPLIT,$-8-0
        MOVD    R0, R0  // NOP
        BL      runtime·goexit1(SB)    // does not return
+
+TEXT runtime·prefetcht0(SB),NOSPLIT,$0-8
+       RETURN
+
+TEXT runtime·prefetcht1(SB),NOSPLIT,$0-8
+       RETURN
+
+TEXT runtime·prefetcht2(SB),NOSPLIT,$0-8
+       RETURN
+
+TEXT runtime·prefetchnta(SB),NOSPLIT,$0-8
+       RETURN
index 15dea01a3c6795342a6bc25c505def68e8ed77ac..9e19b68bee43a0b1810edf6c0b79c9de6340f9fb 100644 (file)
@@ -97,7 +97,10 @@ func testAtomic64() {
 
        z64 = 42
        x64 = 0
-       // TODO: PREFETCH((unsafe.Pointer)(&z64))
+       prefetcht0(uintptr(unsafe.Pointer(&z64)))
+       prefetcht1(uintptr(unsafe.Pointer(&z64)))
+       prefetcht2(uintptr(unsafe.Pointer(&z64)))
+       prefetchnta(uintptr(unsafe.Pointer(&z64)))
        if cas64(&z64, x64, 1) {
                gothrow("cas64 failed")
        }
index 217307a1ed0a65260a4cdcb87d760ae522291ed2..4063e5434b103c68b33c92741b94b372c3d34bfd 100644 (file)
@@ -231,3 +231,8 @@ func call536870912(fn, arg unsafe.Pointer, n, retoffset uint32)
 func call1073741824(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)