Skip to content

Commit 0f47c2a

Browse files
committed
Add Armv8-M Mainline targets
This commit enables the Armv8-M Mainline architecture profile. It adds two targets: - thumbv8m.main-none-eabi - thumbv8m.main-none-eabihf The second one uses the Floating Point Unit for floating point operations. It mainly targets the Cortex-M33 processor, which can have the optional Floating Point Unit extension.
1 parent 58e9832 commit 0f47c2a

File tree

4 files changed

+77
-0
lines changed

4 files changed

+77
-0
lines changed

src/librustc_target/spec/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,8 @@ supported_targets! {
400400
("thumbv7em-none-eabi", thumbv7em_none_eabi),
401401
("thumbv7em-none-eabihf", thumbv7em_none_eabihf),
402402
("thumbv8m.base-none-eabi", thumbv8m_base_none_eabi),
403+
("thumbv8m.main-none-eabi", thumbv8m_main_none_eabi),
404+
("thumbv8m.main-none-eabihf", thumbv8m_main_none_eabihf),
403405

404406
("msp430-none-elf", msp430_none_elf),
405407

src/librustc_target/spec/thumb_base.rs

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
// - Cortex-M4(F)
1919
// - Cortex-M7(F)
2020
// - Cortex-M23
21+
// - Cortex-M33
2122
//
2223
// We have opted for these instead of one target per processor (e.g. `cortex-m0`, `cortex-m3`,
2324
// etc) because the differences between some processors like the cortex-m0 and cortex-m1 are almost
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
12+
// without the Floating Point extension.
13+
14+
use spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult};
15+
16+
pub fn target() -> TargetResult {
17+
Ok(Target {
18+
llvm_target: "thumbv8m.main-none-eabi".to_string(),
19+
target_endian: "little".to_string(),
20+
target_pointer_width: "32".to_string(),
21+
target_c_int_width: "32".to_string(),
22+
data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(),
23+
arch: "arm".to_string(),
24+
target_os: "none".to_string(),
25+
target_env: String::new(),
26+
target_vendor: String::new(),
27+
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
28+
29+
options: TargetOptions {
30+
max_atomic_width: Some(32),
31+
.. super::thumb_base::opts()
32+
},
33+
})
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// Targets the Cortex-M33 processor (Armv8-M Mainline architecture profile),
12+
// with the Floating Point extension.
13+
14+
use spec::{LinkerFlavor, LldFlavor, Target, TargetOptions, TargetResult};
15+
16+
pub fn target() -> TargetResult {
17+
Ok(Target {
18+
llvm_target: "thumbv8m.main-none-eabihf".to_string(),
19+
target_endian: "little".to_string(),
20+
target_pointer_width: "32".to_string(),
21+
target_c_int_width: "32".to_string(),
22+
data_layout: "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64".to_string(),
23+
arch: "arm".to_string(),
24+
target_os: "none".to_string(),
25+
target_env: String::new(),
26+
target_vendor: String::new(),
27+
linker_flavor: LinkerFlavor::Lld(LldFlavor::Ld),
28+
29+
options: TargetOptions {
30+
// If the Floating Point extension is implemented in the Cortex-M33
31+
// processor, the Cortex-M33 Technical Reference Manual states that
32+
// the FPU uses the FPv5 architecture, single-precision instructions
33+
// and 16 D registers.
34+
// These parameters map to the following LLVM features.
35+
features: "+fp-armv8,+fp-only-sp,+d16".to_string(),
36+
max_atomic_width: Some(32),
37+
.. super::thumb_base::opts()
38+
},
39+
})
40+
}

0 commit comments

Comments
 (0)