You copied the Doc URL to your clipboard.

Revisions for the Compiler Reference

This appendix describes the technical changes between released issues of this book.

Table 45. Differences between issue G and issue H
ChangeTopics affected

Added usage subtopics.

Documented Cortex-M0+ support.


Modified the description of the generation of RTTI data with --no_rtti_data.

--rtti_data, --no_rtti_data.

Clarified the different treatments of functions with side effects compared to those without them, by intrinsics that set scheduling barriers.

Added a note about a possible issue caused by overlapping diagnostic message number ranges.

Table 46. Differences between issue F and issue G
ChangeTopics affected

Clarified the difference between __packed and #pragma pack for address-taken fields.

Mentioned that the compiler recognizes the pragmas STDC CX_LIMITED_RANGE, STDC FENV_ACCESS, and STDC FP_CONTRACT, but does not support them.

Preprocessing directives.

Where appropriate, rather than 16-bit Thumb or 32-bit Thumb, referred instead to Thumb, or Thumb-2 technology.

Various topics.

Noted that armcc -E disables implicit inclusion.


Added two entries for VFPv4, under __TARGET_FPU_xx.

Added restrictions on C55x intrinsic support.

C55x intrinsics.

Mentioned that GNU mode also affects C/C++ standards compliance.


Modified the part of the usage section discouraging expressions with side effects, and clarified the text.

__promise intrinsic.

Removed a reference to not accessing a physical register directly.


Added Cortex-A7.

Modified the usage section for the __weak keyword for cases of multiple weak definitions.


Mentioned that NaNs used with the --fpmode=std or --fpmode=fast option can produce undefined behavior.


Added a usage section for function attributes.

Function attributes.

Reduced use of 32-bit Thumb in favor of Thumb or Thumb-2 technology.

Various topics.

Table 47. Differences between issue E and issue F
ChangeTopics affected

Added a note stating that the --device option is deprecated.

Added a note about the maximum version of gcc supported by armcc.


Mentioned that downgradeable errors are also suppressed with -J.


Modified the description for the --licretry option.


Added the --protect_stack option.

--protect_stack, --no_protect_stack.

Modified the description for the --version_number option.


Modified the description for the --vsn option.


Changed the format description for __ARMCC_VERSION.

Predefined macros.

Where appropriate:

  • changed Thumb-1 to 16-bit Thumb

  • changed Thumb-2 to 32-bit Thumb

  • changed Thumb-2EE to ThumbEE.

Various topics.

Changed the ARMCCnn_CCOPT and ARMCCnnINC environment variables to ARMCCn_CCOPT and ARMCCnINC.

Various topics.

Table 48. Differences between issue D and issue E
ChangeTopics affected

Improved usage description of --reassociate_saturation.

--reassociate_saturation, --no_reassociate_saturation.

Added the encoding details of opcodes and registers.

__cdp intrinsic.

Added the options --allow_fpreg_for_nonfpdata, and --no_allow_fpreg_for_nonfpdata.

--allow_fpreg_for_nonfpdata, --no_allow_fpreg_for_nonfpdata.

Added the options --conditionalize, and --no_conditionalize.

--conditionalize, --no_conditionalize.

Added SC000 to the table of --cpu options.


Added SC300 and SC000 to the table of --compatible options.


Changed --depend=filename to say that for multiple files, the generated dependency file contains dependency lines from all the source files.


Added a caution that volatile is ignored if used with the __global_reg storage class specifier.


Table 49. Differences between issue C and issue D
ChangeTopics affected

Added a summary table of intrinsics and their page numbers.

Summary of NEON intrinsics.

Added syntaxes and tables that provide a condensed representation of the intrinsics. Fixed minor errors in the intrinsic prototypes.


Removed the --profile option.

Compiler Command-line Options.

Added list of built-in GNU atomic memory access functions.

GNU built-in functions.

Added Cortex-A15 and Cortex-R7 to the cpu list.

Changed option from --implicit_using_std to --using_std.

Table 28.

Added v7E-M to table of Thumb architecture versions in relation to ARM architecture versions.

Table 29.

Added a note that some registers are not available on some architectures.

Named register variables.

Added the --echo option.


Added the --use_frame_pointer option.


Added the --depend_single_line and --no_depend_single_line options.

Changed ARMCC41* environment variables to ARMCCnn*.

Various topics.

Changed ARM Compiler v4.1 to ARM Compiler 4.1 and later.

Added the --library_interface=none option.


Added the --preprocess_assembly option.


Added the -Warmcc,--gcc_fallback option.


Modified description of --remove_unneeded_entities option.

--remove_unneeded_entities, --no_remove_unneeded_entities.

Changed --apcs options to use variable list.


Added note that the option is not required if you are using the ARM Compiler toolchain with DS-5.

Added link to command line options and search paths.

Added ../include as a search path.

--implicit_include_searches, --no_implicit_include_searches.

Added const unsigned int for the variable declarations in the __cdp example. Also changed the value of ops from 0xAB to 0xA3 because the second opcode must be 3 bits.

__cdp intrinsic.

Changed the note to say that the __irq function compiles to ARM or Thumb code when compiling for a processor that supports ARM and 32-bit Thumb. Added links to --arm, #pragma arm, and ARM, Thumb, and ThumbEE instruction sets.


Mentioned that PC is set to LR-4 only in architectures other than ARMv6-M and ARMv7-M. And added note that for ARMv6-M and ARMv7-M, __irq does not affect the compiled output.


Added note to deprecate --ltcg. Also added links to ltcg topics in Using the Compiler.


Changed FPv4_SP to FPv4-SP.


Added ARM Glossary to other information.

Conventions and Feedback.

Removed #pragma GCC visibility from --visibility_inlines_hidden.


Added detail about mask and flags bit. Also added note and link to <fenv.h> topic in Using the Compiler. Changed "preferrable" to "ARM recommends".

VFP status intrinsic.

Mentioned class, struct, union, and enum types in the Usage section. Also added that you can apply this attribute to functions and variables.

Changed --vfp to --fpu.


Corrected description of the --depend option when specifying multiple source files.


Table 50. Differences between issue B and issue C
ChangeTopics affected

Updated the Modes supported column, for example changed Standard C90 to C90. Added GNU C++ to Compound literals. Added C90, C99, C++ to Variadic macros. Changed the origin of __alignof__ to GCC-specific. Removed GNU C++ from void pointer arithmetic.

Table 37.

Removed the mention of the modes (C90 and C++) from the list of the Standard C99 features.

GNU extensions to the C and C++ languages.

Removed asm keyword from the list of features that are not part of the ISO standard. This is because the asm keyword is part of Standard C++. The asm keyword is mentioned separately.

GNU extensions to the C and C++ languages.

Renamed the column Extension origin to Origin. Mentioned GCC-specific in the Origin column for the entries on __attribute__*.

Table 37.

Table 51. Differences between issue A and issue B
ChangeTopics affected

Compiler faults use of at attribute when used on declarations with incomplete types.

__attribute__((at(address))) variable attribute.

Input parameter descriptions. User guidance that this intrinsic is for expert use only.

__cdp intrinsic.

Return value saturated to unsigned range 0 ≤ ≤ 2sat - 1.

__usat intrinsic.

Introductory and usage descriptions.

__promise intrinsic.

--ignore_missing_headers only takes effect when dependency generation options are specified.


Descriptive clarification for rvct30, rvct30_c90, rvct31, rvct31_c90, rvct40, rvct40_c90.


If using --show_cmdline with ARM Linux translation options, you must use -Warmcc.


Cases where --show_cmdline can be useful.


Clarification that --default_definition_visibility=visibility controls the default ELF symbol visibility of extern variable and function definitions.


__declspec(dllimport) imports a symbol through the dynamic symbol table when linking against DLL libraries. (Textual clarification only.)


New topic.



Named register variables.

Additional GNU built-in functions.

Nonstandard functions.

Clarification to restrictions on use of __packed when casting.


Added ARM v7E-M architecture, example processor Cortex-M4.



Predefined macros.

New function attribute that is a GNU compiler extension supported by the ARM compiler.

__attribute__((format_arg(string-index))) function attribute.

Default option depends on optimization level.

--data_reorder, --no_data_reorder.

Removed "The keyword __align comes immediately before the variable name", because both of the following are now compilable:

__align(n) static int x;
static __align(n) int x;


GNU extensions to the C and C++ languages.

Restrictions clarification.


Default option is independent of the optimization level.

--multifile, --no_multifile.

Optimization level is independent of multifile compilation.


Options are not necessarily restricted to vectorization usage.

--reassociate_saturation, --no_reassociate_saturation.

Removed from document. Available as knowledgebase articles. See Summary Table of GNU Language Extensions.

asm keyword, case ranges, cast of a union, character escape sequences, compound literals, conditionals, designated inits, extended lvalues, initializers, inline functions, labels as values, pointer arithmetic, statement expressions, unnamed fields, zero-length arrays.

Textual clarification.

__wfi intrinsic.

Textual clarification.

__yield intrinsic.

Changed the value of the modulo result for four intrinsic functions from modulo64 to modulo 264.

Changed addition to subtraction for both of the val options in the __ssub16 intrinsic.

__ssub16 intrinsic.