summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_target/src/spec/mipsel_sony_psx.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_target/src/spec/mipsel_sony_psx.rs')
-rw-r--r--compiler/rustc_target/src/spec/mipsel_sony_psx.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/compiler/rustc_target/src/spec/mipsel_sony_psx.rs b/compiler/rustc_target/src/spec/mipsel_sony_psx.rs
new file mode 100644
index 000000000..12a66efdd
--- /dev/null
+++ b/compiler/rustc_target/src/spec/mipsel_sony_psx.rs
@@ -0,0 +1,37 @@
+use crate::spec::{cvs, Cc, LinkerFlavor, Lld, PanicStrategy, RelocModel, Target, TargetOptions};
+
+pub fn target() -> Target {
+ Target {
+ llvm_target: "mipsel-sony-psx".into(),
+ pointer_width: 32,
+ data_layout: "e-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64".into(),
+ arch: "mips".into(),
+
+ options: TargetOptions {
+ os: "none".into(),
+ env: "psx".into(),
+ vendor: "sony".into(),
+ linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
+ cpu: "mips1".into(),
+ executables: true,
+ linker: Some("rust-lld".into()),
+ relocation_model: RelocModel::Static,
+ exe_suffix: ".exe".into(),
+
+ // PSX doesn't natively support floats.
+ features: "+soft-float".into(),
+
+ // This should be 16 bits, but LLVM incorrectly tries emitting MIPS-II SYNC instructions
+ // for atomic loads and stores. This crashes rustc so we have to disable the Atomic* API
+ // until this is fixed upstream. See https://reviews.llvm.org/D122427#3420144 for more
+ // info.
+ max_atomic_width: Some(0),
+
+ // PSX does not support trap-on-condition instructions.
+ llvm_args: cvs!["-mno-check-zero-division"],
+ llvm_abiname: "o32".into(),
+ panic_strategy: PanicStrategy::Abort,
+ ..Default::default()
+ },
+ }
+}