33## Common Target Details
44
55This documentation covers details that apply to a range of bare-metal targets
6- for 32-bit ARM CPUs. The ` arm-none-eabi ` flavor of the GNU compiler toolchain is
6+ for 32-bit Arm CPUs. The ` arm-none-eabi ` flavor of the GNU compiler toolchain is
77often used to assist compilation to these targets.
88
99Details that apply only to only a specific target in this group are covered in
1010their own document.
1111
1212### Tier 2 Target List
1313
14- - ARM A-Profile Architectures
14+ - Arm A-Profile Architectures
1515 - ` armv7a-none-eabi `
16- - ARM R-Profile Architectures
16+ - Arm R-Profile Architectures
1717 - [ ` armv7r-none-eabi ` and ` armv7r-none-eabihf ` ] ( armv7r-none-eabi.md )
1818 - [ ` armebv7r-none-eabi ` and ` armebv7r-none-eabihf ` ] ( armv7r-none-eabi.md )
19- - ARM M-Profile Architectures
19+ - Arm M-Profile Architectures
2020 - [ ` thumbv6m-none-eabi ` ] ( thumbv6m-none-eabi.md )
2121 - [ ` thumbv7m-none-eabi ` ] ( thumbv7m-none-eabi.md )
2222 - [ ` thumbv7em-none-eabi ` and ` thumbv7em-none-eabihf ` ] ( thumbv7em-none-eabi.md )
2323 - [ ` thumbv8m.base-none-eabi ` ] ( thumbv8m.base-none-eabi.md )
2424 - [ ` thumbv8m.main-none-eabi ` and ` thumbv8m.main-none-eabihf ` ] ( thumbv8m.main-none-eabi.md )
25- - * Legacy* ARM Architectures
25+ - * Legacy* Arm Architectures
2626 - None
2727
2828### Tier 3 Target List
2929
30- - ARM A-Profile Architectures
30+ - Arm A-Profile Architectures
3131 - ` armv7a-none-eabihf `
32- - ARM R-Profile Architectures
32+ - Arm R-Profile Architectures
3333 - [ ` armv8r-none-eabihf ` ] ( armv8r-none-eabihf.md )
34- - ARM M-Profile Architectures
34+ - Arm M-Profile Architectures
3535 - None
36- - * Legacy* ARM Architectures
36+ - * Legacy* Arm Architectures
3737 - [ ` armv4t-none-eabi ` and ` thumbv4t-none-eabi ` ] ( armv4t-none-eabi.md )
3838 - [ ` armv5te-none-eabi ` and ` thumbv5te-none-eabi ` ] ( armv5te-none-eabi.md )
3939
4040## Instruction Sets
4141
42- There are two 32-bit instruction set architectures (ISAs) defined by ARM :
42+ There are two 32-bit instruction set architectures (ISAs) defined by Arm :
4343
4444- The [ * A32 ISA* ] [ a32-isa ] , with fixed-width 32-bit instructions. Previously
45- known as the * ARM * ISA, this originated with the original ARM1 of 1985 and has
45+ known as the * Arm * ISA, this originated with the original Arm1 of 1985 and has
4646 been updated by various revisions to the architecture specifications ever
4747 since.
4848- The [ * T32 ISA* ] [ t32-isa ] , with a mix of 16-bit and 32-bit width instructions.
4949 Note that this term includes both the original 16-bit width * Thumb* ISA
50- introduced with the ARMv4T architecture in 1994, and the later 16/32-bit sized
51- * Thumb-2* ISA introduced with the ARMv6T2 architecture in 2003.
50+ introduced with the Armv4T architecture in 1994, and the later 16/32-bit sized
51+ * Thumb-2* ISA introduced with the Armv6T2 architecture in 2003.
5252
53- Again, these ISAs have been revised by subsequent revisions to the relevant ARM
53+ Again, these ISAs have been revised by subsequent revisions to the relevant Arm
5454architecture specifications.
5555
5656There is also a 64-bit ISA with fixed-width 32-bit instructions called the * A64
5757ISA* , but targets which implement that instruction set generally start with
5858` aarch64* ` and are discussed elsewhere.
5959
60- Rust targets starting with ` arm* ` generate ARM (A32) code by default, whilst
61- targets named ` thumb* ` generate Thumb (T32) code by default. Most ARM chips
62- support both Thumb mode and ARM mode, with the notable exception that M-profile
60+ Rust targets starting with ` arm* ` generate Arm (A32) code by default, whilst
61+ targets named ` thumb* ` generate Thumb (T32) code by default. Most Arm chips
62+ support both Thumb mode and Arm mode, with the notable exception that M-profile
6363processors (` thumbv*m*-none-eabi* ` targets) * only* support Thumb-mode.
6464
6565Rust targets ending with ` eabi ` use the so-called * soft-float ABI* : functions
@@ -92,14 +92,14 @@ instructions.
9292
9393## Target CPU and Target Feature options
9494
95- It is possible to tell Rust (or LLVM) that you have a specific model of ARM
95+ It is possible to tell Rust (or LLVM) that you have a specific model of Arm
9696processor, using the [ ` -C target-cpu ` ] [ target-cpu ] option. You can also control
9797whether Rust (or LLVM) will include instructions that target optional hardware
9898features, e.g. hardware floating-point, or Advanced SIMD operations, using [ `-C
9999target-feature`] [ target-feature ] .
100100
101101It is important to note that selecting a * target-cpu* will typically enable
102- * all* the optional features available from ARM on that model of CPU and your
102+ * all* the optional features available from Arm on that model of CPU and your
103103particular implementation of that CPU may not have those features available. In
104104that case, you can use ` -C target-feature=-option ` to turn off the specific CPU
105105features you do not have available, leaving you with the optimized instruction
@@ -116,7 +116,7 @@ uses (likely linker related ones):
116116
117117``` toml
118118rustflags = [
119- # Usual ARM bare-metal linker setup
119+ # Usual Arm bare-metal linker setup
120120 " -Clink-arg=-Tlink.x" ,
121121 " -Clink-arg=--nmagic" ,
122122 # tell Rust we have a Cortex-M55
@@ -139,7 +139,7 @@ These targets are cross-compiled and use static linking.
139139
140140By default, the ` lld ` linker included with Rust will be used; however, you may
141141want to use the GNU linker instead. This can be obtained for Windows/Mac/Linux
142- from the [ ARM Developer Website] [ arm-gnu-toolchain ] , or possibly from your OS's
142+ from the [ Arm Developer Website] [ arm-gnu-toolchain ] , or possibly from your OS's
143143package manager. To use it, add the following to your ` .cargo/config.toml ` :
144144
145145``` toml
@@ -185,7 +185,7 @@ Most of `core` should work as expected, with the following notes:
185185 specific kind of FPU)
186186* Integer division is also emulated in software on some targets, depending on
187187 the target, ` target-cpu ` and ` target-feature ` s.
188- * Older ARM architectures (e.g. ARMv4, ARMv5TE and ARMv6 -M) are limited to basic
188+ * Older Arm architectures (e.g. Armv4, Armv5TE and Armv6 -M) are limited to basic
189189 [ ` load ` ] [ atomic-load ] and [ ` store ` ] [ atomic-store ] operations, and not more
190190 advanced operations like [ ` fetch_add ` ] [ fetch-add ] or
191191 [ ` compare_exchange ` ] [ compare-exchange ] .
0 commit comments