| //@ assembly-output: ptx-linker |
| //@ compile-flags: --crate-type cdylib -C target-cpu=sm_86 -Z unstable-options -Clinker-flavor=llbc |
| //@ only-nvptx64 |
| |
| // The PTX ABI stability is tied to major versions of the PTX ISA |
| // These tests assume major version 7 |
| |
| // CHECK: .version 7 |
| |
| #![feature(abi_ptx, lang_items, no_core)] |
| #![no_core] |
| |
| #[lang = "sized"] |
| trait Sized {} |
| #[lang = "copy"] |
| trait Copy {} |
| |
| #[repr(C)] |
| pub struct SingleU8 { |
| f: u8, |
| } |
| |
| #[repr(C)] |
| pub struct DoubleU8 { |
| f: u8, |
| g: u8, |
| } |
| |
| #[repr(C)] |
| pub struct TripleU8 { |
| f: u8, |
| g: u8, |
| h: u8, |
| } |
| |
| #[repr(C)] |
| pub struct TripleU16 { |
| f: u16, |
| g: u16, |
| h: u16, |
| } |
| #[repr(C)] |
| pub struct DoubleI32 { |
| f: i32, |
| g: i32, |
| } |
| #[repr(C)] |
| pub struct TripleU32 { |
| f: u32, |
| g: u32, |
| h: u32, |
| } |
| #[repr(C)] |
| pub struct TripleU64 { |
| f: u64, |
| g: u64, |
| h: u64, |
| } |
| |
| #[repr(C)] |
| pub struct DoubleFloat { |
| f: f32, |
| g: f32, |
| } |
| |
| #[repr(C)] |
| pub struct TripleFloat { |
| f: f32, |
| g: f32, |
| h: f32, |
| } |
| |
| #[repr(C)] |
| pub struct TripleDouble { |
| f: f64, |
| g: f64, |
| h: f64, |
| } |
| |
| #[repr(C)] |
| pub struct ManyIntegers { |
| f: u8, |
| g: u16, |
| h: u32, |
| i: u64, |
| } |
| |
| #[repr(C)] |
| pub struct ManyNumerics { |
| f: u8, |
| g: u16, |
| h: u32, |
| i: u64, |
| j: f32, |
| k: f64, |
| } |
| |
| // CHECK: .visible .func f_u8_arg( |
| // CHECK: .param .b32 f_u8_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_u8_arg(_a: u8) {} |
| |
| // CHECK: .visible .func f_u16_arg( |
| // CHECK: .param .b32 f_u16_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_u16_arg(_a: u16) {} |
| |
| // CHECK: .visible .func f_u32_arg( |
| // CHECK: .param .b32 f_u32_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_u32_arg(_a: u32) {} |
| |
| // CHECK: .visible .func f_u64_arg( |
| // CHECK: .param .b64 f_u64_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_u64_arg(_a: u64) {} |
| |
| // CHECK: .visible .func f_u128_arg( |
| // CHECK: .param .align 16 .b8 f_u128_arg_param_0[16] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_u128_arg(_a: u128) {} |
| |
| // CHECK: .visible .func f_i8_arg( |
| // CHECK: .param .b32 f_i8_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_i8_arg(_a: i8) {} |
| |
| // CHECK: .visible .func f_i16_arg( |
| // CHECK: .param .b32 f_i16_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_i16_arg(_a: i16) {} |
| |
| // CHECK: .visible .func f_i32_arg( |
| // CHECK: .param .b32 f_i32_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_i32_arg(_a: i32) {} |
| |
| // CHECK: .visible .func f_i64_arg( |
| // CHECK: .param .b64 f_i64_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_i64_arg(_a: i64) {} |
| |
| // CHECK: .visible .func f_i128_arg( |
| // CHECK: .param .align 16 .b8 f_i128_arg_param_0[16] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_i128_arg(_a: i128) {} |
| |
| // CHECK: .visible .func f_f32_arg( |
| // CHECK: .param .b32 f_f32_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_f32_arg(_a: f32) {} |
| |
| // CHECK: .visible .func f_f64_arg( |
| // CHECK: .param .b64 f_f64_arg_param_0 |
| #[no_mangle] |
| pub unsafe extern "C" fn f_f64_arg(_a: f64) {} |
| |
| // CHECK: .visible .func f_single_u8_arg( |
| // CHECK: .param .align 1 .b8 f_single_u8_arg_param_0[1] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_single_u8_arg(_a: SingleU8) {} |
| |
| // CHECK: .visible .func f_double_u8_arg( |
| // CHECK: .param .align 1 .b8 f_double_u8_arg_param_0[2] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_double_u8_arg(_a: DoubleU8) {} |
| |
| // CHECK: .visible .func f_triple_u8_arg( |
| // CHECK: .param .align 1 .b8 f_triple_u8_arg_param_0[3] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_triple_u8_arg(_a: TripleU8) {} |
| |
| // CHECK: .visible .func f_triple_u16_arg( |
| // CHECK: .param .align 2 .b8 f_triple_u16_arg_param_0[6] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_triple_u16_arg(_a: TripleU16) {} |
| |
| // CHECK: .visible .func f_triple_u32_arg( |
| // CHECK: .param .align 4 .b8 f_triple_u32_arg_param_0[12] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_triple_u32_arg(_a: TripleU32) {} |
| |
| // CHECK: .visible .func f_double_i32_arg( |
| // CHECK: .param .align 4 .b8 f_double_i32_arg_param_0[8] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_double_i32_arg(_a: DoubleI32) {} |
| |
| // CHECK: .visible .func f_triple_u64_arg( |
| // CHECK: .param .align 8 .b8 f_triple_u64_arg_param_0[24] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_triple_u64_arg(_a: TripleU64) {} |
| |
| // CHECK: .visible .func f_many_integers_arg( |
| // CHECK: .param .align 8 .b8 f_many_integers_arg_param_0[16] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_many_integers_arg(_a: ManyIntegers) {} |
| |
| // CHECK: .visible .func f_double_float_arg( |
| // CHECK: .param .align 4 .b8 f_double_float_arg_param_0[8] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_double_float_arg(_a: DoubleFloat) {} |
| |
| // CHECK: .visible .func f_triple_float_arg( |
| // CHECK: .param .align 4 .b8 f_triple_float_arg_param_0[12] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_triple_float_arg(_a: TripleFloat) {} |
| |
| // CHECK: .visible .func f_triple_double_arg( |
| // CHECK: .param .align 8 .b8 f_triple_double_arg_param_0[24] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_triple_double_arg(_a: TripleDouble) {} |
| |
| // CHECK: .visible .func f_many_numerics_arg( |
| // CHECK: .param .align 8 .b8 f_many_numerics_arg_param_0[32] |
| #[no_mangle] |
| pub unsafe extern "C" fn f_many_numerics_arg(_a: ManyNumerics) {} |