diff options
author | eric fang <eric.fang@arm.com> | 2020-06-08 03:19:43 +0000 |
---|---|---|
committer | Cherry Zhang <cherryyz@google.com> | 2020-06-09 15:58:36 +0000 |
commit | e5e386938f4ace00c00de86ead47ed5c02961e5b (patch) | |
tree | 54a75c07f10ce723685a4f36d16e4007bcf45678 | |
parent | e031318ca6da8db8a08ecff734ae72290dfb5f2d (diff) | |
download | go-e5e386938f4ace00c00de86ead47ed5c02961e5b.tar.gz go-e5e386938f4ace00c00de86ead47ed5c02961e5b.zip |
cmd/asm: fix the encoding error of VCNT instruction for arm64
When the arrangement specifier is "B16", the 30-bit should be 1 rather than 0.
This CL fixes this error.
Fixes #39445
Change-Id: Ib44881cdb8b3aab855cb30f2c52a085cd73a6a2c
Reviewed-on: https://go-review.googlesource.com/c/go/+/236638
Run-TryBot: eric fang <eric.fang@arm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
-rw-r--r-- | src/cmd/asm/internal/asm/testdata/arm64enc.s | 1 | ||||
-rw-r--r-- | src/cmd/internal/obj/arm64/asm7.go | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/cmd/asm/internal/asm/testdata/arm64enc.s b/src/cmd/asm/internal/asm/testdata/arm64enc.s index a483c731b8..56cf51c303 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64enc.s +++ b/src/cmd/asm/internal/asm/testdata/arm64enc.s @@ -420,6 +420,7 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$-8 UXTBW R2, R6 // 461c0053 UXTHW R7, R20 // f43c0053 VCNT V0.B8, V0.B8 // 0058200e + VCNT V0.B16, V0.B16 // 0058204e WFE // 5f2003d5 WFI // 7f2003d5 YIELD // 3f2003d5 diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index 7f5cba645a..df17729a76 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -460,7 +460,6 @@ var optab = []Optab{ {AFCVTZSD, C_FREG, C_NONE, C_NONE, C_REG, 29, 4, 0, 0, 0}, {ASCVTFD, C_REG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0}, {AFCVTSD, C_FREG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0}, - {AVCNT, C_ARNG, C_NONE, C_NONE, C_ARNG, 29, 4, 0, 0, 0}, {AVMOV, C_ELEM, C_NONE, C_NONE, C_REG, 73, 4, 0, 0, 0}, {AVMOV, C_ELEM, C_NONE, C_NONE, C_ELEM, 92, 4, 0, 0, 0}, {AVMOV, C_ELEM, C_NONE, C_NONE, C_VREG, 80, 4, 0, 0, 0}, @@ -2773,6 +2772,7 @@ func buildop(ctxt *obj.Link) { oprangeset(AVSRI, t) case AVREV32: + oprangeset(AVCNT, t) oprangeset(AVRBIT, t) oprangeset(AVREV64, t) oprangeset(AVREV16, t) @@ -4523,7 +4523,7 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { c.ctxt.Diag("invalid arrangement: %v\n", p) } - if (p.As == AVMOV || p.As == AVRBIT) && (af != ARNG_16B && af != ARNG_8B) { + if (p.As == AVMOV || p.As == AVRBIT || p.As == AVCNT) && (af != ARNG_16B && af != ARNG_8B) { c.ctxt.Diag("invalid arrangement: %v", p) } |