]> Cypherpunks repositories - gostls13.git/commitdiff
8a, 8l: add PREFETCH instructions
authorRuss Cox <rsc@golang.org>
Tue, 10 Apr 2012 14:09:27 +0000 (10:09 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 10 Apr 2012 14:09:27 +0000 (10:09 -0400)
R=ken2
CC=golang-dev
https://golang.org/cl/5992082

src/cmd/8a/lex.c
src/cmd/8l/8.out.h
src/cmd/8l/optab.c
src/pkg/runtime/asm_386.s

index c54e4fe4625d6ed332fe95dd0672a03a2da95aa3..5d361f53c5f7a6588777fa0133457d1bf294e607 100644 (file)
@@ -667,6 +667,10 @@ struct
        "MFENCE",       LTYPE0, AMFENCE,
        "SFENCE",       LTYPE0, ASFENCE,
        "EMMS",         LTYPE0, AEMMS,
+       "PREFETCHT0",           LTYPE2, APREFETCHT0,
+       "PREFETCHT1",           LTYPE2, APREFETCHT1,
+       "PREFETCHT2",           LTYPE2, APREFETCHT2,
+       "PREFETCHNTA",          LTYPE2, APREFETCHNTA,
 
        0
 };
index 9d2751cf0a97473af5588da19704c0b47188107d..e13f1d3454eaff15cc0646f6b0409e9e4080a968 100644 (file)
@@ -451,6 +451,11 @@ enum       as
        ASFENCE,
 
        AEMMS,
+       
+       APREFETCHT0,
+       APREFETCHT1,
+       APREFETCHT2,
+       APREFETCHNTA,
 
        ALAST
 };
index 856482290dfc3f3d2e06b68dbfbb1b3466247fa6..bb2e4705a50682fce8981ee0ebc248b05ab62e1f 100644 (file)
@@ -349,6 +349,11 @@ uchar      ysvrs[] =
        Ym,     Ynone,  Zm_o,   2,
        0
 };
+uchar  yprefetch[] =
+{
+       Ym,     Ynone,  Zm_o,   2,
+       0,
+};
 
 Optab optab[] =
 /*     as, ytab, andproto, opcode */
@@ -761,5 +766,10 @@ Optab optab[] =
 
        { AEMMS, ynone, Pm, 0x77 },
 
+       { APREFETCHT0,  yprefetch,      Pm,     0x18,(01) },
+       { APREFETCHT1,  yprefetch,      Pm,     0x18,(02) },
+       { APREFETCHT2,  yprefetch,      Pm,     0x18,(03) },
+       { APREFETCHNTA, yprefetch,      Pm,     0x18,(00) },
+
        0
 };
index 3ab34d34cbe1318eb6a50e790fa458102fc0ba70..f3de78cbb90e98e83b1df343d1e21b30870fcb49 100644 (file)
@@ -417,8 +417,7 @@ TEXT runtime·atomicstore64(SB), 7, $0
 
 TEXT runtime·prefetch(SB), 7, $0
        MOVL    4(SP), AX
-       // PREFETCHNTA (AX)
-       BYTE $0x0f; BYTE $0x18; BYTE $0x00
+       PREFETCHNTA (AX)
        RET
 
 // void jmpdefer(fn, sp);