aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Bleecher Snyder <josharian@gmail.com>2016-04-14 09:39:40 -0700
committerJosh Bleecher Snyder <josharian@gmail.com>2016-04-14 17:58:51 +0000
commit67cdec00c256d817fc3d2c099fa1830c8f446923 (patch)
tree916a2ad100253f6ae53bf1abb09efa02bba173fa
parent045411e6f28c64e6448a2432fa652cc80ca18f31 (diff)
downloadgo-67cdec00c256d817fc3d2c099fa1830c8f446923.tar.xz
cmd/vet: teach asm checker about PEXTRD’s op size
Fixes #15271 Change-Id: I28e3fb5bde1e6fd5b263b1434873b8ce051aee97 Reviewed-on: https://go-review.googlesource.com/22083 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
-rw-r--r--src/cmd/vet/asmdecl.go5
-rw-r--r--src/cmd/vet/testdata/asm.go2
-rw-r--r--src/cmd/vet/testdata/asm1.s11
3 files changed, 18 insertions, 0 deletions
diff --git a/src/cmd/vet/asmdecl.go b/src/cmd/vet/asmdecl.go
index 1b313cfe1b..389da353fc 100644
--- a/src/cmd/vet/asmdecl.go
+++ b/src/cmd/vet/asmdecl.go
@@ -559,6 +559,11 @@ func asmCheckVar(badf func(string, ...interface{}), fn *asmFunc, line, expr stri
src = 8
break
}
+ if strings.HasPrefix(op, "P") && strings.HasSuffix(op, "RD") {
+ // PINSRD, PEXTRD, etc
+ src = 4
+ break
+ }
if strings.HasPrefix(op, "F") && (strings.HasSuffix(op, "F") || strings.HasSuffix(op, "FP")) {
// FMOVFP, FXCHF, etc
src = 4
diff --git a/src/cmd/vet/testdata/asm.go b/src/cmd/vet/testdata/asm.go
index 9a3d5315ad..81947102ec 100644
--- a/src/cmd/vet/testdata/asm.go
+++ b/src/cmd/vet/testdata/asm.go
@@ -31,3 +31,5 @@ func nosplit(x int)
func rodata(x int)
func noptr(x int)
func wrapper(x int)
+
+func f15271() (x uint32)
diff --git a/src/cmd/vet/testdata/asm1.s b/src/cmd/vet/testdata/asm1.s
index 62f423cd8b..2c6f13b137 100644
--- a/src/cmd/vet/testdata/asm1.s
+++ b/src/cmd/vet/testdata/asm1.s
@@ -252,3 +252,14 @@ TEXT ·returnnamed(SB),0,$0-41
TEXT ·returnintmissing(SB),0,$0-8
RET // ERROR "RET without writing to 8-byte ret\+0\(FP\)"
+
+
+// issue 15271
+TEXT ·f15271(SB), NOSPLIT, $0-4
+ // Stick 123 into the low 32 bits of X0.
+ MOVQ $123, AX
+ PINSRD $0, AX, X0
+
+ // Return them.
+ PEXTRD $0, X0, x+0(FP)
+ RET