]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: remove new g register (X27) from preempt save/restore
authorJoel Sing <joel@sing.id.au>
Tue, 27 Oct 2020 12:10:13 +0000 (23:10 +1100)
committerJoel Sing <joel@sing.id.au>
Wed, 28 Oct 2020 18:11:26 +0000 (18:11 +0000)
The g register is now in X27 (previously X4, which collided with TP usage). Remove
X27 from preempt save/restore.

Change-Id: I9dd38ec3a8222fa0710757463769dbfac8ae7d20
Reviewed-on: https://go-review.googlesource.com/c/go/+/265517
Trust: Joel Sing <joel@sing.id.au>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/runtime/mkpreempt.go
src/runtime/preempt_riscv64.s

index 76237bc31b3dd1fa034affa41c21e7861e411d5d..286f81489a1cd30072c9147bea10c08ed34a07e2 100644 (file)
@@ -495,12 +495,12 @@ func genPPC64() {
 }
 
 func genRISCV64() {
-       // X0 (zero), X1 (LR), X2 (SP), X4 (g), X31 (TMP) are special.
+       // X0 (zero), X1 (LR), X2 (SP), X4 (TP), X27 (g), X31 (TMP) are special.
        var l = layout{sp: "X2", stack: 8}
 
-       // Add integer registers (X3, X5-X30).
+       // Add integer registers (X3, X5-X26, X28-30).
        for i := 3; i < 31; i++ {
-               if i == 4 {
+               if i == 4 || i == 27 {
                        continue
                }
                reg := fmt.Sprintf("X%d", i)
index 0338c22a9411336a527445fc49869f262214841b..eb68dcba2b96d137171d58c0a9b36b7f433fa387 100644 (file)
@@ -4,8 +4,8 @@
 #include "textflag.h"
 
 TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
-       MOV X1, -480(X2)
-       ADD $-480, X2
+       MOV X1, -472(X2)
+       ADD $-472, X2
        MOV X3, 8(X2)
        MOV X5, 16(X2)
        MOV X6, 24(X2)
@@ -29,79 +29,77 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
        MOV X24, 168(X2)
        MOV X25, 176(X2)
        MOV X26, 184(X2)
-       MOV X27, 192(X2)
-       MOV X28, 200(X2)
-       MOV X29, 208(X2)
-       MOV X30, 216(X2)
-       MOVD F0, 224(X2)
-       MOVD F1, 232(X2)
-       MOVD F2, 240(X2)
-       MOVD F3, 248(X2)
-       MOVD F4, 256(X2)
-       MOVD F5, 264(X2)
-       MOVD F6, 272(X2)
-       MOVD F7, 280(X2)
-       MOVD F8, 288(X2)
-       MOVD F9, 296(X2)
-       MOVD F10, 304(X2)
-       MOVD F11, 312(X2)
-       MOVD F12, 320(X2)
-       MOVD F13, 328(X2)
-       MOVD F14, 336(X2)
-       MOVD F15, 344(X2)
-       MOVD F16, 352(X2)
-       MOVD F17, 360(X2)
-       MOVD F18, 368(X2)
-       MOVD F19, 376(X2)
-       MOVD F20, 384(X2)
-       MOVD F21, 392(X2)
-       MOVD F22, 400(X2)
-       MOVD F23, 408(X2)
-       MOVD F24, 416(X2)
-       MOVD F25, 424(X2)
-       MOVD F26, 432(X2)
-       MOVD F27, 440(X2)
-       MOVD F28, 448(X2)
-       MOVD F29, 456(X2)
-       MOVD F30, 464(X2)
-       MOVD F31, 472(X2)
+       MOV X28, 192(X2)
+       MOV X29, 200(X2)
+       MOV X30, 208(X2)
+       MOVD F0, 216(X2)
+       MOVD F1, 224(X2)
+       MOVD F2, 232(X2)
+       MOVD F3, 240(X2)
+       MOVD F4, 248(X2)
+       MOVD F5, 256(X2)
+       MOVD F6, 264(X2)
+       MOVD F7, 272(X2)
+       MOVD F8, 280(X2)
+       MOVD F9, 288(X2)
+       MOVD F10, 296(X2)
+       MOVD F11, 304(X2)
+       MOVD F12, 312(X2)
+       MOVD F13, 320(X2)
+       MOVD F14, 328(X2)
+       MOVD F15, 336(X2)
+       MOVD F16, 344(X2)
+       MOVD F17, 352(X2)
+       MOVD F18, 360(X2)
+       MOVD F19, 368(X2)
+       MOVD F20, 376(X2)
+       MOVD F21, 384(X2)
+       MOVD F22, 392(X2)
+       MOVD F23, 400(X2)
+       MOVD F24, 408(X2)
+       MOVD F25, 416(X2)
+       MOVD F26, 424(X2)
+       MOVD F27, 432(X2)
+       MOVD F28, 440(X2)
+       MOVD F29, 448(X2)
+       MOVD F30, 456(X2)
+       MOVD F31, 464(X2)
        CALL ·asyncPreempt2(SB)
-       MOVD 472(X2), F31
-       MOVD 464(X2), F30
-       MOVD 456(X2), F29
-       MOVD 448(X2), F28
-       MOVD 440(X2), F27
-       MOVD 432(X2), F26
-       MOVD 424(X2), F25
-       MOVD 416(X2), F24
-       MOVD 408(X2), F23
-       MOVD 400(X2), F22
-       MOVD 392(X2), F21
-       MOVD 384(X2), F20
-       MOVD 376(X2), F19
-       MOVD 368(X2), F18
-       MOVD 360(X2), F17
-       MOVD 352(X2), F16
-       MOVD 344(X2), F15
-       MOVD 336(X2), F14
-       MOVD 328(X2), F13
-       MOVD 320(X2), F12
-       MOVD 312(X2), F11
-       MOVD 304(X2), F10
-       MOVD 296(X2), F9
-       MOVD 288(X2), F8
-       MOVD 280(X2), F7
-       MOVD 272(X2), F6
-       MOVD 264(X2), F5
-       MOVD 256(X2), F4
-       MOVD 248(X2), F3
-       MOVD 240(X2), F2
-       MOVD 232(X2), F1
-       MOVD 224(X2), F0
-       MOV 216(X2), X30
-       MOV 208(X2), X29
-       MOV 200(X2), X28
-       MOV 192(X2), X27
+       MOVD 464(X2), F31
+       MOVD 456(X2), F30
+       MOVD 448(X2), F29
+       MOVD 440(X2), F28
+       MOVD 432(X2), F27
+       MOVD 424(X2), F26
+       MOVD 416(X2), F25
+       MOVD 408(X2), F24
+       MOVD 400(X2), F23
+       MOVD 392(X2), F22
+       MOVD 384(X2), F21
+       MOVD 376(X2), F20
+       MOVD 368(X2), F19
+       MOVD 360(X2), F18
+       MOVD 352(X2), F17
+       MOVD 344(X2), F16
+       MOVD 336(X2), F15
+       MOVD 328(X2), F14
+       MOVD 320(X2), F13
+       MOVD 312(X2), F12
+       MOVD 304(X2), F11
+       MOVD 296(X2), F10
+       MOVD 288(X2), F9
+       MOVD 280(X2), F8
+       MOVD 272(X2), F7
+       MOVD 264(X2), F6
+       MOVD 256(X2), F5
+       MOVD 248(X2), F4
+       MOVD 240(X2), F3
+       MOVD 232(X2), F2
+       MOVD 224(X2), F1
+       MOVD 216(X2), F0
+       MOV 208(X2), X30
+       MOV 200(X2), X29
+       MOV 192(X2), X28
        MOV 184(X2), X26
        MOV 176(X2), X25
        MOV 168(X2), X24
@@ -125,7 +123,7 @@ TEXT ·asyncPreempt(SB),NOSPLIT|NOFRAME,$0-0
        MOV 24(X2), X6
        MOV 16(X2), X5
        MOV 8(X2), X3
-       MOV 480(X2), X1
+       MOV 472(X2), X1
        MOV (X2), X31
-       ADD $488, X2
+       ADD $480, X2
        JMP (X31)