aboutsummaryrefslogtreecommitdiff
path: root/src/syscall
diff options
context:
space:
mode:
authorJoel Sing <joel@sing.id.au>2020-01-06 00:18:56 +1100
committerTobias Klauser <tobias.klauser@gmail.com>2020-01-06 09:24:06 +0000
commitfc5eee3c1d37131ca5887ed1d020f6cf83d20a92 (patch)
treeeedb39f4e23f88b72188578cb219939a59c12307 /src/syscall
parentc6e84263865fa418b4d4a60f077d02c10a0fff23 (diff)
downloadgo-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.s24
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