コンパイラによる事前定義

この項では、ARM コンパイラの定義済みのマクロの値について説明します。

Show/hide定義済みマクロ

Table 28 は、C および C++ 向けに ARM コンパイラで定義済みのマクロの名前を示しています。値フィールドに記載がない場合は、シンボルが定義されているだけです。

Table 28. 定義済みマクロ

名前定義されるケース
__arm__-

--thumb オプションが指定されている場合でも、ARM コンパイラでは常に定義されます。

__ARMCC_VERSION も参照して下さい。

__ARM_NEON__-

NEON を利用できることが、コンパイラオプションの --cpu および --fpu によって指定されている場合。

NEON コンパイラ組み込み関数の使用を許可する際、このマクロを使用すると、arm_neon.h を条件付きでインクルードすることができます。

__ARMCC_VERSIONver

常に定義されます。10 進数値で、リリースごとに増加します。値には PVbbbb 形式が使用されます。

  • P はメジャーバージョンを示します。

  • V はマイナーバージョンを示します。

  • bbbb はビルド番号を示します。

Note

ARM コンパイラ 4.1 以降と、__arm__ を定義する他のツールとは、このマクロを使用して区別できます。

__APCS_INTERWORK-

--apcs /interwork オプションを指定している場合、または CPU アーキテクチャを ARMv5T 以降に設定している場合

__APCS_ROPI-

--apcs /ropi オプションを指定している場合

__APCS_RWPI-

--apcs /rwpi オプションを指定している場合

__APCS_FPIC-

--apcs /fpic オプションを指定している場合

__ARRAY_OPERATORS-C++ コンパイラモードで、array new と delete がイネーブルな場合
__BASE_FILE__name

常に定義されます。現在のソースファイルではなく元のソースファイルを示すこと(つまり、現在のファイルがインクルードされるファイルの場)以外は、__FILE__ と同じです。

__BIG_ENDIAN-ビッグエンディアンターゲット向けにコンパイルしている場合
_BOOL-

C++ コンパイラモードで、bool がキーワードであることを指定する場合

__cplusplus-C++ コンパイラモードの場合
__CC_ARM1

--thumb オプションが指定されている場合でも、ARM コンパイラでは常に 1 が設定されます。

__CHAR_UNSIGNED__-GNU モードの場合。char が符号なしの型である場合にのみ定義されます。
__DATE__date常に定義されます。
__EDG__-

常に定義されます。

__EDG_IMPLICIT_USING_STD-

C++ モードで、--using_std オプションを指定している場合

__EDG_VERSION__-

Edison Design Group(EDG)フロントエンドのバージョン番号を表す整数値が常に設定されます。例えば、バージョン 3.8 は 308 と表します。

EDG フロントエンドのバージョン番号は、ARM コンパイラツールチェーンのバージョン番号と一致する必要はありません。

__EXCEPTIONS1

C++ モードで、--exceptions オプションを指定している場合

__FEATURE_SIGNED_CHAR-

--signed_chars オプションを指定している場合(CHAR_MIN および CHAR_MAX によって使用)

__FILE__name常に文字列リテラルとして定義されます。
__FP_FAST-

--fpmode=fast オプションを指定している場合

__FP_FENV_EXCEPTIONS-

--fpmode=ieee_full オプション、または --fpmode=ieee_fixed オプションを指定している場合

__FP_FENV_ROUNDING-

--fpmode=ieee_full オプションを指定している場合

__FP_IEEE-

--fpmode=ieee_full--fpmode=ieee_fixed、または --fpmode=ieee_no_fenv のいずれかのオプションを指定している場合

__FP_INEXACT_EXCEPTION-

--fpmode=ieee_full オプションを指定している場合

__GNUC__ver

--gnu オプションを指定している場合。使用している GNU モードの現在のメジャーバージョンを示す整数値が設定されます。

__GNUC_MINOR__ver

--gnu オプションを指定している場合。使用している GNU モードの現在のマイナーバージョンを示す整数値が設定されます。

__GNUG__verGNU モードで --cpp オプションを指定している場合。__GNUC__ と同じ値を保持します。
__IMPLICIT_INCLUDE-

--implicit_include オプションを指定している場合

__INTMAX_TYPE__-GNU モードの場合。intmax_t typedef の正しい潜在型を定義します。
__LINE__num常に、このマクロを含むコード行のソース行番号が設定されます。
__MODULE__mod

__FILE__ の値のファイル名部分が含まれます。

__MULTIFILE--明示的または暗黙的に --multifile オプションを使用した場合[a]
__NO_INLINE__-

GNU モードで --no_inline オプションを指定している場合

__OPTIMISE_LEVELnum

-Onum オプションを使用して最適化レベルを変更している場合を除き、デフォルトでは常に 2 が設定されます。[a]

__OPTIMISE_SPACE-

-Ospace オプションを指定している場合

__OPTIMISE_TIME-

-Otime オプションを指定している場合

__OPTIMIZE__-

GNU モードで -O1-O2、または -O3 を指定している場合

__OPTIMIZE_SIZE__-

GNU モードで -Ospace を指定している場合

__PLACEMENT_DELETE-C++ モードで、配置の削除(つまり、コンストラクタで例外がスローされる場合、配置演算子 new に対応する演算子 delete が呼び出されます)がイネーブルの場合。これは、例外の使用時のみに関係します。
__PTRDIFF_TYPE__-GNU モードの場合。ptrdiff_t typedef の正しい潜在型を定義します。
__RTTI-C++ モードで、RTTI がイネーブルな場合
__sizeof_int4

sizeof(int) の場合(ただし、プリプロセッサ式でも使用できます)

__sizeof_long4

sizeof(long) の場合(ただし、プリプロセッサ式でも使用できます)

__sizeof_ptr4

sizeof(void *) の場合(ただし、プリプロセッサ式でも使用できます)

__SIZE_TYPE__-GNU モードの場合。size_t typedef の正しい潜在型を定義します。
__SOFTFP__-

コンパイルで、ソフトウェア浮動小数点コール標準およびライブラリを使用する場合。ARM または Thumb で --fpu=softvfp オプションを指定する場合、または Thumb で --fpu=softvfp+vfpv2 オプションを指定する場合に設定されます。

__STDC__-すべてのコンパイラモードの場合
__STDC_VERSION__-標準バージョン情報
__STRICT_ANSI__-

--strict オプションを指定している場合

__SUPPORT_SNAN__---fpmode=ieee_fixed または --fpmode=ieee_full を指定する場合のシグナル NaN のサポート
__TARGET_ARCH_ARMnumターゲット CPU の ARM ベースアーキテクチャの番号(コンパイラで ARM と Thumb のどちらに向けてコンパイルしているかは無関係です)。各 ARM アーキテクチャバージョンで __TARGET_ARCH_ARM に指定できる値については、Table 29を参照して下さい。
__TARGET_ARCH_THUMBnum

ターゲット CPU の Thumb ベースアーキテクチャの番号(コンパイラで ARM と Thumb のどちらに向けてコンパイルしているかは無関係です)。ターゲッが Thumb をサポートしていない場合は、値に 0 が設定されます。各 ARM アーキテクチャバージョンで __TARGET_ARCH_THUMB に指定できる値については、Table 29を参照して下さい。

__TARGET_ARCH_XX-

XX はターゲットアーキテクチャを表し、その値はターゲットアーキテクチャによって異なります。例えば、コンパイラオプション --cpu=4T または --cpu=ARM7TDMI を指定すると、__TARGET_ARCH_4T が定義されます。

__TARGET_CPU_XX-

XX はターゲット CPU を表します。XX の値は --cpu コンパイラオプションから導き出されるか、何も指定していない場合はデフォルト値が使用されます。例えば、コンパイラオプション --cpu=ARM7TM が指定されていれば __TARGET_CPU_ARM7TM が定義され、__TARGET_CPU_ で始まるその他のシンボルは定義されません。

ターゲットアーキテクチャが指定されていれば __TARGET_CPU_generic が定義されます。

--cpu に小文字で指定された CPU 名は、大文字に変換されます。例えば、--cpu=Cortex-R4 は、__TARGET_CPU_Cortex_R4 ではなく、__TARGET_CPU_CORTEX_R4 と定義されます。

プロセッサ名にハイフン(-)文字が含まれる場合、これらの文字はアンダースコア(_)に対応します。例えば、--cpu=ARM1136JF-S__TARGET_CPU_ARM1136JF_S となります。

__TARGET_FEATURE_DOUBLEWORD-

ARMv5T 以上のバージョン

__TARGET_FEATURE_DSPMUL-ARMv5TE などの DSP 拡張乗算器が使用可能な場合
__TARGET_FEATURE_MULTIPLY-

ターゲットアーキテクチャで、long 乗算命令 MULL および MULAL がサポートされている場合

__TARGET_FEATURE_DIVIDE-

ターゲットアーキテクチャでハードウェア除算命令(つまり、ARMv7-M または ARMv7-R)がサポートされている場合

__TARGET_FEATURE_MULTIPROCESSING-

以下のいずれかのオプションを指定した場合

  • --cpu=Cortex-A9

  • --cpu=Cortex-A9.no_neon

  • --cpu=Cortex-A9.no_neon.no_vfp

  • --cpu=Cortex-A5

  • --cpu=Cortex-A5.vfp

  • --cpu=Cortex-A5.neon

  • --cpu=Cortex-A15

  • --cpu=Cortex-A15.no_neon

  • --cpu=Cortex-A15.no_neon.no_vfp

__TARGET_FEATURE_NEON-

以下のいずれかのオプションを指定した場合

  • --cpu=Cortex-A5.neon

  • --cpu=Cortex-A8

  • --cpu=Cortex-A9

  • --cpu=Cortex-A15

  • --cpu=QSP

__TARGET_FEATURE_THUMB-ターゲットアーキテクチャで Thumb がサポートされている場合(ARMv4T 以降)
__TARGET_FPU_xx-

FPU の用途を示す以下のいずれかの値が設定されます。

  • __TARGET_FPU_NONE

  • __TARGET_FPU_VFP

  • __TARGET_FPU_SOFTVFP

また、以下のいずれかの --fpu オプションを使用してコンパイルする場合は、それに対応するターゲット名も設定されます。

  • --fpu=softvfp+vfpv2, __TARGET_FPU_SOFTVFP_VFPV2

  • --fpu=softvfp+vfpv3, __TARGET_FPU_SOFTVFP_VFPV3

  • --fpu=softvfp+vfpv3_fp16, __TARGET_FPU_SOFTVFP_VFPV3_FP16

  • --fpu=softvfp+vfpv3_d16, __TARGET_FPU_SOFTVFP_VFPV3_D16

  • --fpu=softvfp+vfpv3_d16_fp16, __TARGET_FPU_SOFTVFP_VFPV3_D16_FP16

  • --fpu=vfpv2, __TARGET_FPU_VFPV2

  • --fpu=vfpv3, __TARGET_FPU_VFPV3

  • --fpu=vfpv3_fp16, __TARGET_FPU_VFPV3_FP16

  • --fpu=vfpv3_d16, __TARGET_FPU_VFPV3_D16

  • --fpu=vfpv3_d16_fp16, __TARGET_FPU_VFPV3_D16_FP16

詳細については、--fpu=nameを参照して下さい。

__TARGET_PROFILE_A --cpu=7-A オプションを指定している場合
__TARGET_PROFILE_R --cpu=7-R オプションを指定している場合
__TARGET_PROFILE_M 

以下のいずれかのオプションを指定した場合

  • --cpu=6-M

  • --cpu=6S-M

  • --cpu=7-M

__thumb__-

コンパイラが Thumb モードの場合。つまり、コマンドラインで --thumb オプションを指定している場合、またはソースコードで #pragma thumb を指定している場合。

Note

  • Thumb 向けにコンパイルしている場合でも、コンパイラで一部 ARM コードが生成されることがあります。

  • #pragma thumb または #pragma arm を使用している場合、__thumb および __thumb__ が定義されたりされなかったりします。ただし、他の何らかの理由(例えば、関数が __irq として指定される場合)で Thumb 関数が ARM コードとして生成される場合は変更しません。

__TIME__time

常に定義されます。

__UINTMAX_TYPE__-GNU モードの場合。uintmax_t typedef の正しい潜在型を定義します。
__USER_LABEL_PREFIX__ GNU モードの場合。空の文字列を定義します。このマクロは、一部の Linux ヘッダファイルで使用されます。
__VERSION__ver

--gnu オプションを指定している場合。使用している GNU モードの現在のバージョンを示す文字列値が設定されます。

_WCHAR_T-

C++ モードで、wchar_t がキーワードであることを指定する場合

__WCHAR_TYPE__-GNU モードの場合。wchar_t typedef の正しい潜在型を定義します。
__WCHAR_UNSIGNED__-GNU モードで --cpp オプションを指定している場合。wchar_t が符号なしの型である場合にのみ定義されます。
__WINT_TYPE__-GNU モードの場合。wint_t typedef の正しい潜在型を定義します。

[a] --multifile が有効になっているかどうかを __OPTIMISE_LEVEL マクロによって判別している場合、__MULTIFILE を使用するようにソースコードを変更することを推奨します。


Table 29 には、__TARGET_ARCH_THUMB に指定できる値(Table 28を参照)、およびこれらの値が ARM アーキテクチャの各バージョンとどのように関連しているかを示しています。

Table 29. Thumb アーキテクチャバージョンと ARM アーキテクチャバージョンの関連

ARM アーキテクチャ__TARGET_ARCH_ARM__TARGET_ARCH_THUMB
v440
v4T41
v5T、v5TE、v5TEJ52
v6、v6K、v6Z63
v6T264
v6-M、v6S-M03
v7-A、v7-R74
v7-M、v7E-M04

Show/hide関数名

Table 30 には、C および C++ 向けのコンパイラによってサポートされている組み込み変数が記載されています。

Table 30. 組み込み変数

名前
__FUNCTION__

ソースで使用されている関数名を保持します。

__FUNCTION__ は定数文字列リテラルです。プリプロセッサを使用してこれらの内容を他のテキストに結合し、新しいトークンを形成することはできません。

__PRETTY_FUNCTION__

言語固有の形式で出力された関数名を保持します。

__PRETTY_FUNCTION__ は定数文字列リテラルです。プリプロセッサを使用してこれらの内容を他のテキストに結合し、新しいトークンを形成することはできません。


Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0491EJ
Non-ConfidentialID081711