]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: fix riscv64 syscall assembly
authorJoel Sing <joel@sing.id.au>
Sun, 5 Jan 2020 13:18:56 +0000 (00:18 +1100)
committerTobias Klauser <tobias.klauser@gmail.com>
Mon, 6 Jan 2020 09:24:06 +0000 (09:24 +0000)
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>
src/syscall/asm_linux_riscv64.s

index 5700d4d00558895b8d289983fe7defcd2d070137..ad0b6b17d99e1deeb720fc96d9d9bc48d391d2d5 100644 (file)
@@ -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