Built-in variables and constants

Table 21 lists the built-in variables defined by the assembler.

Table 21. Built-in variables

{ARCHITECTURE}

Holds the name of the selected ARM architecture.

{AREANAME}Holds the name of the current AREA.
{ARMASM_VERSION}

Holds an integer that increases with each version of armasm. The format of the version number is PVbbbb where:

P

is the major version

V

is the minor version

bbbb

is the build number.

|ads$version|Has the same value as {ARMASM_VERSION}.

{CODESIZE}

Is a synonym for {CONFIG}.

{COMMANDLINE}Holds the contents of the command line.

{CONFIG}

Has the value 32 if the assembler is assembling ARM code, or 16 if it is assembling Thumb code.

{CPU}

Holds the name of the selected CPU. The default is “ARM7TDMI”. If an architecture was specified in the command line --cpu option, {CPU} holds the value "Generic ARM".

{ENDIAN}

Has the value “big” if the assembler is in big-endian mode, or “little” if it is in little-endian mode.

{FPIC}Has the boolean value True if /fpic is set. The default is False.
{FPU}Holds the name of the selected FPU. The default is “SoftVFP”.
{INPUTFILE}Holds the name of the current source file.
{INTER}Has the boolean value True if /inter is set. The default is False.
{LINENUM}Holds an integer indicating the line number in the current source file.
{LINENUMUP}When used in a macro, holds an integer indicating the line number of the current macro. The value is same as {LINENUM} when used in a non-macro context.
{LINENUMUPPER}When used in a macro, holds an integer indicating the line number of the top macro. The value is same as {LINENUM} when used in a non-macro context.

{OPT}

Value of the currently-set listing option. The OPT directive can be used to save the current listing option, force a change in it, or restore its original value.

{PC} or .

Address of current instruction.

{PCSTOREOFFSET}

Is the offset between the address of the STR PC,[…] or STM Rb,{…, PC} instruction and the value of PC stored out. This varies depending on the CPU or architecture specified.

{ROPI}Has the boolean value True if /ropi is set. The default is False.
{RWPI}Has the boolean value True if /rwpi is set. The default is False.

{VAR} or @

Current value of the storage area location counter.


Built-in variables cannot be set using the SETA, SETL, or SETS directives. They can be used in expressions or conditions, for example:

        IF {ARCHITECTURE} = "4T"

The built-in variable |ads$version| must be all in lowercase. The names of the other built-in variables can be in uppercase, lowercase, or mixed. For example:

        IF {CpU} = "Generic ARM"

Note

All built-in string variables contain case-sensitive values. Relational operations on these built-in variables will not match with strings that contain an incorrect case. Use the command line options --cpu and --fpu to determine valid values for {CPU}, {ARCHITECTURE}, and {FPU}.

Table 22 lists the built-in Boolean constants defined by the assembler.

Table 22. Built-in Boolean constants

{FALSE}

Logical constant false.

{TRUE}

Logical constant true.


Table 23 lists the target CPU related built-in variables that are predefined by the assembler. Where the value field is empty, the symbol is a boolean value and the meaning column describes when its value is {TRUE}.

Table 23. Predefined macros

NameValueMeaning
{TARGET_ARCH_ARM}numThe number of the ARM base architecture of the target CPU irrespective of whether the assembler is assembling for ARM or Thumb. For possible values of {TARGET_ARCH_ARM} in relation to the ARM architecture versions, see Table 24.
{TARGET_ARCH_THUMB}num

The number of the Thumb base architecture of the target CPU irrespective of whether the assembler is assembling for ARM or Thumb. The value is defined as zero if the target does not support Thumb. For possible values of {TARGET_ARCH_THUMB} in relation to the ARM architecture versions, see Table 24.

{TARGET_ARCH_XX}-

XX represents the target architecture and its value depends on the target CPU. For example, if you specify the assembler option --cpu=4T or --cpu=ARM7TDMI then {TARGET_ARCH_4T} is defined. Table 24 shows the possible values for XX.

{TARGET_FEATURE_EXTENSION_REGISTER_COUNT}num

The number of 64-bit extension registers available in NEON or VFP.

{TARGET_FEATURE_CLZ}-

If target CPU supports the CLZ instruction (that is, ARMv5T and later except ARMv6-M).

{TARGET_FEATURE_DIVIDE}-

If the target CPU supports the hardware divide instructions SDIV and UDIV in Thumb (that is, ARMv7-M or ARMv7-R).

{TARGET_FEATURE_DOUBLEWORD}-

If the target CPU supports the LDRD and STRD instructions (that is, ARMv5TE and later except ARMv6-M).

{TARGET_FEATURE_DSPMUL}-If the DSP-enhanced multiplier (for example the SMLAxy instruction) is available, for example ARMv5TE.
{TARGET_FEATURE_MULTIPLY}-

If the target CPU supports the long multiply instructions SMULL, SMLAL, UMULL, and UMLAL (that is, all architectures except ARMv6-M).

{TARGET_FEATURE_MULTIPROCESSING}-

If assembling for a target CPU with ARMv7 Multiprocessing Extensions.

{TARGET_FEATURE_NEON}-

If the target CPU has NEON.

{TARGET_FEATURE_NEON_FP16}-

If the target CPU has NEON with half-precision floating-point operations.

{TARGET_FEATURE_NEON_FP32}-

If the target CPU has NEON with single-precision floating-point operations.

{TARGET_FEATURE_NEON_INTEGER}-

If the target CPU has NEON with integer operations.

{TARGET_FEATURE_UNALIGNED}-

If the target CPU support for unaligned access (that is, ARMv6 and later except ARMv6-M).

{TARGET_FPU_SOFTVFP} If assembling with the option --fpu=softvfp.
{TARGET_FPU_SOFTVFP_VFP} If assembling for a target CPU with softvfp and a hardware vfp, for example --fpu=softvfp+vfpv3.
{TARGET_FPU_VFP} If assembling for a target CPU with a hardware VFP, without using softvfp, for example --fpu=vfpv3
{TARGET_FPU_VFPV2} If assembling for a target CPU with VFPv2.
{TARGET_FPU_VFPV3} If assembling for a target CPU with VFPv3.
{TARGET_PROFILE_A} If assembling for a Cortex™-A profile CPU (that is, --cpu=7-A option).
{TARGET_PROFILE_M} 

If assembling for a Cortex-M profile CPU (that is, --cpu=6-M, --cpu=6S-M, or --cpu=7-M):

{TARGET_PROFILE_R} If assembling for a Cortex-R profile CPU (that is, --cpu=7-R option).

Table 24 shows the possible values for {TARGET_ARCH_THUMB} (see Table 23), and how these values relate to versions of the ARM architecture.

Table 24. {TARGET_ARCH_ARM} in relation to {TARGET_ARCH_THUMB}

ARM architecture{TARGET_ARCH_ARM}{TARGET_ARCH_THUMB}xx
v4404
v4T414T
v5T525T
v5TE525TE
v5TEJ525TEJ
v6636
v6K636K
v6Z636Z
v6T2646T2
v6-M036M
v6S-M036SM
v7-A747A
v7-R747R
v7-M047M

Show/hideSee also

Reference
Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0473C
Non-ConfidentialID080411