]> git.proxmox.com Git - rustc.git/blobdiff - vendor/rustc-ap-rustc_target/src/spec/nvptx64_nvidia_cuda.rs
Update upstream source from tag 'upstream/1.52.1+dfsg1'
[rustc.git] / vendor / rustc-ap-rustc_target / src / spec / nvptx64_nvidia_cuda.rs
diff --git a/vendor/rustc-ap-rustc_target/src/spec/nvptx64_nvidia_cuda.rs b/vendor/rustc-ap-rustc_target/src/spec/nvptx64_nvidia_cuda.rs
new file mode 100644 (file)
index 0000000..3c9c7d5
--- /dev/null
@@ -0,0 +1,67 @@
+use crate::spec::abi::Abi;
+use crate::spec::{LinkerFlavor, MergeFunctions, PanicStrategy, Target, TargetOptions};
+
+pub fn target() -> Target {
+    Target {
+        arch: "nvptx64".to_string(),
+        data_layout: "e-i64:64-i128:128-v16:16-v32:32-n16:32:64".to_string(),
+        llvm_target: "nvptx64-nvidia-cuda".to_string(),
+        pointer_width: 64,
+
+        options: TargetOptions {
+            os: "cuda".to_string(),
+            vendor: "nvidia".to_string(),
+            linker_flavor: LinkerFlavor::PtxLinker,
+            // The linker can be installed from `crates.io`.
+            linker: Some("rust-ptx-linker".to_string()),
+
+            // With `ptx-linker` approach, it can be later overridden via link flags.
+            cpu: "sm_30".to_string(),
+
+            // FIXME: create tests for the atomics.
+            max_atomic_width: Some(64),
+
+            // Unwinding on CUDA is neither feasible nor useful.
+            panic_strategy: PanicStrategy::Abort,
+
+            // Needed to use `dylib` and `bin` crate types and the linker.
+            dynamic_linking: true,
+            executables: true,
+
+            // Avoid using dylib because it contain metadata not supported
+            // by LLVM NVPTX backend.
+            only_cdylib: true,
+
+            // Let the `ptx-linker` to handle LLVM lowering into MC / assembly.
+            obj_is_bitcode: true,
+
+            // Convenient and predicable naming scheme.
+            dll_prefix: "".to_string(),
+            dll_suffix: ".ptx".to_string(),
+            exe_suffix: ".ptx".to_string(),
+
+            // Disable MergeFunctions LLVM optimisation pass because it can
+            // produce kernel functions that call other kernel functions.
+            // This behavior is not supported by PTX ISA.
+            merge_functions: MergeFunctions::Disabled,
+
+            // FIXME: enable compilation tests for the target and
+            // create the tests for this.
+            unsupported_abis: vec![
+                Abi::Cdecl,
+                Abi::Stdcall,
+                Abi::Fastcall,
+                Abi::Vectorcall,
+                Abi::Thiscall,
+                Abi::Aapcs,
+                Abi::Win64,
+                Abi::SysV64,
+                Abi::Msp430Interrupt,
+                Abi::X86Interrupt,
+                Abi::AmdGpuKernel,
+            ],
+
+            ..Default::default()
+        },
+    }
+}