diff options
| author | Joel Sing <joel@sing.id.au> | 2020-01-06 00:18:56 +1100 |
|---|---|---|
| committer | Tobias Klauser <tobias.klauser@gmail.com> | 2020-01-06 09:24:06 +0000 |
| commit | fc5eee3c1d37131ca5887ed1d020f6cf83d20a92 (patch) | |
| tree | eedb39f4e23f88b72188578cb219939a59c12307 /src/syscall | |
| parent | c6e84263865fa418b4d4a60f077d02c10a0fff23 (diff) | |
| download | go-fc5eee3c1d37131ca5887ed1d020f6cf83d20a92.tar.xz | |
syscall: fix riscv64 syscall assembly
RISCV has no instruction to store an immediate value to memory, or to
subtract an immediate value. An immediate needs to be moved to a register
first, or in the case of $0, the zero value register (ZERO or R0) can be
used instead. Restore the original riscv-go code so that it compiles.
Updates #27532
Change-Id: I3c60e6f385c59679252a710dbba153357a367516
Reviewed-on: https://go-review.googlesource.com/c/go/+/212761
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
Diffstat (limited to 'src/syscall')
| -rw-r--r-- | src/syscall/asm_linux_riscv64.s | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/syscall/asm_linux_riscv64.s b/src/syscall/asm_linux_riscv64.s index 5700d4d005..ad0b6b17d9 100644 --- a/src/syscall/asm_linux_riscv64.s +++ b/src/syscall/asm_linux_riscv64.s @@ -20,14 +20,14 @@ TEXT ·Syscall(SB),NOSPLIT,$0-56 BLTU T0, A0, err MOV A0, r1+32(FP) // r1 MOV A1, r2+40(FP) // r2 - MOV $0, err+48(FP) // errno + MOV ZERO, err+48(FP) // errno CALL runtime·exitsyscall(SB) RET err: MOV $-1, T0 MOV T0, r1+32(FP) // r1 - MOV $0, r2+40(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+40(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+48(FP) // errno CALL runtime·exitsyscall(SB) RET @@ -47,14 +47,14 @@ TEXT ·Syscall6(SB),NOSPLIT,$0-80 BLTU T0, A0, err MOV A0, r1+56(FP) // r1 MOV A1, r2+64(FP) // r2 - MOV $0, err+72(FP) // errno + MOV ZERO, err+72(FP) // errno CALL runtime·exitsyscall(SB) RET err: MOV $-1, T0 MOV T0, r1+56(FP) // r1 - MOV $0, r2+64(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+64(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+72(FP) // errno CALL runtime·exitsyscall(SB) RET @@ -70,13 +70,13 @@ TEXT ·RawSyscall(SB),NOSPLIT,$0-56 BLTU T0, A0, err MOV A0, r1+32(FP) // r1 MOV A1, r2+40(FP) // r2 - MOV $0, err+48(FP) // errno + MOV ZERO, err+48(FP) // errno RET err: MOV $-1, T0 MOV T0, r1+32(FP) // r1 - MOV $0, r2+40(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+40(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+48(FP) // errno RET @@ -94,13 +94,13 @@ TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 BLTU T0, A0, err MOV A0, r1+56(FP) // r1 MOV A1, r2+64(FP) // r2 - MOV $0, err+72(FP) // errno + MOV ZERO, err+72(FP) // errno RET err: MOV $-1, T0 MOV T0, r1+56(FP) // r1 - MOV $0, r2+64(FP) // r2 - SUB A0, $0, A0 + MOV ZERO, r2+64(FP) // r2 + SUB A0, ZERO, A0 MOV A0, err+72(FP) // errno RET |
