ARM Compiler 5
The Reference Compiler for ARM
The ARM Compiler is the only build toolchain specifically designed to optimize software running on ARM processors. It is the result of 20 years of development alongside the ARM Architecture, enabling you to profit from the extended ARM instruction set, including VFP and NEON™. The ARM Compiler toolchain incorporates a highly optimizing C/C++ compiler, assembler, linker and libraries for embedded software development.
Billions of devices containing software built with ARM tools have shipped to date, covering all embedded markets. Whether your industry is avionics, consumer electronics, mobile, industrial automation, automotive or medical, the ARM compiler can play a key role in optimizing your code.
The highly efficient ARM Compiler invokes powerful optimization techniques such as loop unrolling, function inlining, idiom recognition, architecture-specific instruction scheduling and NEON autovectorization.
The ARM Compiler v5.0 featured in DS-5 provides a 15% performance increase over the RVDS 4.0 compiler.
The ARM Compiler can automatically vectorize standard C/C++ source code and generate NEON code sequences, which can speed up critical code such as multimedia kernels by up to 4X.
Superior Code Size Reduction
The ARM Compiler has a long embedded heritage, where memory space is a prized commodity. It incorporates techniques that can reduce your application footprint by up to 30% compared to other compilers. The ARM Compiler in DS-5 reduces the best code size by up to 5% compared to the RVDS 4.0 compiler.
In addition, the ARM Compiler includes an optional MicroLib C library for Cortex-M series microcontrollers, which provides up to a 50% reduction in code size compared to the full standard C library.
The MicroLib C library provides a completely C-based development environment without the need to revert to assembly language - even for interrupt service routines. This removes the need for specific knowledge of the ARM architecture.
Whether you are creating a modern multimedia application targeting NEON SIMD on a Cortex-A15 processor or rebuilding a 10-year-old library targeting the ARM7TDMI®, you only need a single DS-5 Professional Edition license. A single DS-5 license works with older compiler versions, making modifications to legacy code easy.
Stability, maturity and extended maintenance options make the ARM Compiler toolchain a powerful asset. Find out how you can utilize it in your projects by contacting our sales team.
You can use the ARM Compiler against malicious attacks. Its Stack Protection feature protects against modifications to the data in the call stack that could lead to unwanted software probing sensitive data on your device or taking control of it altogether by redirecting the program's control flow. Find out more about Stack Protection in the ARM Compiler.
In addition, this feature can be used to detect unintentional stack buffer overwrites, adding a level of fault detection to your system.
The ARM Compiler supports a number of intrinsics designed to exploit functionality in ARM based devices that does not map well to C or C++. By using intrinsics instead of assembler code you make the code more readable and maintainable, while enabling the compiler to perform better code checks and optimizations.
The ARM Compiler intrinsics cover access to the NEON SIMD engine, standard peripherals and DSP instructions on Cortex-M microcontrollers and IRQ / FIQ control.
The ARM Compiler features full support for C90, C99 and C++2003 with optimized routines for VFP, NEON, ARM and Thumb-2 which can greatly improve the performance of your code.
In addition, the ARM Compiler supports semihosting, a great feature for early stages in a new project. When using the ARM Compiler with DS-5 Debugger and enabling semihosting, you can easily transfer data between the target and host computer by using the standard C library interface. For example, you can use printf() to send a string to the debugger's console window, or fread() to read data from a file on the host.
Many algorithms are now automatically generated from mathematical modeling software using floating point representations for data. Therefore, the accuracy of floating point representations is essential for correct operation of the generated code.
The default library selected by the ARM Compiler provides IEEE 754 floating point support. The compiler can optionally generate code to use either software floating point or any of the ARM hardware floating point units. Independent of the method used, the compiler generates full IEEE 754-compliant code. This means that your application will generate exactly the same result regardless of the target processor, simplifying software porting between devices.
Compiler Qualification Kit & Extended Maintenance
For policy-driven development work where standards such as IEC 61508 and ISO 26262 require you to justify the usage of your compiler toolchain, we offer an ARM Compiler Qualification Kit. With a significant body of supporting evidence derived from our development process including defect reports, C90/C99 test reports and compiler safety manual, you can increase your confidence in providing a justification argument for compliance.
To complement this, we also provide Extended Maintenance and Support to protect your safety-critical projects against toolchain obsolescence. Initially supported in ARM Compiler v5.04, Extended Maintenance and Support is intended to maximize the stability of a fixed branch of the compiler toolchain by providing bug fixes and patches for a minimum of 5 years.
Compiler updates and patches
Provided you are on a valid Support and Maintenance contract, you are entitled to download the latest updates for the ARM Compiler.
Dan Owens explains how compiler performance can be enhanced through CoreMark analysis.
Find out more about how stack protection in the ARM Compiler can prevent malicious or accidental stack overflows.
When you are writing bare-metal software and wanting to do SoC or board bring-up, semihosting is a great way of establishing and verifying a connection to your target without relying on peripheral hardware or other function SoC blocks.