Technical Support
On-Line Manuals
Compiler Reference Guide
Preface
Arm Compiler Tools Overview
armclang Reference
armclang Command-line Options
Summary of armclang command-line options
-C (armclang)
-c (armclang)
-D
-E
-e
-fbare-metal-pie
-fbracket-depth=N
-fcommon, -fno-common
-fdata-sections, -fno-data-sections
-ffast-math, -fno-fast-math
-ffixed-rN
-ffp-mode
-ffunction-sections, -fno-function-sections
-fident, -fno-ident
@file
-fldm-stm, -fno-ldm-stm
-fno-builtin
-fno-inline-functions
-flto, -fno-lto
-fexceptions, -fno-exceptions
-fomit-frame-pointer, -fno-omit-frame-pointer
-fpic, -fno-pic
-fropi, -fno-ropi
-fropi-lowering, -fno-ropi-lowering
-frwpi, -fno-rwpi
-frwpi-lowering, -fno-rwpi-lowering
-fsanitize
-fshort-enums, -fno-short-enums
-fshort-wchar, -fno-short-wchar
-fstack-protector, -fstack-protector-all, -fstack-
-fstrict-aliasing, -fno-strict-aliasing
-fsysv, -fno-sysv
-ftrapv
-fvectorize, -fno-vectorize
-fvisibility
-fwrapv
-g, -gdwarf-2, -gdwarf-3, -gdwarf-4 (armclang)
-I
-include
-L
-l
-M, -MM
-MD, -MMD
-MF
-MG
-MP
-MT
-march
-marm
-masm
-mbig-endian
-mbranch-protection
-mcmodel
-mcmse
-mcpu
-mexecute-only
-mfloat-abi
-mfpu
-mimplicit-it
-mlittle-endian
-mno-neg-immediates
-moutline, -mno-outline
-mpixolib
-munaligned-access, -mno-unaligned-access
-mthumb
-nostdlib
-nostdlibinc
-O (armclang)
-o (armclang)
-pedantic
-pedantic-errors
-Rpass
-S
-save-temps
-shared (armclang)
-std
--target
-U
-u (armclang)
-v (armclang)
--version (armclang)
--version_number (armclang)
--vsn (armclang)
-W
-Wl
-Xlinker
-x (armclang)
-###
Compiler-specific Keywords and Operators
Compiler-specific keywords and operators
__alignof__
__asm
__declspec attributes
__declspec(noinline)
__declspec(noreturn)
__declspec(nothrow)
__inline
__promise
__unaligned
Global named register variables
Compiler-specific Function, Variable, and Type Att
Function attributes
__attribute__((always_inline)) function attribute
__attribute__((cmse_nonsecure_call)) function attr
__attribute__((cmse_nonsecure_entry)) function att
__attribute__((const)) function attribute
__attribute__((constructor(priority))) function at
__attribute__((format_arg(string-index))) function
__attribute__((interrupt("type"))) function attrib
__attribute__((malloc)) function attribute
__attribute__((naked)) function attribute
__attribute__((noinline)) function attribute
__attribute__((nonnull)) function attribute
__attribute__((noreturn)) function attribute
__attribute__((nothrow)) function attribute
__attribute__((pcs("calling_convention"))) functio
__attribute__((pure)) function attribute
__attribute__((section("name"))) function attribut
__attribute__((target("options"))) function attrib
__attribute__((unused)) function attribute
__attribute__((used)) function attribute
__attribute__((value_in_regs)) function attribute
__attribute__((visibility("visibility_type"))) fun
__attribute__((weak)) function attribute
__attribute__((weakref("target"))) function attrib
Type attributes
__attribute__((aligned)) type attribute
__attribute__((packed)) type attribute
__attribute__((transparent_union)) type attribute
Variable attributes
__attribute__((alias)) variable attribute
__attribute__((aligned)) variable attribute
__attribute__((deprecated)) variable attribute
__attribute__((packed)) variable attribute
__attribute__((section("name"))) variable attribut
__attribute__((unused)) variable attribute
__attribute__((used)) variable attribute
__attribute__((visibility("visibility_type"))) var
__attribute__((weak)) variable attribute
__attribute__((weakref("target"))) variable attrib
Compiler-specific Intrinsics
__breakpoint intrinsic
__current_pc intrinsic
__current_sp intrinsic
__disable_fiq intrinsic
__disable_irq intrinsic
__enable_fiq intrinsic
__enable_irq intrinsic
__force_stores intrinsic
__memory_changed intrinsic
__schedule_barrier intrinsic
__semihost intrinsic
__vfp_status intrinsic
Compiler-specific Pragmas
#pragma clang system_header
#pragma clang diagnostic
#pragma clang section
#pragma once
#pragma pack(...)
#pragma unroll[(n)], #pragma unroll_completely
#pragma weak symbol, #pragma weak symbol1 = symbol
Other Compiler-specific Features
ACLE support
Predefined macros
Inline functions
Volatile variables
Half-precision floating-point data types
Half-precision floating-point number format
Half-precision floating-point intrinsics
Library support for _Float16 data type
BFloat16 floating-point number format
TT instruction intrinsics
Non-secure function pointer intrinsics
Supported architecture feature combinations for sp
armclang Integrated Assembler
Syntax of assembly files for integrated assembler
Assembly expressions
Alignment directives
Data definition directives
String definition directives
Floating-point data definition directives
Section directives
Conditional assembly directives
Macro directives
Symbol binding directives
Org directive
AArch32 Target selection directives
AArch64 Target selection directives
Space-filling directives
Type directive
Integrated assembler support for the CSDB instruct
armclang Inline Assembler
Inline Assembly
File-scope inline assembly
Inline assembly statements within a function
Assembly string
Output and input operands
Clobber list
volatile
Inline assembly constraint strings
Constraint modifiers
Constraint codes
Constraint codes common to AArch32 state and AArch
Constraint codes for AArch32 state
Constraint codes for AArch64 state
Using multiple alternative operand constraints
Inline assembly template modifiers
Template modifiers common to AArch32 state and AAr
Template modifiers for AArch32 state
Template modifiers for AArch64 state
Forcing inline assembly operands into specific reg
Symbol references and branches into and out of inl
Duplication of labels in inline assembly statement
armlink Reference
fromelf Reference
armar Reference
armasm Legacy Assembler Reference
Appendixes
|
Home / Compiler Reference Guide Version 6.15
-march
B1.49 -march
Targets an architecture profile, generating generic code that runs on any processor of that architecture.
Note: Avoid specifying both the
architecture (-march ) and the processor (-mcpu ) because this has the potential to cause a conflict.
The compiler infers the correct architecture from the processor.
Syntax
To specify a target architecture, use:
-march=name
-march=name [+[no]feature +…]
(for architectures with
optional extensions)
Where:
name
-
Specifies the architecture.
To view a list of all the supported architectures,
use:
-march=list
The following are valid -march values:
armv8-a
- Arm®v8 application architecture profile. Valid with both
--target=aarch64-arm-none-eabi and
--target=arm-arm-none-eabi .
armv8.1-a
- Armv8.1 application architecture profile. Valid with both
--target=aarch64-arm-none-eabi and
--target=arm-arm-none-eabi .
armv8.2-a
- Armv8.2 application architecture profile. Valid with both
--target=aarch64-arm-none-eabi and
--target=arm-arm-none-eabi .
armv8.3-a
- Armv8.3 application architecture profile. Valid with both
--target=aarch64-arm-none-eabi and
--target=arm-arm-none-eabi .
armv8.4-a
- Armv8.4 application
architecture profile. Valid with both
--target=aarch64-arm-none-eabi and --target=arm-arm-none-eabi .
armv8.5-a
- Armv8.5 application
architecture profile. Valid with both
--target=aarch64-arm-none-eabi and --target=arm-arm-none-eabi .
armv8.6-a
- Armv8.6 application
architecture profile. Valid with both
--target=aarch64-arm-none-eabi and --target=arm-arm-none-eabi .
armv8.7-a
-
[ALPHA] Armv8.7 application architecture profile. Valid with both --target=aarch64-arm-none-eabi and --target=arm-arm-none-eabi .
Note: The current implementation is based on the Beta version of the Armv8.7-A architecture specification. Therefore, if you use the new assembly language instructions, you are likely to have to modify your assembler source with the next Arm Compiler release.
armv8-r
- Armv8 real-time architecture profile. Valid with both
--target=aarch64-arm-none-eabi and --target=arm-arm-none-eabi .
- The 64-bit architecture is [BETA] support.
armv8-m.base
- Armv8 microcontroller architecture profile without the Main Extension. Derived from
the Armv6‑M architecture. Only valid with
--target=arm-arm-none-eabi .
armv8-m.main
- Armv8 microcontroller architecture profile with the Main Extension. Derived from
the Armv7‑M architecture. Only valid with
--target=arm-arm-none-eabi .
armv8.1-m.main
- Armv8.1 microcontroller architecture profile with the Main
Extension. Only valid with
--target=arm-arm-none-eabi .
armv7-a
- Armv7 application architecture profile. Only valid with
--target=arm-arm-none-eabi .
armv7-r
- Armv7 real-time architecture profile. Only valid with
--target=arm-arm-none-eabi .
armv7-m
- Armv7 microcontroller architecture profile. Only valid with
--target=arm-arm-none-eabi .
armv7e-m
- Armv7 microcontroller architecture profile with DSP extension. Only
valid with
--target=arm-arm-none-eabi .
armv6-m
- Armv6 microcontroller architecture profile. Only valid with
--target=arm-arm-none-eabi .
feature
-
Is an optional architecture feature that might be enabled or disabled by
default depending on the architecture or processor.
Note:
- If a feature is mandatory in an architecture, then that feature is enabled by default. For AArch32 state inputs only, you can use
fromelf --decode_build_attributes to determine whether the feature is enabled.
- For some Arm processors,
-mcpu supports specific combinations of the architecture features. See B6.12 Supported architecture feature combinations for specific processors for more information.
+feature enables the feature if it is
disabled by default. +feature has no effect if the feature is
already enabled by default.
+nofeature disables the feature if it is
enabled by default. +nofeature has no effect if the
feature is already disabled by default.
Use +feature or +nofeature to explicitly enable
or disable an optional architecture feature.
For targets in AArch64 state, you can specify one or more of the
following features if the architecture supports it:
aes - Cryptographic Extension. See Cryptographic Extensions for more information.
crc - CRC
extension.
crypto - Cryptographic Extension. See Cryptographic Extensions for more information.
dotprod - Enables the SDOT and UDOT instructions. Supported in the Armv8.2 and later
Application profile architectures, and is optional in Armv8.2 and Armv8.3.
fp - Floating-point Extension. See Floating-point extensions for more information.
fp16 - Armv8.2-A half-precision Floating-point Extension. See Floating-point extensions for more information.
bf16 - Armv8.6-A BFloat16 Floating-point Extension. See Floating-point extensions for more information. This extension is optional in Armv8.2 and later Application profile architectures.
fp16fml - Half-precision floating-point multiply with add or multiply with subtract extension. Supported in the Armv8.2 and later Application profile architectures, and is optional in Armv8.2-A and Armv8.3-A. See Floating-point extensions for more information.
i8mm , f32mm , f64mm - Armv8.6-A Matrix Multiply extension. This extension is optional in Armv8.2 and later Application profile architectures. See Matrix Multiplication Extension for more information.
- [ALPHA]
ls64 - Armv8.7-A Accelerator Support Extension for 64-byte atomic loads and stores.
memtag - Armv8.5-A memory tagging extension. See B1.28 -fsanitize.
profile - Armv8.2-A
statistical profiling extension.
ras -
Reliability, Availability, and Serviceability extension.
predres - Enable instructions to prevent data prediction. See Prevention of Speculative execution and data prediction for more information.
rcpc - Release Consistent Processor
Consistent extension. This extension applies to Armv8.2 and later
Application profile architectures.
rng - Armv8.5-A random number generation extension.
sb - Enable the speculation barrier SB instruction. See Prevention of Speculative execution and data prediction for more information.
ssbs - Enable the Speculative Store Bypass Safe instructions. See Prevention of Speculative execution and data prediction for more information.
sha2 - Cryptographic Extension. See Cryptographic Extensions for more information.
sha3 - Cryptographic Extension. See Cryptographic Extensions for more information.
simd - Advanced
SIMD extension.
sm4 - Cryptographic Extension. See Cryptographic Extensions for more information.
sve - Scalable Vector Extension. This
extension applies to Armv8 and later Application profile architectures.
See Scalable Vector Extension for more
information.
sve2 - Scalable
Vector Extension 2. This extension is part of the early support for
Future Architecture Technologies, and applies to Armv8 and later Application profile architectures.
See Scalable Vector Extension for more
information.
tme - Transactional Memory Extension.
This extension is part of the early support for Future Architecture
Technologies, and applies to Armv8 and later Application profile architectures.
See Transactional Memory Extension for more information.
For targets in AArch32 state, you can specify one or more of the
following features if the architecture supports it:
cdecpN - Custom Datapath Extension (CDE) for Armv8‑M targets. N is in the range 0-7. See Custom Datapath Extension for more information.
crc - CRC extension for architectures
Armv8 and
above.
dotprod - Enables the VSDOT and VUDOT instructions. Supported in Armv8.2 and later
Application profile architectures, and is optional in Armv8.2 and Armv8.3.
dsp - DSP
extension for the Armv8‑M.mainline architecture.
fp16 - Armv8.2-A half-precision Floating-point Extension. See Floating-point extensions for more information.
bf16 - Armv8.6-A BFloat16 Floating-point Extension. See Floating-point extensions for more information. This extension is optional in Armv8.2 and later Application profile architectures.
fp16fml - Half-precision floating-point multiply with add or multiply with subtract extension. Supported in the Armv8.2 and later Application profile architectures, and is optional in Armv8.2-A and Armv8.3-A. See Floating-point extensions for more information.
i8mm - Armv8.6-A Matrix Multiply extension. This extension is optional in Armv8.2 and later Application profile architectures. See Matrix Multiplication Extension for more information.
mve - MVE
extension for the Armv8.1-M architecture profile. See M-profile Vector Extension for more
information.
ras -
Reliability, Availability, and Serviceability extension.
sb - Enable the speculation barrier SB instruction. See Prevention of Speculative execution and data prediction for more information.
Note: For targets in AArch32 state, you can use -mfpu to specify the support for floating-point, Advanced SIMD, and Cryptographic Extensions.
Note: There are no software floating-point libraries for targets in AArch64 state. At
link time armlink links against AArch64
library code that can use floating-point and SIMD instructions and registers.
This still applies if you compile the source with -march=<name>+nofp+nosimd to prevent the compiler from using
floating-point and SIMD instructions and registers.
To prevent the use of any floating-point instruction or register, either
re-implement the library functions or create your own library that does not use
floating-point instructions or registers.
Default
When compiling with --target=aarch64-arm-none-eabi , the default is -march=armv8-a .
When compiling with --target=arm-arm-none-eabi , the default is unsupported. Ensure that you always use one of the -march or -mcpu options when compiling with --target=arm-arm-none-eabi .
Note:
When compiling with --target=arm-arm-none-eabi and without -march or -mcpu , the compiler generates code that is not compatible with any supported architectures or processors, and reports:
warning: 'armv4t' is unsupported in this version of the product
|