Skip to content

Commit 5805591

Browse files
committed
compiler/rustc_target: Add support for m68k-linux-gnu
1 parent df7ad3a commit 5805591

File tree

4 files changed

+48
-0
lines changed

4 files changed

+48
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use crate::abi::call::{ArgAbi, FnAbi};
2+
3+
fn classify_ret<Ty>(ret: &mut ArgAbi<'_, Ty>) {
4+
if ret.layout.is_aggregate() {
5+
ret.make_indirect();
6+
} else {
7+
ret.extend_integer_width_to(32);
8+
}
9+
}
10+
11+
fn classify_arg<Ty>(arg: &mut ArgAbi<'_, Ty>) {
12+
if arg.layout.is_aggregate() {
13+
arg.make_indirect_byval();
14+
} else {
15+
arg.extend_integer_width_to(32);
16+
}
17+
}
18+
19+
pub fn compute_abi_info<Ty>(fn_abi: &mut FnAbi<'_, Ty>) {
20+
if !fn_abi.ret.is_ignore() {
21+
classify_ret(&mut fn_abi.ret);
22+
}
23+
24+
for arg in &mut fn_abi.args {
25+
if arg.is_ignore() {
26+
continue;
27+
}
28+
classify_arg(arg);
29+
}
30+
}

compiler/rustc_target/src/abi/call/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ mod arm;
88
mod avr;
99
mod bpf;
1010
mod hexagon;
11+
mod m68k;
1112
mod mips;
1213
mod mips64;
1314
mod msp430;
@@ -634,6 +635,7 @@ impl<'a, Ty> FnAbi<'a, Ty> {
634635
"amdgpu" => amdgpu::compute_abi_info(cx, self),
635636
"arm" => arm::compute_abi_info(cx, self),
636637
"avr" => avr::compute_abi_info(self),
638+
"m68k" => m68k::compute_abi_info(self),
637639
"mips" => mips::compute_abi_info(cx, self),
638640
"mips64" => mips64::compute_abi_info(cx, self),
639641
"powerpc" => powerpc::compute_abi_info(self),
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
use crate::abi::Endian;
2+
use crate::spec::{Target, TargetOptions};
3+
4+
pub fn target() -> Target {
5+
let mut base = super::linux_base::opts();
6+
base.max_atomic_width = Some(32);
7+
8+
Target {
9+
llvm_target: "m68k-unknown-linux-gnu".to_string(),
10+
pointer_width: 32,
11+
data_layout: "E-m:e-p:32:16:32-i8:8:8-i16:16:16-i32:16:32-n8:16:32-a:0:16-S16".to_string(),
12+
arch: "m68k".to_string(),
13+
options: TargetOptions { endian: Endian::Big, mcount: "_mcount".to_string(), ..base },
14+
}
15+
}

compiler/rustc_target/src/spec/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,6 +742,7 @@ supported_targets! {
742742
("x86_64-unknown-linux-gnux32", x86_64_unknown_linux_gnux32),
743743
("i686-unknown-linux-gnu", i686_unknown_linux_gnu),
744744
("i586-unknown-linux-gnu", i586_unknown_linux_gnu),
745+
("m68k-unknown-linux-gnu", m68k_unknown_linux_gnu),
745746
("mips-unknown-linux-gnu", mips_unknown_linux_gnu),
746747
("mips64-unknown-linux-gnuabi64", mips64_unknown_linux_gnuabi64),
747748
("mips64el-unknown-linux-gnuabi64", mips64el_unknown_linux_gnuabi64),

0 commit comments

Comments
 (0)