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 DS-5 Development Studio (installation instructions) or Keil MDK tool (installation instructions) suites, depending on your license. 

Haven’t got an Arm Compiler license?

Evaluate Arm Compiler in DS-5
Buy Arm DS-5 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.

Windows 64-bit
File: DS500-BN-00024-r5p0-11rel0.zip (214.83 MB)
Windows 32-bit
File: DS500-BN-00025-r5p0-11rel0.zip (198.66 MB)
Linux 64-bit
File: DS500-BN-00026-r5p0-11rel0.tgz (314.79 MB)

Release Note for Downloads 6.9

Arm Logo

Release notes for Arm Compiler 6.9

1. Introduction

Arm Compiler 6.9 adds:

  • armclang inline assembler and integrated assembler support for the Armv8.4-A architecture.

Arm Compiler 6.9 is intended for use:

  • In conjunction with DS-5.
  • In conjunction with Keil MDK.
  • 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 and Clang 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 the 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 the legacy assembler (armasm) is not called by default, it is included in Arm Compiler 6 for assembling source code written in armasm syntax.

1.2 What's Supported in Arm Compiler 6.9?

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.9 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.9:

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

2.1. Integration into DS-5 5.20 or later

Arm Compiler 6.9 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.9 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 appropriately if you are not using a DS-5 Professional Edition license.

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

2.2. Integration into Keil MDK 5.22 or later

Arm Compiler 6.9 must be installed within the ARM subdirectory of the Keil MDK installation directory. For example, if your Keil MDK installation directory is in C:\Keil_v5, the recommended installation path is C:\Keil_v5\ARM\ARMCompiler6.9.

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

2.3. Use as a standalone product

Arm Compiler 6.9 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 appropriately if you are not using a DS-5 Professional Edition license.

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

2.4. Installation on Linux

Arm Compiler 6.9 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.9 is not expected to work on older platforms.

To install Arm Compiler 6.9, run (not source) install_x86_64.sh and follow the on-screen instructions. The installer unpacks Arm Compiler 6.9 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.9.

2.5. Installation on Windows

Arm Compiler 6.9 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.9 is not expected to work on older platforms.

To install Arm Compiler 6.9, run win-x86_64\setup.exe on a supported 64-bit Windows platform or win-x86_32\setup.exe on a supported 32-bit Windows 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.9 installation directory.

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

4. Documentation

The following documentation is available for Arm Compiler 6.9:

  • 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.9 series:

  • 6.9 (released October 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.9

Changes are listed since the previous feature release, Arm Compiler 6.8.

General changes in Arm Compiler 6.9

  • [SDCOMP-49098]  Support has been added for the Armv8.4-A architecture. To target Armv8.4-A, select from the following options:

    armclang:

    • --target=aarch64-arm-none-eabi -march=armv8.4-a for AArch64 state.
    • --target=arm-arm-none-eabi -march=armv8.4-a for AArch32 state.

    armlink and fromelf:

    • Do not use the --cpu=name option.

    The legacy assembler (armasm) does not support Armv8.4-A.

  • [SDCOMP-48770]  Support has been added for the optional Cryptographic Extension in Armv8.4-A. To target Armv8.4-A with the Cryptographic Extension, select from the following options:

    armclang:

    • --target=aarch64-arm-none-eabi -march=armv8.4-a+crypto for AArch64 state.
    • --target=arm-arm-none-eabi -march=armv8.4-a -mfpu=crypto-neon-fp-armv8 for AArch32 state.

    armlink and fromelf:

    • Do not use the --cpu=name option.

    The legacy assembler (armasm) does not support Armv8.4-A.

    For more information about selecting specific cryptographic algorithms, refer to the -mcpu section of the armclang Reference Guide.

  • [SDCOMP-49172]  In the next release of Arm Compiler 6 (version 6.10), __declspec will be deprecated.

    For information on replacing uses of __declspec, refer to the Migration and Compatibility Guide.

Defect fixes in Arm Compiler 6.9

Compiler and integrated assembler (armclang)
  • [SDCOMP-49421]  In certain circumstances, when compiling at any optimization level except -O0 for an Armv6-M target or an Armv8-M target without the Main Extension, the compiler could generate incorrect code for a function call with at least one parameter that must be passed using the stack. This has been fixed.

  • [SDCOMP-49207]  In certain circumstances, when compiling with -mexecute-only, the compiler could incorrectly report fatal error: error in backend for a target that supports one of the following floating-point extensions:

    • Armv7 FPv5-D16.
    • Armv7 FPv5-SP-D16.
    • Armv8.

    This has been fixed.

  • [SDCOMP-49001]  When assembling the two-operand form of the SUB instruction for T32 state, the inline assembler and integrated assembler would incorrectly report error: instruction requires: arm-mode or incorrectly generate a 32-bit instruction instead of a 16-bit instruction. This has been fixed.

  • [SDCOMP-48937]  In certain circumstances, when compiling for an Armv6-M target or an Armv8-M target without the Main Extension, and the code contains a variable that has an alignment requirement of more than 8 bytes, the compiler could generate incorrect code that fails to consider the alignment requirement of the variable. This has been fixed.

  • [SDCOMP-48900]  The inline assembler and integrated assembler would incorrectly treat an invalid use of the # character as the start of a comment. This could result in the assembler incorrectly treating an invalid instruction as a different but valid instruction. This has been fixed. The inline assembler and integrated assembler now report error: unexpected token in argument list.

  • [SDCOMP-48825]  In rare circumstances, when compiling for AArch32 state, and the code contains a comparison operation, the compiler could generate incorrect code that corrupts the Application Program Status Register (APSR). This has been fixed.

  • [SDCOMP-48772]  When assembling for AArch32 state for a target that supports the optional Dot Product instructions, the inline assembler and integrated assembler incorrectly failed to report an error for a VUDOT instruction that specifies an invalid register name for the second source register operand. This has been fixed. The inline assembler and integrated assembler now report error: invalid operand for instruction.

  • [SDCOMP-48718]  In rare circumstances, when compiling at -O1 for AArch64 state, and the code contains a comparison operation, the compiler could generate a CMP instruction that incorrectly uses the SP register as the first source operand register. This has been fixed.

  • [SDCOMP-48682]  The compiler incorrectly failed to report an error for an assignment to a variable of struct or union type that contains a const member. This has been fixed. The compiler now reports error: cannot assign to lvalue with const-qualified data member '<member>'.

Legacy assembler (armasm)
  • [SDCOMP-48774]  When assembling for an Armv8-M target with the Main Extension, the assembler would incorrectly fail to report an error for an MRS or MSR instruction that specifies the invalid value 146 or the invalid special register name BASEPRI_MAX_NS as the special register to be accessed. Instead, the assembler generated an MRS or MSR instruction with the UNPREDICTABLE special register encoding value 146. This has been fixed. The assembler now reports Error: A1477E: This register combination results in UNPREDICTABLE behaviour or Error: A1516E: Bad symbol 'BASEPRI_MAX_NS', not defined or external.

Linker (armlink)
  • [SDCOMP-48776]  In rare circumstances, when linking a program that contains an A32 function that calls a small T32 function, the function inlining feature of the linker could incorrectly replace the call to the small T32 function with an invalid instruction that is UNPREDICTABLE in A32 state. This has been fixed.

  • [SDCOMP-48715]  When linking an object that contains a section without the SHF_ALLOC ELF section flag for AArch64 state, or for AArch32 state with --paged or --sysv, the linker would generate an image containing a program header that incorrectly failed to account for the size in memory of the section. This has been fixed.

  • [SDCOMP-48714]  In certain circumstances, when linking a program that contains two sections with different types and alignments for AArch64 state, or for AArch32 state with --paged or --sysv, the linker could generate an image containing a program header that incorrectly specified a larger size in file than size in memory. This has been fixed.

  • [SDCOMP-45848]  When linking with the C++ libraries supplied with Arm Compiler and --cpu=name where name specifies an Armv7-R target, and an input object has been compiled in a C++ source language mode for an Armv7-R target, the linker would incorrectly report Error: L6366E: <object> attributes are not compatible with the provided attributes. This has been fixed.

Libraries and system headers
  • [SDCOMP-46889]  In certain circumstances, when compiling with -ffp-mode=full, and the program contains a floating-point number that cannot be represented exactly by its type, the binary representation of that number could incorrectly differ depending on whether it is evaluated by the compiler at compile time or generated at run time using one of the following string to floating-point conversion functions:

    • atof().
    • strtod().
    • strtof().
    • strtold().
    • A member of the scanf() family of functions using a floating-point conversion specifier.

    This has been fixed.

  • [SDCOMP-29999]  In certain Arm C library header files, the character sequence */* was used where a pointer is followed by a comment. */* can be reported as a fault by third party static analysis tools. This has been fixed.

Other issues
  • [SDCOMP-49019]  In certain circumstances, when an assembler, compiler, or linker process invoked another of the tools as a sub-process but all suitable licenses were already in use, the processes could deadlock. This has been fixed.

  • [SDCOMP-49009]  When Arm Compiler was imported into an MDK-ARM installation and used with a Keil MDK node-locked or floating license, the tools would incorrectly report error: Failed to check out a license.Keil Licensing error: No TOOLS.ini file found. This has been fixed.

Known issues in Arm Compiler 6.9

  • [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 and do not link with --lto.
    • When compiling at -Omax, also compile with -fno-lto and link with --no_lto.

    This unsupported feature is now listed in the Known limitations in SVE support section of the Scalable Vector Extension User Guide, and will not appear as a Known Issue in future Release notes.

  • [SDCOMP-28016]  The long double data type is not supported for AArch64 state because of limitations in the current Arm C library.

    This unsupported feature is now listed in the Support level definitions section of the armclang Reference Guide, and will not appear as a Known Issue in future Release notes.

  • [SDCOMP-26080]  Complex numbers are not supported because of limitations in the current Arm C library.

    This unsupported feature is now listed in the Support level definitions section of the armclang Reference Guide, and will not appear as a Known Issue in future Release notes.