From 9fc84363d1c317fd8d8f963de3bb10f8a8df05ac Mon Sep 17 00:00:00 2001 From: eric fang Date: Tue, 13 Jun 2023 10:02:33 +0000 Subject: [PATCH] cmd/asm: fix encoding errors for FMOVD and FMOVS instructions on arm64 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 Reviewed-by: David Chase Run-TryBot: Eric Fang Reviewed-by: Cherry Mui --- src/cmd/asm/internal/asm/testdata/arm64.s | 2 ++ src/cmd/internal/obj/arm64/asm7.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s index 534a0b3e41..11bd678552 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.s +++ b/src/cmd/asm/internal/asm/testdata/arm64.s @@ -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 diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index 77c60812ac..ff8daad857 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -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 { -- 2.48.1