A.1 Revisions for armcc Compiler User Guide

The following technical changes have been made to the armcc Compiler User Guide.

Table A-1 Differences between issue I and issue J

Change

Topics affected

Added the chapters from the Compiler Reference into the armcc Compiler User Guide. The Compiler Reference is no longer being provided as a separate document.

Documented new Cortex-A12 processor.
Added a topic about compiler support for literal pools. 4.21 Compiler support for literal pools.

Added the --execute_only command-line option.

8.76 --execute_only.

Added the --integer_literal_pools command-line option.

8.107 --integer_literal_pools, --no_integer_literal_pools.

Added the --float_literal_pools command-line option.

8.81 --float_literal_pools, --no_float_literal_pools.

Added the --string_literal_pools command-line option.

8.175 --string_literal_pools, --no_string_literal_pools.

Added the --branch_tables command-line option.

8.18 --branch_tables, --no_branch_tables.
Clarified use of --diag_error=warning 6.2 Options that change the severity of compiler diagnostic messages.
Enhanced information about the impact of -Onum on the debug view. 5.3 Compiler optimization levels and the debug view.
Added a note stating that the compiler may generate load and store instructions between the instructions generated for __ldrex(d) and __strrex(d) intrinsics.
Clarified that you cannot specify aliases in block scope.
Added note about possible compiler optimizations when using the __qsub() intrinsic. 10.128 __qsub intrinsic.
Changed references to environment variables from ARMCCn_ to ARMCC5_.

Various topics.

Clarified that variable length arrays are created on the heap.
Clarified the access width data tables in the intrinsics documentation.

Various topics.

Clarified information in -Onum documentation. 8.138 -Onum.
Clarified information about __packed bitfields in a structure. 11.4 Structures, unions, enumerations, and bitfields in ARM C and C++.
Corrected the implicit FPU listed for Cortex-M4.fp to FPv4-SP. 5.53 Processors and their implicit Floating-Point Units (FPUs).
Added missing __TARGET_FPU_ variants. 10.155 Predefined macros.
Clarified __memory_changed intrinsic documentation. 10.120 __memory_changed intrinsic.
Clarified __cdp intrinsic documentation 10.105 __cdp intrinsic.
Clarified description of --reassociate_saturation option. 8.157 --reassociate_saturation, --no_reassociate_saturation.

Table A-2 Differences between issue H and issue I

Change Topics affected
New topic. 8.123 --loop_optimization_level=opt.
Removed the topic --ltcg. --ltcg (This topic removed from Issue I).
Added information about NEON instructions without equivalent intrinsics. 18.36 NEON instructions without equivalent intrinsics.
Removed note about --vectorize requiring a special license. 8.189 --vectorize, --no_vectorize.
Removed links to deprecated document Building Linux Applications with the ARM Compiler toolchain and GNU Libraries. Various topics.
Updated the example to use the --asm argument instead of the deprecated -S argument. 8.14 --asm_dir=directory_name.
Updated the example to correctly show the interaction between --depend_dir and --depend. 8.49 --depend_dir=directory_name.
Clarified interaction between --multifile and -o, and clarified relationship between number of source files, code structure, and compilation time. 8.133 --multifile, --no_multifile.
Updated information about the __irq keyword. 10.11 __irq.
Clarified __attribute__((alias)) function and variable attributes.
Added a note about overwriting padding bits in bitfield containers. 11.4 Structures, unions, enumerations, and bitfields in ARM C and C++.
Removed note about a possible issue caused by overlapping diagnostic message number ranges. This is because the affected messages are renumbered in this release, resolving the issue.
Added new --loop_optimization_level option to list of compiler options. 2.2 Compiler command-line options listed by group.
Update modified C3nnn message numbers to C4nnn.
Fixed command-line option example to use -O2. 2.4 Order of compiler command-line options.
Removed all mention of LTCG.
Added information about enabling NEON and FPU for bare-metal.
Added information about using pragmas to control diagnostic messages. 6.3 Controlling compiler diagnostic messages with pragmas.
Where appropriate, changed the terminology that implied that 16-bit Thumb and 32-bit Thumb are separate instruction sets. Various topics.

Table A-3 Differences between issue G and issue H

Change Topics affected

Added usage subtopics.

Documented Cortex-M0+ support.

8.39 --cpu=name compiler option.

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

8.165 --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.

Added information on estimating/measuring stack usage. 5.11 Stack use in C and C++.
Clarified which LDM instructions are not supported in the inline assembler. 7.12 Inline assembler instruction restrictions in C and C++ code.
Documented Cortex-M0+ support. 5.53 Processors and their implicit Floating-Point Units (FPUs).
Added two topics.

Table A-4 Differences between issue F and issue G

Change

Topics 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.

15.13 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.

8.68 -E.

Added two entries for VFPv4, under __TARGET_FPU_xx.

Added restrictions on C55x intrinsic support.

10.149 C55x intrinsics.

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

8.91 --gnu.

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

10.125 __promise intrinsic.

Removed a reference to not accessing a physical register directly.

8.185 --use_frame_pointer.

Added Cortex-A7.

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

10.20 __weak.

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

8.85 --fpmode=model.

Added a usage section for function attributes.

10.30 Function attributes.

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

Various topics.

Clarified the difference between __packed and #pragma pack for address-taken fields. 5.40 Comparisons of an unpacked struct, a __packed struct, and a struct with individually __packed fields, and of a __packed struct and a #pragma packed struct.

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

Various topics.
Added three entries for VFPv4. 5.44 Vector Floating-Point (VFP) architectures.
Added Cortex-A7.
Revised the topics related to integer division by zero.

Table A-5 Differences between issue E and issue F

Change

Topics affected

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

Added a note about the maximum version of gcc that armcc supports.

8.94 --gnu_version=version.

Mentioned that downgradeable errors are also suppressed with -J.

8.110 -Jdir[,dir,...].

Modified the description for the --licretry option.

8.115 --licretry.

Added the --protect_stack option.

8.156 --protect_stack, --no_protect_stack.

Modified the description for the --version_number option.

8.190 --version_number.

Modified the description for the --vsn option.

8.195 --vsn.

Changed the format description for __ARMCC_VERSION.

10.155 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 A-6 Differences between issue D and issue E

Change

Topics affected

Improved usage description of --reassociate_saturation.

8.157 --reassociate_saturation, --no_reassociate_saturation.

Added the encoding details of opcodes and registers.

10.105 __cdp intrinsic.

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

8.2 --allow_fpreg_for_nonfpdata, --no_allow_fpreg_for_nonfpdata.

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

8.28 --conditionalize, --no_conditionalize.

Added SC000 to the table of --cpu options.

8.39 --cpu=name compiler option.

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

8.26 --compatible=name.

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

8.48 --depend=filename.

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

10.7 __global_reg.

Revised the descriptions for topics related to integer division by zero.
Mentioned that the inline assembler supports VFPv2 instructions. Mentioned that the inline assembler does not support instructions added in VFPv3 or higher.
Changed the description of the restrictions on the inline assembler.
Removed the example of using coprocessor instructions in inline assembler because coprocessor instructions in inline assembler are discouraged. Added a new example for the use of VFP instructions in inline assembler. 7.11 Inline assembler Vector Floating-Point (VFP) restrictions in C and C++ code.
Added a row on VFP and NEON for differences between inline and embedded assembler.

7.45 Differences in compiler support for inline and embedded assembly code.

Where appropriate:

  • Prefixed Thumb with 16-bit.

  • Changed Thumb-1 to 16-bit Thumb.

  • Changed Thumb-2 to 32-bit Thumb.

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

Table A-7 Differences between issue C and issue D

Change

Topics affected

Added a summary table of intrinsics and their page numbers.

18.36 NEON instructions without equivalent intrinsics.

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

18.3 NEON intrinsics.

Removed the --profile option.

8 Compiler Command-line Options.

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

10.154 GNU built-in functions.

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

Changed option from --implicit_using_std to --using_std.

10.155 Predefined macros.

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

10.155 Predefined macros.

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

10.153 Named register variables.

Added the --echo option.

8.69 --echo.

Added the --use_frame_pointer option.

8.185 --use_frame_pointer.

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.

8.113 --library_interface=lib.

Added the --preprocess_assembly option.

8.154 --preprocess_assembly.

Added the -Warmcc,--gcc_fallback option.

8.198 -Warmcc,--gcc_fallback.

Modified description of --remove_unneeded_entities option.

8.161 --remove_unneeded_entities, --no_remove_unneeded_entities.

Changed --apcs options to use variable list.

8.6 --apcs=qualifier...qualifier.

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

  • --reinitialize_workdir (This topic removed from Issue J).

  • --workdir=directory (This topic removed from Issue J).

  • --project=filename, --no_project (This topic removed from Issue J).

Added link to command line options and search paths.

Added ../include as a search path.

8.101 --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.

10.105 __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.

10.11 __irq.

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.

10.11 __irq.

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

 

Changed FPv4_SP to FPv4-SP.

8.87 --fpu=name compiler option.

Added ARM Glossary to other information.

Conventions and feedback.

Removed #pragma GCC visibility from --visibility_inlines_hidden.

8.193 --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".

10.150 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.

8.86 --fpu=list.

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

8.48 --depend=filename.

Added a topic on using GCC fallback. 2.14 Using GCC fallback when building applications.
Removed the topics on Profiler-guided optimizations. 4 Compiler Features.
Removed reference to ARM Profiler. 5.9 Code metrics.
Removed references to Eclipse Workbench IDE and ARM Profiler. 5.10 Code metrics for measurement of code size and data size.

Merged the following topics into the topic Stack use in C and C++:

  • Methods of estimating stack usage.

  • Methods of reducing stack usage.

  • Using a debugger to estimate stack usage.

Changed --info=summary stack to --info=summarystack. Also removed references to ARM Profiler.

Rephrased branches to function calls.

5.11 Stack use in C and C++.
Removed the note about profiler guided optimizations. 5.20 Inline functions.
Removed reference to --profile. 5.23 Inline functions and removal of unused out-of-line functions at link time.
Changed ARMCC41* environment variables to ARMCCnn*. And added link to the topic Toolchain environment variables in the Introducing to ARM Compiler toolchain document. Various topics.
Changed ARM Compiler 4.1 to ARM Compiler 4.1 and later.
Removed mention of Vista. 4.24 Precompiled Header (PCH) files.
Removed mention of Solaris.
Changed onwards to later, and mentioned ARM Compiler 4.1.
Removed mention of FLEXlm licence. 2.18 Compilation build time.
When -J is not specified on the command-line, mention that the compiler searches ARMCCnnINC, then ARMINC, then ../include. 2.10 Compiler command-line options and search paths.
Added ARMINC to the list of search paths. 2.9 Factors influencing how the compiler searches for header files.
Added link to Compiler command line options and search paths. 2.12 The ARMCC5INC environment variable.
Changed description to say that ARMCCnnINC might be initialized. 2.12 The ARMCC5INC environment variable.
Moved "...is colon separated on UNIX..." to the topic on ARMCCnnINC. 2.12 The ARMCC5INC environment variable.
Specify the search order when -I and -J are both specified. 2.10 Compiler command-line options and search paths.
Added note to deprecate --ltcg. 5.24 Automatic function inlining and multifile compilation.
Inline assembler definitions with __asm and asm can include multiple strings.

Table A-8 Differences between issue B and issue C

Change

Topics 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.

14.1 Supported GNU extensions.

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

9.45 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.

9.45 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__*.

14.1 Supported GNU extensions.

Changed the doubleword alignment to be multiples of 8 instead of 4. 5.31 Advantages of natural data alignment.

Table A-9 Differences between issue A and issue B

Change

Topics affected

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

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

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

10.105 __cdp intrinsic.

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

10.143 __usat intrinsic.

Introductory and usage descriptions.

10.125 __promise intrinsic.

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

8.99 --ignore_missing_headers.

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

8.113 --library_interface=lib.

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

8.168 --show_cmdline.

Cases where --show_cmdline can be useful.

8.168 --show_cmdline.

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

8.45 --default_definition_visibility=visibility.

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

10.24 __declspec(dllimport).

New topic.

8.135 --narrow_volatile_bitfields.

Added APSR, PSR, DSP, MVFR1, MVFR0, FPINST, FPINST2.

10.153 Named register variables.

Additional GNU built-in functions.

10.154 GNU built-in functions.

Clarification to restrictions on use of __packed when casting.

10.12 __packed.

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

8.39 --cpu=name compiler option.

Added __TARGET_FEATURE_NEON.

10.155 Predefined macros.

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

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

Default option depends on optimization level.

8.42 --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;

10.2 __align.

GNU extensions to the C and C++ languages.

Restrictions clarification.

8.87 --fpu=name compiler option.

Default option is independent of the optimization level.

8.133 --multifile, --no_multifile.

Optimization level is independent of multifile compilation.

8.138 -Onum.

Options are not necessarily restricted to vectorization usage.

8.157 --reassociate_saturation, --no_reassociate_saturation.

Removed from document. Available as knowledgebase articles. See 14.1 Supported GNU 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.

10.145 __wfi intrinsic.

Textual clarification.

10.146 __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.

12.35 __ssub16 intrinsic.

New topic. 4.35 Default compiler options that are affected by optimization level.
New topic. 4.19 How the compiler handles bit-band objects placed outside bit-band regions.
Filename suffixes .i, .ii, .a, .lib, .so added. 2.7 Filename suffixes recognized by the compiler.
Usage notes for .S suffix. 2.7 Filename suffixes recognized by the compiler.
Description for .sx suffix. 2.7 Filename suffixes recognized by the compiler.
Search criteria for armlink and armasm executables. 2.3 Default compiler behavior.
Example code for promise.c. 3.19 Indicating loop iteration counts to the compiler with __promise(expr).
New topic. 5.86 How to prevent uninitialized data from being initialized to zero.
Non-ConfidentialPDF file icon PDF versionARM DUI0472J
Copyright © 2010-2013 ARM. All rights reserved.