]>
git.proxmox.com Git - rustc.git/blob - src/test/assembly/asm/s390x-types.rs
1 // min-llvm-version: 10.0.1
3 // assembly-output: emit-asm
4 //[s390x] compile-flags: --target s390x-unknown-linux-gnu
5 //[s390x] needs-llvm-components: systemz
7 #![feature(no_core, lang_items, rustc_attrs, repr_simd)]
8 #![crate_type = "rlib"]
10 #![allow(asm_sub_register, non_camel_case_types)]
12 #[rustc_builtin_macro]
16 #[rustc_builtin_macro]
20 #[rustc_builtin_macro]
21 macro_rules
! stringify
{
30 type ptr
= *const i32;
43 static extern_static
: u8;
46 // Hack to avoid function merging
48 fn dont_merge(s
: &str);
51 macro_rules
! check
{ ($func
:ident
, $ty
:ty
, $class
:ident
, $mov
:literal
) => {
53 pub unsafe fn $
func(x
: $ty
) -> $ty
{
54 dont_merge(stringify
!($func
));
57 asm
!(concat
!($mov
," {}, {}"), out($class
) y
, in($class
) x
);
62 macro_rules
! check_reg
{ ($func
:ident
, $ty
:ty
, $reg
:tt
, $mov
:literal
) => {
64 pub unsafe fn $
func(x
: $ty
) -> $ty
{
65 dont_merge(stringify
!($func
));
68 asm
!(concat
!($mov
, " %", $reg
, ", %", $reg
), lateout($reg
) y
, in($reg
) x
);
73 // CHECK-LABEL: sym_fn_32:
75 // CHECK: brasl %r14, extern_func
79 pub unsafe fn sym_fn_32() {
80 asm
!("brasl %r14, {}", sym extern_func
);
83 // CHECK-LABEL: sym_static:
85 // CHECK: brasl %r14, extern_static
88 pub unsafe fn sym_static() {
89 asm
!("brasl %r14, {}", sym extern_static
);
92 // CHECK-LABEL: reg_i8:
94 // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}}
96 check
!(reg_i8
, i8, reg
, "lgr");
98 // CHECK-LABEL: reg_i16:
100 // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}}
102 check
!(reg_i16
, i16, reg
, "lgr");
104 // CHECK-LABEL: reg_i32:
106 // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}}
108 check
!(reg_i32
, i32, reg
, "lgr");
110 // CHECK-LABEL: reg_i64:
112 // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}}
114 check
!(reg_i64
, i64, reg
, "lgr");
116 // CHECK-LABEL: reg_f32:
118 // CHECK: ler %f{{[0-9]+}}, %f{{[0-9]+}}
120 check
!(reg_f32
, f32, freg
, "ler");
122 // CHECK-LABEL: reg_f64:
124 // CHECK: ldr %f{{[0-9]+}}, %f{{[0-9]+}}
126 check
!(reg_f64
, f64, freg
, "ldr");
128 // CHECK-LABEL: reg_ptr:
130 // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}}
132 check
!(reg_ptr
, ptr
, reg
, "lgr");
134 // CHECK-LABEL: r0_i8:
136 // CHECK: lr %r0, %r0
138 check_reg
!(r0_i8
, i8, "r0", "lr");
140 // CHECK-LABEL: r0_i16:
142 // CHECK: lr %r0, %r0
144 check_reg
!(r0_i16
, i16, "r0", "lr");
146 // CHECK-LABEL: r0_i32:
148 // CHECK: lr %r0, %r0
150 check_reg
!(r0_i32
, i32, "r0", "lr");
152 // CHECK-LABEL: r0_i64:
154 // CHECK: lr %r0, %r0
156 check_reg
!(r0_i64
, i64, "r0", "lr");
158 // CHECK-LABEL: f0_f32:
160 // CHECK: ler %f0, %f0
162 check_reg
!(f0_f32
, f32, "f0", "ler");
164 // CHECK-LABEL: f0_f64:
166 // CHECK: ldr %f0, %f0
168 check_reg
!(f0_f64
, f64, "f0", "ldr");