Commit 2ee2c623 authored by Cherry Zhang's avatar Cherry Zhang

runtime: don't use R11 in nanotime1/walltime1 on ARM

R11 a.k.a. REGTMP is the temp register used by the assembler. It
may be clobbered if the assembler needs to synthesize
instructions. In particular, in nanotime1/walltime1, the load of
global variable runtime.iscgo clobbers it. So, avoid using R11
to hold a long-lived value.

Fixes #36309.

Change-Id: Iec2ab9d664532cad8fbf58da17f580e64a744f62
Reviewed-on: https://go-review.googlesource.com/c/go/+/212641Reviewed-by: default avatarTobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: default avatarAndrew G. Morgan <agm@google.com>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 9df93e4d
...@@ -269,8 +269,8 @@ noswitch: ...@@ -269,8 +269,8 @@ noswitch:
MOVW $CLOCK_REALTIME, R0 MOVW $CLOCK_REALTIME, R0
MOVW $8(R13), R1 // timespec MOVW $8(R13), R1 // timespec
MOVW runtime·vdsoClockgettimeSym(SB), R11 MOVW runtime·vdsoClockgettimeSym(SB), R2
CMP $0, R11 CMP $0, R2
B.EQ fallback B.EQ fallback
// Store g on gsignal's stack, so if we receive a signal // Store g on gsignal's stack, so if we receive a signal
...@@ -292,7 +292,7 @@ noswitch: ...@@ -292,7 +292,7 @@ noswitch:
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
MOVW g, (R6) MOVW g, (R6)
BL (R11) BL (R2)
MOVW $0, R1 MOVW $0, R1
MOVW R1, (R6) // clear g slot, R6 is unchanged by C code MOVW R1, (R6) // clear g slot, R6 is unchanged by C code
...@@ -300,7 +300,7 @@ noswitch: ...@@ -300,7 +300,7 @@ noswitch:
JMP finish JMP finish
nosaveg: nosaveg:
BL (R11) BL (R2)
JMP finish JMP finish
fallback: fallback:
...@@ -347,8 +347,8 @@ noswitch: ...@@ -347,8 +347,8 @@ noswitch:
MOVW $CLOCK_MONOTONIC, R0 MOVW $CLOCK_MONOTONIC, R0
MOVW $8(R13), R1 // timespec MOVW $8(R13), R1 // timespec
MOVW runtime·vdsoClockgettimeSym(SB), R11 MOVW runtime·vdsoClockgettimeSym(SB), R2
CMP $0, R11 CMP $0, R2
B.EQ fallback B.EQ fallback
// Store g on gsignal's stack, so if we receive a signal // Store g on gsignal's stack, so if we receive a signal
...@@ -370,7 +370,7 @@ noswitch: ...@@ -370,7 +370,7 @@ noswitch:
MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo MOVW (g_stack+stack_lo)(R6), R6 // g.m.gsignal.stack.lo
MOVW g, (R6) MOVW g, (R6)
BL (R11) BL (R2)
MOVW $0, R1 MOVW $0, R1
MOVW R1, (R6) // clear g slot, R6 is unchanged by C code MOVW R1, (R6) // clear g slot, R6 is unchanged by C code
...@@ -378,7 +378,7 @@ noswitch: ...@@ -378,7 +378,7 @@ noswitch:
JMP finish JMP finish
nosaveg: nosaveg:
BL (R11) BL (R2)
JMP finish JMP finish
fallback: fallback:
......
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