]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: fix the encoding error of VCNT instruction for arm64
authoreric fang <eric.fang@arm.com>
Mon, 8 Jun 2020 03:19:43 +0000 (03:19 +0000)
committerCherry Zhang <cherryyz@google.com>
Tue, 9 Jun 2020 15:58:36 +0000 (15:58 +0000)
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>
src/cmd/asm/internal/asm/testdata/arm64enc.s
src/cmd/internal/obj/arm64/asm7.go

index a483c731b81224ddf86d51304141bdbf0def59d3..56cf51c3039c4abec896e2c89b2e476921ae1757 100644 (file)
@@ -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
index 7f5cba645a8b9e6dc18a64a7c45e29b667bd8551..df17729a7650f58171644758f2f00da6f71ca289 100644 (file)
@@ -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)
                }