4.11.8. NOP、SEV、WFE、WFI 和 YIELD

无操作、设置事件、等待事件、等待中断和通知。

语法


NOP{cond}


SEV{cond}


WFE{cond}


WFI{cond}


YIELD{cond}

其中:

cond

是一个可选的条件代码(请参阅条件执行)。

用法

这些是提示指令。 是否实现这些指令是可选的。 只要其中任何一个指令未实现,则与 NOP 效果相同。

NOP

NOP 不执行任何操作。 在您的目标体系结构中,如果 NOP 不作为特殊指令来实现,则汇编程序会生成不执行任何操作的另一条指令,例如 MOV r0, r0 (ARM) 或 MOV r8, r8 (Thumb)。

NOP 并非一定就是消耗时间的 NOP。 也许在该指令执行前,处理器就会将其从管道中删除。

您可利用 NOP 来完成填充,例如将以下指令置于 64 位边界上。

SEV

SEV 会导致向多处理器系统的所有内核发送事件信息。 如果实现了 SEV,则还必须实现 WFE

WFE

如果未设置事件寄存器,则 WFE 会暂时中断挂起执行,直至发生任一以下事件后再恢复执行:

  • 发生 IRQ 中断,除非被 CPSR I 位屏蔽

  • 发生 FIQ 中断,除非被 CPSR F 位屏蔽

  • 发生不精确的数据中止,除非被 CPSR A 位屏蔽

  • 出现调试进入请求(需启用调试)

  • 另一个处理器利用 SEV 指令向事件发送信号。

如果设置了事件寄存器,则 WFE 会清除该设置,然后立即返回。

如果实现了 WFE,则还必须实现 SEV

WFI

WFI 会暂时将执行中断挂起,直至发生以下事件后再恢复执行:

  • 发生 IRQ 中断,不考虑 CPSR I 位

  • 发生 FIQ 中断,不考虑 CPSR F 位

  • 发生不精确的数据中止,除非被 CPSR A 位屏蔽

  • 出现调试进入请求,无论是否启用调试。

YIELD

YIELD 可告知硬件有线程正在执行任务,例如可换出的自旋锁。 硬件可使用此提示在多线程系统中暂挂并恢复执行线程。

体系结构

这些 ARM 指令可用在 ARMv6T2 和 ARMv7 中。

这些 32 位 Thumb 指令可用于 ARMv6T2 和 ARMv7。

这些 16 位 Thumb 指令可用于 ARMv6T2 及更高版本,以及 ARMv6 的 K 变体。

NOP 可在其他所有 ARM 和 Thumb 体系结构中用于伪指令。

Copyright © 2002-2007 ARM Limited. All rights reserved. ARM DUI 0204HC
Non-Confidential