]> git.proxmox.com Git - rustc.git/blame - src/test/assembly/asm/nvptx-types.rs
Update unsuspicious file list
[rustc.git] / src / test / assembly / asm / nvptx-types.rs
CommitLineData
f9f354fc
XL
1// assembly-output: emit-asm
2// compile-flags: --target nvptx64-nvidia-cuda
3// compile-flags: --crate-type cdylib
3dfed10e 4// needs-llvm-components: nvptx
f9f354fc 5
2b03887a 6#![feature(no_core, lang_items, rustc_attrs, asm_experimental_arch)]
f9f354fc
XL
7#![no_core]
8
9#[rustc_builtin_macro]
10macro_rules! asm {
11 () => {};
12}
13#[rustc_builtin_macro]
14macro_rules! concat {
15 () => {};
16}
17
18#[lang = "sized"]
19trait Sized {}
20#[lang = "copy"]
21trait Copy {}
22
23type ptr = *mut u8;
24
25impl Copy for i8 {}
26impl Copy for i16 {}
27impl Copy for i32 {}
28impl Copy for f32 {}
29impl Copy for i64 {}
30impl Copy for f64 {}
31impl Copy for ptr {}
32
33// NVPTX does not support static variables
34#[no_mangle]
35fn extern_func() {}
36
37// CHECK-LABEL: .visible .func sym_fn()
38// CHECK: // begin inline asm
39// CHECK: call extern_func;
40// CHECK: // end inline asm
41#[no_mangle]
42pub unsafe fn sym_fn() {
43 asm!("call {};", sym extern_func);
44}
45
46macro_rules! check {
47 ($func:ident $ty:ident $class:ident $mov:literal) => {
48 #[no_mangle]
49 pub unsafe fn $func(x: $ty) -> $ty {
50 let y;
51 asm!(concat!($mov, " {}, {};"), out($class) y, in($class) x);
52 y
53 }
54 };
55}
56
57// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i8
58// CHECK: // begin inline asm
59// CHECK: mov.i16 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
60// CHECK: // end inline asm
61check!(reg16_i8 i8 reg16 "mov.i16");
62
63// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i16
64// CHECK: // begin inline asm
65// CHECK: mov.i16 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
66// CHECK: // end inline asm
67check!(reg16_i16 i16 reg16 "mov.i16");
68
69// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i8
70// CHECK: // begin inline asm
71// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
72// CHECK: // end inline asm
73check!(reg32_i8 i8 reg32 "mov.i32");
74
75// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i16
76// CHECK: // begin inline asm
77// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
78// CHECK: // end inline asm
79check!(reg32_i16 i16 reg32 "mov.i32");
80
81// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i32
82// CHECK: // begin inline asm
83// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
84// CHECK: // end inline asm
85check!(reg32_i32 i32 reg32 "mov.i32");
86
87// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_f32
88// CHECK: // begin inline asm
89// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
90// CHECK: // end inline asm
91check!(reg32_f32 f32 reg32 "mov.i32");
92
93// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i8
94// CHECK: // begin inline asm
95// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
96// CHECK: // end inline asm
97check!(reg64_i8 i8 reg64 "mov.i64");
98
99// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i16
100// CHECK: // begin inline asm
101// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
102// CHECK: // end inline asm
103check!(reg64_i16 i16 reg64 "mov.i64");
104
105// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i32
106// CHECK: // begin inline asm
107// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
108// CHECK: // end inline asm
109check!(reg64_i32 i32 reg64 "mov.i64");
110
111// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_f32
112// CHECK: // begin inline asm
113// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
114// CHECK: // end inline asm
115check!(reg64_f32 f32 reg64 "mov.i64");
116
117// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_i64
118// CHECK: // begin inline asm
119// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
120// CHECK: // end inline asm
121check!(reg64_i64 i64 reg64 "mov.i64");
122
123// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_f64
124// CHECK: // begin inline asm
125// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
126// CHECK: // end inline asm
127check!(reg64_f64 f64 reg64 "mov.i64");
128
129// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_ptr
130// CHECK: // begin inline asm
131// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}};
132// CHECK: // end inline asm
133check!(reg64_ptr ptr reg64 "mov.i64");