aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/asm_arm.s
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2017-06-09 15:46:08 -0400
committerAustin Clements <austin@google.com>2017-06-09 20:33:29 +0000
commitbdc64183c83fbf5c595d1b18eb9addff1bf2be8d (patch)
treec8eed0a5f2ddc3d8df56de979d6754f3c93c336a /src/runtime/asm_arm.s
parentaf2ac479fc9e4833357a3281a67cd517d2da07ad (diff)
downloadgo-bdc64183c83fbf5c595d1b18eb9addff1bf2be8d.tar.gz
go-bdc64183c83fbf5c595d1b18eb9addff1bf2be8d.zip
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: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/runtime/asm_arm.s')
-rw-r--r--src/runtime/asm_arm.s1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/runtime/asm_arm.s b/src/runtime/asm_arm.s
index 803cf8d4bf..87f9378247 100644
--- a/src/runtime/asm_arm.s
+++ b/src/runtime/asm_arm.s
@@ -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