適用範囲:DS-5, RealView Development Suite (RVDS)
回答:
バリア組み込み関数、__isb(<option>), __dsb(<option>)および__dmb(<option>)は現在マニュアルに記載がありません。現在ARM社では一部の組み込み関数のアップデートを行っており、コンパイラのマニュアルはこれが完了した後にアップデートされる予定です。
これらの組み込み関数はchar型のパラメータを取ります。パラメータはバリア中の4-bitフィールドにオプショナルで処理中の制限を定義するために使われる命令エンコーディングをマップします。
例:
void foo(void) { __dmb(0xf); __dsb(0xf); __isb(0xf); }
各組み込み関数に0xfをパラメータとして渡すことで、下位4ビットを'1111'としてエンコードし、これは'full system'が要求される共有可能なドメインであり、読み書きにはアクセスタイプが必要であることを示します。ARM Architecture Reference Manualによればこれは省略可能ですが、メモリバリア組み込み関数に対しこのパラメータを指定しなければなりません。さもなければ、コンパイラはこれらを関数に対する参照として扱ってしまいます。__dmb()および__dsb()組み込み関数は、'full system'以外のオプションが実装されているかどうかに関わらず、実装定義となります。__isb()組み込み関数には、その他全てのエンコーディングが予約されています。
より詳細についてはARM Architecture Reference Manual (section A8.6.41 DMB, section A8.6.42 DSBおよびsection A8.6.49 ISB)を参照してください。