10.11 __irq

__irq キーワードを使用すると、C 関数または C++ 関数を例外ハンドラとして使用できるようになります。

__irq は、関数修飾子です。これは、関数の型に影響します。

使用法

__irq キーワードを使用すると、コンパイラが例外ハンドラとしての使用に適した関数を生成します。つまり、コンパイラが以下の関数を作成します。
  • AAPCS で保存が義務付けられているプロセッサレジスタのみではなく、すべてのプロセッサレジスタを保存します。浮動小数点レジスタは保存されません。
  • 例外を返すようアーキテクチャ上で定義済みの命令を使用して戻り値を返します。

制約条件

__irq 関数で引数や戻り値を使用することはできません。 __irq 関数は、--apcs /rwpi と互換性がありません。

ARMv6-M および ARMv7-M では、例外処理のアーキテクチャ上のメカニズムがすべてのプロセッサレジスタを保存し、標準の関数の戻り値によって例外の戻り値を返すことができます。したがって、ARMv6-M と ARMv7-M では、__irq を指定してもコンパイルされる出力の動作に影響を与えません。ただし、ソフトウェアの移植を明確、かつ容易にするために例外ハンドラで __irq を使用することを推奨します。

  • ARMv6T2、ARMv7-A、ARMv7-R など、ARM および Thumb-2 テクノロジをサポートするアーキテクチャの場合、__irq と指定されている関数は、コンパイルオプションまたは #pragma が ARM または Thumb を指定するかどうかに応じて ARM または Thumb コードにコンパイルされます。
  • ARMv6-M や ARMv7-M など、Thumb のみのアーキテクチャの場合、__irq と指定される関数は Thumb コードにコンパイルされます。
  • ARMv6T2 以前のアーキテクチャの場合、__irq と指定される関数は、--thumb#pragma thumb を使用してコンパイルしても ARM コードにコンパイルされます。
関連する参考文書
8.180 --thumb
8.7 --arm
10.101 #pragma thumb
10.78 #pragma arm
関連情報
ARM、Thumb、および ThumbEE の命令セット
プロセッサ例外処理
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.