IRQ 割り込みおよび FIQ 割り込みを制御するコンパイラ組み込み関数には、__disable_irq
、__enable_irq
、__disable_fiq
、および __enable_fiq
があります。
これらのコンパイラ組み込み関数を使用して、モード、状態、不正確なデータアボート設定を含むその他の CPSR
ビットを変更することはできません。これは、ユーザモードでは CPSR
および SPSR
の制御ビットを変更することはできないので、コンパイラ組み込み関数を使用できるのは、プロセッサが既に特権モードの場合のみであることを意味します。
これらのコンパイラ組み込み関数は、以下に示すように、ARM と Thumb のどちらの状態でも、すべてのプロセッサアーキテクチャに使用できます。
ARMv6 以降をサポートするプロセッサ用にコンパイルしている場合、CPS
命令がこれらの関数に対してインラインで生成されます。以下に例を示します。
CPSID i
ARM 状態で ARMv4 または ARMv5 をサポートするプロセッサ用にコンパイルしている場合、コンパイラによって、MRS
および MSR
命令のシーケンスがインライン展開されます。以下に例を示します。
MRS r0, CPSR ORR r0, r0, #0x80 MSR CPSR_c, r0
Thumb 状態で ARMv4 または ARMv5 をサポートするプロセッサ用にコンパイルしている場合、または --compatible
が使用されている場合、コンパイラによって、ヘルパ関数が呼び出されます。以下に例を示します。
BL __ARM_disable_irq