Commit bdc64183 authored by Austin Clements's avatar Austin Clements

runtime: YIELD in procyield on ARM

ARM currently does not use a hardware yield instruction in the spin
loop in procyield because the YIELD instruction was only added in
ARMv6K. However, it appears earlier ARM chips will interpret the YIELD
encoding as an effective NOP (specifically an MSR instruction that
ultimately has no effect on the CPSR register).

Hence, use YIELD in procyield on ARM since it should be, at worst,
harmless.

Fixes #16663.

Change-Id: Id1787ac48862b785b92c28f1ac84cb4908d2173d
Reviewed-on: https://go-review.googlesource.com/45250
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
parent af2ac479
...@@ -941,6 +941,7 @@ TEXT runtime·procyield(SB),NOSPLIT,$-4 ...@@ -941,6 +941,7 @@ TEXT runtime·procyield(SB),NOSPLIT,$-4
MOVW cycles+0(FP), R1 MOVW cycles+0(FP), R1
MOVW $0, R0 MOVW $0, R0
yieldloop: yieldloop:
WORD $0xe320f001 // YIELD (NOP pre-ARMv6K)
CMP R0, R1 CMP R0, R1
B.NE 2(PC) B.NE 2(PC)
RET 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