[go] cmd/internal/obj/x86: Added support for TSX instructions.

137 views
Skip to first unread message

Ilya Tocar (Gerrit)

unread,
Nov 2, 2015, 7:02:46 AM11/2/15
to Sergey Arseev, golang-co...@googlegroups.com
Ilya Tocar has posted comments on this change.

cmd/internal/obj/x86: Added support for TSX instructions.

Patch Set 1: Run-TryBot+1

--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Ilya Tocar <ilya....@intel.com>
Gerrit-HasComments: No

Gobot Gobot (Gerrit)

unread,
Nov 2, 2015, 7:03:26 AM11/2/15
to Sergey Arseev, Ilya Tocar, golang-co...@googlegroups.com
Gobot Gobot has posted comments on this change.

cmd/internal/obj/x86: Added support for TSX instructions.

Patch Set 1:

TryBots beginning. Status page: http://farmer.golang.org/try?commit=d97bf836

--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Gobot Gobot <go...@golang.org>

Gobot Gobot (Gerrit)

unread,
Nov 2, 2015, 7:30:46 AM11/2/15
to Sergey Arseev, Ilya Tocar, golang-co...@googlegroups.com
Gobot Gobot has posted comments on this change.

cmd/internal/obj/x86: Added support for TSX instructions.

Patch Set 1: TryBot-Result+1

TryBots are happy.

Aram Hăvărneanu (Gerrit)

unread,
Nov 2, 2015, 9:17:01 AM11/2/15
to Sergey Arseev, Gobot Gobot, Ilya Tocar, golang-co...@googlegroups.com
Aram Hăvărneanu has posted comments on this change.

cmd/internal/obj/x86: Added support for TSX instructions.

Patch Set 1:

(1 comment)

https://go-review.googlesource.com/#/c/16479/1//COMMIT_MSG
Commit Message:

PS1, Line 7: Added
add, not added. drop capitalisation and final trailing period.


--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Aram Hăvărneanu <ar...@mgk.ro>
Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
Gerrit-Reviewer: Ilya Tocar <ilya....@intel.com>
Gerrit-HasComments: Yes

Sergey Arseev (Gerrit)

unread,
Nov 2, 2015, 9:21:43 AM11/2/15
to Ian Lance Taylor, golang-co...@googlegroups.com
Sergey Arseev uploaded a change:
https://go-review.googlesource.com/16479

cmd/internal/obj/x86: Added support for TSX instructions.

Transactional memory, will later be used for semaphore implementation. Nacl
not supported yet.

Change-Id: Ic18453dcaa08d07bb217c0b95461584f007d518b
---
M src/cmd/asm/internal/arch/arch.go
M src/cmd/internal/obj/x86/a.out.go
M src/cmd/internal/obj/x86/anames.go
M src/cmd/internal/obj/x86/asm6.go
4 files changed, 43 insertions(+), 4 deletions(-)



diff --git a/src/cmd/asm/internal/arch/arch.go
b/src/cmd/asm/internal/arch/arch.go
index 04622e6..4162a81 100644
--- a/src/cmd/asm/internal/arch/arch.go
+++ b/src/cmd/asm/internal/arch/arch.go
@@ -78,7 +78,7 @@
}

func jumpX86(word string) bool {
- return word[0] == 'J' || word == "CALL" || strings.HasPrefix(word, "LOOP")
+ return word[0] == 'J' || word == "CALL" ||
strings.HasPrefix(word, "LOOP") || word == "XBEGIN"
}

func archX86(linkArch *obj.LinkArch) *Arch {
diff --git a/src/cmd/internal/obj/x86/a.out.go
b/src/cmd/internal/obj/x86/a.out.go
index 108ca6a..4c10344 100644
--- a/src/cmd/internal/obj/x86/a.out.go
+++ b/src/cmd/internal/obj/x86/a.out.go
@@ -762,6 +762,14 @@
AFUCOMI
AFUCOMIP

+ //TSX
+ AXACQUIRE
+ AXRELEASE
+ AXBEGIN
+ AXEND
+ AXABORT
+ AXTEST
+
ALAST
)

diff --git a/src/cmd/internal/obj/x86/anames.go
b/src/cmd/internal/obj/x86/anames.go
index c075a15..520d24c 100644
--- a/src/cmd/internal/obj/x86/anames.go
+++ b/src/cmd/internal/obj/x86/anames.go
@@ -700,5 +700,11 @@
"FCOMIP",
"FUCOMI",
"FUCOMIP",
+ "XACQUIRE",
+ "XRELEASE",
+ "XBEGIN",
+ "XEND",
+ "XABORT",
+ "XTEST",
"LAST",
}
diff --git a/src/cmd/internal/obj/x86/asm6.go
b/src/cmd/internal/obj/x86/asm6.go
index f03df5b..0629e23 100644
--- a/src/cmd/internal/obj/x86/asm6.go
+++ b/src/cmd/internal/obj/x86/asm6.go
@@ -741,6 +741,14 @@
{Yu8, Yxm, Yxr, Zibm_r, 2},
}

+var yxbegin = []ytab{
+ {Ynone, Ynone, Ybr, Zjmp, 1},
+}
+
+var yxabort = []ytab{
+ {Yu8, Ynone, Ynone, Zib_, 1},
+}
+
/*
* You are doasm, holding in your hand a Prog* with p->as set to, say,
ACRC32,
* and p->from and p->to as operands (Addr*). The linker scans optab to
find
@@ -1497,6 +1505,12 @@
{AMOVHDU, yxmov_vex, Pvex2, [23]uint8{0x6f, 0x7f}},
{AMOVNTHD, yxr_ml_vex, Pvex1, [23]uint8{0xe7}},
{AMOVHDA, yxmov_vex, Pvex1, [23]uint8{0x6f, 0x7f}},
+ {AXACQUIRE, ynone, Px, [23]uint8{0xf2}},
+ {AXRELEASE, ynone, Px, [23]uint8{0xf3}},
+ {AXBEGIN, yxbegin, Px, [23]uint8{0xc7, 0xf8}},
+ {AXABORT, yxabort, Px, [23]uint8{0xc6, 0xf8}},
+ {AXEND, ynone, Px, [23]uint8{0x0f, 01, 0xd5}},
+ {AXTEST, ynone, Px, [23]uint8{0x0f, 01, 0xd6}},
{obj.AUSEFIELD, ynop, Px, [23]uint8{0, 0}},
{obj.ATYPE, nil, 0, [23]uint8{}},
{obj.AFUNCDATA, yfuncdata, Px, [23]uint8{0, 0}},
@@ -1707,7 +1721,7 @@
q.Back ^= 2
}

- if q.As == AJCXZL {
+ if q.As == AJCXZL || q.As == AXBEGIN {
s.P[q.Pc+2] = byte(v)
} else {
s.P[q.Pc+1] = byte(v)
@@ -3343,6 +3357,10 @@
}
ctxt.Andptr[0] = byte(op)
ctxt.Andptr = ctxt.Andptr[1:]
+ if p.As == AXABORT {
+ ctxt.Andptr[0] = byte(o.op[z+1])
+ ctxt.Andptr = ctxt.Andptr[1:]
+ }
ctxt.Andptr[0] = byte(vaddr(ctxt, p, a, nil))
ctxt.Andptr = ctxt.Andptr[1:]

@@ -3564,6 +3582,10 @@

// TODO: jump across functions needs reloc
case Zbr, Zjmp, Zloop:
+ if p.As == AXBEGIN {
+ ctxt.Andptr[0] = byte(op)
+ ctxt.Andptr = ctxt.Andptr[1:]
+ }
if p.To.Sym != nil {
if yt.zcase != Zjmp {
ctxt.Diag("branch to ATEXT")
@@ -3594,7 +3616,7 @@

if p.Back&1 != 0 {
v = q.Pc - (p.Pc + 2)
- if v >= -128 {
+ if v >= -128 && p.As != AXBEGIN {
if p.As == AJCXZL {
ctxt.Andptr[0] = 0x67
ctxt.Andptr = ctxt.Andptr[1:]
@@ -3607,6 +3629,9 @@
ctxt.Diag("loop too far: %v", p)
} else {
v -= 5 - 2
+ if p.As == AXBEGIN {
+ v--
+ }
if yt.zcase == Zbr {
ctxt.Andptr[0] = 0x0f
ctxt.Andptr = ctxt.Andptr[1:]
@@ -3632,7 +3657,7 @@
p.Forwd = q.Rel

q.Rel = p
- if p.Back&2 != 0 { // short
+ if p.Back&2 != 0 && p.As != AXBEGIN { // short
if p.As == AJCXZL {
ctxt.Andptr[0] = 0x67
ctxt.Andptr = ctxt.Andptr[1:]

--
https://go-review.googlesource.com/16479

Brad Fitzpatrick (Gerrit)

unread,
Nov 2, 2015, 10:15:50 AM11/2/15
to Sergey Arseev, Aram Hăvărneanu, Brad Fitzpatrick, Gobot Gobot, Ilya Tocar, golang-co...@googlegroups.com
Brad Fitzpatrick has posted comments on this change.

cmd/internal/obj/x86: Added support for TSX instructions.

Patch Set 1:

(1 comment)

https://go-review.googlesource.com/#/c/16479/1/src/cmd/internal/obj/x86/a.out.go
File src/cmd/internal/obj/x86/a.out.go:

Line 765: //TSX
space after // before T


--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Aram Hăvărneanu <ar...@mgk.ro>
Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>

Sergey Arseev (Gerrit)

unread,
Nov 3, 2015, 5:53:35 AM11/3/15
to Gobot Gobot, Ilya Tocar, Brad Fitzpatrick, Aram Hăvărneanu, golang-co...@googlegroups.com
Reviewers: Gobot Gobot, Ilya Tocar

Sergey Arseev uploaded a new patch set:
https://go-review.googlesource.com/16479

cmd/internal/obj/x86: add support for TSX instructions

Transactional memory, will later be used for semaphore implementation.
Nacl not supported yet.

Change-Id: Ic18453dcaa08d07bb217c0b95461584f007d518b
---
M src/cmd/asm/internal/arch/arch.go
M src/cmd/internal/obj/x86/a.out.go
M src/cmd/internal/obj/x86/anames.go
M src/cmd/internal/obj/x86/asm6.go
4 files changed, 43 insertions(+), 4 deletions(-)


Sergey Arseev (Gerrit)

unread,
Nov 6, 2015, 10:06:50 AM11/6/15
to Gobot Gobot, Ilya Tocar, Brad Fitzpatrick, Aram Hăvărneanu, golang-co...@googlegroups.com
Reviewers: Gobot Gobot, Ilya Tocar

Sergey Arseev uploaded a new patch set:
https://go-review.googlesource.com/16479

cmd/internal/obj/x86: add support for TSX instructions

Transactional memory, will later be used for semaphore implementation.
Nacl not supported yet.

Change-Id: Ic18453dcaa08d07bb217c0b95461584f007d518b
---
M src/cmd/asm/internal/arch/arch.go
M src/cmd/internal/obj/x86/a.out.go
M src/cmd/internal/obj/x86/anames.go
M src/cmd/internal/obj/x86/asm6.go
4 files changed, 43 insertions(+), 4 deletions(-)


Sergey Arseev (Gerrit)

unread,
Nov 9, 2015, 2:28:40 AM11/9/15
to Gobot Gobot, Ilya Tocar, Brad Fitzpatrick, Aram Hăvărneanu, golang-co...@googlegroups.com
Reviewers: Gobot Gobot, Ilya Tocar

Sergey Arseev uploaded a new patch set:
https://go-review.googlesource.com/16479

cmd/internal/obj/x86: add support for TSX instructions

Transactional memory, will later be used for semaphore implementation.
Nacl not supported yet.

Change-Id: Ic18453dcaa08d07bb217c0b95461584f007d518b
---
M src/cmd/asm/internal/arch/arch.go
M src/cmd/internal/obj/x86/a.out.go
M src/cmd/internal/obj/x86/anames.go
M src/cmd/internal/obj/x86/asm6.go
4 files changed, 43 insertions(+), 4 deletions(-)


Sergey Arseev (Gerrit)

unread,
Nov 23, 2015, 5:30:58 AM11/23/15
to Aram Hăvărneanu, Brad Fitzpatrick, Gobot Gobot, Ilya Tocar, golang-co...@googlegroups.com
Sergey Arseev has posted comments on this change.

cmd/internal/obj/x86: add support for TSX instructions

Patch Set 4:

Ping

--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Aram Hăvărneanu <ar...@mgk.ro>
Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
Gerrit-Reviewer: Ilya Tocar <ilya....@intel.com>
Gerrit-Reviewer: Sergey Arseev <sergey...@intel.com>
Gerrit-HasComments: No

Brad Fitzpatrick (Gerrit)

unread,
Nov 23, 2015, 11:40:23 AM11/23/15
to Sergey Arseev, Aram Hăvărneanu, Brad Fitzpatrick, Keith Randall, Gobot Gobot, Ilya Tocar, golang-co...@googlegroups.com
Brad Fitzpatrick has posted comments on this change.

cmd/internal/obj/x86: add support for TSX instructions

Patch Set 4:

R=khr

But since this was mailed after the Go 1.6 and doesn't address any open
bug, I think we should wait until early February to get back to this, once
Go 1.6 is out and the Go 1.7 tree opens.

--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Aram Hăvărneanu <ar...@mgk.ro>
Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
Gerrit-Reviewer: Ilya Tocar <ilya....@intel.com>
Gerrit-Reviewer: Keith Randall <k...@golang.org>

Russ Cox (Gerrit)

unread,
Nov 26, 2015, 11:39:00 AM11/26/15
to Sergey Arseev, Aram Hăvărneanu, Brad Fitzpatrick, Keith Randall, Gobot Gobot, Ilya Tocar, Russ Cox, golang-co...@googlegroups.com
Russ Cox has posted comments on this change.

cmd/internal/obj/x86: add support for TSX instructions

Patch Set 4: Code-Review+2

--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Aram Hăvărneanu <ar...@mgk.ro>
Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
Gerrit-Reviewer: Ilya Tocar <ilya....@intel.com>
Gerrit-Reviewer: Keith Randall <k...@golang.org>
Gerrit-Reviewer: Russ Cox <r...@golang.org>

Russ Cox (Gerrit)

unread,
Nov 26, 2015, 11:39:06 AM11/26/15
to Russ Cox, Sergey Arseev, golang-...@googlegroups.com, Aram Hăvărneanu, Brad Fitzpatrick, Gobot Gobot, Ilya Tocar, golang-co...@googlegroups.com
Russ Cox has submitted this change and it was merged.

cmd/internal/obj/x86: add support for TSX instructions

Transactional memory, will later be used for semaphore implementation.
Nacl not supported yet.

Change-Id: Ic18453dcaa08d07bb217c0b95461584f007d518b
Reviewed-on: https://go-review.googlesource.com/16479
Reviewed-by: Russ Cox <r...@golang.org>
---
M src/cmd/asm/internal/arch/arch.go
M src/cmd/internal/obj/x86/a.out.go
M src/cmd/internal/obj/x86/anames.go
M src/cmd/internal/obj/x86/asm6.go
4 files changed, 43 insertions(+), 4 deletions(-)

Approvals:
Russ Cox: Looks good to me, approved


--
https://go-review.googlesource.com/16479
Gerrit-Reviewer: Aram Hăvărneanu <ar...@mgk.ro>
Gerrit-Reviewer: Brad Fitzpatrick <brad...@golang.org>
Gerrit-Reviewer: Gobot Gobot <go...@golang.org>
Gerrit-Reviewer: Ilya Tocar <ilya....@intel.com>
Reply all
Reply to author
Forward
0 new messages