]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: fix encoding errors for FMOVD and FMOVS instructions on arm64
authoreric fang <eric.fang@arm.com>
Tue, 13 Jun 2023 10:02:33 +0000 (10:02 +0000)
committerEric Fang <eric.fang@arm.com>
Thu, 15 Jun 2023 01:59:49 +0000 (01:59 +0000)
The encoding of instructions "FMOVD F1, ZR" and "FMOVS F1, ZR" is wrong,
the assembler encodes them as "FMOVD F1, F31" and "FMOVS F1, F31". This
CL fixes the bug.

Change-Id: I2d31520b58f9950ce2534a04f4a3275bf103a673
Reviewed-on: https://go-review.googlesource.com/c/go/+/503135
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Run-TryBot: Eric Fang <eric.fang@arm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/cmd/asm/internal/asm/testdata/arm64.s
src/cmd/internal/obj/arm64/asm7.go

index 534a0b3e41814ff04bedf29622756d62f8b3eb52..11bd6785524443c9b599347a23892e79d6096bce 100644 (file)
@@ -238,6 +238,8 @@ TEXT        foo(SB), DUPOK|NOSPLIT, $-8
        FMOVS   $0, F0                          // e003271e
        FMOVD   ZR, F0                          // e003679e
        FMOVS   ZR, F0                          // e003271e
+       FMOVD   F1, ZR                          // 3f00669e
+       FMOVS   F1, ZR                          // 3f00261e
        VUADDW  V9.B8, V12.H8, V14.H8           // 8e11292e
        VUADDW  V13.H4, V10.S4, V11.S4          // 4b116d2e
        VUADDW  V21.S2, V24.D2, V29.D2          // 1d13b52e
index 77c60812ac966cdafe188e93e260fb5faf953dde..ff8daad85784113632282bfac9b9edf1037c5b16 100644 (file)
@@ -3880,7 +3880,7 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
        case 29: /* op Rn, Rd */
                fc := c.aclass(&p.From)
                tc := c.aclass(&p.To)
-               if (p.As == AFMOVD || p.As == AFMOVS) && (fc == C_REG || fc == C_ZREG || tc == C_REG) {
+               if (p.As == AFMOVD || p.As == AFMOVS) && (fc == C_REG || fc == C_ZREG || tc == C_REG || tc == C_ZREG) {
                        // FMOV Rx, Fy or FMOV Fy, Rx
                        o1 = FPCVTI(0, 0, 0, 0, 6)
                        if p.As == AFMOVD {