4.10.8. NOP, SEV, WFE, WFI 및 YIELD

연산 없음, 이벤트 설정, 이벤트 대기, 인터럽트 대기 및 양도

구문

NOP{cond}
SEV{cond}
WFE{cond}
WFI{cond}
YIELD{cond}

인수 설명:

cond

선택적 조건 코드입니다 (조건부 실행 참조).

사용법

힌트 명령어로, 경우에 따라 구현하거나 구현하지 않을 수 있습니다. 이러한 명령어 중 하나를 구현하지 않으면 해당 명령어는 NOP처럼 동작합니다.

NOP

NOP는 아무 작업도 수행하지 않습니다. 타겟 아키텍처에서 NOP가 특정 명령어로 구현되지 않으면 어셈블러는 NOP를 의사 명령어로 간주하여 MOV r0, r0 (ARM) 또는 MOV r8, r8 (Thumb) 과 같이 아무 작업도 수행하지 않는 대체 명령어를 생성합니다.

NOP는 시간이 걸리는 NOP가 아닐 수도 있습니다. 프로세서는 이 명령어가 실행 단계에 도달하기 전에 파이프라인에서 이 명령어를 제거할 수 있습니다.

NOP를 패딩에 사용할 수 있습니다. 예를 들어 64비트 경계에 그 다음 명령어를 배치할 수 있습니다.

SEV

SEV는 다중 프로세서 시스템 내의 모든 코어에 신호를 보낼 이벤트를 발생시킵니다. SEV가 구현될 경우 WFE도 구현되어야 합니다.

WFE

이벤트 레지스터가 설정되지 않은 경우 WFE는 다음 이벤트 중 하나가 발생할 때까지 실행을 일시 중단합니다.

  • CPSR I 비트로 마스킹되지 않은 경우, IRQ 인터럽트

  • CPSR F 비트로 마스킹되지 않은 경우, FIQ 인터럽트

  • CPSR A 비트로 마스킹되지 않은 경우, 부정확한 데이터 어보트

  • 디버그를 사용하는 경우, 디버그 시작 요청

  • SEV 명령어를 통해 다른 프로세서의 신호를 받는 이벤트

이벤트 레지스터가 설정될 경우 WFE는 이를 해제하고 즉시 원래 상태로 되돌립니다.

WFE가 구현될 경우 SEV도 구현되어야 합니다.

WFI

WFI는 다음 이벤트 중 하나가 발생할 때까지 실행을 일시 중단합니다.

  • CPSR I 비트에 관계없이 IRQ 인터럽트

  • CPSR F 비트에 관계없이 FIQ 인터럽트

  • CPSR A 비트로 마스킹되지 않은 경우, 부정확한 데이터 어보트

  • 디버그를 사용하는지 여부에 관계없이 디버그 시작 요청

YIELD

YIELD는 현재 스레드가 스왑이 가능한 spinlock과 같은 작업을 수행 중임을 하드웨어에 알립니다. 하드웨어는 이 힌트를 사용하여 다중 스레드 시스템에서 스레드를 일시 중단하고 다시 시작할 수 있습니다.

아키텍처

이러한 ARM 명령어는 ARMv6K 이상에서 사용할 수 있습니다.

이러한 32비트 Thumb 명령어는 ARMv6T2 이상에서 사용할 수 있습니다.

이러한 16비트 Thumb 명령어는 ARMv6T2 이상에서 사용할 수 있습니다.

NOP는 다른 모든 ARM 및 Thumb 아키텍처에서 의사 명령어로 사용할 수 있습니다.

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential