3
3
## Common Target Details
4
4
5
5
This 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
7
7
often used to assist compilation to these targets.
8
8
9
9
Details that apply only to only a specific target in this group are covered in
10
10
their own document.
11
11
12
12
### Tier 2 Target List
13
13
14
- - ARM A-Profile Architectures
14
+ - Arm A-Profile Architectures
15
15
- ` armv7a-none-eabi `
16
- - ARM R-Profile Architectures
16
+ - Arm R-Profile Architectures
17
17
- [ ` armv7r-none-eabi ` and ` armv7r-none-eabihf ` ] ( armv7r-none-eabi.md )
18
18
- [ ` armebv7r-none-eabi ` and ` armebv7r-none-eabihf ` ] ( armv7r-none-eabi.md )
19
- - ARM M-Profile Architectures
19
+ - Arm M-Profile Architectures
20
20
- [ ` thumbv6m-none-eabi ` ] ( thumbv6m-none-eabi.md )
21
21
- [ ` thumbv7m-none-eabi ` ] ( thumbv7m-none-eabi.md )
22
22
- [ ` thumbv7em-none-eabi ` and ` thumbv7em-none-eabihf ` ] ( thumbv7em-none-eabi.md )
23
23
- [ ` thumbv8m.base-none-eabi ` ] ( thumbv8m.base-none-eabi.md )
24
24
- [ ` thumbv8m.main-none-eabi ` and ` thumbv8m.main-none-eabihf ` ] ( thumbv8m.main-none-eabi.md )
25
- - * Legacy* ARM Architectures
25
+ - * Legacy* Arm Architectures
26
26
- None
27
27
28
28
### Tier 3 Target List
29
29
30
- - ARM A-Profile Architectures
30
+ - Arm A-Profile Architectures
31
31
- ` armv7a-none-eabihf `
32
- - ARM R-Profile Architectures
32
+ - Arm R-Profile Architectures
33
33
- [ ` armv8r-none-eabihf ` ] ( armv8r-none-eabihf.md )
34
- - ARM M-Profile Architectures
34
+ - Arm M-Profile Architectures
35
35
- None
36
- - * Legacy* ARM Architectures
36
+ - * Legacy* Arm Architectures
37
37
- [ ` armv4t-none-eabi ` and ` thumbv4t-none-eabi ` ] ( armv4t-none-eabi.md )
38
38
- [ ` armv5te-none-eabi ` and ` thumbv5te-none-eabi ` ] ( armv5te-none-eabi.md )
39
39
40
40
## Instruction Sets
41
41
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 :
43
43
44
44
- 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
46
46
been updated by various revisions to the architecture specifications ever
47
47
since.
48
48
- The [ * T32 ISA* ] [ t32-isa ] , with a mix of 16-bit and 32-bit width instructions.
49
49
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.
52
52
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
54
54
architecture specifications.
55
55
56
56
There is also a 64-bit ISA with fixed-width 32-bit instructions called the * A64
57
57
ISA* , but targets which implement that instruction set generally start with
58
58
` aarch64* ` and are discussed elsewhere.
59
59
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
63
63
processors (` thumbv*m*-none-eabi* ` targets) * only* support Thumb-mode.
64
64
65
65
Rust targets ending with ` eabi ` use the so-called * soft-float ABI* : functions
@@ -92,14 +92,14 @@ instructions.
92
92
93
93
## Target CPU and Target Feature options
94
94
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
96
96
processor, using the [ ` -C target-cpu ` ] [ target-cpu ] option. You can also control
97
97
whether Rust (or LLVM) will include instructions that target optional hardware
98
98
features, e.g. hardware floating-point, or Advanced SIMD operations, using [ `-C
99
99
target-feature`] [ target-feature ] .
100
100
101
101
It 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
103
103
particular implementation of that CPU may not have those features available. In
104
104
that case, you can use ` -C target-feature=-option ` to turn off the specific CPU
105
105
features you do not have available, leaving you with the optimized instruction
@@ -116,7 +116,7 @@ uses (likely linker related ones):
116
116
117
117
``` toml
118
118
rustflags = [
119
- # Usual ARM bare-metal linker setup
119
+ # Usual Arm bare-metal linker setup
120
120
" -Clink-arg=-Tlink.x" ,
121
121
" -Clink-arg=--nmagic" ,
122
122
# tell Rust we have a Cortex-M55
@@ -139,7 +139,7 @@ These targets are cross-compiled and use static linking.
139
139
140
140
By default, the ` lld ` linker included with Rust will be used; however, you may
141
141
want 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
143
143
package manager. To use it, add the following to your ` .cargo/config.toml ` :
144
144
145
145
``` toml
@@ -185,7 +185,7 @@ Most of `core` should work as expected, with the following notes:
185
185
specific kind of FPU)
186
186
* Integer division is also emulated in software on some targets, depending on
187
187
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
189
189
[ ` load ` ] [ atomic-load ] and [ ` store ` ] [ atomic-store ] operations, and not more
190
190
advanced operations like [ ` fetch_add ` ] [ fetch-add ] or
191
191
[ ` compare_exchange ` ] [ compare-exchange ] .
0 commit comments