Skip to content

Commit 27ec969

Browse files
compiler: use new AbiMap construction in target specs
1 parent df7e311 commit 27ec969

12 files changed

+73
-84
lines changed

compiler/rustc_target/src/spec/base/mod.rs

Lines changed: 41 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -40,107 +40,78 @@ pub(crate) mod windows_uwp_gnu;
4040
pub(crate) mod windows_uwp_msvc;
4141
pub(crate) mod xtensa;
4242

43-
use rustc_abi::{AbiMap, ArmCall, CanonAbi, X86Call};
43+
use rustc_abi::{AbiMap, CanonAbi, X86Call};
4444

4545
pub(crate) fn x86_32_abi_map() -> AbiMap {
46-
AbiMap {
47-
system: CanonAbi::C,
48-
system_varargs: CanonAbi::C,
49-
efiapi: Some(CanonAbi::C),
50-
stdcall: Some(CanonAbi::X86(X86Call::Stdcall)),
51-
fastcall: Some(CanonAbi::X86(X86Call::Fastcall)),
52-
thiscall: Some(CanonAbi::X86(X86Call::Thiscall)),
53-
vectorcall: Some(CanonAbi::X86(X86Call::Vectorcall)),
54-
55-
x86_interrupt: true,
56-
57-
..Default::default()
58-
}
46+
let mut map = AbiMap::base_for_arch("x86");
47+
48+
map.stdcall = Some(CanonAbi::X86(X86Call::Stdcall));
49+
map.fastcall = Some(CanonAbi::X86(X86Call::Fastcall));
50+
map.thiscall = Some(CanonAbi::X86(X86Call::Thiscall));
51+
map.vectorcall = Some(CanonAbi::X86(X86Call::Vectorcall));
52+
53+
map
5954
}
6055

6156
pub(crate) fn x86_32_windows_abi_map() -> AbiMap {
62-
AbiMap {
63-
system: CanonAbi::X86(X86Call::Stdcall),
64-
system_varargs: CanonAbi::C,
65-
efiapi: Some(CanonAbi::C),
66-
stdcall: Some(CanonAbi::X86(X86Call::Stdcall)),
67-
fastcall: Some(CanonAbi::X86(X86Call::Fastcall)),
68-
thiscall: Some(CanonAbi::X86(X86Call::Thiscall)),
69-
vectorcall: Some(CanonAbi::X86(X86Call::Vectorcall)),
70-
71-
x86_interrupt: true,
72-
73-
..Default::default()
74-
}
57+
let mut map = AbiMap::base_for_arch("x86");
58+
map.system = CanonAbi::X86(X86Call::Stdcall);
59+
map.system_varargs = CanonAbi::C;
60+
61+
map.stdcall = Some(CanonAbi::X86(X86Call::Stdcall));
62+
map.fastcall = Some(CanonAbi::X86(X86Call::Fastcall));
63+
map.thiscall = Some(CanonAbi::X86(X86Call::Thiscall));
64+
map.vectorcall = Some(CanonAbi::X86(X86Call::Vectorcall));
65+
66+
map
7567
}
7668

7769
// // See commentary in `is_abi_supported`.
7870
// Stdcall { unwind } | Thiscall { unwind } | Fastcall { unwind } => {
7971
// if self.arch == "x86" { abi } else { C { unwind } }
8072
// }
8173
pub(crate) fn x86_64_abi_map() -> AbiMap {
82-
AbiMap {
83-
efiapi: Some(CanonAbi::X86(X86Call::Win64)),
84-
85-
win64: Some(CanonAbi::X86(X86Call::Win64)),
86-
sysv64: Some(CanonAbi::X86(X86Call::SysV64)),
87-
vectorcall: Some(CanonAbi::X86(X86Call::Vectorcall)),
88-
89-
x86_interrupt: true,
90-
91-
..Default::default()
92-
}
74+
let mut map = AbiMap::base_for_arch("x86_64");
75+
map.vectorcall = Some(CanonAbi::X86(X86Call::Vectorcall));
76+
map
9377
}
9478

9579
pub(crate) fn x86_64_windows_abi_map() -> AbiMap {
96-
AbiMap {
97-
rust_cold: CanonAbi::Rust,
80+
let mut map = AbiMap::base_for_arch("x86_64");
81+
map.rust_cold = CanonAbi::Rust;
9882

99-
stdcall: Some(CanonAbi::C),
100-
thiscall: Some(CanonAbi::C),
101-
fastcall: Some(CanonAbi::C),
83+
map.stdcall = Some(CanonAbi::C);
84+
map.fastcall = Some(CanonAbi::C);
85+
map.vectorcall = Some(CanonAbi::X86(X86Call::Vectorcall));
10286

103-
..x86_64_abi_map()
104-
}
87+
map
10588
}
10689

10790
pub(crate) fn aarch64_abi_map() -> AbiMap {
108-
AbiMap { efiapi: Some(CanonAbi::C), ..Default::default() }
91+
AbiMap::base_for_arch("aarch64")
10992
}
11093

11194
pub(crate) fn aarch64_windows_abi_map() -> AbiMap {
112-
AbiMap {
113-
win64: Some(CanonAbi::C),
114-
sysv64: Some(CanonAbi::C),
115-
stdcall: Some(CanonAbi::C),
116-
thiscall: Some(CanonAbi::C),
117-
fastcall: Some(CanonAbi::C),
118-
119-
vectorcall: Some(CanonAbi::C),
120-
121-
..aarch64_abi_map()
122-
}
95+
let mut map = AbiMap::base_for_arch("aarch64");
96+
map.stdcall = Some(CanonAbi::C);
97+
map.fastcall = Some(CanonAbi::C);
98+
map.vectorcall = Some(CanonAbi::C);
99+
map
123100
}
124101

125102
pub(crate) fn arm_abi_map() -> AbiMap {
126-
AbiMap { aapcs: true, efiapi: Some(CanonAbi::Arm(ArmCall::Aapcs)), ..Default::default() }
103+
AbiMap::base_for_arch("arm")
127104
}
128105

129106
pub(crate) fn arm_windows_abi_map() -> AbiMap {
130-
AbiMap {
131-
aapcs: true,
132-
efiapi: Some(CanonAbi::Arm(ArmCall::Aapcs)),
133-
stdcall: Some(CanonAbi::C),
134-
thiscall: Some(CanonAbi::C),
135-
fastcall: Some(CanonAbi::C),
136-
137-
vectorcall: Some(CanonAbi::C),
138-
139-
..Default::default()
140-
}
107+
let mut map = AbiMap::base_for_arch("arm");
108+
map.stdcall = Some(CanonAbi::C);
109+
map.fastcall = Some(CanonAbi::C);
110+
map.vectorcall = Some(CanonAbi::C);
111+
map
141112
}
142113

143114
// bitness-invariant, for now
144115
pub(crate) fn riscv_abi_map() -> AbiMap {
145-
AbiMap { efiapi: Some(CanonAbi::C), riscv_interrupt: true, ..Default::default() }
116+
AbiMap::base_for_arch("riscv32")
146117
}

compiler/rustc_target/src/spec/targets/amdgcn_amd_amdhsa.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@ pub(crate) fn target() -> Target {
1616
pointer_width: 64,
1717

1818
options: TargetOptions {
19-
abi_map: AbiMap {
20-
gpu_kernel: true,
21-
..Default::default()
22-
},
19+
abi_map: AbiMap::base_for_arch("amdgpu"),
2320
os: "amdhsa".into(),
2421
vendor: "amd".into(),
2522
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),

compiler/rustc_target/src/spec/targets/arm64ec_pc_windows_msvc.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
use rustc_abi::{AbiMap, CanonAbi};
2+
13
use crate::spec::{FramePointer, LinkerFlavor, Lld, Target, TargetMetadata, add_link_args, base};
24

35
pub(crate) fn target() -> Target {
46
let mut base = base::windows_msvc::opts();
5-
base.abi_map = base::aarch64_windows_abi_map();
7+
let mut abi_map = AbiMap::default();
8+
abi_map.stdcall = Some(CanonAbi::C);
9+
abi_map.fastcall = Some(CanonAbi::C);
10+
abi_map.vectorcall = Some(CanonAbi::C);
11+
612
base.max_atomic_width = Some(128);
713
base.features = "+v8a,+neon,+fp-armv8".into();
814
add_link_args(

compiler/rustc_target/src/spec/targets/avr_none.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ pub(crate) fn target() -> Target {
1515
llvm_target: "avr-unknown-unknown".into(),
1616
pointer_width: 16,
1717
options: TargetOptions {
18-
abi_map: AbiMap { avr_interrupt: true, ..Default::default() },
18+
abi_map: AbiMap::base_for_arch("avr"),
1919
c_int_width: "16".into(),
2020
exe_suffix: ".elf".into(),
2121
linker: Some("avr-gcc".into()),

compiler/rustc_target/src/spec/targets/msp430_none_elf.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub(crate) fn target() -> Target {
1818
arch: "msp430".into(),
1919

2020
options: TargetOptions {
21-
abi_map: AbiMap { msp430_interrupt: true, ..Default::default() },
21+
abi_map: AbiMap::base_for_arch("msp430"),
2222

2323
c_int_width: "16".into(),
2424

compiler/rustc_target/src/spec/targets/nvptx64_nvidia_cuda.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ pub(crate) fn target() -> Target {
1919
pointer_width: 64,
2020

2121
options: TargetOptions {
22-
abi_map: AbiMap { gpu_kernel: true, ptx_kernel: true, ..Default::default() },
22+
abi_map: AbiMap::base_for_arch("nvptx64"),
2323
os: "cuda".into(),
2424
vendor: "nvidia".into(),
2525
linker_flavor: LinkerFlavor::Ptx,

compiler/rustc_target/src/spec/targets/thumbv8m_base_none_eabi.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ use rustc_abi::AbiMap;
55
use crate::spec::{FloatAbi, Target, TargetMetadata, TargetOptions, base};
66

77
pub(crate) fn target() -> Target {
8+
let mut abi_map = AbiMap::base_for_arch("arm");
9+
abi_map.cmse_nonsecure_entry = true;
810
Target {
911
llvm_target: "thumbv8m.base-none-eabi".into(),
1012
metadata: TargetMetadata {
@@ -18,7 +20,7 @@ pub(crate) fn target() -> Target {
1820
arch: "arm".into(),
1921

2022
options: TargetOptions {
21-
abi_map: AbiMap { cmse_nonsecure_entry: true, ..base::arm_abi_map() },
23+
abi_map,
2224
abi: "eabi".into(),
2325
llvm_floatabi: Some(FloatAbi::Soft),
2426
// ARMv8-M baseline doesn't support unaligned loads/stores so we disable them

compiler/rustc_target/src/spec/targets/thumbv8m_base_nuttx_eabi.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ use rustc_abi::AbiMap;
55
use crate::spec::{FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
66

77
pub(crate) fn target() -> Target {
8+
let mut abi_map = AbiMap::base_for_arch("arm");
9+
abi_map.cmse_nonsecure_entry = true;
10+
811
Target {
912
llvm_target: "thumbv8m.base-none-eabi".into(),
1013
metadata: TargetMetadata {
@@ -18,7 +21,7 @@ pub(crate) fn target() -> Target {
1821
arch: "arm".into(),
1922

2023
options: TargetOptions {
21-
abi_map: AbiMap { cmse_nonsecure_entry: true, ..base::arm_abi_map() },
24+
abi_map,
2225
families: cvs!["unix"],
2326
os: "nuttx".into(),
2427
abi: "eabi".into(),

compiler/rustc_target/src/spec/targets/thumbv8m_main_none_eabi.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use rustc_abi::AbiMap;
66
use crate::spec::{FloatAbi, Target, TargetMetadata, TargetOptions, base};
77

88
pub(crate) fn target() -> Target {
9+
let mut abi_map = AbiMap::base_for_arch("arm");
10+
abi_map.cmse_nonsecure_entry = true;
911
Target {
1012
llvm_target: "thumbv8m.main-none-eabi".into(),
1113
metadata: TargetMetadata {
@@ -19,7 +21,7 @@ pub(crate) fn target() -> Target {
1921
arch: "arm".into(),
2022

2123
options: TargetOptions {
22-
abi_map: AbiMap { cmse_nonsecure_entry: true, ..base::arm_abi_map() },
24+
abi_map,
2325
abi: "eabi".into(),
2426
llvm_floatabi: Some(FloatAbi::Soft),
2527
max_atomic_width: Some(32),

compiler/rustc_target/src/spec/targets/thumbv8m_main_none_eabihf.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ use rustc_abi::AbiMap;
66
use crate::spec::{FloatAbi, Target, TargetMetadata, TargetOptions, base};
77

88
pub(crate) fn target() -> Target {
9+
let mut abi_map = AbiMap::base_for_arch("arm");
10+
abi_map.cmse_nonsecure_entry = true;
11+
912
Target {
1013
llvm_target: "thumbv8m.main-none-eabihf".into(),
1114
metadata: TargetMetadata {
@@ -19,7 +22,7 @@ pub(crate) fn target() -> Target {
1922
arch: "arm".into(),
2023

2124
options: TargetOptions {
22-
abi_map: AbiMap { cmse_nonsecure_entry: true, ..base::arm_abi_map() },
25+
abi_map,
2326
abi: "eabihf".into(),
2427
llvm_floatabi: Some(FloatAbi::Hard),
2528
// If the Floating Point extension is implemented in the Cortex-M33

compiler/rustc_target/src/spec/targets/thumbv8m_main_nuttx_eabi.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use rustc_abi::AbiMap;
66
use crate::spec::{FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
77

88
pub(crate) fn target() -> Target {
9+
let mut abi_map = AbiMap::base_for_arch("arm");
10+
abi_map.cmse_nonsecure_entry = true;
911
Target {
1012
llvm_target: "thumbv8m.main-none-eabi".into(),
1113
metadata: TargetMetadata {
@@ -19,7 +21,7 @@ pub(crate) fn target() -> Target {
1921
arch: "arm".into(),
2022

2123
options: TargetOptions {
22-
abi_map: AbiMap { cmse_nonsecure_entry: true, ..base::arm_abi_map() },
24+
abi_map,
2325
families: cvs!["unix"],
2426
os: "nuttx".into(),
2527
abi: "eabi".into(),

compiler/rustc_target/src/spec/targets/thumbv8m_main_nuttx_eabihf.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ use rustc_abi::AbiMap;
66
use crate::spec::{FloatAbi, Target, TargetMetadata, TargetOptions, base, cvs};
77

88
pub(crate) fn target() -> Target {
9+
let mut abi_map = AbiMap::base_for_arch("arm");
10+
abi_map.cmse_nonsecure_entry = true;
11+
912
Target {
1013
llvm_target: "thumbv8m.main-none-eabihf".into(),
1114
metadata: TargetMetadata {
@@ -19,7 +22,7 @@ pub(crate) fn target() -> Target {
1922
arch: "arm".into(),
2023

2124
options: TargetOptions {
22-
abi_map: AbiMap { cmse_nonsecure_entry: true, ..base::arm_abi_map() },
25+
abi_map,
2326
families: cvs!["unix"],
2427
os: "nuttx".into(),
2528
abi: "eabihf".into(),

0 commit comments

Comments
 (0)