Skip to main content

IAR Embedded Workbench for Arm 9.70.x

組み込み関数の概要

このセクションの内容:

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は、intunsigned intfloatpolyです。

  • size81632、または64

  • number_of_lanes124816

ベクタ型の合計ビット幅はsizenumber_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

説明:

  • typeintunsigned int、またはfloat

  • size81632、または64

  • number_of_lanes124816

ベクタ型の合計ビット幅はsizenumber_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 ExtensionsCustom Datapath Extensionの章(ドキュメント番号: 101028)を参照してください。