From: Joel Sing Date: Sat, 21 Aug 2021 08:40:20 +0000 (+1000) Subject: cmd/asm,cmd/internal/obj/riscv: add more error tests for riscv64 assembly X-Git-Tag: go1.18beta1~1535 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5a687eeaf186dd109e53860db15f8465b0456fc0;p=gostls13.git cmd/asm,cmd/internal/obj/riscv: add more error tests for riscv64 assembly Add more error tests for riscv64 assembly. Also avoid a panic when one of these error conditions is hit. Change-Id: If5d913894facbd67f7d014eab745da77c8c66ab0 Reviewed-on: https://go-review.googlesource.com/c/go/+/344228 Trust: Joel Sing Run-TryBot: Joel Sing TryBot-Result: Go Bot Reviewed-by: Meng Zhuo --- diff --git a/src/cmd/asm/internal/asm/testdata/riscv64error.s b/src/cmd/asm/internal/asm/testdata/riscv64error.s index fb43e68fc1..b09a1c7a8c 100644 --- a/src/cmd/asm/internal/asm/testdata/riscv64error.s +++ b/src/cmd/asm/internal/asm/testdata/riscv64error.s @@ -3,6 +3,14 @@ // license that can be found in the LICENSE file. TEXT errors(SB),$0 + MOV $errors(SB), (X5) // ERROR "unsupported addr MOV" + MOV $8(SP), (X5) // ERROR "unsupported addr MOV" + MOVB $8(SP), X5 // ERROR "unsupported addr MOV" + MOVH $8(SP), X5 // ERROR "unsupported addr MOV" + MOVW $8(SP), X5 // ERROR "unsupported addr MOV" + MOVF $8(SP), X5 // ERROR "unsupported addr MOV" + MOV $1234, 0(SP) // ERROR "constant load must target register" + MOV $1234, 8(SP) // ERROR "constant load must target register" MOV $0, 0(SP) // ERROR "constant load must target register" MOV $0, 8(SP) // ERROR "constant load must target register" MOV $1234, 0(SP) // ERROR "constant load must target register" @@ -11,4 +19,8 @@ TEXT errors(SB),$0 MOVH $1, X5 // ERROR "unsupported constant load" MOVW $1, X5 // ERROR "unsupported constant load" MOVF $1, X5 // ERROR "unsupported constant load" + MOVBU X5, (X6) // ERROR "unsupported unsigned store" + MOVHU X5, (X6) // ERROR "unsupported unsigned store" + MOVWU X5, (X6) // ERROR "unsupported unsigned store" + RET diff --git a/src/cmd/internal/obj/riscv/obj.go b/src/cmd/internal/obj/riscv/obj.go index a305edab4b..f89e13d81c 100644 --- a/src/cmd/internal/obj/riscv/obj.go +++ b/src/cmd/internal/obj/riscv/obj.go @@ -271,6 +271,7 @@ func rewriteMOV(ctxt *obj.Link, newprog obj.ProgAlloc, p *obj.Prog) { switch p.As { case AMOVBU, AMOVHU, AMOVWU: ctxt.Diag("unsupported unsigned store at %v", p) + return } switch p.To.Name { case obj.NAME_AUTO, obj.NAME_PARAM, obj.NAME_NONE: @@ -1795,7 +1796,7 @@ func instructionsForProg(p *obj.Prog) []*instruction { case AMOV, AMOVB, AMOVH, AMOVW, AMOVBU, AMOVHU, AMOVWU, AMOVF, AMOVD: // Handle register to register moves. if p.From.Type != obj.TYPE_REG || p.To.Type != obj.TYPE_REG { - break + return nil } switch p.As { case AMOV: // MOV Ra, Rb -> ADDI $0, Ra, Rb