]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: YIELD in procyield on ARM
authorAustin Clements <austin@google.com>
Fri, 9 Jun 2017 19:46:08 +0000 (15:46 -0400)
committerAustin Clements <austin@google.com>
Fri, 9 Jun 2017 20:33:29 +0000 (20:33 +0000)
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>
src/runtime/asm_arm.s

index 803cf8d4bf348d72e14c5c92aa4e225af203f927..87f937824736652dc1808753709680418b9e153d 100644 (file)
@@ -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