組み込み関数の概要
IAR C/C++ コンパイラforArmは、組み込み関数のいくつかの異なる設定で使用されます。
アプリケーションでIAR Systems組み込み関数を使用するには、ヘッダファイルintrinsics.hをインクルードします。
アプリケーションでArm C Language Extensions(ACLE)組み込み関数を使用するには、ヘッダファイルarm_acle.hをインクルードします。詳細については、ACLEの組み込み関数を参照してください。
アプリケーションでNeon組込み関数を使用するには、ヘッダファイルarm_neon.hをインクルードします。詳細については、Neon命令の組み込み関数を参照してください。
アプリケーションでMVE組み込み関数を使用するには、ヘッダファイルarm_mve.hを含めます。詳細については、MVE命令の組み込み関数を参照してください。
アプリケーションでCDE組み込み関数を使用するには、ヘッダファイルarm_cde.hを含めます。詳細については、CDE命令の組み込み関数を参照してください。
アプリケーションでCMSIS組み込み関数を使用するには、デバイスまたはコアのメインのCMSISヘッダーファイルをインクルードします。CMSISヘッダーファイルは、intrinsics.hとして同じモジュールに含めることはできないので、気をつけてください。CMSISについては、CMSIS 統合(32 ビットモード)を参照してください。
注記
組み込み関数名は、次のように最初にダブルアンダースコアが付きます。
__disable_interrupt
ACLEの組み込み関数
Arm C言語拡張(ACLE )は、組み込み関数の数を指定します。これらはここでは、文書化されていません。代わりに、Arm C 言語拡張(IHI 0053D)を参照してください。
アプリケーションでACLEの組み込み関数を使用するには、ヘッダファイルarm_acle.hをインクルードします。
Neon命令の組み込み関数
Neon コプロセッサは、Armアーキテクチャで定義されたAdvanced SIMD 命令セット拡張を実装しています。アプリケーションでNeon組み込み関数を使用するには、ヘッダファイルarm_neon.hをインクルードします。CとC++の両方から含めることができます。含めたとしても、IAR拡張子無効だった場合に有効になるわけではありません。この関数は、以下のパターンに従って名付けられたベクタ型を使用します。
<type><size>x<number_of_lanes>_t
説明:
typeは、int、unsigned int、float、polyです。sizeは8、16、32、または64number_of_lanesは1、2、4、8、16
ベクタ型の合計ビット幅はsizeにnumber_of_lanesを掛けた値で、Dレジスタ(64ビット)またはQレジスタ(128ビット)に収まらなければなりません。
以下に例を示します。
__intrinsic float32x2_t vsub_f32(float32x2_t, float32x2_t);
組み込み関数vsub_f32は、2つの64ビットベクタ(Dレジスタ)上で動作するVSUB.F32命令を挿入します。それぞれに、32ビット浮動小数点型の2つの要素(レーン)があります。
一部の関数はベクタ型の配列を使用します。たとえば、float32x2_t型の4つの要素を持つ配列型の定義は以下のようになります。
typedef struct
{
float32x2_t val[4];
}
float32x2x4_t;MVE命令の組み込み関数
Mプロファイルベクタ拡張(MVE)はArmv8.1-Mアーキテクチャで定義されます。アプリケーションでMVE組み込み関数を使用するには、ヘッダファイルarm_mve.hを含めます。CとC++の両方から含めることができます。含めたとしても、IAR拡張子無効だった場合に有効になるわけではありません。MVE組み込みに関する詳細は、Arm C Language Extensions(ドキュメント番号:101028)を参照してください。この関数は、以下のパターンに従って名付けられたベクタ型を使用します。
<type><size>x<number_of_lanes>_t
説明:
typeはint、unsigned int、またはfloatsizeは8、16、32、または64number_of_lanesは1、2、4、8、16
ベクタ型の合計ビット幅はsizeにnumber_of_lanesを掛けた値で、Qレジスタ(128ビット)に収まらなければなりません。
以下に例を示します。
__intrinsic float32x4_t vsubq_f32(float32x4_t, float32x4_t);
組み込み関数vsub_f32は、2つの128ビットベクタ(Qレジスタ)上で動作するVSUB.F32 命令を挿入します。それぞれに、32ビット浮動小数点型の4つの要素(レーン)があります。
一部の関数はベクタ型の配列を使用します。たとえば、float32x2_t型の4つの要素を持つ配列型の定義は以下のようになります。
typedef struct
{
float32x2_t val[4];
}
float32x2x4_t;CDE命令の組み込み関数
Arm C言語拡張(ACLE)は、CDE (Custom Datapath Extension) での使用に多くの組み込み関数を指定します。CDE組み込みでの情報については、Arm C Language ExtensionsのCustom Datapath Extensionの章(ドキュメント番号: 101028)を参照してください。