diff options
Diffstat (limited to 'src/test/assembly/asm')
20 files changed, 0 insertions, 4642 deletions
diff --git a/src/test/assembly/asm/aarch64-el2vmsa.rs b/src/test/assembly/asm/aarch64-el2vmsa.rs deleted file mode 100644 index 1908ffb8f..000000000 --- a/src/test/assembly/asm/aarch64-el2vmsa.rs +++ /dev/null @@ -1,37 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target aarch64-unknown-linux-gnu -// needs-llvm-components: aarch64 - -#![feature(no_core, lang_items, rustc_attrs)] -#![crate_type = "rlib"] -#![no_core] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} - -#[lang = "sized"] -trait Sized {} - -// CHECK-LABEL: ttbr0_el2: -#[no_mangle] -pub fn ttbr0_el2() { - // CHECK: //APP - // CHECK-NEXT: msr TTBR0_EL2, x0 - // CHECK-NEXT: //NO_APP - unsafe { - asm!("msr ttbr0_el2, x0"); - } -} - -// CHECK-LABEL: vttbr_el2: -#[no_mangle] -pub fn vttbr_el2() { - // CHECK: //APP - // CHECK-NEXT: msr VTTBR_EL2, x0 - // CHECK-NEXT: //NO_APP - unsafe { - asm!("msr vttbr_el2, x0"); - } -} diff --git a/src/test/assembly/asm/aarch64-modifiers.rs b/src/test/assembly/asm/aarch64-modifiers.rs deleted file mode 100644 index 5196aa9fa..000000000 --- a/src/test/assembly/asm/aarch64-modifiers.rs +++ /dev/null @@ -1,145 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: -O -// compile-flags: --target aarch64-unknown-linux-gnu -// needs-llvm-components: aarch64 - -#![feature(no_core, lang_items, rustc_attrs)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -impl Copy for i32 {} - -macro_rules! check { - ($func:ident $reg:ident $code:literal) => { - // -O and extern "C" guarantee that the selected register is always r0/s0/d0/q0 - #[no_mangle] - pub unsafe extern "C" fn $func() -> i32 { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!($code, out($reg) y); - y - } - }; -} - -// CHECK-LABEL: reg: -// CHECK: //APP -// CHECK: mov x0, x0 -// CHECK: //NO_APP -check!(reg reg "mov {0}, {0}"); - -// CHECK-LABEL: reg_w: -// CHECK: //APP -// CHECK: mov w0, w0 -// CHECK: //NO_APP -check!(reg_w reg "mov {0:w}, {0:w}"); - -// CHECK-LABEL: reg_x: -// CHECK: //APP -// CHECK: mov x0, x0 -// CHECK: //NO_APP -check!(reg_x reg "mov {0:x}, {0:x}"); - -// CHECK-LABEL: vreg: -// CHECK: //APP -// CHECK: add v0.4s, v0.4s, v0.4s -// CHECK: //NO_APP -check!(vreg vreg "add {0}.4s, {0}.4s, {0}.4s"); - -// CHECK-LABEL: vreg_b: -// CHECK: //APP -// CHECK: ldr b0, [x0] -// CHECK: //NO_APP -check!(vreg_b vreg "ldr {:b}, [x0]"); - -// CHECK-LABEL: vreg_h: -// CHECK: //APP -// CHECK: ldr h0, [x0] -// CHECK: //NO_APP -check!(vreg_h vreg "ldr {:h}, [x0]"); - -// CHECK-LABEL: vreg_s: -// CHECK: //APP -// CHECK: ldr s0, [x0] -// CHECK: //NO_APP -check!(vreg_s vreg "ldr {:s}, [x0]"); - -// CHECK-LABEL: vreg_d: -// CHECK: //APP -// CHECK: ldr d0, [x0] -// CHECK: //NO_APP -check!(vreg_d vreg "ldr {:d}, [x0]"); - -// CHECK-LABEL: vreg_q: -// CHECK: //APP -// CHECK: ldr q0, [x0] -// CHECK: //NO_APP -check!(vreg_q vreg "ldr {:q}, [x0]"); - -// CHECK-LABEL: vreg_v: -// CHECK: //APP -// CHECK: add v0.4s, v0.4s, v0.4s -// CHECK: //NO_APP -check!(vreg_v vreg "add {0:v}.4s, {0:v}.4s, {0:v}.4s"); - -// CHECK-LABEL: vreg_low16: -// CHECK: //APP -// CHECK: add v0.4s, v0.4s, v0.4s -// CHECK: //NO_APP -check!(vreg_low16 vreg_low16 "add {0}.4s, {0}.4s, {0}.4s"); - -// CHECK-LABEL: vreg_low16_b: -// CHECK: //APP -// CHECK: ldr b0, [x0] -// CHECK: //NO_APP -check!(vreg_low16_b vreg_low16 "ldr {:b}, [x0]"); - -// CHECK-LABEL: vreg_low16_h: -// CHECK: //APP -// CHECK: ldr h0, [x0] -// CHECK: //NO_APP -check!(vreg_low16_h vreg_low16 "ldr {:h}, [x0]"); - -// CHECK-LABEL: vreg_low16_s: -// CHECK: //APP -// CHECK: ldr s0, [x0] -// CHECK: //NO_APP -check!(vreg_low16_s vreg_low16 "ldr {:s}, [x0]"); - -// CHECK-LABEL: vreg_low16_d: -// CHECK: //APP -// CHECK: ldr d0, [x0] -// CHECK: //NO_APP -check!(vreg_low16_d vreg_low16 "ldr {:d}, [x0]"); - -// CHECK-LABEL: vreg_low16_q: -// CHECK: //APP -// CHECK: ldr q0, [x0] -// CHECK: //NO_APP -check!(vreg_low16_q vreg_low16 "ldr {:q}, [x0]"); - -// CHECK-LABEL: vreg_low16_v: -// CHECK: //APP -// CHECK: add v0.4s, v0.4s, v0.4s -// CHECK: //NO_APP -check!(vreg_low16_v vreg_low16 "add {0:v}.4s, {0:v}.4s, {0:v}.4s"); diff --git a/src/test/assembly/asm/aarch64-outline-atomics.rs b/src/test/assembly/asm/aarch64-outline-atomics.rs deleted file mode 100644 index c2ec4e911..000000000 --- a/src/test/assembly/asm/aarch64-outline-atomics.rs +++ /dev/null @@ -1,16 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: -O -// compile-flags: --target aarch64-unknown-linux-gnu -// needs-llvm-components: aarch64 -// only-aarch64 -// only-linux - -#![crate_type = "rlib"] - -use std::sync::atomic::{AtomicI32, Ordering::*}; - -pub fn compare_exchange(a: &AtomicI32) { - // On AArch64 LLVM should outline atomic operations. - // CHECK: __aarch64_cas4_relax - let _ = a.compare_exchange(0, 10, Relaxed, Relaxed); -} diff --git a/src/test/assembly/asm/aarch64-types.rs b/src/test/assembly/asm/aarch64-types.rs deleted file mode 100644 index 66c39a48c..000000000 --- a/src/test/assembly/asm/aarch64-types.rs +++ /dev/null @@ -1,565 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target aarch64-unknown-linux-gnu -// needs-llvm-components: aarch64 - -#![feature(no_core, lang_items, rustc_attrs, repr_simd)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *mut u8; - -#[repr(simd)] -pub struct i8x8(i8, i8, i8, i8, i8, i8, i8, i8); -#[repr(simd)] -pub struct i16x4(i16, i16, i16, i16); -#[repr(simd)] -pub struct i32x2(i32, i32); -#[repr(simd)] -pub struct i64x1(i64); -#[repr(simd)] -pub struct f32x2(f32, f32); -#[repr(simd)] -pub struct f64x1(f64); -#[repr(simd)] -pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); -#[repr(simd)] -pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); -#[repr(simd)] -pub struct i32x4(i32, i32, i32, i32); -#[repr(simd)] -pub struct i64x2(i64, i64); -#[repr(simd)] -pub struct f32x4(f32, f32, f32, f32); -#[repr(simd)] -pub struct f64x2(f64, f64); - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for i64 {} -impl Copy for f64 {} -impl Copy for ptr {} -impl Copy for i8x8 {} -impl Copy for i16x4 {} -impl Copy for i32x2 {} -impl Copy for i64x1 {} -impl Copy for f32x2 {} -impl Copy for f64x1 {} -impl Copy for i8x16 {} -impl Copy for i16x8 {} -impl Copy for i32x4 {} -impl Copy for i64x2 {} -impl Copy for f32x4 {} -impl Copy for f64x2 {} - -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// CHECK-LABEL: sym_fn: -// CHECK: //APP -// CHECK: bl extern_func -// CHECK: //NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("bl {}", sym extern_func); -} - -// CHECK-LABEL: sym_static: -// CHECK: //APP -// CHECK: adr x0, extern_static -// CHECK: //NO_APP -#[no_mangle] -pub unsafe fn sym_static() { - asm!("adr x0, {}", sym extern_static); -} - -// Regression test for #75761 -// CHECK-LABEL: issue_75761: -// CHECK: str {{.*}}x30 -// CHECK: //APP -// CHECK: //NO_APP -// CHECK: ldr {{.*}}x30 -#[no_mangle] -pub unsafe fn issue_75761() { - asm!("", out("v0") _, out("x30") _); -} - -macro_rules! check { - ($func:ident $ty:ident $class:ident $mov:literal $modifier:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!( - concat!($mov, " {:", $modifier, "}, {:", $modifier, "}"), - out($class) y, - in($class) x - ); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -// CHECK-LABEL: reg_i8: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check!(reg_i8 i8 reg "mov" ""); - -// CHECK-LABEL: reg_i16: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check!(reg_i16 i16 reg "mov" ""); - -// CHECK-LABEL: reg_i32: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check!(reg_i32 i32 reg "mov" ""); - -// CHECK-LABEL: reg_f32: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check!(reg_f32 f32 reg "mov" ""); - -// CHECK-LABEL: reg_i64: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check!(reg_i64 i64 reg "mov" ""); - -// CHECK-LABEL: reg_f64: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check!(reg_f64 f64 reg "mov" ""); - -// CHECK-LABEL: reg_ptr: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check!(reg_ptr ptr reg "mov" ""); - -// CHECK-LABEL: vreg_i8: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i8 i8 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i16: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i16 i16 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i32: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i32 i32 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_f32: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_f32 f32 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i64: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i64 i64 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_f64: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_f64 f64 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_ptr: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_ptr ptr vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i8x8: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i8x8 i8x8 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i16x4: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i16x4 i16x4 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i32x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i32x2 i32x2 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i64x1: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i64x1 i64x1 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_f32x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_f32x2 f32x2 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_f64x1: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_f64x1 f64x1 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i8x16: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i8x16 i8x16 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i16x8: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i16x8 i16x8 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i32x4: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i32x4 i32x4 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_i64x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_i64x2 i64x2 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_f32x4: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_f32x4 f32x4 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_f64x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_f64x2 f64x2 vreg "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i8: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i8 i8 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i16: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i16 i16 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_f32: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_f32 f32 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i64: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i64 i64 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_f64: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_f64 f64 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_ptr: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_ptr ptr vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i8x8: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i8x8 i8x8 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i16x4: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i16x4 i16x4 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i32x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i32x2 i32x2 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i64x1: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i64x1 i64x1 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_f32x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_f32x2 f32x2 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_f64x1: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_f64x1 f64x1 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i8x16: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i8x16 i8x16 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i16x8: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i16x8 i16x8 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i32x4: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i32x4 i32x4 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_i64x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_i64x2 i64x2 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_f32x4: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_f32x4 f32x4 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: vreg_low16_f64x2: -// CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: //NO_APP -check!(vreg_low16_f64x2 f64x2 vreg_low16 "fmov" "s"); - -// CHECK-LABEL: x0_i8: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check_reg!(x0_i8 i8 "x0" "mov"); - -// CHECK-LABEL: x0_i16: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check_reg!(x0_i16 i16 "x0" "mov"); - -// CHECK-LABEL: x0_i32: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check_reg!(x0_i32 i32 "x0" "mov"); - -// CHECK-LABEL: x0_f32: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check_reg!(x0_f32 f32 "x0" "mov"); - -// CHECK-LABEL: x0_i64: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check_reg!(x0_i64 i64 "x0" "mov"); - -// CHECK-LABEL: x0_f64: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check_reg!(x0_f64 f64 "x0" "mov"); - -// CHECK-LABEL: x0_ptr: -// CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} -// CHECK: //NO_APP -check_reg!(x0_ptr ptr "x0" "mov"); - -// CHECK-LABEL: v0_i8: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i8 i8 "s0" "fmov"); - -// CHECK-LABEL: v0_i16: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i16 i16 "s0" "fmov"); - -// CHECK-LABEL: v0_i32: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i32 i32 "s0" "fmov"); - -// CHECK-LABEL: v0_f32: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_f32 f32 "s0" "fmov"); - -// CHECK-LABEL: v0_i64: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i64 i64 "s0" "fmov"); - -// CHECK-LABEL: v0_f64: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_f64 f64 "s0" "fmov"); - -// CHECK-LABEL: v0_ptr: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_ptr ptr "s0" "fmov"); - -// CHECK-LABEL: v0_i8x8: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i8x8 i8x8 "s0" "fmov"); - -// CHECK-LABEL: v0_i16x4: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i16x4 i16x4 "s0" "fmov"); - -// CHECK-LABEL: v0_i32x2: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i32x2 i32x2 "s0" "fmov"); - -// CHECK-LABEL: v0_i64x1: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i64x1 i64x1 "s0" "fmov"); - -// CHECK-LABEL: v0_f32x2: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_f32x2 f32x2 "s0" "fmov"); - -// CHECK-LABEL: v0_f64x1: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_f64x1 f64x1 "s0" "fmov"); - -// CHECK-LABEL: v0_i8x16: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i8x16 i8x16 "s0" "fmov"); - -// CHECK-LABEL: v0_i16x8: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i16x8 i16x8 "s0" "fmov"); - -// CHECK-LABEL: v0_i32x4: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i32x4 i32x4 "s0" "fmov"); - -// CHECK-LABEL: v0_i64x2: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_i64x2 i64x2 "s0" "fmov"); - -// CHECK-LABEL: v0_f32x4: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_f32x4 f32x4 "s0" "fmov"); - -// CHECK-LABEL: v0_f64x2: -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_f64x2 f64x2 "s0" "fmov"); diff --git a/src/test/assembly/asm/arm-modifiers.rs b/src/test/assembly/asm/arm-modifiers.rs deleted file mode 100644 index 88ffeaecf..000000000 --- a/src/test/assembly/asm/arm-modifiers.rs +++ /dev/null @@ -1,144 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: -O -// compile-flags: --target armv7-unknown-linux-gnueabihf -// compile-flags: -C target-feature=+neon -// needs-llvm-components: arm - -#![feature(no_core, lang_items, rustc_attrs, repr_simd)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -#[repr(simd)] -pub struct f32x4(f32, f32, f32, f32); - -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for f64 {} -impl Copy for f32x4 {} - -macro_rules! check { - ($func:ident $modifier:literal $reg:ident $ty:ident $mov:literal) => { - // -O and extern "C" guarantee that the selected register is always r0/s0/d0/q0 - #[no_mangle] - pub unsafe extern "C" fn $func() -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " {0:", $modifier, "}, {0:", $modifier, "}"), out($reg) y); - y - } - }; -} - -// CHECK-LABEL: reg: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check!(reg "" reg i32 "mov"); - -// CHECK-LABEL: sreg: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check!(sreg "" sreg f32 "vmov.f32"); - -// CHECK-LABEL: sreg_low16: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check!(sreg_low16 "" sreg_low16 f32 "vmov.f32"); - -// CHECK-LABEL: dreg: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check!(dreg "" dreg f64 "vmov.f64"); - -// CHECK-LABEL: dreg_low16: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check!(dreg_low16 "" dreg_low16 f64 "vmov.f64"); - -// CHECK-LABEL: dreg_low8: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check!(dreg_low8 "" dreg_low8 f64 "vmov.f64"); - -// CHECK-LABEL: qreg: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check!(qreg "" qreg f32x4 "vmov"); - -// CHECK-LABEL: qreg_e: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check!(qreg_e "e" qreg f32x4 "vmov.f64"); - -// CHECK-LABEL: qreg_f: -// CHECK: @APP -// CHECK: vmov.f64 d1, d1 -// CHECK: @NO_APP -check!(qreg_f "f" qreg f32x4 "vmov.f64"); - -// CHECK-LABEL: qreg_low8: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check!(qreg_low8 "" qreg_low8 f32x4 "vmov"); - -// CHECK-LABEL: qreg_low8_e: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check!(qreg_low8_e "e" qreg_low8 f32x4 "vmov.f64"); - -// CHECK-LABEL: qreg_low8_f: -// CHECK: @APP -// CHECK: vmov.f64 d1, d1 -// CHECK: @NO_APP -check!(qreg_low8_f "f" qreg_low8 f32x4 "vmov.f64"); - -// CHECK-LABEL: qreg_low4: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check!(qreg_low4 "" qreg_low4 f32x4 "vmov"); - -// CHECK-LABEL: qreg_low4_e: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check!(qreg_low4_e "e" qreg_low4 f32x4 "vmov.f64"); - -// CHECK-LABEL: qreg_low4_f: -// CHECK: @APP -// CHECK: vmov.f64 d1, d1 -// CHECK: @NO_APP -check!(qreg_low4_f "f" qreg_low4 f32x4 "vmov.f64"); diff --git a/src/test/assembly/asm/arm-types.rs b/src/test/assembly/asm/arm-types.rs deleted file mode 100644 index b22a26ce3..000000000 --- a/src/test/assembly/asm/arm-types.rs +++ /dev/null @@ -1,530 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target armv7-unknown-linux-gnueabihf -// compile-flags: -C target-feature=+neon -// needs-llvm-components: arm - -#![feature(no_core, lang_items, rustc_attrs, repr_simd)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *mut u8; - -#[repr(simd)] -pub struct i8x8(i8, i8, i8, i8, i8, i8, i8, i8); -#[repr(simd)] -pub struct i16x4(i16, i16, i16, i16); -#[repr(simd)] -pub struct i32x2(i32, i32); -#[repr(simd)] -pub struct i64x1(i64); -#[repr(simd)] -pub struct f32x2(f32, f32); -#[repr(simd)] -pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); -#[repr(simd)] -pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); -#[repr(simd)] -pub struct i32x4(i32, i32, i32, i32); -#[repr(simd)] -pub struct i64x2(i64, i64); -#[repr(simd)] -pub struct f32x4(f32, f32, f32, f32); - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for i64 {} -impl Copy for f64 {} -impl Copy for ptr {} -impl Copy for i8x8 {} -impl Copy for i16x4 {} -impl Copy for i32x2 {} -impl Copy for i64x1 {} -impl Copy for f32x2 {} -impl Copy for i8x16 {} -impl Copy for i16x8 {} -impl Copy for i32x4 {} -impl Copy for i64x2 {} -impl Copy for f32x4 {} - -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// CHECK-LABEL: sym_fn: -// CHECK: @APP -// CHECK: bl extern_func -// CHECK: @NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("bl {}", sym extern_func); -} - -// CHECK-LABEL: sym_static: -// CHECK: @APP -// CHECK: adr r0, extern_static -// CHECK: @NO_APP -#[no_mangle] -pub unsafe fn sym_static() { - asm!("adr r0, {}", sym extern_static); -} - -// Regression test for #82052. -// CHECK-LABEL: issue_82052 -// CHECK: push {{.*}}lr -// CHECK: @APP -// CHECK: @NO_APP -pub unsafe fn issue_82052() { - asm!("", out("r14") _); -} - -macro_rules! check { - ($func:ident $ty:ident $class:ident $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " {}, {}"), out($class) y, in($class) x); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -// CHECK-LABEL: reg_i8: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_i8 i8 reg "mov"); - -// CHECK-LABEL: reg_i16: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_i16 i16 reg "mov"); - -// CHECK-LABEL: reg_i32: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_i32 i32 reg "mov"); - -// CHECK-LABEL: reg_f32: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_f32 f32 reg "mov"); - -// CHECK-LABEL: reg_ptr: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_ptr ptr reg "mov"); - -// CHECK-LABEL: sreg_i32: -// CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: @NO_APP -check!(sreg_i32 i32 sreg "vmov.f32"); - -// CHECK-LABEL: sreg_f32: -// CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: @NO_APP -check!(sreg_f32 f32 sreg "vmov.f32"); - -// CHECK-LABEL: sreg_ptr: -// CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: @NO_APP -check!(sreg_ptr ptr sreg "vmov.f32"); - -// CHECK-LABEL: sreg_low16_i32: -// CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: @NO_APP -check!(sreg_low16_i32 i32 sreg_low16 "vmov.f32"); - -// CHECK-LABEL: sreg_low16_f32: -// CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: @NO_APP -check!(sreg_low16_f32 f32 sreg_low16 "vmov.f32"); - -// CHECK-LABEL: dreg_i64: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_i64 i64 dreg "vmov.f64"); - -// CHECK-LABEL: dreg_f64: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_f64 f64 dreg "vmov.f64"); - -// CHECK-LABEL: dreg_i8x8: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_i8x8 i8x8 dreg "vmov.f64"); - -// CHECK-LABEL: dreg_i16x4: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_i16x4 i16x4 dreg "vmov.f64"); - -// CHECK-LABEL: dreg_i32x2: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_i32x2 i32x2 dreg "vmov.f64"); - -// CHECK-LABEL: dreg_i64x1: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_i64x1 i64x1 dreg "vmov.f64"); - -// CHECK-LABEL: dreg_f32x2: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_f32x2 f32x2 dreg "vmov.f64"); - -// CHECK-LABEL: dreg_low16_i64: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low16_i64 i64 dreg_low16 "vmov.f64"); - -// CHECK-LABEL: dreg_low16_f64: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low16_f64 f64 dreg_low16 "vmov.f64"); - -// CHECK-LABEL: dreg_low16_i8x8: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64"); - -// CHECK-LABEL: dreg_low16_i16x4: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low16_i16x4 i16x4 dreg_low16 "vmov.f64"); - -// CHECK-LABEL: dreg_low16_i32x2: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low16_i32x2 i32x2 dreg_low16 "vmov.f64"); - -// CHECK-LABEL: dreg_low16_i64x1: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low16_i64x1 i64x1 dreg_low16 "vmov.f64"); - -// CHECK-LABEL: dreg_low16_f32x2: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64"); - -// CHECK-LABEL: dreg_low8_i64: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low8_i64 i64 dreg_low8 "vmov.f64"); - -// CHECK-LABEL: dreg_low8_f64: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low8_f64 f64 dreg_low8 "vmov.f64"); - -// CHECK-LABEL: dreg_low8_i8x8: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64"); - -// CHECK-LABEL: dreg_low8_i16x4: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low8_i16x4 i16x4 dreg_low8 "vmov.f64"); - -// CHECK-LABEL: dreg_low8_i32x2: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low8_i32x2 i32x2 dreg_low8 "vmov.f64"); - -// CHECK-LABEL: dreg_low8_i64x1: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low8_i64x1 i64x1 dreg_low8 "vmov.f64"); - -// CHECK-LABEL: dreg_low8_f32x2: -// CHECK: @APP -// CHECK: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// CHECK: @NO_APP -check!(dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64"); - -// CHECK-LABEL: qreg_i8x16: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_i8x16 i8x16 qreg "vmov"); - -// CHECK-LABEL: qreg_i16x8: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_i16x8 i16x8 qreg "vmov"); - -// CHECK-LABEL: qreg_i32x4: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_i32x4 i32x4 qreg "vmov"); - -// CHECK-LABEL: qreg_i64x2: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_i64x2 i64x2 qreg "vmov"); - -// CHECK-LABEL: qreg_f32x4: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_f32x4 f32x4 qreg "vmov"); - -// CHECK-LABEL: qreg_low8_i8x16: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low8_i8x16 i8x16 qreg_low8 "vmov"); - -// CHECK-LABEL: qreg_low8_i16x8: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low8_i16x8 i16x8 qreg_low8 "vmov"); - -// CHECK-LABEL: qreg_low8_i32x4: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low8_i32x4 i32x4 qreg_low8 "vmov"); - -// CHECK-LABEL: qreg_low8_i64x2: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low8_i64x2 i64x2 qreg_low8 "vmov"); - -// CHECK-LABEL: qreg_low8_f32x4: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low8_f32x4 f32x4 qreg_low8 "vmov"); - -// CHECK-LABEL: qreg_low4_i8x16: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low4_i8x16 i8x16 qreg_low4 "vmov"); - -// CHECK-LABEL: qreg_low4_i16x8: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low4_i16x8 i16x8 qreg_low4 "vmov"); - -// CHECK-LABEL: qreg_low4_i32x4: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low4_i32x4 i32x4 qreg_low4 "vmov"); - -// CHECK-LABEL: qreg_low4_i64x2: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low4_i64x2 i64x2 qreg_low4 "vmov"); - -// CHECK-LABEL: qreg_low4_f32x4: -// CHECK: @APP -// CHECK: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// CHECK: @NO_APP -check!(qreg_low4_f32x4 f32x4 qreg_low4 "vmov"); - -// CHECK-LABEL: r0_i8: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check_reg!(r0_i8 i8 "r0" "mov"); - -// CHECK-LABEL: r0_i16: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check_reg!(r0_i16 i16 "r0" "mov"); - -// CHECK-LABEL: r0_i32: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check_reg!(r0_i32 i32 "r0" "mov"); - -// CHECK-LABEL: r0_f32: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check_reg!(r0_f32 f32 "r0" "mov"); - -// CHECK-LABEL: r0_ptr: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check_reg!(r0_ptr ptr "r0" "mov"); - -// CHECK-LABEL: s0_i32: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check_reg!(s0_i32 i32 "s0" "vmov.f32"); - -// CHECK-LABEL: s0_f32: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check_reg!(s0_f32 f32 "s0" "vmov.f32"); - -// CHECK-LABEL: s0_ptr: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check_reg!(s0_ptr ptr "s0" "vmov.f32"); - -// CHECK-LABEL: d0_i64: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check_reg!(d0_i64 i64 "d0" "vmov.f64"); - -// CHECK-LABEL: d0_f64: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check_reg!(d0_f64 f64 "d0" "vmov.f64"); - -// CHECK-LABEL: d0_i8x8: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check_reg!(d0_i8x8 i8x8 "d0" "vmov.f64"); - -// CHECK-LABEL: d0_i16x4: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check_reg!(d0_i16x4 i16x4 "d0" "vmov.f64"); - -// CHECK-LABEL: d0_i32x2: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check_reg!(d0_i32x2 i32x2 "d0" "vmov.f64"); - -// CHECK-LABEL: d0_i64x1: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check_reg!(d0_i64x1 i64x1 "d0" "vmov.f64"); - -// CHECK-LABEL: d0_f32x2: -// CHECK: @APP -// CHECK: vmov.f64 d0, d0 -// CHECK: @NO_APP -check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64"); - -// CHECK-LABEL: q0_i8x16: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check_reg!(q0_i8x16 i8x16 "q0" "vmov"); - -// CHECK-LABEL: q0_i16x8: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check_reg!(q0_i16x8 i16x8 "q0" "vmov"); - -// CHECK-LABEL: q0_i32x4: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check_reg!(q0_i32x4 i32x4 "q0" "vmov"); - -// CHECK-LABEL: q0_i64x2: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check_reg!(q0_i64x2 i64x2 "q0" "vmov"); - -// CHECK-LABEL: q0_f32x4: -// CHECK: @APP -// CHECK: vorr q0, q0, q0 -// CHECK: @NO_APP -check_reg!(q0_f32x4 f32x4 "q0" "vmov"); diff --git a/src/test/assembly/asm/avr-modifiers.rs b/src/test/assembly/asm/avr-modifiers.rs deleted file mode 100644 index ffdc8f2e3..000000000 --- a/src/test/assembly/asm/avr-modifiers.rs +++ /dev/null @@ -1,59 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target avr-unknown-gnu-atmega328 -// needs-llvm-components: avr - -#![feature(no_core, lang_items, rustc_attrs, asm_experimental_arch)] -#![crate_type = "rlib"] -#![no_core] -#![allow(non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const u64; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for i64 {} -impl Copy for ptr {} - -macro_rules! check { - ($func:ident $hi:literal $lo:literal $reg:tt) => { - #[no_mangle] - unsafe fn $func() -> i16 { - let y; - asm!(concat!("mov {0:", $hi, "}, {0:", $lo, "}"), out($reg) y); - y - } - }; -} - -// CHECK-LABEL: reg_pair_modifiers: -// CHECK: ;APP -// CHECK: mov r{{[1-9]?[13579]}}, r{{[1-9]?[24680]}} -// CHECK: ;NO_APP -check!(reg_pair_modifiers "h" "l" reg_pair); - -// CHECK-LABEL: reg_iw_modifiers: -// CHECK: ;APP -// CHECK: mov r{{[1-9]?[13579]}}, r{{[1-9]?[24680]}} -// CHECK: ;NO_APP -check!(reg_iw_modifiers "h" "l" reg_iw); - -// CHECK-LABEL: reg_ptr_modifiers: -// CHECK: ;APP -// CHECK: mov r{{[1-9]?[13579]}}, r{{[1-9]?[24680]}} -// CHECK: ;NO_APP -check!(reg_ptr_modifiers "h" "l" reg_ptr); diff --git a/src/test/assembly/asm/avr-types.rs b/src/test/assembly/asm/avr-types.rs deleted file mode 100644 index b2d11a882..000000000 --- a/src/test/assembly/asm/avr-types.rs +++ /dev/null @@ -1,221 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target avr-unknown-gnu-atmega328 -// needs-llvm-components: avr - -#![feature(no_core, lang_items, rustc_attrs, asm_experimental_arch)] -#![crate_type = "rlib"] -#![no_core] -#![allow(non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const u64; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for i64 {} -impl Copy for ptr {} - -macro_rules! check { - ($func:ident $ty:ident $class:ident) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!("mov {}, {}", lateout($class) y, in($class) x); - y - } - }; -} - -macro_rules! checkw { - ($func:ident $ty:ident $class:ident) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!("movw {}, {}", lateout($class) y, in($class) x); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!("mov ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -macro_rules! check_regw { - ($func:ident $ty:ident $reg:tt $reg_lit:tt) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!("movw ", $reg_lit, ", ", $reg_lit), lateout($reg) y, in($reg) x); - y - } - }; -} - -extern "C" { - fn extern_func(); - static extern_static: i8; -} - -// CHECK-LABEL: sym_fn -// CHECK: ;APP -// CHECK: call extern_func -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("call {}", sym extern_func); -} - -// CHECK-LABEL: sym_static -// CHECK: ;APP -// CHECK: lds r{{[0-9]+}}, extern_static -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn sym_static() -> i8 { - let y; - asm!("lds {}, {}", lateout(reg) y, sym extern_static); - y -} - -// CHECK-LABEL: ld_z: -// CHECK: ;APP -// CHECK: ld r{{[0-9]+}}, Z -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn ld_z(x: i16) -> i8 { - let y; - asm!("ld {}, Z", out(reg) y, in("Z") x); - y -} - -// CHECK-LABEL: ldd_z: -// CHECK: ;APP -// CHECK: ldd r{{[0-9]+}}, Z+4 -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn ldd_z(x: i16) -> i8 { - let y; - asm!("ldd {}, Z+4", out(reg) y, in("Z") x); - y -} - -// CHECK-LABEL: ld_predecrement: -// CHECK: ;APP -// CHECK: ld r{{[0-9]+}}, -Z -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn ld_predecrement(x: i16) -> i8 { - let y; - asm!("ld {}, -Z", out(reg) y, in("Z") x); - y -} - -// CHECK-LABEL: ld_postincrement: -// CHECK: ;APP -// CHECK: ld r{{[0-9]+}}, Z+ -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn ld_postincrement(x: i16) -> i8 { - let y; - asm!("ld {}, Z+", out(reg) y, in("Z") x); - y -} - -// CHECK-LABEL: muls_clobber: -// CHECK: ;APP -// CHECK: muls r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: movw r{{[0-9]+}}, r0 -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn muls_clobber(x: i8, y: i8) -> i16 { - let z; - asm!( - "muls {}, {}", - "movw {}, r1:r0", - out(reg_iw) z, - in(reg) x, - in(reg) y, - ); - z -} - -// CHECK-LABEL: reg_i8: -// CHECK: ;APP -// CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: ;NO_APP -check!(reg_i8 i8 reg); - -// CHECK-LABEL: reg_upper_i8: -// CHECK: ;APP -// CHECK: mov r{{[1-3][0-9]}}, r{{[1-3][0-9]}} -// CHECK: ;NO_APP -check!(reg_upper_i8 i8 reg_upper); - -// CHECK-LABEL: reg_pair_i16: -// CHECK: ;APP -// CHECK: movw r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: ;NO_APP -checkw!(reg_pair_i16 i16 reg_pair); - -// CHECK-LABEL: reg_iw_i16: -// CHECK: ;APP -// CHECK: movw r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: ;NO_APP -checkw!(reg_iw_i16 i16 reg_iw); - -// CHECK-LABEL: reg_ptr_i16: -// CHECK: ;APP -// CHECK: movw r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: ;NO_APP -checkw!(reg_ptr_i16 i16 reg_ptr); - -// CHECK-LABEL: r2_i8: -// CHECK: ;APP -// CHECK: mov r2, r2 -// CHECK: ;NO_APP -check_reg!(r2_i8 i8 "r2"); - -// CHECK-LABEL: xl_i8: -// CHECK: ;APP -// CHECK: mov r26, r26 -// CHECK: ;NO_APP -check_reg!(xl_i8 i8 "XL"); - -// CHECK-LABEL: xh_i8: -// CHECK: ;APP -// CHECK: mov r27, r27 -// CHECK: ;NO_APP -check_reg!(xh_i8 i8 "XH"); - -// CHECK-LABEL: x_i16: -// CHECK: ;APP -// CHECK: movw r26, r26 -// CHECK: ;NO_APP -check_regw!(x_i16 i16 "X" "X"); - -// CHECK-LABEL: r25r24_i16: -// CHECK: ;APP -// CHECK: movw r24, r24 -// CHECK: ;NO_APP -check_regw!(r25r24_i16 i16 "r25r24" "r24"); diff --git a/src/test/assembly/asm/bpf-types.rs b/src/test/assembly/asm/bpf-types.rs deleted file mode 100644 index e177b8d0d..000000000 --- a/src/test/assembly/asm/bpf-types.rs +++ /dev/null @@ -1,153 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target bpfel-unknown-none -C target_feature=+alu32 -// needs-llvm-components: bpf - -#![feature(no_core, lang_items, rustc_attrs, repr_simd, asm_experimental_arch)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const u64; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for i64 {} -impl Copy for ptr {} - -macro_rules! check { - ($func:ident $ty:ident $class:ident) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!("{} = {}", out($class) y, in($class) x); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!($reg, " = ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -extern "C" { - fn extern_func(); -} - -// CHECK-LABEL: sym_fn -// CHECK: #APP -// CHECK: call extern_func -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("call {}", sym extern_func); -} - -// CHECK-LABEL: reg_i8: -// CHECK: #APP -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i8 i8 reg); - -// CHECK-LABEL: reg_i16: -// CHECK: #APP -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i16 i16 reg); - -// CHECK-LABEL: reg_i32: -// CHECK: #APP -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i32 i32 reg); - -// CHECK-LABEL: reg_i64: -// CHECK: #APP -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i64 i64 reg); - -// CHECK-LABEL: wreg_i8: -// CHECK: #APP -// CHECK: w{{[0-9]+}} = w{{[0-9]+}} -// CHECK: #NO_APP -check!(wreg_i8 i8 wreg); - -// CHECK-LABEL: wreg_i16: -// CHECK: #APP -// CHECK: w{{[0-9]+}} = w{{[0-9]+}} -// CHECK: #NO_APP -check!(wreg_i16 i16 wreg); - -// CHECK-LABEL: wreg_i32: -// CHECK: #APP -// CHECK: w{{[0-9]+}} = w{{[0-9]+}} -// CHECK: #NO_APP -check!(wreg_i32 i32 wreg); - -// CHECK-LABEL: r0_i8: -// CHECK: #APP -// CHECK: r0 = r0 -// CHECK: #NO_APP -check_reg!(r0_i8 i8 "r0"); - -// CHECK-LABEL: r0_i16: -// CHECK: #APP -// CHECK: r0 = r0 -// CHECK: #NO_APP -check_reg!(r0_i16 i16 "r0"); - -// CHECK-LABEL: r0_i32: -// CHECK: #APP -// CHECK: r0 = r0 -// CHECK: #NO_APP -check_reg!(r0_i32 i32 "r0"); - -// CHECK-LABEL: r0_i64: -// CHECK: #APP -// CHECK: r0 = r0 -// CHECK: #NO_APP -check_reg!(r0_i64 i64 "r0"); - -// CHECK-LABEL: w0_i8: -// CHECK: #APP -// CHECK: w0 = w0 -// CHECK: #NO_APP -check_reg!(w0_i8 i8 "w0"); - -// CHECK-LABEL: w0_i16: -// CHECK: #APP -// CHECK: w0 = w0 -// CHECK: #NO_APP -check_reg!(w0_i16 i16 "w0"); - -// CHECK-LABEL: w0_i32: -// CHECK: #APP -// CHECK: w0 = w0 -// CHECK: #NO_APP -check_reg!(w0_i32 i32 "w0"); diff --git a/src/test/assembly/asm/global_asm.rs b/src/test/assembly/asm/global_asm.rs deleted file mode 100644 index 0b361a7ed..000000000 --- a/src/test/assembly/asm/global_asm.rs +++ /dev/null @@ -1,33 +0,0 @@ -// only-x86_64 -// only-linux -// assembly-output: emit-asm -// compile-flags: -C llvm-args=--x86-asm-syntax=intel -// compile-flags: -C symbol-mangling-version=v0 - -#![feature(asm_const)] -#![crate_type = "rlib"] - -use std::arch::global_asm; - -#[no_mangle] -fn my_func() {} - -#[no_mangle] -static MY_STATIC: i32 = 0; - -// CHECK: mov eax, eax -global_asm!("mov eax, eax"); -// CHECK: mov ebx, 5 -global_asm!("mov ebx, {}", const 5); -// CHECK: mov ecx, 5 -global_asm!("movl ${}, %ecx", const 5, options(att_syntax)); -// CHECK: call my_func -global_asm!("call {}", sym my_func); -// CHECK: lea rax, [rip + MY_STATIC] -global_asm!("lea rax, [rip + {}]", sym MY_STATIC); -// CHECK: call _RNvCsiubXh4Yz005_10global_asm6foobar -global_asm!("call {}", sym foobar); -// CHECK: _RNvCsiubXh4Yz005_10global_asm6foobar: -fn foobar() { - loop {} -} diff --git a/src/test/assembly/asm/hexagon-types.rs b/src/test/assembly/asm/hexagon-types.rs deleted file mode 100644 index af16faedb..000000000 --- a/src/test/assembly/asm/hexagon-types.rs +++ /dev/null @@ -1,181 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target hexagon-unknown-linux-musl -// needs-llvm-components: hexagon - -#![feature(no_core, lang_items, rustc_attrs, repr_simd, asm_experimental_arch)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const i32; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for ptr {} -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -macro_rules! check { - ($func:ident $ty:ident $class:ident) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!("{} = {}", out($class) y, in($class) x); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($reg, " = ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -// CHECK-LABEL: sym_static: -// CHECK: InlineAsm Start -// CHECK: r0 = {{#+}}extern_static -// CHECK: InlineAsm End -#[no_mangle] -pub unsafe fn sym_static() { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - asm!("r0 = #{}", sym extern_static); -} - -// CHECK-LABEL: sym_fn: -// CHECK: InlineAsm Start -// CHECK: r0 = {{#+}}extern_func -// CHECK: InlineAsm End -#[no_mangle] -pub unsafe fn sym_fn() { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - asm!("r0 = #{}", sym extern_func); -} - -// This is a test for multi-instruction packets, -// which require the escaped braces. -// -// CHECK-LABEL: packet: -// CHECK: InlineAsm Start -// CHECK: { -// CHECK: r{{[0-9]+}} = r0 -// CHECK: memw(r1{{(\+#0)?}}) = r{{[0-9]+}} -// CHECK: } -// CHECK: InlineAsm End -#[no_mangle] -pub unsafe fn packet() { - let val = 1024; - asm!("{{ - {} = r0 - memw(r1) = {} - }}", out(reg) _, in(reg) &val); -} - -// CHECK-LABEL: reg_ptr: -// CHECK: InlineAsm Start -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: InlineAsm End -check!(reg_ptr ptr reg); - -// CHECK-LABEL: reg_f32: -// CHECK: InlineAsm Start -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: InlineAsm End -check!(reg_f32 f32 reg); - -// CHECK-LABEL: reg_i32: -// CHECK: InlineAsm Start -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: InlineAsm End -check!(reg_i32 i32 reg); - -// CHECK-LABEL: reg_i8: -// CHECK: InlineAsm Start -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: InlineAsm End -check!(reg_i8 i8 reg); - -// CHECK-LABEL: reg_i16: -// CHECK: InlineAsm Start -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} -// CHECK: InlineAsm End -check!(reg_i16 i16 reg); - -// CHECK-LABEL: r0_ptr: -// CHECK: InlineAsm Start -// CHECK: r0 = r0 -// CHECK: InlineAsm End -check_reg!(r0_ptr ptr "r0"); - -// CHECK-LABEL: r0_f32: -// CHECK: InlineAsm Start -// CHECK: r0 = r0 -// CHECK: InlineAsm End -check_reg!(r0_f32 f32 "r0"); - -// CHECK-LABEL: r0_i32: -// CHECK: InlineAsm Start -// CHECK: r0 = r0 -// CHECK: InlineAsm End -check_reg!(r0_i32 i32 "r0"); - -// CHECK-LABEL: r0_i8: -// CHECK: InlineAsm Start -// CHECK: r0 = r0 -// CHECK: InlineAsm End -check_reg!(r0_i8 i8 "r0"); - -// CHECK-LABEL: r0_i16: -// CHECK: InlineAsm Start -// CHECK: r0 = r0 -// CHECK: InlineAsm End -check_reg!(r0_i16 i16 "r0"); diff --git a/src/test/assembly/asm/mips-types.rs b/src/test/assembly/asm/mips-types.rs deleted file mode 100644 index 6aa28b062..000000000 --- a/src/test/assembly/asm/mips-types.rs +++ /dev/null @@ -1,237 +0,0 @@ -// revisions: mips32 mips64 -// assembly-output: emit-asm -//[mips32] compile-flags: --target mips-unknown-linux-gnu -//[mips32] needs-llvm-components: mips -//[mips64] compile-flags: --target mips64-unknown-linux-gnuabi64 -//[mips64] needs-llvm-components: mips - -#![feature(no_core, lang_items, rustc_attrs, repr_simd, asm_experimental_arch)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const i32; - -impl Copy for i8 {} -impl Copy for u8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for i64 {} -impl Copy for f32 {} -impl Copy for f64 {} -impl Copy for ptr {} -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// Hack to avoid function merging -extern "Rust" { - fn dont_merge(s: &str); -} - -macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov," {}, {}"), out($class) y, in($class) x); - y - } -};} - -macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } -};} - -// mips32-LABEL: sym_static_32: -// mips32: #APP -// mips32: lw $3, %got(extern_static) -// mips32: #NO_APP -#[cfg(mips32)] -#[no_mangle] -pub unsafe fn sym_static_32() { - asm!("lw $v1, {}", sym extern_static); -} - -// mips32-LABEL: sym_fn_32: -// mips32: #APP -// mips32: lw $3, %got(extern_func) -// mips32: #NO_APP -#[cfg(mips32)] -#[no_mangle] -pub unsafe fn sym_fn_32() { - asm!("lw $v1, {}", sym extern_func); -} - -// mips64-LABEL: sym_static_64: -// mips64: #APP -// mips64: ld $3, %got_disp(extern_static) -// mips64: #NO_APP -#[cfg(mips64)] -#[no_mangle] -pub unsafe fn sym_static_64() { - asm!("ld $v1, {}", sym extern_static); -} - -// mips64-LABEL: sym_fn_64: -// mips64: #APP -// mips64: ld $3, %got_disp(extern_func) -// mips64: #NO_APP -#[cfg(mips64)] -#[no_mangle] -pub unsafe fn sym_fn_64() { - asm!("ld $v1, {}", sym extern_func); -} - -// CHECK-LABEL: reg_f32: -// CHECK: #APP -// CHECK: mov.s $f{{[0-9]+}}, $f{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_f32, f32, freg, "mov.s"); - -// CHECK-LABEL: f0_f32: -// CHECK: #APP -// CHECK: mov.s $f0, $f0 -// CHECK: #NO_APP -#[no_mangle] -check_reg!(f0_f32, f32, "$f0", "mov.s"); - -// CHECK-LABEL: reg_f32_64: -// CHECK: #APP -// CHECK: mov.d $f{{[0-9]+}}, $f{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_f32_64, f32, freg, "mov.d"); - -// CHECK-LABEL: f0_f32_64: -// CHECK: #APP -// CHECK: mov.d $f0, $f0 -// CHECK: #NO_APP -#[no_mangle] -check_reg!(f0_f32_64, f32, "$f0", "mov.d"); - -// CHECK-LABEL: reg_f64: -// CHECK: #APP -// CHECK: mov.d $f{{[0-9]+}}, $f{{[0-9]+}} -// CHECK: #NO_APP -#[no_mangle] -check!(reg_f64, f64, freg, "mov.d"); - -// CHECK-LABEL: f0_f64: -// CHECK: #APP -// CHECK: mov.d $f0, $f0 -// CHECK: #NO_APP -#[no_mangle] -check_reg!(f0_f64, f64, "$f0", "mov.d"); - -// CHECK-LABEL: reg_ptr: -// CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} -// CHECK: #NO_APP -check!(reg_ptr, ptr, reg, "move"); - -// CHECK-LABEL: reg_i32: -// CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i32, i32, reg, "move"); - -// CHECK-LABEL: reg_f32_soft: -// CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} -// CHECK: #NO_APP -check!(reg_f32_soft, f32, reg, "move"); - -// mips64-LABEL: reg_f64_soft: -// mips64: #APP -// mips64: move ${{[0-9]+}}, ${{[0-9]+}} -// mips64: #NO_APP -#[cfg(mips64)] -check!(reg_f64_soft, f64, reg, "move"); - -// CHECK-LABEL: reg_i8: -// CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i8, i8, reg, "move"); - -// CHECK-LABEL: reg_u8: -// CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} -// CHECK: #NO_APP -check!(reg_u8, u8, reg, "move"); - -// CHECK-LABEL: reg_i16: -// CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i16, i16, reg, "move"); - -// mips64-LABEL: reg_i64: -// mips64: #APP -// mips64: move ${{[0-9]+}}, ${{[0-9]+}} -// mips64: #NO_APP -#[cfg(mips64)] -check!(reg_i64, i64, reg, "move"); - -// CHECK-LABEL: r8_ptr: -// CHECK: #APP -// CHECK: move $8, $8 -// CHECK: #NO_APP -check_reg!(r8_ptr, ptr, "$8", "move"); - -// CHECK-LABEL: r8_i32: -// CHECK: #APP -// CHECK: move $8, $8 -// CHECK: #NO_APP -check_reg!(r8_i32, i32, "$8", "move"); - -// CHECK-LABEL: r8_f32: -// CHECK: #APP -// CHECK: move $8, $8 -// CHECK: #NO_APP -check_reg!(r8_f32, f32, "$8", "move"); - -// CHECK-LABEL: r8_i8: -// CHECK: #APP -// CHECK: move $8, $8 -// CHECK: #NO_APP -check_reg!(r8_i8, i8, "$8", "move"); - -// CHECK-LABEL: r8_u8: -// CHECK: #APP -// CHECK: move $8, $8 -// CHECK: #NO_APP -check_reg!(r8_u8, u8, "$8", "move"); - -// CHECK-LABEL: r8_i16: -// CHECK: #APP -// CHECK: move $8, $8 -// CHECK: #NO_APP -check_reg!(r8_i16, i16, "$8", "move"); diff --git a/src/test/assembly/asm/msp430-types.rs b/src/test/assembly/asm/msp430-types.rs deleted file mode 100644 index 2c73b3b09..000000000 --- a/src/test/assembly/asm/msp430-types.rs +++ /dev/null @@ -1,157 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target msp430-none-elf -// needs-llvm-components: msp430 - -#![feature(no_core, lang_items, rustc_attrs, asm_experimental_arch, asm_const)] -#![crate_type = "rlib"] -#![no_core] -#![allow(non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const i16; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for i64 {} -impl Copy for ptr {} - -macro_rules! check { - ($func:ident $ty:ident $class:ident) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!("mov {}, {}", lateout($class) y, in($class) x); - y - } - }; -} - -macro_rules! checkb { - ($func:ident $ty:ident $class:ident) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!("mov.b {}, {}", lateout($class) y, in($class) x); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!("mov ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -macro_rules! check_regb { - ($func:ident $ty:ident $reg:tt) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!("mov.b ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -extern "C" { - fn extern_func(); - static extern_static: i8; -} - -// CHECK-LABEL: sym_fn -// CHECK: ;APP -// CHECK: call extern_func -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("call {}", sym extern_func); -} - -// CHECK-LABEL: sym_static -// CHECK: ;APP -// CHECK: mov.b extern_static, r{{[0-9]+}} -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn sym_static() -> i8 { - let y; - asm!("mov.b {1}, {0}", lateout(reg) y, sym extern_static); - y -} - -// CHECK-LABEL: add_const: -// CHECK: ;APP -// CHECK: add.b #5, r{{[0-9]+}} -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn add_const() -> i8 { - let y; - asm!("add.b #{number}, {}", out(reg) y, number = const 5); - y -} - -// CHECK-LABEL: mov_postincrement: -// CHECK: ;APP -// CHECK: mov @r5+, r{{[0-9]+}} -// CHECK: ;NO_APP -#[no_mangle] -pub unsafe fn mov_postincrement(mut x: *const i16) -> (i16, *const i16) { - let y; - asm!("mov @r5+, {0}", out(reg) y, inlateout("r5") x); - (y, x) -} - -// CHECK-LABEL: reg_i8: -// CHECK: ;APP -// CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: ;NO_APP -check!(reg_i8 i8 reg); - -// CHECK-LABEL: reg_i16: -// CHECK: ;APP -// CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: ;NO_APP -check!(reg_i16 i16 reg); - -// CHECK-LABEL: reg_i8b: -// CHECK: ;APP -// CHECK: mov.b r{{[0-9]+}}, r{{[0-9]+}} -// CHECK: ;NO_APP -checkb!(reg_i8b i8 reg); - -// CHECK-LABEL: r5_i8: -// CHECK: ;APP -// CHECK: mov r5, r5 -// CHECK: ;NO_APP -check_reg!(r5_i8 i8 "r5"); - -// CHECK-LABEL: r5_i16: -// CHECK: ;APP -// CHECK: mov r5, r5 -// CHECK: ;NO_APP -check_reg!(r5_i16 i16 "r5"); - -// CHECK-LABEL: r5_i8b: -// CHECK: ;APP -// CHECK: mov.b r5, r5 -// CHECK: ;NO_APP -check_regb!(r5_i8b i8 "r5"); diff --git a/src/test/assembly/asm/nvptx-types.rs b/src/test/assembly/asm/nvptx-types.rs deleted file mode 100644 index c319946b5..000000000 --- a/src/test/assembly/asm/nvptx-types.rs +++ /dev/null @@ -1,133 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target nvptx64-nvidia-cuda -// compile-flags: --crate-type cdylib -// needs-llvm-components: nvptx - -#![feature(no_core, lang_items, rustc_attrs, asm_experimental_arch)] -#![no_core] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *mut u8; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for i64 {} -impl Copy for f64 {} -impl Copy for ptr {} - -// NVPTX does not support static variables -#[no_mangle] -fn extern_func() {} - -// CHECK-LABEL: .visible .func sym_fn() -// CHECK: // begin inline asm -// CHECK: call extern_func; -// CHECK: // end inline asm -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("call {};", sym extern_func); -} - -macro_rules! check { - ($func:ident $ty:ident $class:ident $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!($mov, " {}, {};"), out($class) y, in($class) x); - y - } - }; -} - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i8 -// CHECK: // begin inline asm -// CHECK: mov.i16 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg16_i8 i8 reg16 "mov.i16"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i16 -// CHECK: // begin inline asm -// CHECK: mov.i16 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg16_i16 i16 reg16 "mov.i16"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i8 -// CHECK: // begin inline asm -// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg32_i8 i8 reg32 "mov.i32"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i16 -// CHECK: // begin inline asm -// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg32_i16 i16 reg32 "mov.i32"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i32 -// CHECK: // begin inline asm -// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg32_i32 i32 reg32 "mov.i32"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_f32 -// CHECK: // begin inline asm -// CHECK: mov.i32 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg32_f32 f32 reg32 "mov.i32"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i8 -// CHECK: // begin inline asm -// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg64_i8 i8 reg64 "mov.i64"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i16 -// CHECK: // begin inline asm -// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg64_i16 i16 reg64 "mov.i64"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i32 -// CHECK: // begin inline asm -// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg64_i32 i32 reg64 "mov.i64"); - -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_f32 -// CHECK: // begin inline asm -// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg64_f32 f32 reg64 "mov.i64"); - -// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_i64 -// CHECK: // begin inline asm -// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg64_i64 i64 reg64 "mov.i64"); - -// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_f64 -// CHECK: // begin inline asm -// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg64_f64 f64 reg64 "mov.i64"); - -// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_ptr -// CHECK: // begin inline asm -// CHECK: mov.i64 %{{[a-z0-9]+}}, %{{[a-z0-9]+}}; -// CHECK: // end inline asm -check!(reg64_ptr ptr reg64 "mov.i64"); diff --git a/src/test/assembly/asm/powerpc-types.rs b/src/test/assembly/asm/powerpc-types.rs deleted file mode 100644 index e27b00520..000000000 --- a/src/test/assembly/asm/powerpc-types.rs +++ /dev/null @@ -1,207 +0,0 @@ -// revisions: powerpc powerpc64 -// assembly-output: emit-asm -//[powerpc] compile-flags: --target powerpc-unknown-linux-gnu -//[powerpc] needs-llvm-components: powerpc -//[powerpc64] compile-flags: --target powerpc64-unknown-linux-gnu -//[powerpc64] needs-llvm-components: powerpc - -#![feature(no_core, lang_items, rustc_attrs, repr_simd, asm_experimental_arch)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const i32; - -impl Copy for i8 {} -impl Copy for u8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for i64 {} -impl Copy for f32 {} -impl Copy for f64 {} -impl Copy for ptr {} -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// Hack to avoid function merging -extern "Rust" { - fn dont_merge(s: &str); -} - -macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov," {}, {}"), out($class) y, in($class) x); - y - } -};} - -macro_rules! check_reg { ($func:ident, $ty:ty, $rego:tt, $regc:tt, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " ", $rego, ", ", $rego), lateout($regc) y, in($regc) x); - y - } -};} - -// CHECK-LABEL: reg_i8: -// CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i8, i8, reg, "mr"); - -// CHECK-LABEL: reg_i16: -// CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i16, i16, reg, "mr"); - -// CHECK-LABEL: reg_i32: -// CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i32, i32, reg, "mr"); - -// powerpc64-LABEL: reg_i64: -// powerpc64: #APP -// powerpc64: mr {{[0-9]+}}, {{[0-9]+}} -// powerpc64: #NO_APP -#[cfg(powerpc64)] -check!(reg_i64, i64, reg, "mr"); - -// CHECK-LABEL: reg_i8_nz: -// CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i8_nz, i8, reg_nonzero, "mr"); - -// CHECK-LABEL: reg_i16_nz: -// CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i16_nz, i16, reg_nonzero, "mr"); - -// CHECK-LABEL: reg_i32_nz: -// CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i32_nz, i32, reg_nonzero, "mr"); - -// powerpc64-LABEL: reg_i64_nz: -// powerpc64: #APP -// powerpc64: mr {{[0-9]+}}, {{[0-9]+}} -// powerpc64: #NO_APP -#[cfg(powerpc64)] -check!(reg_i64_nz, i64, reg_nonzero, "mr"); - -// CHECK-LABEL: reg_f32: -// CHECK: #APP -// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_f32, f32, freg, "fmr"); - -// CHECK-LABEL: reg_f64: -// CHECK: #APP -// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} -// CHECK: #NO_APP -check!(reg_f64, f64, freg, "fmr"); - -// CHECK-LABEL: reg_i8_r0: -// CHECK: #APP -// CHECK: mr 0, 0 -// CHECK: #NO_APP -check_reg!(reg_i8_r0, i8, "0", "0", "mr"); - -// CHECK-LABEL: reg_i16_r0: -// CHECK: #APP -// CHECK: mr 0, 0 -// CHECK: #NO_APP -check_reg!(reg_i16_r0, i16, "0", "0", "mr"); - -// CHECK-LABEL: reg_i32_r0: -// CHECK: #APP -// CHECK: mr 0, 0 -// CHECK: #NO_APP -check_reg!(reg_i32_r0, i32, "0", "0", "mr"); - -// powerpc64-LABEL: reg_i64_r0: -// powerpc64: #APP -// powerpc64: mr 0, 0 -// powerpc64: #NO_APP -#[cfg(powerpc64)] -check_reg!(reg_i64_r0, i64, "0", "0", "mr"); - -// CHECK-LABEL: reg_i8_r18: -// CHECK: #APP -// CHECK: mr 18, 18 -// CHECK: #NO_APP -check_reg!(reg_i8_r18, i8, "18", "18", "mr"); - -// CHECK-LABEL: reg_i16_r18: -// CHECK: #APP -// CHECK: mr 18, 18 -// CHECK: #NO_APP -check_reg!(reg_i16_r18, i16, "18", "18", "mr"); - -// CHECK-LABEL: reg_i32_r18: -// CHECK: #APP -// CHECK: mr 18, 18 -// CHECK: #NO_APP -check_reg!(reg_i32_r18, i32, "18", "18", "mr"); - -// powerpc64-LABEL: reg_i64_r18: -// powerpc64: #APP -// powerpc64: mr 18, 18 -// powerpc64: #NO_APP -#[cfg(powerpc64)] -check_reg!(reg_i64_r18, i64, "18", "18", "mr"); - -// CHECK-LABEL: reg_f32_f0: -// CHECK: #APP -// CHECK: fmr 0, 0 -// CHECK: #NO_APP -check_reg!(reg_f32_f0, f32, "0", "f0", "fmr"); - -// CHECK-LABEL: reg_f64_f0: -// CHECK: #APP -// CHECK: fmr 0, 0 -// CHECK: #NO_APP -check_reg!(reg_f64_f0, f64, "0", "f0", "fmr"); - -// CHECK-LABEL: reg_f32_f18: -// CHECK: #APP -// CHECK: fmr 18, 18 -// CHECK: #NO_APP -check_reg!(reg_f32_f18, f32, "18", "f18", "fmr"); - -// CHECK-LABEL: reg_f64_f18: -// CHECK: #APP -// CHECK: fmr 18, 18 -// CHECK: #NO_APP -check_reg!(reg_f64_f18, f64, "18", "f18", "fmr"); diff --git a/src/test/assembly/asm/riscv-types.rs b/src/test/assembly/asm/riscv-types.rs deleted file mode 100644 index f18ba294d..000000000 --- a/src/test/assembly/asm/riscv-types.rs +++ /dev/null @@ -1,210 +0,0 @@ -// revisions: riscv64 riscv32 -// assembly-output: emit-asm -//[riscv64] compile-flags: --target riscv64imac-unknown-none-elf -//[riscv64] needs-llvm-components: riscv -//[riscv32] compile-flags: --target riscv32imac-unknown-none-elf -//[riscv32] needs-llvm-components: riscv -// compile-flags: -C target-feature=+d - -#![feature(no_core, lang_items, rustc_attrs)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *mut u8; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for i64 {} -impl Copy for f64 {} -impl Copy for ptr {} - -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// CHECK-LABEL: sym_fn: -// CHECK: #APP -// CHECK: call extern_func -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("call {}", sym extern_func); -} - -// CHECK-LABEL: sym_static: -// CHECK: #APP -// CHECK: auipc t0, %pcrel_hi(extern_static) -// CHECK: lb t0, %pcrel_lo(.Lpcrel_hi{{[0-9]+}})(t0) -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_static() { - asm!("lb t0, {}", sym extern_static); -} - -macro_rules! check { - ($func:ident $ty:ident $class:ident $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " {}, {}"), out($class) y, in($class) x); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -// CHECK-LABEL: reg_i8: -// CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_i8 i8 reg "mv"); - -// CHECK-LABEL: reg_i16: -// CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_i16 i16 reg "mv"); - -// CHECK-LABEL: reg_i32: -// CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_i32 i32 reg "mv"); - -// CHECK-LABEL: reg_f32: -// CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_f32 f32 reg "mv"); - -// riscv64-LABEL: reg_i64: -// riscv64: #APP -// riscv64: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} -// riscv64: #NO_APP -#[cfg(riscv64)] -check!(reg_i64 i64 reg "mv"); - -// riscv64-LABEL: reg_f64: -// riscv64: #APP -// riscv64: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} -// riscv64: #NO_APP -#[cfg(riscv64)] -check!(reg_f64 f64 reg "mv"); - -// CHECK-LABEL: reg_ptr: -// CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_ptr ptr reg "mv"); - -// CHECK-LABEL: freg_f32: -// CHECK: #APP -// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(freg_f32 f32 freg "fmv.s"); - -// CHECK-LABEL: freg_f64: -// CHECK: #APP -// CHECK: fmv.d f{{[a-z0-9]+}}, f{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(freg_f64 f64 freg "fmv.d"); - -// CHECK-LABEL: a0_i8: -// CHECK: #APP -// CHECK: mv a0, a0 -// CHECK: #NO_APP -check_reg!(a0_i8 i8 "a0" "mv"); - -// CHECK-LABEL: a0_i16: -// CHECK: #APP -// CHECK: mv a0, a0 -// CHECK: #NO_APP -check_reg!(a0_i16 i16 "a0" "mv"); - -// CHECK-LABEL: a0_i32: -// CHECK: #APP -// CHECK: mv a0, a0 -// CHECK: #NO_APP -check_reg!(a0_i32 i32 "a0" "mv"); - -// CHECK-LABEL: a0_f32: -// CHECK: #APP -// CHECK: mv a0, a0 -// CHECK: #NO_APP -check_reg!(a0_f32 f32 "a0" "mv"); - -// riscv64-LABEL: a0_i64: -// riscv64: #APP -// riscv64: mv a0, a0 -// riscv64: #NO_APP -#[cfg(riscv64)] -check_reg!(a0_i64 i64 "a0" "mv"); - -// riscv64-LABEL: a0_f64: -// riscv64: #APP -// riscv64: mv a0, a0 -// riscv64: #NO_APP -#[cfg(riscv64)] -check_reg!(a0_f64 f64 "a0" "mv"); - -// CHECK-LABEL: a0_ptr: -// CHECK: #APP -// CHECK: mv a0, a0 -// CHECK: #NO_APP -check_reg!(a0_ptr ptr "a0" "mv"); - -// CHECK-LABEL: fa0_f32: -// CHECK: #APP -// CHECK: fmv.s fa0, fa0 -// CHECK: #NO_APP -check_reg!(fa0_f32 f32 "fa0" "fmv.s"); - -// CHECK-LABEL: fa0_f64: -// CHECK: #APP -// CHECK: fmv.d fa0, fa0 -// CHECK: #NO_APP -check_reg!(fa0_f64 f64 "fa0" "fmv.d"); diff --git a/src/test/assembly/asm/s390x-types.rs b/src/test/assembly/asm/s390x-types.rs deleted file mode 100644 index 2fb404dd9..000000000 --- a/src/test/assembly/asm/s390x-types.rs +++ /dev/null @@ -1,167 +0,0 @@ -// revisions: s390x -// assembly-output: emit-asm -//[s390x] compile-flags: --target s390x-unknown-linux-gnu -//[s390x] needs-llvm-components: systemz - -#![feature(no_core, lang_items, rustc_attrs, repr_simd, asm_experimental_arch)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *const i32; - -impl Copy for i8 {} -impl Copy for u8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for i64 {} -impl Copy for f32 {} -impl Copy for f64 {} -impl Copy for ptr {} - -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// Hack to avoid function merging -extern "Rust" { - fn dont_merge(s: &str); -} - -macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov," {}, {}"), out($class) y, in($class) x); - y - } -};} - -macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " %", $reg, ", %", $reg), lateout($reg) y, in($reg) x); - y - } -};} - -// CHECK-LABEL: sym_fn_32: -// CHECK: #APP -// CHECK: brasl %r14, extern_func -// CHECK: #NO_APP -#[cfg(s390x)] -#[no_mangle] -pub unsafe fn sym_fn_32() { - asm!("brasl %r14, {}", sym extern_func); -} - -// CHECK-LABEL: sym_static: -// CHECK: #APP -// CHECK: brasl %r14, extern_static -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_static() { - asm!("brasl %r14, {}", sym extern_static); -} - -// CHECK-LABEL: reg_i8: -// CHECK: #APP -// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i8, i8, reg, "lgr"); - -// CHECK-LABEL: reg_i16: -// CHECK: #APP -// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i16, i16, reg, "lgr"); - -// CHECK-LABEL: reg_i32: -// CHECK: #APP -// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i32, i32, reg, "lgr"); - -// CHECK-LABEL: reg_i64: -// CHECK: #APP -// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_i64, i64, reg, "lgr"); - -// CHECK-LABEL: reg_f32: -// CHECK: #APP -// CHECK: ler %f{{[0-9]+}}, %f{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_f32, f32, freg, "ler"); - -// CHECK-LABEL: reg_f64: -// CHECK: #APP -// CHECK: ldr %f{{[0-9]+}}, %f{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_f64, f64, freg, "ldr"); - -// CHECK-LABEL: reg_ptr: -// CHECK: #APP -// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} -// CHECK: #NO_APP -check!(reg_ptr, ptr, reg, "lgr"); - -// CHECK-LABEL: r0_i8: -// CHECK: #APP -// CHECK: lr %r0, %r0 -// CHECK: #NO_APP -check_reg!(r0_i8, i8, "r0", "lr"); - -// CHECK-LABEL: r0_i16: -// CHECK: #APP -// CHECK: lr %r0, %r0 -// CHECK: #NO_APP -check_reg!(r0_i16, i16, "r0", "lr"); - -// CHECK-LABEL: r0_i32: -// CHECK: #APP -// CHECK: lr %r0, %r0 -// CHECK: #NO_APP -check_reg!(r0_i32, i32, "r0", "lr"); - -// CHECK-LABEL: r0_i64: -// CHECK: #APP -// CHECK: lr %r0, %r0 -// CHECK: #NO_APP -check_reg!(r0_i64, i64, "r0", "lr"); - -// CHECK-LABEL: f0_f32: -// CHECK: #APP -// CHECK: ler %f0, %f0 -// CHECK: #NO_APP -check_reg!(f0_f32, f32, "f0", "ler"); - -// CHECK-LABEL: f0_f64: -// CHECK: #APP -// CHECK: ldr %f0, %f0 -// CHECK: #NO_APP -check_reg!(f0_f64, f64, "f0", "ldr"); diff --git a/src/test/assembly/asm/wasm-types.rs b/src/test/assembly/asm/wasm-types.rs deleted file mode 100644 index 3b1ac1b45..000000000 --- a/src/test/assembly/asm/wasm-types.rs +++ /dev/null @@ -1,149 +0,0 @@ -// assembly-output: emit-asm -// compile-flags: --target wasm32-unknown-unknown -// compile-flags: --crate-type cdylib -// needs-llvm-components: webassembly - -#![feature(no_core, lang_items, rustc_attrs, asm_experimental_arch)] -#![no_core] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *mut u8; - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for i64 {} -impl Copy for f64 {} -impl Copy for ptr {} - -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// CHECK-LABEL: sym_fn: -// CHECK: #APP -// CHECK: call extern_func -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("call {}", sym extern_func); -} - -// CHECK-LABEL: sym_static -// CHECK: #APP -// CHECK: i32.const 42 -// CHECK: i32.store extern_static -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_static() { - asm!(" - i32.const 42 - i32.store {} - ", sym extern_static); -} - -macro_rules! check { - ($func:ident $ty:ident $instr:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!("local.get {}\n", $instr, "\nlocal.set {}"), in(local) x, out(local) y); - y - } - }; -} - -// CHECK-LABEL: i8_i32: -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i32.clz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i8_i32 i8 "i32.clz"); - -// CHECK-LABEL: i16_i32: -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i32.clz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i16_i32 i16 "i32.clz"); - -// CHECK-LABEL: i32_i32: -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i32.clz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i32_i32 i32 "i32.clz"); - -// CHECK-LABEL: i8_i64 -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i64.clz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i8_i64 i8 "i64.clz"); - -// CHECK-LABEL: i16_i64 -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i64.clz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i16_i64 i16 "i64.clz"); - -// CHECK-LABEL: i32_i64 -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i64.clz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i32_i64 i32 "i64.clz"); - -// CHECK-LABEL: i64_i64 -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i64.clz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i64_i64 i64 "i64.clz"); - -// CHECK-LABEL: f32_f32 -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: f32.abs -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(f32_f32 f32 "f32.abs"); - -// CHECK-LABEL: f64_f64 -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: f64.abs -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(f64_f64 f64 "f64.abs"); - -// CHECK-LABEL: i32_ptr -// CHECK: #APP -// CHECK: local.get {{[0-9]}} -// CHECK: i32.eqz -// CHECK: local.set {{[0-9]}} -// CHECK: #NO_APP -check!(i32_ptr ptr "i32.eqz"); diff --git a/src/test/assembly/asm/x86-modifiers.rs b/src/test/assembly/asm/x86-modifiers.rs deleted file mode 100644 index 574fdf12c..000000000 --- a/src/test/assembly/asm/x86-modifiers.rs +++ /dev/null @@ -1,205 +0,0 @@ -// revisions: x86_64 i686 -// assembly-output: emit-asm -// compile-flags: -O -//[x86_64] compile-flags: --target x86_64-unknown-linux-gnu -//[x86_64] needs-llvm-components: x86 -//[i686] compile-flags: --target i686-unknown-linux-gnu -//[i686] needs-llvm-components: x86 -// compile-flags: -C llvm-args=--x86-asm-syntax=intel -// compile-flags: -C target-feature=+avx512bw - -#![feature(no_core, lang_items, rustc_attrs)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -impl Copy for i32 {} - -macro_rules! check { - ($func:ident $modifier:literal $reg:ident $mov:literal) => { - // -O and extern "C" guarantee that the selected register is always ax/xmm0 - #[no_mangle] - pub unsafe extern "C" fn $func() -> i32 { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " {0:", $modifier, "}, {0:", $modifier, "}"), out($reg) y); - y - } - }; -} - -// CHECK-LABEL: reg: -// CHECK: #APP -// x86_64: mov rax, rax -// i686: mov eax, eax -// CHECK: #NO_APP -check!(reg "" reg "mov"); - -// x86_64-LABEL: reg_l: -// x86_64: #APP -// x86_64: mov al, al -// x86_64: #NO_APP -#[cfg(x86_64)] -check!(reg_l "l" reg "mov"); - -// CHECK-LABEL: reg_x: -// CHECK: #APP -// CHECK: mov ax, ax -// CHECK: #NO_APP -check!(reg_x "x" reg "mov"); - -// CHECK-LABEL: reg_e: -// CHECK: #APP -// CHECK: mov eax, eax -// CHECK: #NO_APP -check!(reg_e "e" reg "mov"); - -// x86_64-LABEL: reg_r: -// x86_64: #APP -// x86_64: mov rax, rax -// x86_64: #NO_APP -#[cfg(x86_64)] -check!(reg_r "r" reg "mov"); - -// CHECK-LABEL: reg_abcd: -// CHECK: #APP -// x86_64: mov rax, rax -// i686: mov eax, eax -// CHECK: #NO_APP -check!(reg_abcd "" reg_abcd "mov"); - -// CHECK-LABEL: reg_abcd_l: -// CHECK: #APP -// CHECK: mov al, al -// CHECK: #NO_APP -check!(reg_abcd_l "l" reg_abcd "mov"); - -// CHECK-LABEL: reg_abcd_h: -// CHECK: #APP -// CHECK: mov ah, ah -// CHECK: #NO_APP -check!(reg_abcd_h "h" reg_abcd "mov"); - -// CHECK-LABEL: reg_abcd_x: -// CHECK: #APP -// CHECK: mov ax, ax -// CHECK: #NO_APP -check!(reg_abcd_x "x" reg_abcd "mov"); - -// CHECK-LABEL: reg_abcd_e: -// CHECK: #APP -// CHECK: mov eax, eax -// CHECK: #NO_APP -check!(reg_abcd_e "e" reg_abcd "mov"); - -// x86_64-LABEL: reg_abcd_r: -// x86_64: #APP -// x86_64: mov rax, rax -// x86_64: #NO_APP -#[cfg(x86_64)] -check!(reg_abcd_r "r" reg_abcd "mov"); - -// CHECK-LABEL: xmm_reg -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check!(xmm_reg "" xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_x -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check!(xmm_reg_x "x" xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_y -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check!(xmm_reg_y "y" xmm_reg "vmovaps"); - -// CHECK-LABEL: xmm_reg_z -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check!(xmm_reg_z "z" xmm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg -// CHECK: #APP -// CHECK: movaps ymm0, ymm0 -// CHECK: #NO_APP -check!(ymm_reg "" ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_x -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check!(ymm_reg_x "x" ymm_reg "movaps"); - -// CHECK-LABEL: ymm_reg_y -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check!(ymm_reg_y "y" ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_z -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check!(ymm_reg_z "z" ymm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg -// CHECK: #APP -// CHECK: movaps zmm0, zmm0 -// CHECK: #NO_APP -check!(zmm_reg "" zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_x -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check!(zmm_reg_x "x" zmm_reg "movaps"); - -// CHECK-LABEL: zmm_reg_y -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check!(zmm_reg_y "y" zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_z -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check!(zmm_reg_z "z" zmm_reg "vmovaps"); - -// Note: we don't have any way of ensuring that k1 is actually the register -// chosen by the register allocator, so this check may fail if a different -// register is chosen. - -// CHECK-LABEL: kreg: -// CHECK: #APP -// CHECK: kmovb k1, k1 -// CHECK: #NO_APP -check!(kreg "" kreg "kmovb"); diff --git a/src/test/assembly/asm/x86-types.rs b/src/test/assembly/asm/x86-types.rs deleted file mode 100644 index 81be79cba..000000000 --- a/src/test/assembly/asm/x86-types.rs +++ /dev/null @@ -1,1093 +0,0 @@ -// revisions: x86_64 i686 -// assembly-output: emit-asm -//[x86_64] compile-flags: --target x86_64-unknown-linux-gnu -//[x86_64] needs-llvm-components: x86 -//[i686] compile-flags: --target i686-unknown-linux-gnu -//[i686] needs-llvm-components: x86 -// compile-flags: -C llvm-args=--x86-asm-syntax=intel -// compile-flags: -C target-feature=+avx512bw - -#![feature(no_core, lang_items, rustc_attrs, repr_simd)] -#![crate_type = "rlib"] -#![no_core] -#![allow(asm_sub_register, non_camel_case_types)] - -#[rustc_builtin_macro] -macro_rules! asm { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! concat { - () => {}; -} -#[rustc_builtin_macro] -macro_rules! stringify { - () => {}; -} - -#[lang = "sized"] -trait Sized {} -#[lang = "copy"] -trait Copy {} - -type ptr = *mut u8; - -#[repr(simd)] -pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); -#[repr(simd)] -pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); -#[repr(simd)] -pub struct i32x4(i32, i32, i32, i32); -#[repr(simd)] -pub struct i64x2(i64, i64); -#[repr(simd)] -pub struct f32x4(f32, f32, f32, f32); -#[repr(simd)] -pub struct f64x2(f64, f64); - -#[repr(simd)] -pub struct i8x32( - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, -); -#[repr(simd)] -pub struct i16x16(i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16); -#[repr(simd)] -pub struct i32x8(i32, i32, i32, i32, i32, i32, i32, i32); -#[repr(simd)] -pub struct i64x4(i64, i64, i64, i64); -#[repr(simd)] -pub struct f32x8(f32, f32, f32, f32, f32, f32, f32, f32); -#[repr(simd)] -pub struct f64x4(f64, f64, f64, f64); - -#[repr(simd)] -pub struct i8x64( - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, - i8, -); -#[repr(simd)] -pub struct i16x32( - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, - i16, -); -#[repr(simd)] -pub struct i32x16(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32); -#[repr(simd)] -pub struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64); -#[repr(simd)] -pub struct f32x16(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32); -#[repr(simd)] -pub struct f64x8(f64, f64, f64, f64, f64, f64, f64, f64); - -impl Copy for i8 {} -impl Copy for i16 {} -impl Copy for i32 {} -impl Copy for f32 {} -impl Copy for i64 {} -impl Copy for f64 {} -impl Copy for ptr {} -impl Copy for i8x16 {} -impl Copy for i16x8 {} -impl Copy for i32x4 {} -impl Copy for i64x2 {} -impl Copy for f32x4 {} -impl Copy for f64x2 {} -impl Copy for i8x32 {} -impl Copy for i16x16 {} -impl Copy for i32x8 {} -impl Copy for i64x4 {} -impl Copy for f32x8 {} -impl Copy for f64x4 {} -impl Copy for i8x64 {} -impl Copy for i16x32 {} -impl Copy for i32x16 {} -impl Copy for i64x8 {} -impl Copy for f32x16 {} -impl Copy for f64x8 {} - -extern "C" { - fn extern_func(); - static extern_static: u8; -} - -// CHECK-LABEL: sym_fn: -// CHECK: #APP -// CHECK: call extern_func -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_fn() { - asm!("call {}", sym extern_func); -} - -// CHECK-LABEL: sym_static: -// CHECK: #APP -// CHECK: mov al, byte ptr [extern_static] -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_static() { - asm!("mov al, byte ptr [{}]", sym extern_static); -} - -macro_rules! check { - ($func:ident $ty:ident $class:ident $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " {}, {}"), lateout($class) y, in($class) x); - y - } - }; -} - -macro_rules! check_reg { - ($func:ident $ty:ident $reg:tt $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - // Hack to avoid function merging - extern "Rust" { - fn dont_merge(s: &str); - } - dont_merge(stringify!($func)); - - let y; - asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } - }; -} - -// CHECK-LABEL: reg_i16: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_i16 i16 reg "mov"); - -// CHECK-LABEL: reg_i32: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_i32 i32 reg "mov"); - -// CHECK-LABEL: reg_f32: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_f32 f32 reg "mov"); - -// x86_64-LABEL: reg_i64: -// x86_64: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// x86_64: #NO_APP -#[cfg(x86_64)] -check!(reg_i64 i64 reg "mov"); - -// x86_64-LABEL: reg_f64: -// x86_64: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// x86_64: #NO_APP -#[cfg(x86_64)] -check!(reg_f64 f64 reg "mov"); - -// CHECK-LABEL: reg_ptr: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_ptr ptr reg "mov"); - -// CHECK-LABEL: reg_abcd_i16: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_abcd_i16 i16 reg_abcd "mov"); - -// CHECK-LABEL: reg_abcd_i32: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_abcd_i32 i32 reg_abcd "mov"); - -// CHECK-LABEL: reg_abcd_f32: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_abcd_f32 f32 reg_abcd "mov"); - -// x86_64-LABEL: reg_abcd_i64: -// x86_64: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// x86_64: #NO_APP -#[cfg(x86_64)] -check!(reg_abcd_i64 i64 reg_abcd "mov"); - -// x86_64-LABEL: reg_abcd_f64: -// x86_64: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// x86_64: #NO_APP -#[cfg(x86_64)] -check!(reg_abcd_f64 f64 reg_abcd "mov"); - -// CHECK-LABEL: reg_abcd_ptr: -// CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_abcd_ptr ptr reg_abcd "mov"); - -// CHECK-LABEL: reg_byte: -// CHECK: #APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: #NO_APP -check!(reg_byte i8 reg_byte "mov"); - -// CHECK-LABEL: xmm_reg_i32: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_i32 i32 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_f32: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_f32 f32 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_i64: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_i64 i64 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_f64: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_f64 f64 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_ptr: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_ptr ptr xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_i8x16: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_i16x8: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_i32x4: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_i64x2: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_f32x4: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps"); - -// CHECK-LABEL: xmm_reg_f64x2: -// CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} -// CHECK: #NO_APP -check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps"); - -// CHECK-LABEL: ymm_reg_i32: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i32 i32 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_f32: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_f32 f32 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i64: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i64 i64 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_f64: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_f64 f64 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_ptr: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_ptr ptr ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i8x16: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i16x8: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i32x4: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i64x2: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_f32x4: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_f64x2: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i8x32: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i16x16: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i32x8: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_i64x4: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_f32x8: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps"); - -// CHECK-LABEL: ymm_reg_f64x4: -// CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} -// CHECK: #NO_APP -check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i32: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i32 i32 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f32: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f32 f32 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i64: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i64 i64 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f64: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f64 f64 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_ptr: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_ptr ptr zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i8x16: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i16x8: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i32x4: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i64x2: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f32x4: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f64x2: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i8x32: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i16x16: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i32x8: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i64x4: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f32x8: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f64x4: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i8x64: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i16x32: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i32x16: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_i64x8: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f32x16: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps"); - -// CHECK-LABEL: zmm_reg_f64x8: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps"); - -// CHECK-LABEL: kreg_i8: -// CHECK: #APP -// CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}} -// CHECK: #NO_APP -check!(kreg_i8 i8 kreg "kmovb"); - -// CHECK-LABEL: kreg_i16: -// CHECK: #APP -// CHECK: kmovw k{{[0-9]+}}, k{{[0-9]+}} -// CHECK: #NO_APP -check!(kreg_i16 i16 kreg "kmovw"); - -// CHECK-LABEL: kreg_i32: -// CHECK: #APP -// CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}} -// CHECK: #NO_APP -check!(kreg_i32 i32 kreg "kmovd"); - -// CHECK-LABEL: kreg_i64: -// CHECK: #APP -// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} -// CHECK: #NO_APP -check!(kreg_i64 i64 kreg "kmovq"); - -// CHECK-LABEL: kreg_ptr: -// CHECK: #APP -// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} -// CHECK: #NO_APP -check!(kreg_ptr ptr kreg "kmovq"); - -// CHECK-LABEL: eax_i16: -// CHECK: #APP -// CHECK: mov eax, eax -// CHECK: #NO_APP -check_reg!(eax_i16 i16 "eax" "mov"); - -// CHECK-LABEL: eax_i32: -// CHECK: #APP -// CHECK: mov eax, eax -// CHECK: #NO_APP -check_reg!(eax_i32 i32 "eax" "mov"); - -// CHECK-LABEL: eax_f32: -// CHECK: #APP -// CHECK: mov eax, eax -// CHECK: #NO_APP -check_reg!(eax_f32 f32 "eax" "mov"); - -// x86_64-LABEL: eax_i64: -// x86_64: #APP -// x86_64: mov eax, eax -// x86_64: #NO_APP -#[cfg(x86_64)] -check_reg!(eax_i64 i64 "eax" "mov"); - -// x86_64-LABEL: eax_f64: -// x86_64: #APP -// x86_64: mov eax, eax -// x86_64: #NO_APP -#[cfg(x86_64)] -check_reg!(eax_f64 f64 "eax" "mov"); - -// CHECK-LABEL: eax_ptr: -// CHECK: #APP -// CHECK: mov eax, eax -// CHECK: #NO_APP -check_reg!(eax_ptr ptr "eax" "mov"); - -// i686-LABEL: ah_byte: -// i686: #APP -// i686: mov ah, ah -// i686: #NO_APP -#[cfg(i686)] -check_reg!(ah_byte i8 "ah" "mov"); - -// CHECK-LABEL: xmm0_i32: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_i32 i32 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_f32: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_f32 f32 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_i64: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_i64 i64 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_f64: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_f64 f64 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_ptr: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_ptr ptr "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_i8x16: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_i16x8: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_i32x4: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_i64x2: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_f32x4: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps"); - -// CHECK-LABEL: xmm0_f64x2: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps"); - -// CHECK-LABEL: ymm0_i32: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i32 i32 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_f32: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_f32 f32 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i64: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i64 i64 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_f64: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_f64 f64 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_ptr: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_ptr ptr "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i8x16: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i16x8: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i32x4: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i64x2: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_f32x4: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_f64x2: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i8x32: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i16x16: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i32x8: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_i64x4: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_f32x8: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps"); - -// CHECK-LABEL: ymm0_f64x4: -// CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 -// CHECK: #NO_APP -check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i32: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i32 i32 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f32: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f32 f32 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i64: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i64 i64 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f64: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f64 f64 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_ptr: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_ptr ptr "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i8x16: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i16x8: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i32x4: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i64x2: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f32x4: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f64x2: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i8x32: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i16x16: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i32x8: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i64x4: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f32x8: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f64x4: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i8x64: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i16x32: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i32x16: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_i64x8: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f32x16: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f64x8: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps"); - -// CHECK-LABEL: k1_i8: -// CHECK: #APP -// CHECK: kmovb k1, k1 -// CHECK: #NO_APP -check_reg!(k1_i8 i8 "k1" "kmovb"); - -// CHECK-LABEL: k1_i16: -// CHECK: #APP -// CHECK: kmovw k1, k1 -// CHECK: #NO_APP -check_reg!(k1_i16 i16 "k1" "kmovw"); - -// CHECK-LABEL: k1_i32: -// CHECK: #APP -// CHECK: kmovd k1, k1 -// CHECK: #NO_APP -check_reg!(k1_i32 i32 "k1" "kmovd"); - -// CHECK-LABEL: k1_i64: -// CHECK: #APP -// CHECK: kmovq k1, k1 -// CHECK: #NO_APP -check_reg!(k1_i64 i64 "k1" "kmovq"); - -// CHECK-LABEL: k1_ptr: -// CHECK: #APP -// CHECK: kmovq k1, k1 -// CHECK: #NO_APP -check_reg!(k1_ptr ptr "k1" "kmovq"); |