Commit fc5eee3c authored by Joel Sing's avatar Joel Sing Committed by Tobias Klauser

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: default avatarTobias Klauser <tobias.klauser@gmail.com>
parent c6e84263
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment