Skip to content

Commit

Permalink
runtime: YIELD in procyield on ARM
Browse files Browse the repository at this point in the history
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 <[email protected]>
TryBot-Result: Gobot Gobot <[email protected]>
Reviewed-by: Cherry Zhang <[email protected]>
  • Loading branch information
aclements committed Jun 9, 2017
1 parent af2ac47 commit bdc6418
Showing 1 changed file with 1 addition and 0 deletions.
1 change: 1 addition & 0 deletions src/runtime/asm_arm.s
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,7 @@ TEXT runtime·procyield(SB),NOSPLIT,$-4
MOVW cycles+0(FP), R1
MOVW $0, R0
yieldloop:
WORD $0xe320f001 // YIELD (NOP pre-ARMv6K)
CMP R0, R1
B.NE 2(PC)
RET
Expand Down

0 comments on commit bdc6418

Please sign in to comment.