]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: add amd64 CLFLUSH instruction
authorisharipo <iskander.sharipov@intel.com>
Fri, 18 Aug 2017 10:33:00 +0000 (13:33 +0300)
committerIlya Tocar <ilya.tocar@intel.com>
Wed, 6 Sep 2017 15:37:00 +0000 (15:37 +0000)
This is the last instruction I found missing in SSE2 set.

It does not reuse 'yprefetch' ytabs due to differences in
operands SRC/DST roles:
- PREFETCHx: ModRM:r/m(r) -> FROM
- CLFLUSH:   ModRM:r/m(w) -> TO

unaryDst map is extended accordingly.

Change-Id: I89e34ebb81cc0ee5f9ebbb1301bad417f7ee437f
Reviewed-on: https://go-review.googlesource.com/56833
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ilya Tocar <ilya.tocar@intel.com>
Reviewed-by: Russ Cox <rsc@golang.org>
src/cmd/asm/internal/asm/testdata/amd64enc.s
src/cmd/internal/obj/x86/a.out.go
src/cmd/internal/obj/x86/anames.go
src/cmd/internal/obj/x86/asm6.go
src/cmd/internal/obj/x86/obj6.go

index 534854f845fc870cd9a11d939648b1b8ce7891d9..ed80f6f92e6f5f4df976ebec85c9e5e6b8e90d66 100644 (file)
@@ -771,8 +771,8 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$0
        //TODO: CLAC                            // 0f01ca
        CLC                                     // f8
        CLD                                     // fc
-       //TODO: CLFLUSH (BX)                    // 0fae3b
-       //TODO: CLFLUSH (R11)                   // 410fae3b
+       CLFLUSH (BX)                            // 0fae3b
+       CLFLUSH (R11)                           // 410fae3b
        //TODO: CLFLUSHOPT (BX)                 // 660fae3b
        //TODO: CLFLUSHOPT (R11)                // 66410fae3b
        CLI                                     // fa
index 36e715933f3f692abdcde76d5e4e7ab446b0ec32..778bdc63833302e021ec8fd98ad6083745d5fe62 100644 (file)
@@ -76,6 +76,7 @@ const (
        ABYTE
        ACLC
        ACLD
+       ACLFLUSH
        ACLI
        ACLTS
        ACMC
index 8499e93b84294a2ac1f040faf0925c467407df14..45b39aa552c1e2b619deacc935c64f799713b38b 100644 (file)
@@ -38,6 +38,7 @@ var Anames = []string{
        "BYTE",
        "CLC",
        "CLD",
+       "CLFLUSH",
        "CLI",
        "CLTS",
        "CMC",
index 48b96cd7c9d6f5499ceab42695bcfa3ea5f26d78..16e58ad94d63141dba3ee78e63710d9c9acb468e 100644 (file)
@@ -551,6 +551,10 @@ var ypopl = []ytab{
        {Ynone, Ynone, Ym, Zo_m, 2},
 }
 
+var yclflush = []ytab{
+       {Ynone, Ynone, Ym, Zo_m, 2},
+}
+
 var ybswap = []ytab{
        {Ynone, Ynone, Yrl, Z_rp, 2},
 }
@@ -994,6 +998,7 @@ var optab =
        {ACDQ, ynone, Px, [23]uint8{0x99}},
        {ACLC, ynone, Px, [23]uint8{0xf8}},
        {ACLD, ynone, Px, [23]uint8{0xfc}},
+       {ACLFLUSH, yclflush, Pm, [23]uint8{0xae, 07}},
        {ACLI, ynone, Px, [23]uint8{0xfa}},
        {ACLTS, ynone, Pm, [23]uint8{0x06}},
        {ACMC, ynone, Px, [23]uint8{0xf5}},
index 52fbaa0156238fff71f6d16f262b36ad327276e2..38aeb4a59d6442fcc3eaf4db074563eb99870e31 100644 (file)
@@ -1183,6 +1183,7 @@ func stacksplit(ctxt *obj.Link, cursym *obj.LSym, p *obj.Prog, newprog obj.ProgA
 var unaryDst = map[obj.As]bool{
        ABSWAPL:    true,
        ABSWAPQ:    true,
+       ACLFLUSH:   true,
        ACMPXCHG8B: true,
        ADECB:      true,
        ADECL:      true,