Arm Compiler 6 Downloads

This is the right place to find and download recent feature releases of the latest and most efficient Arm C/C++ compilation toolchain, Arm Compiler 6.

Arm Compiler 6 can be used as a standalone tool (command line) or integrated into Arm Development Studio (installation instructions) or Keil MDK tool (Windows 32-bit variant only: installation instructions) suites, depending on your license. 

Haven’t got an Arm Compiler license?

Evaluate Arm Compiler in Development Studio
Buy Development Studio Buy Keil MDK

For other versions and legacy releases, visit Arm Compiler 5 Downloads and legacy compiler releases.

For license server management software visit the FlexNet Publisher downloads page.

 

Downloads

Version 6.8

Released: July 27, 2017

Windows 64-bit
File: DS500-BN-00024-r5p0-10rel0.zip (211.79 MB)
Windows 32-bit
File: DS500-BN-00025-r5p0-10rel0.zip (197.22 MB)
Linux 64-bit
File: DS500-BN-00026-r5p0-10rel0.tgz (285.95 MB)

Release Note for Arm Compiler 6 Downloads 6.8

ARM Logo

Release notes for ARM Compiler 6.8

1. Introduction

ARM Compiler 6.8 adds:

  • Assembler support for the dot product instructions in ARMv8.2-A and ARMv8.3-A.
  • Support for Cortex-A55 and Cortex-A75.
  • Support for additional features that aid migration from armcc, including #pragma clang section and the __unaligned keyword.

ARM Compiler 6.8 is intended for use:

  • In conjunction with DS-5 Professional Edition or DS-5 Ultimate Edition to build and debug executable code for the supported architectures.
  • In conjunction with MDK-ARM.
  • As a standalone toolchain installation.

A suitable license from one of these products must be available. Contact your sales representative or visit https://developer.arm.com/products/buy-arm-products to enquire about a license.

If you are using a floating license, your license server must be running armlmd and lmgrd version 11.14.1.0 or later. ARM recommends that you always use the latest version of the license server software that is available from https://developer.arm.com/products/software-development-tools/license-management/downloads.

1.1 ARM Compiler 6 Configuration

ARM Compiler 6 is the successor to ARM Compiler 5 and includes the components listed below. See the Migration and Compatibility Guide in the product documentation for more information on migrating projects from previous versions.

  • armclang
    • armclang is the successor to armcc and is based on LLVM technology.
  • armlink, armasm, fromelf, armar
    • armlink, armasm, fromelf, and armar have been extended to support ARMv8 and behave similarly to ARM Compiler 5.
  • ARM C and C++ libraries for embedded systems
    • The standard ARM Compiler embedded libraries have been extended to support ARMv8 and behave similarly to those found in ARM Compiler 5.
    • ARM Compiler 6 includes the libc++ library as the C++ Standard Template Library.

Note regarding assemblers:

  • ARM Compiler 6 adopts the LLVM integrated assembler as default because it aligns more closely with GNU assembler syntax, improving portability between GNU and ARM Compiler toolchains. The LLVM integrated assembler is called by default by armclang. A side effect is that ARM Compiler 6 will not compile C/C++ source files which contain legacy armcc inline or embedded assembler.
  • Although armasm is not called by default, it is included in ARM Compiler 6 for assembling assembler files written in legacy armasm syntax.

1.2 What's Supported in ARM Compiler 6.8?

Architecture and Processors Support Level
ARMv8-A (including update releases), ARMv7-A and derived processors Product feature.
ARMv8-R, ARMv7-R and derived processors Product feature.
ARMv8-M, ARMv7-M, ARMv6-M and derived processors Product feature.
ARM Architectures earlier than ARMv6-M Unsupported. Please use ARM Compiler 5.
Non ARM architectures Unsupported.
Support Level Description
Product features Production quality. Highest support priority.
Beta product features Implementation complete, but not thoroughly tested. User experimentation and feedback is welcomed.
Alpha product features Implementation is not complete and not thoroughly tested. User experimentation and feedback is welcomed.
Community features Additional features that are available in the open-source technology ARM Compiler 6 is built on. ARM makes no claims about the quality level or the degree of functionality of these features. User experimentation and feedback is welcomed.
Unsupported features Features that are either not present in the toolchain or have been deprecated. These features are completely untested. Use entirely at your own risk.

For more information on the supported features and level of support for features, see the product documentation.

2. Installation Instructions

If you received ARM Compiler 6.8 as part of a toolkit, for example DS-5, the toolkit installer takes care of the installation process. Please refer to the installation instructions for the toolkit in such cases.

For all other cases, you must select an appropriate installation location depending on how you intend to use ARM Compiler 6.8:

  • Integrated into DS-5 5.20 or later.
  • Integrated into MDK-ARM 5.22 or later.
  • As a standalone product.

2.1. Integration into DS-5 5.20 or later

ARM Compiler 6.8 can be installed in any location, including the default location, providing this is outside of a DS-5 product installation.

After it is installed, you can integrate the toolchain with DS-5 5.20 or later by following the instructions in the tutorial available at https://developer.arm.com/products/software-development-tools/ds-5-development-studio/resources/tutorials/adding-new-compiler-toolchains-to-ds-5.

ARM recommends using ARM Compiler 6.8 from the DS-5 Eclipse IDE or DS-5 Command Prompt. When using the toolchain outside these environments, you might need to configure the following environment variables:

  • Set ARM_PRODUCT_PATH to the path to the sw/mappings directory within your DS-5 installation.
  • Set ARM_TOOL_VARIANT=ult if you are using the toolchain with DS-5 Ultimate Edition.

For further information see https://developer.arm.com/products/software-development-tools/license-management/resources/product-and-toolkit-configuration.

2.2. Integration into MDK-ARM 5.22 or later

ARM Compiler 6.8 must be installed underneath the ARM subdirectory of the Keil MDK installation. For example, if your Keil MDK installation is in C:\Keil_v5 the recommended installation path is C:\Keil_v5\ARM\ARMCompiler6.8.

After it is installed, you can integrate the toolchain into an MDK project by following the instructions in the tutorial available at http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm.

When ARM Compiler 6.8 is imported into a MDK-ARM installation and used with a Keil MDK node-locked or floating license, the tools incorrectly report:

error: Failed to check out a license.Keil Licensing
error: No TOOLS.ini file found

To avoid this issue, modify your install directory by copying all the *.exe files from the lib\tt_default\bin folder into the bin folder. For example, copy: C:\Keil_v5\ARM\ARMCompiler6.8\lib\tt_default\bin\*.exe to: C:\Keil_v5\ARM\ARMCompiler6.8\bin. For more information, see http://www.keil.com/support/docs/3961.htm.

2.3. Use as a standalone product

ARM Compiler 6.8 can be installed in any location, including the default location, providing this is outside of a DS-5 product installation.

Ensure that the ARMLMD_LICENSE_FILE environment variable is pointing to your license file or license server. Please note this path must not contain double quotes on Windows. A path that contains spaces will still work without the quotes.

Set ARM_TOOL_VARIANT=ult if you are using the toolchain with a DS-5 Ultimate Edition license.

2.4. Installation on Linux

ARM Compiler 6.8 has been tested on the following supported platforms:

  • Red Hat Enterprise Linux 6 Workstation, 64-bit only.
  • Red Hat Enterprise Linux 7 Workstation, 64-bit only.
  • Ubuntu Desktop Edition 14.04 LTS, 64-bit only.
  • Ubuntu Desktop Edition 16.04 LTS, 64-bit only.

ARM Compiler 6.8 is not expected to work on older platforms.

To install ARM Compiler 6.8, run (not source) install_x86_64.sh and follow the on-screen instructions. The installer unpacks ARM Compiler 6.8 into your chosen directory.

The armclang binary is dynamically linked to a copy of libstdc++ installed under your chosen directory as part of ARM Compiler 6.8.

2.5. Installation on Windows

ARM Compiler 6.8 has been tested on the following supported platforms:

  • Windows Server 2012, 64-bit only.
  • Windows 7 Enterprise SP1.
  • Windows 7 Professional SP1.
  • Windows 8.1 Enterprise, 64-bit only.
  • Windows 8.1 Professional, 64-bit only.
  • Windows 10 Enterprise, 64-bit only.
  • Windows 10 Professional, 64-bit only.

ARM Compiler 6.8 is not expected to work on older platforms.

To install ARM Compiler 6.8, run win-x86_64\setup.exe on a 64-bit Windows host platform or win-x86_32\setup.exe on a 32-bit Windows host platform and follow the on-screen instructions. If you have an earlier version of ARM Compiler 6 installed and you wish to perform an upgrade, it is recommended that you uninstall the previous version before installing the new version of ARM Compiler 6.

ARM Compiler 6 requires the Microsoft Visual Studio 2015 runtime libraries to be installed. If you use the product installer, or the toolchain is installed as part of DS-5, the runtime libraries are installed with the product. If you later copy or move the installation to another host you will need to ensure that the runtime libraries are also available on that host.

3. Uninstall

On Linux, delete the ARM Compiler 6.8 installation directory.

On Windows, use Programs and Features in Control Panel, select ARM Compiler 6.8, and click the Uninstall button.

4. Documentation

The following documentation is available for ARM Compiler 6.8:

  • User Guide.
  • armar User Guide.
  • armasm User Guide.
  • armclang Reference Guide.
  • armlink User Guide.
  • fromelf User Guide.
  • ARM C and C++ Libraries and Floating-Point Support User Guide.
  • Migration and Compatibility Guide.
  • Software Development Guide.
  • Errors and Warnings Reference Guide.
  • Scalable Vector Extension User Guide.

For more information, please see ARM Compiler 6 documentation in developer.arm.com.

5. Feedback and Support

Your feedback is important to us, and you are welcome to send us defect reports and suggestions for improvement on any aspect of the product. Contact your supplier or visit https://developer.arm.com/support and open a case with feedback or support issues. Where appropriate, please provide the --vsn output from the tool, the complete content of any error message that the tools produce, and include any source code, other files, and command-lines necessary to reproduce the issue.

6. Release History and Changes

The following are the releases to date of the ARM Compiler 6.8 series:

  • 6.8 (released July 2017)

Below is a summary of the changes in each release, including new features and defect fixes. Changes are listed since the previous release in each case unless otherwise specified. Each itemized change is accompanied by a unique SDCOMP-<NNNNN> identifier. If you need to contact ARM about a specific issue within these release notes, please quote the appropriate identifier.

Changes in ARM Compiler 6.8

Changes are listed since the previous feature release, ARM Compiler 6.7.

General changes in ARM Compiler 6.8

  • [SDCOMP-47842]  Support has been added for the optional Dot Product instructions in ARMv8.2-A and ARMv8.3-A. To target ARMv8.2-A or ARMv8.3-A with the Dot Product instructions, select from the following options:

    armclang:

    • --target=aarch64-arm-none-eabi -march=armv8.3-a+dotprod for an ARMv8.3-A target and AArch64 state.
    • --target=arm-arm-none-eabi -march=armv8.3-a+dotprod for an ARMv8.3-A target and AArch32 state.
    • --target=aarch64-arm-none-eabi -march=armv8.2-a+dotprod for an ARMv8.2-A target and AArch64 state.
    • --target=arm-arm-none-eabi -march=armv8.2-a+dotprod for an ARMv8.2-A target and AArch32 state.

    armasm, armlink, and fromelf:

    • --cpu=8.3-A.64.dotprod for an ARMv8.3-A target and AArch64 state.
    • --cpu=8.3-A.32.dotprod for an ARMv8.3-A target and AArch32 state.
    • --cpu=8.2-A.64.dotprod for an ARMv8.2-A target and AArch64 state.
    • --cpu=8.2-A.32.dotprod for an ARMv8.2-A target and AArch32 state.

  • [SDCOMP-48303]  Support has been added for the Cortex-A75 and Cortex-A55 processors.

    To target Cortex-A75, select from the following options:

    armclang:

    • --target=aarch64-arm-none-eabi -mcpu=cortex-a75 for AArch64 state.
    • --target=arm-arm-none-eabi -mcpu=cortex-a75 for AArch32 state.

    armasm, armlink, and fromelf:

    • --cpu=8.2-A.64 for AArch64 state.
    • --cpu=8.2-A.32 for AArch32 state.

    To target Cortex-A55, select from the following options:

    armclang:

    • --target=aarch64-arm-none-eabi -mcpu=cortex-a55 for AArch64 state.
    • --target=arm-arm-none-eabi -mcpu=cortex-a55 for AArch32 state.

    armasm, armlink, and fromelf:

    • --cpu=8.2-A.64 for AArch64 state.
    • --cpu=8.2-A.32 for AArch32 state.

  • [SDCOMP-48247]  When resolving the relocations of a branch instruction from a function with build attributes that include ~PRES8 to another function with build attributes that include REQ8, the linker would previously report Error: L6238E: <objname>(<secname>) contains invalid call from '~PRES8 (The user did not require code to preserve 8-byte alignment of 8-byte data objects)' function to 'REQ8 (Code was permitted to depend on the 8-byte alignment of 8-byte data items)' function <sym>. This behavior has been changed. By default, the linker no longer reports an error in these circumstances. To restore the previous behavior, use the following option:

    • --strict_preserve8_require8

    For more information about this option, refer to the armlink User Guide.

    To successfully link with --strict_preserve8_require8, manually inspect assembly language source files that are assembled using the integrated assembler, ensure that all functions preserve 8-byte alignment of the stack and of 8-byte data items, and then add the directive .eabi_attribute Tag_ABI_align_preserved, 1 to each such source file.

Enhancements in ARM Compiler 6.8

Compiler and integrated assembler (armclang)
  • [SDCOMP-48794]  Previously, the inline assembler and integrated assembler provided only limited support for instruction substitutions for the A32 and T32 instruction sets. Substitution occurs when a valid encoding does not exist for an instruction with a particular immediate, but an equivalent instruction that has the same result with the inverted or negated immediate is available. Support has been added for an option that can be used to disable this feature:

    • -mno-neg-immediates

    For more information about this option, refer to the armclang Reference Guide.

    When -mno-neg-immediates is not specified, the range of substitutions performed by the inline assembler and integrated assembler has also been extended to cover additional valid substitutions for A64, A32, and T32.

  • [SDCOMP-47638]  Support has been added for #pragma clang section. This enables migration of source code that previously used the legacy armcc feature #pragma arm section.

    For more information, refer to the armclang Reference Guide.

  • [SDCOMP-46555]  Support has been added for the -nostdlib and -nostdlibinc options which can be used to enable objects to be linked with other ABI-compliant libraries.

    For more information about these options, refer to the armclang Reference Guide.

  • [SDCOMP-45946]  Support has been added for the __unaligned keyword. This aids migration of source code that previously used the legacy armcc feature __packed.

    For more information, refer to the armclang Reference Guide.

General enhancements
  • [SDCOMP-48725]  Beta support has been added for C++14 source language modes. Use one of the following options to enable the compilation of C++14 source code:

    • -std=c++14
    • -std=gnu++14

    For more information about these options, refer to the armclang Reference Guide.

Defect fixes in ARM Compiler 6.8

Compiler and integrated assembler (armclang)
  • [SDCOMP-48525]  In rare circumstances, when compiling at any optimization level except -O0, the compiler could generate code that incorrectly contains more than one copy of constant data that is referenced by address. This has been fixed.

  • [SDCOMP-48278]  When compiling in a C90 source language mode, the compiler incorrectly failed to report an error for an undeclared identifier F in a block scope B when an undeclared function with the same name as F is previously called in a block scope A, and A is not visible from B. This has been fixed. The compiler now reports error: use of undeclared identifier '<identifier>'.

  • [SDCOMP-48003]  In certain circumstances, the compiler could incorrectly translate calls to wide character variants of the scanf() family of library functions, or non-wide character variants called with a wide character format specifier, into calls to versions of these functions provided by the ARM C library that do not have the required wide character support. This has been fixed.

  • [SDCOMP-47948]  When compiling with -mexecute-only, the compiler incorrectly failed to report an error when the program was compiled for A32 state or with hardware floating-point usage enabled. This has been fixed. The compiler now reports one of the following:

    • error: execute only is not supported for ARM mode execution
    • error: execute only is not supported when generating floating-point instructions

  • [SDCOMP-47867]  When compiling with -ftrapv for an ARMv6-M target or an ARMv8-M target without the Main Extension, the compiler would generate incorrect code that trapped all signed multiplication operations which have one positive operand and one negative operand. This has been fixed.

  • [SDCOMP-47766]  When assembling an invalid directive of the form .section "name", flags @type, the inline assembler and integrated assembler would incorrectly report error: expected '@<type>', '%<type>' or "<type>". This has been fixed. The inline assembler and integrated assembler now report error: expected '%<type>' or "<type>".

  • [SDCOMP-47620]  In certain circumstances, when compiling with -mexecute-only for a target with hardware floating-point linkage, the compiler could incorrectly generate constant pools for floating-point literals within code sections. This has been fixed. The compiler now generates any required constant pools for floating-point literals within read-only data sections.

  • [SDCOMP-47530]  In certain circumstances, when assembling for T32 state, the inline assembler and integrated assembler could incorrectly report error: invalid operand for instruction for MOV instructions that have a .W qualifier and a shifted source operand. This has been fixed.

  • [SDCOMP-47504]  In certain circumstances, when compiling for AArch32 state, the compiler could generate code that does not conform to the Application Binary Interface (ABI) for the ARM Architecture by incorrectly aligning class or struct members of Advanced SIMD 128-bit vector type to a 16-byte boundary instead of an 8-byte boundary. This has been fixed.

  • [SDCOMP-47404]  In certain circumstances, when assembling for an ARMv6-M, ARMv7-M, or ARMv8-M target, the inline assembler and integrated assembler would incorrectly accept invalid system register operands in instructions. This has been fixed. The inline assembler and integrated assembler now report error: invalid operand for instruction.

  • [SDCOMP-47253]  In rare circumstances, when compiling for AArch32 state, the compiler could generate incorrect code for a loop body that dereferences a pointer. This has been fixed.

  • [SDCOMP-47176]  In certain circumstances, when assembling MOVT instructions that contain an invalid operand for A32 state, the inline assembler and integrated assembler could incorrectly report error: clang integrated assembler command failed due to signal. This has been fixed. The inline assembler and integrated assembler now report error: immediate expression for mov requires :lower16: or :upper16.

  • [SDCOMP-45780]  In certain circumstances, when assembling code that contains a load from a literal pool, the inline assembler could incorrectly fail to generate a data mapping symbol for the literal pool. This has been fixed.

  • [SDCOMP-45239]  When assembling for AArch64 state with a -march or -mcpu option that specifies +crypto followed by one or more of +nofp and +nosimd, the inline assembler and integrated assembler would incorrectly accept Cryptographic Extension instructions. This has been fixed. The inline assembler and integrated assembler now report error: instruction requires: crypto.

  • [SDCOMP-45121]  When assembling for AArch32 state, the integrated assembler would generate an object that incorrectly failed to contain certain build attributes when the source code does not contain a .arch directive. This has been fixed. The integrated assembler can now generate build attributes that can be inferred from the command-line options.

  • [SDCOMP-30129]  When assembling for AArch64 state, the inline assembler and integrated assembler would incorrectly accept certain invalid immediate operands for the FMOV instruction. This has been fixed. The inline assembler and integrated assembler now report error: invalid operand for instruction or error: expected compatible register or floating-point constant.

  • [SDCOMP-28308]  When assembling a macro parameter with a name that starts with the letter u, the inline assembler and integrated assembler would incorrectly report warning: \u used with no following hex digits; treating as '\' followed by identifier. This has been fixed.

Linker (armlink)
  • [SDCOMP-47309]  When linking an object built for AArch64 state that contains a section of size 4GB or greater, the linker incorrectly reduced the size of that section to the original size modulo 4GB. This has been fixed.

  • [SDCOMP-47276]  In certain circumstances, the linker unused section elimination mechanism could incorrectly remove sections that are only referred to using their linker-defined input section symbols. This has been fixed.

  • [SDCOMP-29653]  When linking with --edit and a steering file that contains the command HIDE __scatterload_rt_thumb_only, the linker incorrectly failed to hide the symbol __scatterload_rt_thumb_only. This has been fixed.

Libraries and system headers
  • [SDCOMP-47989]  The ARM Compiler library incorrectly did not contain certain wide character variants of the scanf() family of functions. This could result in the linker reporting Error: L6218E: Undefined symbol <symbol>. This has been fixed.

  • [SDCOMP-46825]  The libc++ library implementation of exception unwinding would incorrectly call std::terminate instead of the corresponding catch routine when an exception is thrown by, or is propagated through, the function that occupies the highest address range in the program. This has been fixed.

  • [SDCOMP-30526]  The arm_cmse.h system header incorrectly did not declare the cmse_abort() function, and the ARM C library incorrectly did not contain a default implementation of cmse_abort(). When compiling with -mcmse, this could result in the compiler reporting warning: implicit declaration of function 'cmse_abort' is invalid in C99, and the linker reporting Error: L6218E: Undefined symbol cmse_abort. This has been fixed. A weak declaration of cmse_abort() and a default implementation that calls abort() are now provided.

Fromelf
  • [SDCOMP-48404]  When decoding exception table information for executable images with -c -e, or --text -c -e, the fromelf utility would report incorrect symbol name and address information for ARM_EXIDX table entries that refer to a symbol in a different ELF section than the ELF section containing the ARM_EXIDX table. This has been fixed.

  • [SDCOMP-48381]  When producing disassembly with -c, --emit=code, or --text -c, the fromelf utility would report an incorrect load value for a PC-relative load or store instruction that has a relocation. This has been fixed.

  • [SDCOMP-47840]  When processing an ELF file that contains a debugging information entry attribute of the form DW_FORM_ref_sig8 with --fieldoffsets, the fromelf utility would incorrectly report ARM FromELF: Execution interrupted due to an illegal storage access. This has been fixed.

  • [SDCOMP-47834]  When processing an ELF file that contains a debugging information entry attribute of the form DW_AT_type_unit with --fieldoffsets, the fromelf utility would incorrectly report ARM FromELF: Execution interrupted due to an illegal storage access. This has been fixed.

Other issues
  • [SDCOMP-47949]  When compiling code that includes the arm_sve.h header file, the compiler would incorrectly report fatal error: 'arm_sve.h' file not found. This has been fixed.

Known issues in ARM Compiler 6.8

  • [SDCOMP-47864]  Link time optimization (LTO) is not supported when compiling with -march=name+sve for a target that supports the Scalable Vector Extension (SVE). To avoid the use of LTO:

    • Do not compile with -flto option and do not link with --lto.
    • When compiling at -Omax, also compile with -fno-lto and link with --no_lto.

  • [SDCOMP-28016]  long double is not supported for AArch64 state.

  • [SDCOMP-26080]  Complex numbers are not supported.