Skip to content

Commit e5e3869

Browse files
eric fangcherrymui
eric fang
authored andcommitted
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 <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Cherry Zhang <[email protected]>
1 parent e031318 commit e5e3869

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

src/cmd/asm/internal/asm/testdata/arm64enc.s

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ TEXT asmtest(SB),DUPOK|NOSPLIT,$-8
420420
UXTBW R2, R6 // 461c0053
421421
UXTHW R7, R20 // f43c0053
422422
VCNT V0.B8, V0.B8 // 0058200e
423+
VCNT V0.B16, V0.B16 // 0058204e
423424
WFE // 5f2003d5
424425
WFI // 7f2003d5
425426
YIELD // 3f2003d5

src/cmd/internal/obj/arm64/asm7.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,6 @@ var optab = []Optab{
460460
{AFCVTZSD, C_FREG, C_NONE, C_NONE, C_REG, 29, 4, 0, 0, 0},
461461
{ASCVTFD, C_REG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0},
462462
{AFCVTSD, C_FREG, C_NONE, C_NONE, C_FREG, 29, 4, 0, 0, 0},
463-
{AVCNT, C_ARNG, C_NONE, C_NONE, C_ARNG, 29, 4, 0, 0, 0},
464463
{AVMOV, C_ELEM, C_NONE, C_NONE, C_REG, 73, 4, 0, 0, 0},
465464
{AVMOV, C_ELEM, C_NONE, C_NONE, C_ELEM, 92, 4, 0, 0, 0},
466465
{AVMOV, C_ELEM, C_NONE, C_NONE, C_VREG, 80, 4, 0, 0, 0},
@@ -2773,6 +2772,7 @@ func buildop(ctxt *obj.Link) {
27732772
oprangeset(AVSRI, t)
27742773

27752774
case AVREV32:
2775+
oprangeset(AVCNT, t)
27762776
oprangeset(AVRBIT, t)
27772777
oprangeset(AVREV64, t)
27782778
oprangeset(AVREV16, t)
@@ -4523,7 +4523,7 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
45234523
c.ctxt.Diag("invalid arrangement: %v\n", p)
45244524
}
45254525

4526-
if (p.As == AVMOV || p.As == AVRBIT) && (af != ARNG_16B && af != ARNG_8B) {
4526+
if (p.As == AVMOV || p.As == AVRBIT || p.As == AVCNT) && (af != ARNG_16B && af != ARNG_8B) {
45274527
c.ctxt.Diag("invalid arrangement: %v", p)
45284528
}
45294529

0 commit comments

Comments
 (0)