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

src/cmd/6a/lex.c
src/cmd/6l/6.out.h
src/cmd/6l/optab.c
src/pkg/runtime/asm_amd64.s

index 275bcfe1a3c3b822a8bc9760cad546802f6c609c..fc6bd367629827d518ba95c382f5fdd8a3c43462 100644 (file)
@@ -1001,6 +1001,10 @@ struct
        "XORPS",        LTYPE3, AXORPS,
        "CRC32B",       LTYPE4, ACRC32B,
        "CRC32Q",       LTYPE4, ACRC32Q,
+       "PREFETCHT0",           LTYPE2, APREFETCHT0,
+       "PREFETCHT1",           LTYPE2, APREFETCHT1,
+       "PREFETCHT2",           LTYPE2, APREFETCHT2,
+       "PREFETCHNTA",          LTYPE2, APREFETCHNTA,
 
        0
 };
index 8499159543f116acd4090be7a6f74d62294e3eeb..b1ef050d9e177eca94166d78be751c3a052c463c 100644 (file)
@@ -736,6 +736,11 @@ enum       as
        ACRC32B,
        ACRC32Q,
        AIMUL3Q,
+       
+       APREFETCHT0,
+       APREFETCHT1,
+       APREFETCHT2,
+       APREFETCHNTA,
 
        ALAST
 };
index 5746ded19c23a2c2279ccd4d165c5188f683bc61..f09f3d34143e93fc71edf8347bd9ec952380a504 100644 (file)
@@ -539,6 +539,11 @@ uchar      ycrc32l[] =
 {
        Yml,    Yrl,    Zlitm_r,        0,
 };
+uchar  yprefetch[] =
+{
+       Ym,     Ynone,  Zm_o,   2,
+       0,
+};
 
 /*
  * You are doasm, holding in your hand a Prog* with p->as set to, say, ACRC32,
@@ -1270,8 +1275,13 @@ Optab optab[] =
        { AXADDQ,       yrl_ml, Pw, 0x0f,0xc1 },
        { AXADDW,       yrl_ml, Pe, 0x0f,0xc1 },
 
-       { ACRC32B,       ycrc32l,Px, 0xf2,0x0f,0x38,0xf0,0},
-       { ACRC32Q,       ycrc32l,Pw, 0xf2,0x0f,0x38,0xf1,0},
+       { ACRC32B,       ycrc32l,Px, 0xf2,0x0f,0x38,0xf0,0 },
+       { ACRC32Q,       ycrc32l,Pw, 0xf2,0x0f,0x38,0xf1,0 },
+       
+       { APREFETCHT0,  yprefetch,      Pm,     0x18,(01) },
+       { APREFETCHT1,  yprefetch,      Pm,     0x18,(02) },
+       { APREFETCHT2,  yprefetch,      Pm,     0x18,(03) },
+       { APREFETCHNTA, yprefetch,      Pm,     0x18,(00) },
 
        { AEND },
        0
index 7a5dd830b83a8ec22d9674f44438ec9676460bf3..928f4420339cf4102def742ffa11b86a5198ea85 100644 (file)
@@ -443,8 +443,7 @@ TEXT runtime·atomicstore64(SB), 7, $0
 
 TEXT runtime·prefetch(SB), 7, $0
        MOVQ    8(SP), AX
-       // PREFETCHNTA (AX)
-       BYTE $0x0f; BYTE $0x18; BYTE $0x00
+       PREFETCHNTA     (AX)
        RET
 
 // void jmpdefer(fn, sp);