From 045504f1cd332aa8d04f1e00efe1829e4159e4a2 Mon Sep 17 00:00:00 2001 From: ywxt Date: Wed, 30 Jul 2025 17:33:17 +0800 Subject: [PATCH 01/13] Add the codegen-source-order option --- compiler/rustc_session/src/options.rs | 2 ++ .../src/compiler-flags/codegen-source-order.md | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/doc/unstable-book/src/compiler-flags/codegen-source-order.md diff --git a/compiler/rustc_session/src/options.rs b/compiler/rustc_session/src/options.rs index 880b08d444414..43ad023ce65d2 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -2170,6 +2170,8 @@ options! { "emit runtime checks for contract pre- and post-conditions (default: no)"), coverage_options: CoverageOptions = (CoverageOptions::default(), parse_coverage_options, [TRACKED], "control details of coverage instrumentation"), + codegen_source_order: bool = (false, parse_bool, [UNTRACKED], + "emit mono items in the order of spans in source files (default: no)"), crate_attr: Vec = (Vec::new(), parse_string_push, [TRACKED], "inject the given attribute in the crate"), cross_crate_inline_threshold: InliningThreshold = (InliningThreshold::Sometimes(100), parse_inlining_threshold, [TRACKED], diff --git a/src/doc/unstable-book/src/compiler-flags/codegen-source-order.md b/src/doc/unstable-book/src/compiler-flags/codegen-source-order.md new file mode 100644 index 0000000000000..a55e0984e63b3 --- /dev/null +++ b/src/doc/unstable-book/src/compiler-flags/codegen-source-order.md @@ -0,0 +1,17 @@ +# `codegen-source-order` + +--- + +This feature allows you to have a predictive and +deterministic order for items after codegen. + +For every `CodegenUnit`, local `MonoItem`s would +be sorted by `(Span, DefPath, SymbolName)`, which +makes codegen tests rely on the order of items in +source files work. + +Note: If you would like to use it, you have to +manually sort items that are generated by a macro +in lexicographical order in source files, because +of the same spans owned by all items of a macro. +So we have to distinguish them by `DefPath`s. From 5f46f93393cb8d71c219909a4c7d9362d6fb5bf1 Mon Sep 17 00:00:00 2001 From: ywxt Date: Thu, 31 Jul 2025 10:22:47 +0800 Subject: [PATCH 02/13] Sort items only within codegen tests --- compiler/rustc_codegen_llvm/src/base.rs | 7 ++- compiler/rustc_middle/src/mir/mono.rs | 63 +++++++++++++------------ compiler/rustc_session/src/options.rs | 4 +- src/tools/compiletest/src/runtest.rs | 4 ++ 4 files changed, 46 insertions(+), 32 deletions(-) diff --git a/compiler/rustc_codegen_llvm/src/base.rs b/compiler/rustc_codegen_llvm/src/base.rs index 5dda836988c81..6eda041643e16 100644 --- a/compiler/rustc_codegen_llvm/src/base.rs +++ b/compiler/rustc_codegen_llvm/src/base.rs @@ -84,7 +84,12 @@ pub(crate) fn compile_codegen_unit( let llvm_module = ModuleLlvm::new(tcx, cgu_name.as_str()); { let mut cx = CodegenCx::new(tcx, cgu, &llvm_module); - let mono_items = cx.codegen_unit.items_in_deterministic_order(cx.tcx); + let mono_items = if tcx.sess.opts.unstable_opts.codegen_source_order { + cx.codegen_unit.items_in_deterministic_order(cx.tcx) + } else { + // The `items` has a deterministic order, so we can use it directly. + cx.codegen_unit.items().iter().cloned().collect() + }; for &(mono_item, data) in &mono_items { mono_item.predefine::>( &mut cx, diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index e5864660575c5..e1112d498dddb 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -528,37 +528,42 @@ impl<'tcx> CodegenUnit<'tcx> { // The codegen tests rely on items being process in the same order as // they appear in the file, so for local items, we sort by node_id first #[derive(PartialEq, Eq, PartialOrd, Ord)] - struct ItemSortKey<'tcx>(Option, SymbolName<'tcx>); - + struct ItemSortKey<'tcx>(Option, Option, SymbolName<'tcx>); + + // We only want to take HirIds of user-defined + // instances into account. The others don't matter for + // the codegen tests and can even make item order + // unstable. + fn local_item_query<'tcx, T>( + item: MonoItem<'tcx>, + op: impl FnOnce(DefId) -> T, + ) -> Option { + match item { + MonoItem::Fn(ref instance) => match instance.def { + InstanceKind::Item(def) => def.as_local().map(op), + InstanceKind::VTableShim(..) + | InstanceKind::ReifyShim(..) + | InstanceKind::Intrinsic(..) + | InstanceKind::FnPtrShim(..) + | InstanceKind::Virtual(..) + | InstanceKind::ClosureOnceShim { .. } + | InstanceKind::ConstructCoroutineInClosureShim { .. } + | InstanceKind::DropGlue(..) + | InstanceKind::CloneShim(..) + | InstanceKind::ThreadLocalShim(..) + | InstanceKind::FnPtrAddrShim(..) + | InstanceKind::AsyncDropGlue(..) + | InstanceKind::FutureDropPollShim(..) + | InstanceKind::AsyncDropGlueCtorShim(..) => None, + }, + MonoItem::Static(def_id) => def_id.as_local().map(op), + MonoItem::GlobalAsm(item_id) => Some(op(item_id.owner_id.def_id)), + } + } fn item_sort_key<'tcx>(tcx: TyCtxt<'tcx>, item: MonoItem<'tcx>) -> ItemSortKey<'tcx> { ItemSortKey( - match item { - MonoItem::Fn(ref instance) => { - match instance.def { - // We only want to take HirIds of user-defined - // instances into account. The others don't matter for - // the codegen tests and can even make item order - // unstable. - InstanceKind::Item(def) => def.as_local().map(Idx::index), - InstanceKind::VTableShim(..) - | InstanceKind::ReifyShim(..) - | InstanceKind::Intrinsic(..) - | InstanceKind::FnPtrShim(..) - | InstanceKind::Virtual(..) - | InstanceKind::ClosureOnceShim { .. } - | InstanceKind::ConstructCoroutineInClosureShim { .. } - | InstanceKind::DropGlue(..) - | InstanceKind::CloneShim(..) - | InstanceKind::ThreadLocalShim(..) - | InstanceKind::FnPtrAddrShim(..) - | InstanceKind::AsyncDropGlue(..) - | InstanceKind::FutureDropPollShim(..) - | InstanceKind::AsyncDropGlueCtorShim(..) => None, - } - } - MonoItem::Static(def_id) => def_id.as_local().map(Idx::index), - MonoItem::GlobalAsm(item_id) => Some(item_id.owner_id.def_id.index()), - }, + local_item_query(item, |def_id| tcx.def_span(def_id)), + local_item_query(item, |def_id| tcx.def_path(id).to_string_no_crate_verbose()), item.symbol_name(tcx), ) } diff --git a/compiler/rustc_session/src/options.rs b/compiler/rustc_session/src/options.rs index 43ad023ce65d2..293747370c083 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -2166,12 +2166,12 @@ options! { "hash algorithm of source files used to check freshness in cargo (`blake3` or `sha256`)"), codegen_backend: Option = (None, parse_opt_string, [TRACKED], "the backend to use"), + codegen_source_order: bool = (false, parse_bool, [UNTRACKED], + "emit mono items in the order of spans in source files (default: no)"), contract_checks: Option = (None, parse_opt_bool, [TRACKED], "emit runtime checks for contract pre- and post-conditions (default: no)"), coverage_options: CoverageOptions = (CoverageOptions::default(), parse_coverage_options, [TRACKED], "control details of coverage instrumentation"), - codegen_source_order: bool = (false, parse_bool, [UNTRACKED], - "emit mono items in the order of spans in source files (default: no)"), crate_attr: Vec = (Vec::new(), parse_string_push, [TRACKED], "inject the given attribute in the crate"), cross_crate_inline_threshold: InliningThreshold = (InliningThreshold::Sometimes(100), parse_inlining_threshold, [TRACKED], diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 35670ba89e997..668b689097e4b 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -1695,6 +1695,10 @@ impl<'test> TestCx<'test> { } TestMode::Assembly | TestMode::Codegen => { rustc.arg("-Cdebug-assertions=no"); + // For assembly and codegen tests, we want to use the same order + // of the items of a codegen unit as the source order, so that + // we can compare the output with the source code through filecheck. + rustc.arg("-Zcodegen-source-order") } TestMode::Crashes => { set_mir_dump_dir(&mut rustc); From c12c72407b19d4c435c297af43f33a8e49aaf18b Mon Sep 17 00:00:00 2001 From: ywxt Date: Thu, 31 Jul 2025 10:54:47 +0800 Subject: [PATCH 03/13] Fix tests. --- compiler/rustc_codegen_llvm/src/base.rs | 2 +- compiler/rustc_middle/src/mir/mono.rs | 9 +- src/tools/compiletest/src/runtest.rs | 6 +- tests/assembly-llvm/asm/aarch64-modifiers.rs | 56 +- tests/assembly-llvm/asm/aarch64-types.rs | 347 +++++---- tests/assembly-llvm/asm/arm-modifiers.rs | 53 +- tests/assembly-llvm/asm/arm-types.rs | 441 ++++++------ tests/assembly-llvm/asm/avr-modifiers.rs | 8 +- tests/assembly-llvm/asm/avr-types.rs | 114 +-- tests/assembly-llvm/asm/bpf-types.rs | 56 +- tests/assembly-llvm/asm/hexagon-types.rs | 69 +- tests/assembly-llvm/asm/loongarch-type.rs | 96 +-- tests/assembly-llvm/asm/m68k-types.rs | 24 +- tests/assembly-llvm/asm/mips-types.rs | 129 ++-- tests/assembly-llvm/asm/msp430-types.rs | 105 ++- tests/assembly-llvm/asm/nvptx-types.rs | 36 +- tests/assembly-llvm/asm/powerpc-types.rs | 370 +++++----- tests/assembly-llvm/asm/riscv-types.rs | 98 +-- tests/assembly-llvm/asm/s390x-types.rs | 196 ++--- tests/assembly-llvm/asm/sparc-types.rs | 62 +- tests/assembly-llvm/asm/wasm-types.rs | 50 +- tests/assembly-llvm/asm/x86-modifiers.rs | 83 ++- tests/assembly-llvm/asm/x86-types.rs | 706 +++++++++---------- 23 files changed, 1554 insertions(+), 1562 deletions(-) diff --git a/compiler/rustc_codegen_llvm/src/base.rs b/compiler/rustc_codegen_llvm/src/base.rs index 6eda041643e16..0fef27f3a5b25 100644 --- a/compiler/rustc_codegen_llvm/src/base.rs +++ b/compiler/rustc_codegen_llvm/src/base.rs @@ -88,7 +88,7 @@ pub(crate) fn compile_codegen_unit( cx.codegen_unit.items_in_deterministic_order(cx.tcx) } else { // The `items` has a deterministic order, so we can use it directly. - cx.codegen_unit.items().iter().cloned().collect() + cx.codegen_unit.items().iter().map(|(item, data)| (*item, *data)).collect() }; for &(mono_item, data) in &mono_items { mono_item.predefine::>( diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index e1112d498dddb..fbeb2a0ed79d1 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -12,7 +12,6 @@ use rustc_hashes::Hash128; use rustc_hir::ItemId; use rustc_hir::attrs::InlineAttr; use rustc_hir::def_id::{CrateNum, DefId, DefIdSet, LOCAL_CRATE}; -use rustc_index::Idx; use rustc_macros::{HashStable, TyDecodable, TyEncodable}; use rustc_query_system::ich::StableHashingContext; use rustc_session::config::OptLevel; @@ -540,7 +539,7 @@ impl<'tcx> CodegenUnit<'tcx> { ) -> Option { match item { MonoItem::Fn(ref instance) => match instance.def { - InstanceKind::Item(def) => def.as_local().map(op), + InstanceKind::Item(def) => def.as_local().map(|_| op(def)), InstanceKind::VTableShim(..) | InstanceKind::ReifyShim(..) | InstanceKind::Intrinsic(..) @@ -556,14 +555,14 @@ impl<'tcx> CodegenUnit<'tcx> { | InstanceKind::FutureDropPollShim(..) | InstanceKind::AsyncDropGlueCtorShim(..) => None, }, - MonoItem::Static(def_id) => def_id.as_local().map(op), - MonoItem::GlobalAsm(item_id) => Some(op(item_id.owner_id.def_id)), + MonoItem::Static(def_id) => def_id.as_local().map(|_| op(def_id)), + MonoItem::GlobalAsm(item_id) => Some(op(item_id.owner_id.def_id.to_def_id())), } } fn item_sort_key<'tcx>(tcx: TyCtxt<'tcx>, item: MonoItem<'tcx>) -> ItemSortKey<'tcx> { ItemSortKey( local_item_query(item, |def_id| tcx.def_span(def_id)), - local_item_query(item, |def_id| tcx.def_path(id).to_string_no_crate_verbose()), + local_item_query(item, |def_id| tcx.def_path(def_id).to_string_no_crate_verbose()), item.symbol_name(tcx), ) } diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 668b689097e4b..6662a039deee4 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -1695,10 +1695,10 @@ impl<'test> TestCx<'test> { } TestMode::Assembly | TestMode::Codegen => { rustc.arg("-Cdebug-assertions=no"); - // For assembly and codegen tests, we want to use the same order - // of the items of a codegen unit as the source order, so that + // For assembly and codegen tests, we want to use the same order + // of the items of a codegen unit as the source order,so that // we can compare the output with the source code through filecheck. - rustc.arg("-Zcodegen-source-order") + rustc.arg("-Zcodegen-source-order"); } TestMode::Crashes => { set_mir_dump_dir(&mut rustc); diff --git a/tests/assembly-llvm/asm/aarch64-modifiers.rs b/tests/assembly-llvm/asm/aarch64-modifiers.rs index 58f7c114d3a60..40ea33315647f 100644 --- a/tests/assembly-llvm/asm/aarch64-modifiers.rs +++ b/tests/assembly-llvm/asm/aarch64-modifiers.rs @@ -55,35 +55,17 @@ check!(vreg vreg "add {0}.4s, {0}.4s, {0}.4s"); // 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-LABEL: vreg_h: // CHECK: //APP -// CHECK: add v0.4s, v0.4s, v0.4s +// CHECK: ldr h0, [x0] // CHECK: //NO_APP -check!(vreg_v vreg "add {0:v}.4s, {0:v}.4s, {0:v}.4s"); +check!(vreg_h vreg "ldr {:h}, [x0]"); // CHECK-LABEL: vreg_low16: // CHECK: //APP @@ -97,32 +79,50 @@ check!(vreg_low16 vreg_low16 "add {0}.4s, {0}.4s, {0}.4s"); // CHECK: //NO_APP check!(vreg_low16_b vreg_low16 "ldr {:b}, [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_h: // CHECK: //APP // CHECK: ldr h0, [x0] // CHECK: //NO_APP check!(vreg_low16_h vreg_low16 "ldr {:h}, [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_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-LABEL: vreg_low16_v: // CHECK: //APP -// CHECK: ldr d0, [x0] +// CHECK: add v0.4s, v0.4s, v0.4s // CHECK: //NO_APP -check!(vreg_low16_d vreg_low16 "ldr {:d}, [x0]"); +check!(vreg_low16_v vreg_low16 "add {0:v}.4s, {0:v}.4s, {0:v}.4s"); -// CHECK-LABEL: vreg_low16_q: +// CHECK-LABEL: vreg_q: // CHECK: //APP // CHECK: ldr q0, [x0] // CHECK: //NO_APP -check!(vreg_low16_q vreg_low16 "ldr {:q}, [x0]"); +check!(vreg_q vreg "ldr {:q}, [x0]"); -// CHECK-LABEL: vreg_low16_v: +// CHECK-LABEL: vreg_s: +// CHECK: //APP +// CHECK: ldr s0, [x0] +// CHECK: //NO_APP +check!(vreg_s vreg "ldr {:s}, [x0]"); + +// CHECK-LABEL: vreg_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"); +check!(vreg_v vreg "add {0:v}.4s, {0:v}.4s, {0:v}.4s"); diff --git a/tests/assembly-llvm/asm/aarch64-types.rs b/tests/assembly-llvm/asm/aarch64-types.rs index b7abeb0229865..82af3f049407a 100644 --- a/tests/assembly-llvm/asm/aarch64-types.rs +++ b/tests/assembly-llvm/asm/aarch64-types.rs @@ -128,35 +128,35 @@ macro_rules! check_reg { }; } -// CHECK-LABEL: {{("#)?}}reg_i8{{"?}} +// CHECK-LABEL: {{("#)?}}reg_f16{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_i8 i8 reg "mov" ""); +check!(reg_f16 f16 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_i16{{"?}} +// CHECK-LABEL: {{("#)?}}reg_f32{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_i16 i16 reg "mov" ""); +check!(reg_f32 f32 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_f16{{"?}} +// CHECK-LABEL: {{("#)?}}reg_f64{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_f16 f16 reg "mov" ""); +check!(reg_f64 f64 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_i32{{"?}} +// CHECK-LABEL: {{("#)?}}reg_i16{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_i32 i32 reg "mov" ""); +check!(reg_i16 i16 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_f32{{"?}} +// CHECK-LABEL: {{("#)?}}reg_i32{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_f32 f32 reg "mov" ""); +check!(reg_i32 i32 reg "mov" ""); // CHECK-LABEL: {{("#)?}}reg_i64{{"?}} // CHECK: //APP @@ -164,11 +164,11 @@ check!(reg_f32 f32 reg "mov" ""); // CHECK: //NO_APP check!(reg_i64 i64 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_f64{{"?}} +// CHECK-LABEL: {{("#)?}}reg_i8{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_f64 f64 reg "mov" ""); +check!(reg_i8 i8 reg "mov" ""); // CHECK-LABEL: {{("#)?}}reg_ptr{{"?}} // CHECK: //APP @@ -176,29 +176,29 @@ check!(reg_f64 f64 reg "mov" ""); // CHECK: //NO_APP check!(reg_ptr ptr reg "mov" ""); -// CHECK-LABEL: {{("#)?}}vreg_i8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f128{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i8 i8 vreg "fmov" "s"); +check!(vreg_f128 f128 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i16 i16 vreg "fmov" "s"); +check!(vreg_f16 f16 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f16x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f16 f16 vreg "fmov" "s"); +check!(vreg_f16x4 f16x4 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i32{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i32 i32 vreg "fmov" "s"); +check!(vreg_f16x8 f16x8 vreg "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_f32{{"?}} // CHECK: //APP @@ -206,11 +206,17 @@ check!(vreg_i32 i32 vreg "fmov" "s"); // CHECK: //NO_APP check!(vreg_f32 f32 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i64{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i64 i64 vreg "fmov" "s"); +check!(vreg_f32x2 f32x2 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_f64{{"?}} // CHECK: //APP @@ -218,23 +224,23 @@ check!(vreg_i64 i64 vreg "fmov" "s"); // CHECK: //NO_APP check!(vreg_f64 f64 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f128{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f128 f128 vreg "fmov" "s"); +check!(vreg_f64x1 f64x1 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f64x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_ptr ptr vreg "fmov" "s"); +check!(vreg_f64x2 f64x2 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i8x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i8x8 i8x8 vreg "fmov" "s"); +check!(vreg_i16 i16 vreg "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_i16x4{{"?}} // CHECK: //APP @@ -242,107 +248,107 @@ check!(vreg_i8x8 i8x8 vreg "fmov" "s"); // CHECK: //NO_APP check!(vreg_i16x4 i16x4 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i32x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i32x2 i32x2 vreg "fmov" "s"); +check!(vreg_i16x8 i16x8 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i32{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i64x1 i64x1 vreg "fmov" "s"); +check!(vreg_i32 i32 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f16x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f16x4 f16x4 vreg "fmov" "s"); +check!(vreg_i32x2 i32x2 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f32x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i32x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f32x2 f32x2 vreg "fmov" "s"); +check!(vreg_i32x4 i32x4 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i64{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f64x1 f64x1 vreg "fmov" "s"); +check!(vreg_i64 i64 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i8x16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i8x16 i8x16 vreg "fmov" "s"); +check!(vreg_i64x1 i64x1 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i64x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i16x8 i16x8 vreg "fmov" "s"); +check!(vreg_i64x2 i64x2 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i32x4 i32x4 vreg "fmov" "s"); +check!(vreg_i8 i8 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i64x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i8x16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i64x2 i64x2 vreg "fmov" "s"); +check!(vreg_i8x16 i8x16 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i8x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f16x8 f16x8 vreg "fmov" "s"); +check!(vreg_i8x8 i8x8 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f128{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f32x4 f32x4 vreg "fmov" "s"); +check!(vreg_low16_f128 f128 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f64x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f64x2 f64x2 vreg "fmov" "s"); +check!(vreg_low16_f16 f16 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f16x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i8 i8 vreg_low16 "fmov" "s"); +check!(vreg_low16_f16x4 f16x4 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i16 i16 vreg_low16 "fmov" "s"); +check!(vreg_low16_f16x8 f16x8 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f32{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f16 f16 vreg_low16 "fmov" "s"); +check!(vreg_low16_f32 f32 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f32{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f32 f32 vreg_low16 "fmov" "s"); +check!(vreg_low16_f32x2 f32x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i64{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f32x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i64 i64 vreg_low16 "fmov" "s"); +check!(vreg_low16_f32x4 f32x4 vreg_low16 "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_low16_f64{{"?}} // CHECK: //APP @@ -350,23 +356,22 @@ check!(vreg_low16_i64 i64 vreg_low16 "fmov" "s"); // CHECK: //NO_APP check!(vreg_low16_f64 f64 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f128{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f128 f128 vreg_low16 "fmov" "s"); +check!(vreg_low16_f64x1 f64x1 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f64x2{{"?}} // 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!(vreg_low16_f64x2 f64x2 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_i8x8 i8x8 vreg_low16 "fmov" "s"); +check!(vreg_low16_i16 i16 vreg_low16 "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_low16_i16x4{{"?}} // CHECK: //APP @@ -374,131 +379,131 @@ check!(vreg_low16_i8x8 i8x8 vreg_low16 "fmov" "s"); // CHECK: //NO_APP check!(vreg_low16_i16x4 i16x4 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i32x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i32x2 i32x2 vreg_low16 "fmov" "s"); +check!(vreg_low16_i16x8 i16x8 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i64x1 i64x1 vreg_low16 "fmov" "s"); +check!(vreg_low16_i32x2 i32x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f16x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i32x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f16x4 f16x4 vreg_low16 "fmov" "s"); +check!(vreg_low16_i32x4 i32x4 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f32x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i64{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f32x2 f32x2 vreg_low16 "fmov" "s"); +check!(vreg_low16_i64 i64 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f64x1 f64x1 vreg_low16 "fmov" "s"); +check!(vreg_low16_i64x1 i64x1 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i8x16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i64x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i8x16 i8x16 vreg_low16 "fmov" "s"); +check!(vreg_low16_i64x2 i64x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i16x8 i16x8 vreg_low16 "fmov" "s"); +check!(vreg_low16_i8 i8 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i8x16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i32x4 i32x4 vreg_low16 "fmov" "s"); +check!(vreg_low16_i8x16 i8x16 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i64x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i8x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i64x2 i64x2 vreg_low16 "fmov" "s"); +check!(vreg_low16_i8x8 i8x8 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_ptr{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f16x8 f16x8 vreg_low16 "fmov" "s"); +check!(vreg_low16_ptr ptr vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_ptr{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f32x4 f32x4 vreg_low16 "fmov" "s"); +check!(vreg_ptr ptr vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f64x2{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f128{{"?}} // CHECK: //APP -// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check!(vreg_low16_f64x2 f64x2 vreg_low16 "fmov" "s"); +check_reg!(v0_f128 f128 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i8{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f16{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i8 i8 "x0" "mov"); +check_reg!(v0_f16 f16 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i16{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f16x4{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i16 i16 "x0" "mov"); +check_reg!(v0_f16x4 f16x4 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_f16{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f16x8{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_f16 f16 "x0" "mov"); +check_reg!(v0_f16x8 f16x8 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i32{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f32{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i32 i32 "x0" "mov"); +check_reg!(v0_f32 f32 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_f32{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f32x2{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_f32 f32 "x0" "mov"); +check_reg!(v0_f32x2 f32x2 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i64{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f32x4{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i64 i64 "x0" "mov"); +check_reg!(v0_f32x4 f32x4 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_f64{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f64{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_f64 f64 "x0" "mov"); +check_reg!(v0_f64 f64 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f64x1{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_ptr ptr "x0" "mov"); +check_reg!(v0_f64x1 f64x1 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i8{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f64x2{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i8 i8 "s0" "fmov"); +check_reg!(v0_f64x2 f64x2 "s0" "fmov"); // CHECK-LABEL: {{("#)?}}v0_i16{{"?}} // CHECK: //APP @@ -506,128 +511,122 @@ check_reg!(v0_i8 i8 "s0" "fmov"); // CHECK: //NO_APP check_reg!(v0_i16 i16 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_f16{{"?}} -// CHECK: //APP -// CHECK: fmov s0, s0 -// CHECK: //NO_APP -check_reg!(v0_f16 f16 "s0" "fmov"); - -// CHECK-LABEL: {{("#)?}}v0_i32{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i16x4{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i32 i32 "s0" "fmov"); +check_reg!(v0_i16x4 i16x4 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_f32{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i16x8{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_f32 f32 "s0" "fmov"); +check_reg!(v0_i16x8 i16x8 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i64{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i32{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i64 i64 "s0" "fmov"); +check_reg!(v0_i32 i32 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_f64{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i32x2{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_f64 f64 "s0" "fmov"); +check_reg!(v0_i32x2 i32x2 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_f128{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i32x4{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_f128 f128 "s0" "fmov"); +check_reg!(v0_i32x4 i32x4 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i64{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_ptr ptr "s0" "fmov"); +check_reg!(v0_i64 i64 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i8x8{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i64x1{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i8x8 i8x8 "s0" "fmov"); +check_reg!(v0_i64x1 i64x1 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i16x4{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i64x2{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i16x4 i16x4 "s0" "fmov"); +check_reg!(v0_i64x2 i64x2 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i32x2{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i8{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i32x2 i32x2 "s0" "fmov"); +check_reg!(v0_i8 i8 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i64x1{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i8x16{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i64x1 i64x1 "s0" "fmov"); +check_reg!(v0_i8x16 i8x16 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_f16x4{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i8x8{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_f16x4 f16x4 "s0" "fmov"); +check_reg!(v0_i8x8 i8x8 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_f32x2{{"?}} +// CHECK-LABEL: {{("#)?}}v0_ptr{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_f32x2 f32x2 "s0" "fmov"); +check_reg!(v0_ptr ptr "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_f64x1{{"?}} +// CHECK-LABEL: {{("#)?}}x0_f16{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f64x1 f64x1 "s0" "fmov"); +check_reg!(x0_f16 f16 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_i8x16{{"?}} +// CHECK-LABEL: {{("#)?}}x0_f32{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_i8x16 i8x16 "s0" "fmov"); +check_reg!(x0_f32 f32 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_i16x8{{"?}} +// CHECK-LABEL: {{("#)?}}x0_f64{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_i16x8 i16x8 "s0" "fmov"); +check_reg!(x0_f64 f64 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_i32x4{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i16{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_i32x4 i32x4 "s0" "fmov"); +check_reg!(x0_i16 i16 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_i64x2{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i32{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_i64x2 i64x2 "s0" "fmov"); +check_reg!(x0_i32 i32 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f16x8{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i64{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f16x8 f16x8 "s0" "fmov"); +check_reg!(x0_i64 i64 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f32x4{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i8{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f32x4 f32x4 "s0" "fmov"); +check_reg!(x0_i8 i8 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f64x2{{"?}} +// CHECK-LABEL: {{("#)?}}x0_ptr{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f64x2 f64x2 "s0" "fmov"); +check_reg!(x0_ptr ptr "x0" "mov"); diff --git a/tests/assembly-llvm/asm/arm-modifiers.rs b/tests/assembly-llvm/asm/arm-modifiers.rs index 32a368404924a..9867e21a307af 100644 --- a/tests/assembly-llvm/asm/arm-modifiers.rs +++ b/tests/assembly-llvm/asm/arm-modifiers.rs @@ -31,24 +31,6 @@ macro_rules! check { }; } -// 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 @@ -85,6 +67,23 @@ check!(qreg_e "e" qreg f32x4 "vmov.f64"); // CHECK: @NO_APP check!(qreg_f "f" qreg 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"); // CHECK-LABEL: qreg_low8: // CHECK: @APP // CHECK: vorr q0, q0, q0 @@ -103,20 +102,20 @@ check!(qreg_low8_e "e" qreg_low8 f32x4 "vmov.f64"); // CHECK: @NO_APP check!(qreg_low8_f "f" qreg_low8 f32x4 "vmov.f64"); -// CHECK-LABEL: qreg_low4: +// CHECK-LABEL: reg: // CHECK: @APP -// CHECK: vorr q0, q0, q0 +// CHECK: mov r0, r0 // CHECK: @NO_APP -check!(qreg_low4 "" qreg_low4 f32x4 "vmov"); +check!(reg "" reg i32 "mov"); -// CHECK-LABEL: qreg_low4_e: +// CHECK-LABEL: sreg: // CHECK: @APP -// CHECK: vmov.f64 d0, d0 +// CHECK: vmov.f32 s0, s0 // CHECK: @NO_APP -check!(qreg_low4_e "e" qreg_low4 f32x4 "vmov.f64"); +check!(sreg "" sreg f32 "vmov.f32"); -// CHECK-LABEL: qreg_low4_f: +// CHECK-LABEL: sreg_low16: // CHECK: @APP -// CHECK: vmov.f64 d1, d1 +// CHECK: vmov.f32 s0, s0 // CHECK: @NO_APP -check!(qreg_low4_f "f" qreg_low4 f32x4 "vmov.f64"); +check!(sreg_low16 "" sreg_low16 f32 "vmov.f32"); diff --git a/tests/assembly-llvm/asm/arm-types.rs b/tests/assembly-llvm/asm/arm-types.rs index fb93f474c20eb..89f1686d78ac5 100644 --- a/tests/assembly-llvm/asm/arm-types.rs +++ b/tests/assembly-llvm/asm/arm-types.rs @@ -111,90 +111,19 @@ macro_rules! check_reg { }; } -// 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_f16: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_f16 f16 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_f16: -// CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: @NO_APP -check!(sreg_f16 f16 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_f16: -// CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} -// CHECK: @NO_APP -check!(sreg_low16_f16 f16 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"); +// neon-LABEL: dreg_f16x4: +// neon: @APP +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(dreg_f16x4 f16x4 dreg "vmov.f64"); -// d32-LABEL: dreg_i64: -// d32: @APP -// d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// d32: @NO_APP -#[cfg(d32)] -check!(dreg_i64 i64 dreg "vmov.f64"); +// neon-LABEL: dreg_f32x2: +// neon: @APP +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(dreg_f32x2 f32x2 dreg "vmov.f64"); // d32-LABEL: dreg_f64: // d32: @APP @@ -203,13 +132,6 @@ check!(dreg_i64 i64 dreg "vmov.f64"); #[cfg(d32)] check!(dreg_f64 f64 dreg "vmov.f64"); -// neon-LABEL: dreg_i8x8: -// neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(dreg_i8x8 i8x8 dreg "vmov.f64"); - // neon-LABEL: dreg_i16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -224,6 +146,13 @@ check!(dreg_i16x4 i16x4 dreg "vmov.f64"); #[cfg(neon)] check!(dreg_i32x2 i32x2 dreg "vmov.f64"); +// d32-LABEL: dreg_i64: +// d32: @APP +// d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// d32: @NO_APP +#[cfg(d32)] +check!(dreg_i64 i64 dreg "vmov.f64"); + // neon-LABEL: dreg_i64x1: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -231,25 +160,26 @@ check!(dreg_i32x2 i32x2 dreg "vmov.f64"); #[cfg(neon)] check!(dreg_i64x1 i64x1 dreg "vmov.f64"); -// neon-LABEL: dreg_f16x4: +// neon-LABEL: dreg_i8x8: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_f16x4 f16x4 dreg "vmov.f64"); +check!(dreg_i8x8 i8x8 dreg "vmov.f64"); -// neon-LABEL: dreg_f32x2: +// neon-LABEL: dreg_low16_f16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_f32x2 f32x2 dreg "vmov.f64"); +check!(dreg_low16_f16x4 f16x4 dreg_low16 "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"); +// neon-LABEL: dreg_low16_f32x2: +// neon: @APP +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64"); // CHECK-LABEL: dreg_low16_f64: // CHECK: @APP @@ -257,13 +187,6 @@ check!(dreg_low16_i64 i64 dreg_low16 "vmov.f64"); // CHECK: @NO_APP check!(dreg_low16_f64 f64 dreg_low16 "vmov.f64"); -// neon-LABEL: dreg_low16_i8x8: -// neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64"); - // neon-LABEL: dreg_low16_i16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -278,6 +201,12 @@ check!(dreg_low16_i16x4 i16x4 dreg_low16 "vmov.f64"); #[cfg(neon)] check!(dreg_low16_i32x2 i32x2 dreg_low16 "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"); + // neon-LABEL: dreg_low16_i64x1: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -285,25 +214,26 @@ check!(dreg_low16_i32x2 i32x2 dreg_low16 "vmov.f64"); #[cfg(neon)] check!(dreg_low16_i64x1 i64x1 dreg_low16 "vmov.f64"); -// neon-LABEL: dreg_low16_f16x4: +// neon-LABEL: dreg_low16_i8x8: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low16_f16x4 f16x4 dreg_low16 "vmov.f64"); +check!(dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64"); -// neon-LABEL: dreg_low16_f32x2: +// neon-LABEL: dreg_low8_f16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64"); +check!(dreg_low8_f16x4 f16x4 dreg_low8 "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"); +// neon-LABEL: dreg_low8_f32x2: +// neon: @APP +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64"); // CHECK-LABEL: dreg_low8_f64: // CHECK: @APP @@ -311,13 +241,6 @@ check!(dreg_low8_i64 i64 dreg_low8 "vmov.f64"); // CHECK: @NO_APP check!(dreg_low8_f64 f64 dreg_low8 "vmov.f64"); -// neon-LABEL: dreg_low8_i8x8: -// neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64"); - // neon-LABEL: dreg_low8_i16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -332,6 +255,12 @@ check!(dreg_low8_i16x4 i16x4 dreg_low8 "vmov.f64"); #[cfg(neon)] check!(dreg_low8_i32x2 i32x2 dreg_low8 "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"); + // neon-LABEL: dreg_low8_i64x1: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -339,26 +268,26 @@ check!(dreg_low8_i32x2 i32x2 dreg_low8 "vmov.f64"); #[cfg(neon)] check!(dreg_low8_i64x1 i64x1 dreg_low8 "vmov.f64"); -// neon-LABEL: dreg_low8_f16x4: +// neon-LABEL: dreg_low8_i8x8: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low8_f16x4 f16x4 dreg_low8 "vmov.f64"); +check!(dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64"); -// neon-LABEL: dreg_low8_f32x2: +// neon-LABEL: qreg_f16x8: // neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64"); +check!(qreg_f16x8 f16x8 qreg "vmov"); -// neon-LABEL: qreg_i8x16: +// neon-LABEL: qreg_f32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_i8x16 i8x16 qreg "vmov"); +check!(qreg_f32x4 f32x4 qreg "vmov"); // neon-LABEL: qreg_i16x8: // neon: @APP @@ -381,171 +310,188 @@ check!(qreg_i32x4 i32x4 qreg "vmov"); #[cfg(neon)] check!(qreg_i64x2 i64x2 qreg "vmov"); -// neon-LABEL: qreg_f16x8: +// neon-LABEL: qreg_i8x16: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_f16x8 f16x8 qreg "vmov"); +check!(qreg_i8x16 i8x16 qreg "vmov"); -// neon-LABEL: qreg_f32x4: +// neon-LABEL: qreg_low4_f16x8: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_f32x4 f32x4 qreg "vmov"); +check!(qreg_low4_f16x8 f16x8 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_i8x16: +// neon-LABEL: qreg_low4_f32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i8x16 i8x16 qreg_low8 "vmov"); +check!(qreg_low4_f32x4 f32x4 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_i16x8: +// neon-LABEL: qreg_low4_i16x8: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i16x8 i16x8 qreg_low8 "vmov"); +check!(qreg_low4_i16x8 i16x8 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_i32x4: +// neon-LABEL: qreg_low4_i32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i32x4 i32x4 qreg_low8 "vmov"); +check!(qreg_low4_i32x4 i32x4 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_i64x2: +// neon-LABEL: qreg_low4_i64x2: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i64x2 i64x2 qreg_low8 "vmov"); +check!(qreg_low4_i64x2 i64x2 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_f16x8: +// neon-LABEL: qreg_low4_i8x16: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_f16x8 f16x8 qreg_low8 "vmov"); +check!(qreg_low4_i8x16 i8x16 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_f32x4: +// neon-LABEL: qreg_low8_f16x8: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_f32x4 f32x4 qreg_low8 "vmov"); +check!(qreg_low8_f16x8 f16x8 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_i8x16: +// neon-LABEL: qreg_low8_f32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i8x16 i8x16 qreg_low4 "vmov"); +check!(qreg_low8_f32x4 f32x4 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_i16x8: +// neon-LABEL: qreg_low8_i16x8: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i16x8 i16x8 qreg_low4 "vmov"); +check!(qreg_low8_i16x8 i16x8 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_i32x4: +// neon-LABEL: qreg_low8_i32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i32x4 i32x4 qreg_low4 "vmov"); +check!(qreg_low8_i32x4 i32x4 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_i64x2: +// neon-LABEL: qreg_low8_i64x2: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i64x2 i64x2 qreg_low4 "vmov"); +check!(qreg_low8_i64x2 i64x2 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_f16x8: +// neon-LABEL: qreg_low8_i8x16: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_f16x8 f16x8 qreg_low4 "vmov"); +check!(qreg_low8_i8x16 i8x16 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_f32x4: -// neon: @APP -// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(qreg_low4_f32x4 f32x4 qreg_low4 "vmov"); +// CHECK-LABEL: reg_f16: +// CHECK: @APP +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: @NO_APP +check!(reg_f16 f16 reg "mov"); -// CHECK-LABEL: r0_i8: +// CHECK-LABEL: reg_f32: // CHECK: @APP -// CHECK: mov r0, r0 +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: @NO_APP -check_reg!(r0_i8 i8 "r0" "mov"); +check!(reg_f32 f32 reg "mov"); -// CHECK-LABEL: r0_i16: +// CHECK-LABEL: reg_i16: // CHECK: @APP -// CHECK: mov r0, r0 +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: @NO_APP -check_reg!(r0_i16 i16 "r0" "mov"); +check!(reg_i16 i16 reg "mov"); -// CHECK-LABEL: r0_i32: +// CHECK-LABEL: reg_i32: // CHECK: @APP -// CHECK: mov r0, r0 +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: @NO_APP -check_reg!(r0_i32 i32 "r0" "mov"); +check!(reg_i32 i32 reg "mov"); -// CHECK-LABEL: r0_f16: +// CHECK-LABEL: reg_i8: // CHECK: @APP -// CHECK: mov r0, r0 +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: @NO_APP -check_reg!(r0_f16 f16 "r0" "mov"); +check!(reg_i8 i8 reg "mov"); -// CHECK-LABEL: r0_f32: +// CHECK-LABEL: reg_ptr: // CHECK: @APP -// CHECK: mov r0, r0 +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: @NO_APP -check_reg!(r0_f32 f32 "r0" "mov"); +check!(reg_ptr ptr reg "mov"); -// CHECK-LABEL: r0_ptr: +// CHECK-LABEL: sreg_f16: // CHECK: @APP -// CHECK: mov r0, r0 +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} // CHECK: @NO_APP -check_reg!(r0_ptr ptr "r0" "mov"); +check!(sreg_f16 f16 sreg "vmov.f32"); -// CHECK-LABEL: s0_i32: +// CHECK-LABEL: sreg_f32: // CHECK: @APP -// CHECK: vmov.f32 s0, s0 +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} // CHECK: @NO_APP -check_reg!(s0_i32 i32 "s0" "vmov.f32"); +check!(sreg_f32 f32 sreg "vmov.f32"); -// CHECK-LABEL: s0_f16: +// CHECK-LABEL: sreg_i32: // CHECK: @APP -// CHECK: vmov.f32 s0, s0 +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} // CHECK: @NO_APP -check_reg!(s0_f16 f16 "s0" "vmov.f32"); +check!(sreg_i32 i32 sreg "vmov.f32"); -// CHECK-LABEL: s0_f32: +// CHECK-LABEL: sreg_low16_f16: // CHECK: @APP -// CHECK: vmov.f32 s0, s0 +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} // CHECK: @NO_APP -check_reg!(s0_f32 f32 "s0" "vmov.f32"); +check!(sreg_low16_f16 f16 sreg_low16 "vmov.f32"); -// CHECK-LABEL: s0_ptr: +// CHECK-LABEL: sreg_low16_f32: // CHECK: @APP -// CHECK: vmov.f32 s0, s0 +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} // CHECK: @NO_APP -check_reg!(s0_ptr ptr "s0" "vmov.f32"); +check!(sreg_low16_f32 f32 sreg_low16 "vmov.f32"); -// FIXME(#126797): "d0" should work with `i64` and `f64` even when `d32` is disabled. -// d32-LABEL: d0_i64: -// d32: @APP -// d32: vmov.f64 d0, d0 -// d32: @NO_APP -#[cfg(d32)] -check_reg!(d0_i64 i64 "d0" "vmov.f64"); +// 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_ptr: +// CHECK: @APP +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: @NO_APP +check!(sreg_ptr ptr sreg "vmov.f32"); + +// neon-LABEL: d0_f16x4: +// neon: @APP +// neon: vmov.f64 d0, d0 +// neon: @NO_APP +#[cfg(neon)] +check_reg!(d0_f16x4 f16x4 "d0" "vmov.f64"); + +// neon-LABEL: d0_f32x2: +// neon: @APP +// neon: vmov.f64 d0, d0 +// neon: @NO_APP +#[cfg(neon)] +check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64"); // d32-LABEL: d0_f64: // d32: @APP @@ -554,13 +500,6 @@ check_reg!(d0_i64 i64 "d0" "vmov.f64"); #[cfg(d32)] check_reg!(d0_f64 f64 "d0" "vmov.f64"); -// neon-LABEL: d0_i8x8: -// neon: @APP -// neon: vmov.f64 d0, d0 -// neon: @NO_APP -#[cfg(neon)] -check_reg!(d0_i8x8 i8x8 "d0" "vmov.f64"); - // neon-LABEL: d0_i16x4: // neon: @APP // neon: vmov.f64 d0, d0 @@ -575,6 +514,14 @@ check_reg!(d0_i16x4 i16x4 "d0" "vmov.f64"); #[cfg(neon)] check_reg!(d0_i32x2 i32x2 "d0" "vmov.f64"); +// FIXME(#126797): "d0" should work with `i64` and `f64` even when `d32` is disabled. +// d32-LABEL: d0_i64: +// d32: @APP +// d32: vmov.f64 d0, d0 +// d32: @NO_APP +#[cfg(d32)] +check_reg!(d0_i64 i64 "d0" "vmov.f64"); + // neon-LABEL: d0_i64x1: // neon: @APP // neon: vmov.f64 d0, d0 @@ -582,27 +529,26 @@ check_reg!(d0_i32x2 i32x2 "d0" "vmov.f64"); #[cfg(neon)] check_reg!(d0_i64x1 i64x1 "d0" "vmov.f64"); -// neon-LABEL: d0_f16x4: +// neon-LABEL: d0_i8x8: // neon: @APP // neon: vmov.f64 d0, d0 // neon: @NO_APP #[cfg(neon)] -check_reg!(d0_f16x4 f16x4 "d0" "vmov.f64"); +check_reg!(d0_i8x8 i8x8 "d0" "vmov.f64"); -// neon-LABEL: d0_f32x2: +// neon-LABEL: q0_f16x8: // neon: @APP -// neon: vmov.f64 d0, d0 +// neon: vorr q0, q0, q0 // neon: @NO_APP #[cfg(neon)] -check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64"); +check_reg!(q0_f16x8 f16x8 "q0" "vmov"); -// neon-LABEL: q0_i8x16: +// neon-LABEL: q0_f32x4: // neon: @APP // neon: vorr q0, q0, q0 // neon: @NO_APP #[cfg(neon)] -check_reg!(q0_i8x16 i8x16 "q0" "vmov"); - +check_reg!(q0_f32x4 f32x4 "q0" "vmov"); // neon-LABEL: q0_i16x8: // neon: @APP // neon: vorr q0, q0, q0 @@ -624,16 +570,69 @@ check_reg!(q0_i32x4 i32x4 "q0" "vmov"); #[cfg(neon)] check_reg!(q0_i64x2 i64x2 "q0" "vmov"); -// neon-LABEL: q0_f16x8: +// neon-LABEL: q0_i8x16: // neon: @APP // neon: vorr q0, q0, q0 // neon: @NO_APP #[cfg(neon)] -check_reg!(q0_f16x8 f16x8 "q0" "vmov"); +check_reg!(q0_i8x16 i8x16 "q0" "vmov"); -// neon-LABEL: q0_f32x4: -// neon: @APP -// neon: vorr q0, q0, q0 -// neon: @NO_APP -#[cfg(neon)] -check_reg!(q0_f32x4 f32x4 "q0" "vmov"); +// CHECK-LABEL: r0_f16: +// CHECK: @APP +// CHECK: mov r0, r0 +// CHECK: @NO_APP +check_reg!(r0_f16 f16 "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_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_i8: +// CHECK: @APP +// CHECK: mov r0, r0 +// CHECK: @NO_APP +check_reg!(r0_i8 i8 "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_f16: +// CHECK: @APP +// CHECK: vmov.f32 s0, s0 +// CHECK: @NO_APP +check_reg!(s0_f16 f16 "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_i32: +// CHECK: @APP +// CHECK: vmov.f32 s0, s0 +// CHECK: @NO_APP +check_reg!(s0_i32 i32 "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"); diff --git a/tests/assembly-llvm/asm/avr-modifiers.rs b/tests/assembly-llvm/asm/avr-modifiers.rs index 124cad9bef6a8..213f19099ef89 100644 --- a/tests/assembly-llvm/asm/avr-modifiers.rs +++ b/tests/assembly-llvm/asm/avr-modifiers.rs @@ -24,17 +24,17 @@ macro_rules! check { }; } -// CHECK-LABEL: reg_pair_modifiers: +// CHECK-LABEL: reg_iw_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!(reg_iw_modifiers "h" "l" reg_iw); -// CHECK-LABEL: reg_iw_modifiers: +// CHECK-LABEL: reg_pair_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!(reg_pair_modifiers "h" "l" reg_pair); // CHECK-LABEL: reg_ptr_modifiers: // CHECK: ;APP diff --git a/tests/assembly-llvm/asm/avr-types.rs b/tests/assembly-llvm/asm/avr-types.rs index 309405f4d51e7..3a0528cb0b3b3 100644 --- a/tests/assembly-llvm/asm/avr-types.rs +++ b/tests/assembly-llvm/asm/avr-types.rs @@ -13,50 +13,6 @@ use minicore::*; type ptr = *const u64; -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; @@ -144,6 +100,50 @@ pub unsafe fn muls_clobber(x: i8, y: i8) -> i16 { z } +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 + } + }; +} + // CHECK-LABEL: reg_i8: // CHECK: ;APP // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} @@ -156,17 +156,17 @@ check!(reg_i8 i8 reg); // CHECK: ;NO_APP check!(reg_upper_i8 i8 reg_upper); -// CHECK-LABEL: reg_pair_i16: +// CHECK-LABEL: reg_iw_i16: // CHECK: ;APP // CHECK: movw r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -checkw!(reg_pair_i16 i16 reg_pair); +checkw!(reg_iw_i16 i16 reg_iw); -// CHECK-LABEL: reg_iw_i16: +// CHECK-LABEL: reg_pair_i16: // CHECK: ;APP // CHECK: movw r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -checkw!(reg_iw_i16 i16 reg_iw); +checkw!(reg_pair_i16 i16 reg_pair); // CHECK-LABEL: reg_ptr_i16: // CHECK: ;APP @@ -180,26 +180,26 @@ checkw!(reg_ptr_i16 i16 reg_ptr); // 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-LABEL: xl_i8: // CHECK: ;APP -// CHECK: movw r26, r26 +// CHECK: mov r26, r26 // CHECK: ;NO_APP -check_regw!(x_i16 i16 "X" "X"); +check_reg!(xl_i8 i8 "XL"); // CHECK-LABEL: r25r24_i16: // CHECK: ;APP // CHECK: movw r24, r24 // CHECK: ;NO_APP check_regw!(r25r24_i16 i16 "r25r24" "r24"); + +// CHECK-LABEL: x_i16: +// CHECK: ;APP +// CHECK: movw r26, r26 +// CHECK: ;NO_APP +check_regw!(x_i16 i16 "X" "X"); diff --git a/tests/assembly-llvm/asm/bpf-types.rs b/tests/assembly-llvm/asm/bpf-types.rs index 07ea7bd5ce055..380b332730a8f 100644 --- a/tests/assembly-llvm/asm/bpf-types.rs +++ b/tests/assembly-llvm/asm/bpf-types.rs @@ -13,6 +13,19 @@ use minicore::*; type ptr = *const u64; +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); +} + macro_rules! check { ($func:ident $ty:ident $class:ident) => { #[no_mangle] @@ -35,25 +48,6 @@ macro_rules! check_reg { }; } -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]+}} @@ -72,11 +66,11 @@ check!(reg_i32 i32 reg); // CHECK: #NO_APP check!(reg_i64 i64 reg); -// CHECK-LABEL: wreg_i8: +// CHECK-LABEL: reg_i8: // CHECK: #APP -// CHECK: w{{[0-9]+}} = w{{[0-9]+}} +// CHECK: r{{[0-9]+}} = r{{[0-9]+}} // CHECK: #NO_APP -check!(wreg_i8 i8 wreg); +check!(reg_i8 i8 reg); // CHECK-LABEL: wreg_i16: // CHECK: #APP @@ -90,11 +84,11 @@ check!(wreg_i16 i16 wreg); // CHECK: #NO_APP check!(wreg_i32 i32 wreg); -// CHECK-LABEL: r0_i8: +// CHECK-LABEL: wreg_i8: // CHECK: #APP -// CHECK: r0 = r0 +// CHECK: w{{[0-9]+}} = w{{[0-9]+}} // CHECK: #NO_APP -check_reg!(r0_i8 i8 "r0"); +check!(wreg_i8 i8 wreg); // CHECK-LABEL: r0_i16: // CHECK: #APP @@ -114,11 +108,11 @@ check_reg!(r0_i32 i32 "r0"); // CHECK: #NO_APP check_reg!(r0_i64 i64 "r0"); -// CHECK-LABEL: w0_i8: +// CHECK-LABEL: r0_i8: // CHECK: #APP -// CHECK: w0 = w0 +// CHECK: r0 = r0 // CHECK: #NO_APP -check_reg!(w0_i8 i8 "w0"); +check_reg!(r0_i8 i8 "r0"); // CHECK-LABEL: w0_i16: // CHECK: #APP @@ -131,3 +125,9 @@ check_reg!(w0_i16 i16 "w0"); // CHECK: w0 = w0 // CHECK: #NO_APP check_reg!(w0_i32 i32 "w0"); + +// CHECK-LABEL: w0_i8: +// CHECK: #APP +// CHECK: w0 = w0 +// CHECK: #NO_APP +check_reg!(w0_i8 i8 "w0"); diff --git a/tests/assembly-llvm/asm/hexagon-types.rs b/tests/assembly-llvm/asm/hexagon-types.rs index ce80fa75b359b..999c0d686be2e 100644 --- a/tests/assembly-llvm/asm/hexagon-types.rs +++ b/tests/assembly-llvm/asm/hexagon-types.rs @@ -19,28 +19,6 @@ extern "C" { static extern_static: u8; } -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 - } - }; -} - // CHECK-LABEL: sym_static: // CHECK: InlineAsm Start // CHECK: r0 = {{#+}}extern_static @@ -78,11 +56,27 @@ pub unsafe fn packet() { }}", 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); +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 + } + }; +} // CHECK-LABEL: reg_f32: // CHECK: InlineAsm Start @@ -90,6 +84,11 @@ check!(reg_ptr ptr reg); // CHECK: InlineAsm End check!(reg_f32 f32 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: reg_i32: // CHECK: InlineAsm Start // CHECK: r{{[0-9]+}} = r{{[0-9]+}} @@ -102,23 +101,23 @@ check!(reg_i32 i32 reg); // CHECK: InlineAsm End check!(reg_i8 i8 reg); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_ptr: // CHECK: InlineAsm Start // CHECK: r{{[0-9]+}} = r{{[0-9]+}} // CHECK: InlineAsm End -check!(reg_i16 i16 reg); +check!(reg_ptr ptr reg); -// CHECK-LABEL: r0_ptr: +// CHECK-LABEL: r0_f32: // CHECK: InlineAsm Start // CHECK: r0 = r0 // CHECK: InlineAsm End -check_reg!(r0_ptr ptr "r0"); +check_reg!(r0_f32 f32 "r0"); -// CHECK-LABEL: r0_f32: +// CHECK-LABEL: r0_i16: // CHECK: InlineAsm Start // CHECK: r0 = r0 // CHECK: InlineAsm End -check_reg!(r0_f32 f32 "r0"); +check_reg!(r0_i16 i16 "r0"); // CHECK-LABEL: r0_i32: // CHECK: InlineAsm Start @@ -132,8 +131,8 @@ check_reg!(r0_i32 i32 "r0"); // CHECK: InlineAsm End check_reg!(r0_i8 i8 "r0"); -// CHECK-LABEL: r0_i16: +// CHECK-LABEL: r0_ptr: // CHECK: InlineAsm Start // CHECK: r0 = r0 // CHECK: InlineAsm End -check_reg!(r0_i16 i16 "r0"); +check_reg!(r0_ptr ptr "r0"); diff --git a/tests/assembly-llvm/asm/loongarch-type.rs b/tests/assembly-llvm/asm/loongarch-type.rs index c782be19f1d2a..4f15a09fd7f6c 100644 --- a/tests/assembly-llvm/asm/loongarch-type.rs +++ b/tests/assembly-llvm/asm/loongarch-type.rs @@ -57,17 +57,23 @@ macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { } };} -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: freg_f16: // CHECK: #APP -// CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} +// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i8, i8, reg, "move"); +check!(freg_f16, f16, freg, "fmov.s"); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: freg_f32: // CHECK: #APP -// CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} +// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i16, i16, reg, "move"); +check!(freg_f32, f32, freg, "fmov.s"); + +// CHECK-LABEL: freg_f64: +// CHECK: #APP +// CHECK: fmov.d $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} +// CHECK: #NO_APP +check!(freg_f64, f64, freg, "fmov.d"); // CHECK-LABEL: reg_f16: // CHECK: #APP @@ -75,17 +81,29 @@ check!(reg_i16, i16, reg, "move"); // CHECK: #NO_APP check!(reg_f16, f16, reg, "move"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: reg_f32: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i32, i32, reg, "move"); +check!(reg_f32, f32, reg, "move"); -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: reg_f64: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_f32, f32, reg, "move"); +check!(reg_f64, f64, reg, "move"); + +// CHECK-LABEL: reg_i16: +// CHECK: #APP +// CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} +// CHECK: #NO_APP +check!(reg_i16, i16, reg, "move"); + +// CHECK-LABEL: reg_i32: +// CHECK: #APP +// CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} +// CHECK: #NO_APP +check!(reg_i32, i32, reg, "move"); // CHECK-LABEL: reg_i64: // CHECK: #APP @@ -93,11 +111,11 @@ check!(reg_f32, f32, reg, "move"); // CHECK: #NO_APP check!(reg_i64, i64, reg, "move"); -// CHECK-LABEL: reg_f64: +// CHECK-LABEL: reg_i8: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_f64, f64, reg, "move"); +check!(reg_i8, i8, reg, "move"); // CHECK-LABEL: reg_ptr: // CHECK: #APP @@ -105,53 +123,53 @@ check!(reg_f64, f64, reg, "move"); // CHECK: #NO_APP check!(reg_ptr, ptr, reg, "move"); -// CHECK-LABEL: freg_f16: +// CHECK-LABEL: f0_f16: // CHECK: #APP // CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(freg_f16, f16, freg, "fmov.s"); +check_reg!(f0_f16, f16, "$f0", "fmov.s"); -// CHECK-LABEL: freg_f32: +// CHECK-LABEL: f0_f32: // CHECK: #APP // CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(freg_f32, f32, freg, "fmov.s"); +check_reg!(f0_f32, f32, "$f0", "fmov.s"); -// CHECK-LABEL: freg_f64: +// CHECK-LABEL: f0_f64: // CHECK: #APP // CHECK: fmov.d $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(freg_f64, f64, freg, "fmov.d"); +check_reg!(f0_f64, f64, "$f0", "fmov.d"); -// CHECK-LABEL: r4_i8: +// CHECK-LABEL: r4_f16: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_i8, i8, "$r4", "move"); +check_reg!(r4_f16, f16, "$r4", "move"); -// CHECK-LABEL: r4_i16: +// CHECK-LABEL: r4_f32: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_i16, i16, "$r4", "move"); +check_reg!(r4_f32, f32, "$r4", "move"); -// CHECK-LABEL: r4_f16: +// CHECK-LABEL: r4_f64: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_f16, f16, "$r4", "move"); +check_reg!(r4_f64, f64, "$r4", "move"); -// CHECK-LABEL: r4_i32: +// CHECK-LABEL: r4_i16: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_i32, i32, "$r4", "move"); +check_reg!(r4_i16, i16, "$r4", "move"); -// CHECK-LABEL: r4_f32: +// CHECK-LABEL: r4_i32: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_f32, f32, "$r4", "move"); +check_reg!(r4_i32, i32, "$r4", "move"); // CHECK-LABEL: r4_i64: // CHECK: #APP @@ -159,32 +177,14 @@ check_reg!(r4_f32, f32, "$r4", "move"); // CHECK: #NO_APP check_reg!(r4_i64, i64, "$r4", "move"); -// CHECK-LABEL: r4_f64: +// CHECK-LABEL: r4_i8: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_f64, f64, "$r4", "move"); +check_reg!(r4_i8, i8, "$r4", "move"); // CHECK-LABEL: r4_ptr: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP check_reg!(r4_ptr, ptr, "$r4", "move"); - -// CHECK-LABEL: f0_f16: -// CHECK: #APP -// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} -// CHECK: #NO_APP -check_reg!(f0_f16, f16, "$f0", "fmov.s"); - -// CHECK-LABEL: f0_f32: -// CHECK: #APP -// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} -// CHECK: #NO_APP -check_reg!(f0_f32, f32, "$f0", "fmov.s"); - -// CHECK-LABEL: f0_f64: -// CHECK: #APP -// CHECK: fmov.d $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} -// CHECK: #NO_APP -check_reg!(f0_f64, f64, "$f0", "fmov.d"); diff --git a/tests/assembly-llvm/asm/m68k-types.rs b/tests/assembly-llvm/asm/m68k-types.rs index 9e4f6d9a1a9d5..af6cfae7b3f07 100644 --- a/tests/assembly-llvm/asm/m68k-types.rs +++ b/tests/assembly-llvm/asm/m68k-types.rs @@ -24,11 +24,17 @@ macro_rules! check { }; } -// CHECK-LABEL: reg_data_i8: +// CHECK-LABEL: reg_addr_i16: // CHECK: ;APP -// CHECK: move.b %d{{[0-9]}}, %d{{[0-9]}} +// CHECK: move.w %a{{[0-9]}}, %a{{[0-9]}} // CHECK: ;NO_APP -check!(reg_data_i8 i8 reg_data "move.b"); +check!(reg_addr_i16 i16 reg_addr "move.w"); + +// CHECK-LABEL: reg_addr_i32: +// CHECK: ;APP +// CHECK: move.l %a{{[0-9]}}, %a{{[0-9]}} +// CHECK: ;NO_APP +check!(reg_addr_i32 i32 reg_addr "move.l"); // CHECK-LABEL: reg_data_i16: // CHECK: ;APP @@ -42,17 +48,11 @@ check!(reg_data_i16 i16 reg_data "move.w"); // CHECK: ;NO_APP check!(reg_data_i32 i32 reg_data "move.l"); -// CHECK-LABEL: reg_addr_i16: -// CHECK: ;APP -// CHECK: move.w %a{{[0-9]}}, %a{{[0-9]}} -// CHECK: ;NO_APP -check!(reg_addr_i16 i16 reg_addr "move.w"); - -// CHECK-LABEL: reg_addr_i32: +// CHECK-LABEL: reg_data_i8: // CHECK: ;APP -// CHECK: move.l %a{{[0-9]}}, %a{{[0-9]}} +// CHECK: move.b %d{{[0-9]}}, %d{{[0-9]}} // CHECK: ;NO_APP -check!(reg_addr_i32 i32 reg_addr "move.l"); +check!(reg_data_i8 i8 reg_data "move.b"); // CHECK-LABEL: reg_i16: // CHECK: ;APP diff --git a/tests/assembly-llvm/asm/mips-types.rs b/tests/assembly-llvm/asm/mips-types.rs index 00e8ce0b874aa..5a7873e885e56 100644 --- a/tests/assembly-llvm/asm/mips-types.rs +++ b/tests/assembly-llvm/asm/mips-types.rs @@ -22,24 +22,6 @@ extern "C" { static extern_static: u8; } -macro_rules! check { ($func:ident, $ty:ty, $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 - } -};} - -macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - 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)($gp) @@ -84,31 +66,41 @@ pub unsafe fn sym_fn_64() { asm!("ld $v1, {}", sym extern_func); } +macro_rules! check { ($func:ident, $ty:ty, $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 + } +};} + +macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { + #[no_mangle] + pub unsafe fn $func(x: $ty) -> $ty { + let y; + asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); + y + } +};} + // 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-LABEL: reg_f32_soft: // CHECK: #APP -// CHECK: mov.d $f0, $f0 +// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} // CHECK: #NO_APP -#[no_mangle] -check_reg!(f0_f32_64, f32, "$f0", "mov.d"); +check!(reg_f32_soft, f32, reg, "move"); // CHECK-LABEL: reg_f64: // CHECK: #APP @@ -117,18 +109,18 @@ check_reg!(f0_f32_64, f32, "$f0", "mov.d"); #[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"); +// 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_ptr: +// CHECK-LABEL: reg_i16: // CHECK: #APP // CHECK: move ${{[0-9]+}}, ${{[0-9]+}} // CHECK: #NO_APP -check!(reg_ptr, ptr, reg, "move"); +check!(reg_i16, i16, reg, "move"); // CHECK-LABEL: reg_i32: // CHECK: #APP @@ -136,18 +128,12 @@ check!(reg_ptr, ptr, reg, "move"); // 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-LABEL: reg_i64: // mips64: #APP // mips64: move ${{[0-9]+}}, ${{[0-9]+}} // mips64: #NO_APP #[cfg(mips64)] -check!(reg_f64_soft, f64, reg, "move"); +check!(reg_i64, i64, reg, "move"); // CHECK-LABEL: reg_i8: // CHECK: #APP @@ -155,36 +141,38 @@ check!(reg_f64_soft, f64, reg, "move"); // CHECK: #NO_APP check!(reg_i8, i8, reg, "move"); -// CHECK-LABEL: reg_u8: +// CHECK-LABEL: reg_ptr: // CHECK: #APP // CHECK: move ${{[0-9]+}}, ${{[0-9]+}} // CHECK: #NO_APP -check!(reg_u8, u8, reg, "move"); +check!(reg_ptr, ptr, reg, "move"); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_u8: // CHECK: #APP // CHECK: move ${{[0-9]+}}, ${{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16, i16, reg, "move"); +check!(reg_u8, u8, 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: f0_f32: +// CHECK: #APP +// CHECK: mov.s $f0, $f0 +// CHECK: #NO_APP +#[no_mangle] +check_reg!(f0_f32, f32, "$f0", "mov.s"); -// CHECK-LABEL: r8_ptr: +// CHECK-LABEL: f0_f32_64: // CHECK: #APP -// CHECK: move $8, $8 +// CHECK: mov.d $f0, $f0 // CHECK: #NO_APP -check_reg!(r8_ptr, ptr, "$8", "move"); +#[no_mangle] +check_reg!(f0_f32_64, f32, "$f0", "mov.d"); -// CHECK-LABEL: r8_i32: +// CHECK-LABEL: f0_f64: // CHECK: #APP -// CHECK: move $8, $8 +// CHECK: mov.d $f0, $f0 // CHECK: #NO_APP -check_reg!(r8_i32, i32, "$8", "move"); +#[no_mangle] +check_reg!(f0_f64, f64, "$f0", "mov.d"); // CHECK-LABEL: r8_f32: // CHECK: #APP @@ -192,20 +180,31 @@ check_reg!(r8_i32, i32, "$8", "move"); // CHECK: #NO_APP check_reg!(r8_f32, f32, "$8", "move"); +// CHECK-LABEL: r8_i16: +// CHECK: #APP +// CHECK: move $8, $8 +// CHECK: #NO_APP +check_reg!(r8_i16, i16, "$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_i8: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP check_reg!(r8_i8, i8, "$8", "move"); -// CHECK-LABEL: r8_u8: +// CHECK-LABEL: r8_ptr: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP -check_reg!(r8_u8, u8, "$8", "move"); +check_reg!(r8_ptr, ptr, "$8", "move"); -// CHECK-LABEL: r8_i16: +// CHECK-LABEL: r8_u8: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP -check_reg!(r8_i16, i16, "$8", "move"); +check_reg!(r8_u8, u8, "$8", "move"); diff --git a/tests/assembly-llvm/asm/msp430-types.rs b/tests/assembly-llvm/asm/msp430-types.rs index 442dc77999f54..12e9b83a22ffa 100644 --- a/tests/assembly-llvm/asm/msp430-types.rs +++ b/tests/assembly-llvm/asm/msp430-types.rs @@ -13,50 +13,6 @@ use minicore::*; type ptr = *const i16; -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; @@ -104,17 +60,61 @@ pub unsafe fn mov_postincrement(mut x: *const i16) -> (i16, *const i16) { (y, x) } -// CHECK-LABEL: reg_i8: +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 + } + }; +} + +// CHECK-LABEL: reg_i16: // CHECK: ;APP // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -check!(reg_i8 i8 reg); +check!(reg_i16 i16 reg); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_i8: // CHECK: ;APP // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -check!(reg_i16 i16 reg); +check!(reg_i8 i8 reg); // CHECK-LABEL: reg_i8b: // CHECK: ;APP @@ -122,17 +122,16 @@ check!(reg_i16 i16 reg); // CHECK: ;NO_APP checkb!(reg_i8b i8 reg); -// CHECK-LABEL: r5_i8: +// CHECK-LABEL: r5_i16: // CHECK: ;APP // CHECK: mov r5, r5 // CHECK: ;NO_APP -check_reg!(r5_i8 i8 "r5"); - -// CHECK-LABEL: r5_i16: +check_reg!(r5_i16 i16 "r5"); +// CHECK-LABEL: r5_i8: // CHECK: ;APP // CHECK: mov r5, r5 // CHECK: ;NO_APP -check_reg!(r5_i16 i16 "r5"); +check_reg!(r5_i8 i8 "r5"); // CHECK-LABEL: r5_i8b: // CHECK: ;APP diff --git a/tests/assembly-llvm/asm/nvptx-types.rs b/tests/assembly-llvm/asm/nvptx-types.rs index 7e8ebd03024e4..ee10bc5e03136 100644 --- a/tests/assembly-llvm/asm/nvptx-types.rs +++ b/tests/assembly-llvm/asm/nvptx-types.rs @@ -36,23 +36,23 @@ macro_rules! check { }; } -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i8 +// 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_i8 i8 reg16 "mov.i16"); +check!(reg16_i16 i16 reg16 "mov.i16"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i16 +// 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_i16 i16 reg16 "mov.i16"); +check!(reg16_i8 i8 reg16 "mov.i16"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i8 +// 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_i8 i8 reg32 "mov.i32"); +check!(reg32_f32 f32 reg32 "mov.i32"); // CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i16 // CHECK: // begin inline asm @@ -66,35 +66,35 @@ check!(reg32_i16 i16 reg32 "mov.i32"); // CHECK: // end inline asm check!(reg32_i32 i32 reg32 "mov.i32"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_f32 +// 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_f32 f32 reg32 "mov.i32"); +check!(reg32_i8 i8 reg32 "mov.i32"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i8 +// 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_i8 i8 reg64 "mov.i64"); +check!(reg64_f32 f32 reg64 "mov.i64"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i16 +// 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_i16 i16 reg64 "mov.i64"); +check!(reg64_f64 f64 reg64 "mov.i64"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i32 +// 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_i32 i32 reg64 "mov.i64"); +check!(reg64_i16 i16 reg64 "mov.i64"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_f32 +// 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_f32 f32 reg64 "mov.i64"); +check!(reg64_i32 i32 reg64 "mov.i64"); // CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_i64 // CHECK: // begin inline asm @@ -102,11 +102,11 @@ check!(reg64_f32 f32 reg64 "mov.i64"); // CHECK: // end inline asm check!(reg64_i64 i64 reg64 "mov.i64"); -// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_f64 +// 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_f64 f64 reg64 "mov.i64"); +check!(reg64_i8 i8 reg64 "mov.i64"); // CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_ptr // CHECK: // begin inline asm diff --git a/tests/assembly-llvm/asm/powerpc-types.rs b/tests/assembly-llvm/asm/powerpc-types.rs index 4291e4c02f3be..55db090c049b3 100644 --- a/tests/assembly-llvm/asm/powerpc-types.rs +++ b/tests/assembly-llvm/asm/powerpc-types.rs @@ -73,42 +73,35 @@ macro_rules! check_reg { ($func:ident, $ty:ty, $rego:tt, $regc:tt, $mov:literal) } };} -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: reg_f32: // CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} +// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8, i8, reg, "mr"); +check!(reg_f32, f32, freg, "fmr"); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_f64: // CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} +// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16, i16, reg, "mr"); +check!(reg_f64, f64, freg, "fmr"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: reg_i16: // 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!(reg_i16, i16, reg, "mr"); -// CHECK-LABEL: reg_i8_nz: +// CHECK-LABEL: reg_i16_nz: // CHECK: #APP // CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8_nz, i8, reg_nonzero, "mr"); +check!(reg_i16_nz, i16, reg_nonzero, "mr"); -// CHECK-LABEL: reg_i16_nz: +// CHECK-LABEL: reg_i32: // CHECK: #APP // CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16_nz, i16, reg_nonzero, "mr"); +check!(reg_i32, i32, reg, "mr"); // CHECK-LABEL: reg_i32_nz: // CHECK: #APP @@ -116,6 +109,13 @@ check!(reg_i16_nz, i16, reg_nonzero, "mr"); // CHECK: #NO_APP check!(reg_i32_nz, i32, reg_nonzero, "mr"); +// powerpc64-LABEL: reg_i64: +// powerpc64: #APP +// powerpc64: mr {{[0-9]+}}, {{[0-9]+}} +// powerpc64: #NO_APP +#[cfg(powerpc64)] +check!(reg_i64, i64, reg, "mr"); + // powerpc64-LABEL: reg_i64_nz: // powerpc64: #APP // powerpc64: mr {{[0-9]+}}, {{[0-9]+}} @@ -123,28 +123,61 @@ check!(reg_i32_nz, i32, reg_nonzero, "mr"); #[cfg(powerpc64)] check!(reg_i64_nz, i64, reg_nonzero, "mr"); -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: reg_i8: // CHECK: #APP -// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} +// CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_f32, f32, freg, "fmr"); +check!(reg_i8, i8, reg, "mr"); -// CHECK-LABEL: reg_f64: +// CHECK-LABEL: reg_i8_nz: // CHECK: #APP -// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} +// CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_f64, f64, freg, "fmr"); +check!(reg_i8_nz, i8, reg_nonzero, "mr"); -// powerpc_altivec-LABEL: vreg_i8x16: +// powerpc_vsx-LABEL: vreg_f32: +// powerpc_vsx: #APP +// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f32: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check!(vreg_f32, f32, vreg, "vmr"); + +// powerpc_altivec-LABEL: vreg_f32x4: // powerpc_altivec: #APP // powerpc_altivec: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i8x16: +// powerpc64-LABEL: vreg_f32x4: // powerpc64: #APP // powerpc64: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc64: #NO_APP #[cfg(altivec)] -check!(vreg_i8x16, i8x16, vreg, "vmr"); +check!(vreg_f32x4, f32x4, vreg, "vmr"); + +// powerpc_vsx-LABEL: vreg_f64: +// powerpc_vsx: #APP +// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f64: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check!(vreg_f64, f64, vreg, "vmr"); + +// powerpc_vsx-LABEL: vreg_f64x2: +// powerpc_vsx: #APP +// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f64x2: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check!(vreg_f64x2, f64x2, vreg, "vmr"); // powerpc_altivec-LABEL: vreg_i16x8: // powerpc_altivec: #APP @@ -179,80 +212,46 @@ check!(vreg_i32x4, i32x4, vreg, "vmr"); #[cfg(vsx)] check!(vreg_i64x2, i64x2, vreg, "vmr"); -// powerpc_altivec-LABEL: vreg_f32x4: +// powerpc_altivec-LABEL: vreg_i8x16: // powerpc_altivec: #APP // powerpc_altivec: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_f32x4: +// powerpc64-LABEL: vreg_i8x16: // powerpc64: #APP // powerpc64: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc64: #NO_APP #[cfg(altivec)] -check!(vreg_f32x4, f32x4, vreg, "vmr"); - -// powerpc_vsx-LABEL: vreg_f64x2: -// powerpc_vsx: #APP -// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64x2: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check!(vreg_f64x2, f64x2, vreg, "vmr"); - -// powerpc_vsx-LABEL: vreg_f32: -// powerpc_vsx: #APP -// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f32: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check!(vreg_f32, f32, vreg, "vmr"); - -// powerpc_vsx-LABEL: vreg_f64: -// powerpc_vsx: #APP -// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check!(vreg_f64, f64, vreg, "vmr"); +check!(vreg_i8x16, i8x16, vreg, "vmr"); -// CHECK-LABEL: reg_i8_r0: +// CHECK-LABEL: reg_f32_f0: // CHECK: #APP -// CHECK: mr 0, 0 +// CHECK: fmr 0, 0 // CHECK: #NO_APP -check_reg!(reg_i8_r0, i8, "0", "0", "mr"); +check_reg!(reg_f32_f0, f32, "0", "f0", "fmr"); -// CHECK-LABEL: reg_i16_r0: +// CHECK-LABEL: reg_f32_f18: // CHECK: #APP -// CHECK: mr 0, 0 +// CHECK: fmr 18, 18 // CHECK: #NO_APP -check_reg!(reg_i16_r0, i16, "0", "0", "mr"); +check_reg!(reg_f32_f18, f32, "18", "f18", "fmr"); -// CHECK-LABEL: reg_i32_r0: +// CHECK-LABEL: reg_f64_f0: // CHECK: #APP -// CHECK: mr 0, 0 +// CHECK: fmr 0, 0 // CHECK: #NO_APP -check_reg!(reg_i32_r0, i32, "0", "0", "mr"); +check_reg!(reg_f64_f0, f64, "0", "f0", "fmr"); -// 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_f64_f18: +// CHECK: #APP +// CHECK: fmr 18, 18 +// CHECK: #NO_APP +check_reg!(reg_f64_f18, f64, "18", "f18", "fmr"); -// CHECK-LABEL: reg_i8_r18: +// CHECK-LABEL: reg_i16_r0: // CHECK: #APP -// CHECK: mr 18, 18 +// CHECK: mr 0, 0 // CHECK: #NO_APP -check_reg!(reg_i8_r18, i8, "18", "18", "mr"); +check_reg!(reg_i16_r0, i16, "0", "0", "mr"); // CHECK-LABEL: reg_i16_r18: // CHECK: #APP @@ -260,12 +259,25 @@ check_reg!(reg_i8_r18, i8, "18", "18", "mr"); // CHECK: #NO_APP check_reg!(reg_i16_r18, i16, "18", "18", "mr"); +// CHECK-LABEL: reg_i32_r0: +// CHECK: #APP +// CHECK: mr 0, 0 +// CHECK: #NO_APP +check_reg!(reg_i32_r0, i32, "0", "0", "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_r0: +// powerpc64: #APP +// powerpc64: mr 0, 0 +// powerpc64: #NO_APP +#[cfg(powerpc64)] +check_reg!(reg_i64_r0, i64, "0", "0", "mr"); + // powerpc64-LABEL: reg_i64_r18: // powerpc64: #APP // powerpc64: mr 18, 18 @@ -273,128 +285,116 @@ check_reg!(reg_i32_r18, i32, "18", "18", "mr"); #[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-LABEL: reg_i8_r0: // CHECK: #APP -// CHECK: fmr 0, 0 +// CHECK: mr 0, 0 // CHECK: #NO_APP -check_reg!(reg_f64_f0, f64, "0", "f0", "fmr"); +check_reg!(reg_i8_r0, i8, "0", "0", "mr"); -// CHECK-LABEL: reg_f32_f18: +// CHECK-LABEL: reg_i8_r18: // CHECK: #APP -// CHECK: fmr 18, 18 +// CHECK: mr 18, 18 // CHECK: #NO_APP -check_reg!(reg_f32_f18, f32, "18", "f18", "fmr"); +check_reg!(reg_i8_r18, i8, "18", "18", "mr"); -// CHECK-LABEL: reg_f64_f18: -// CHECK: #APP -// CHECK: fmr 18, 18 -// CHECK: #NO_APP -check_reg!(reg_f64_f18, f64, "18", "f18", "fmr"); +// powerpc_vsx-LABEL: vreg_f32_v0: +// powerpc_vsx: #APP +// powerpc_vsx: vmr 0, 0 +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f32_v0: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr 0, 0 +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check_reg!(vreg_f32_v0, f32, "0", "v0", "vmr"); -// powerpc_altivec-LABEL: vreg_i8x16_v0: -// powerpc_altivec: #APP -// powerpc_altivec: vmr 0, 0 -// powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i8x16_v0: -// powerpc64: #APP -// powerpc64: vmr 0, 0 -// powerpc64: #NO_APP -#[cfg(altivec)] -check_reg!(vreg_i8x16_v0, i8x16, "0", "v0", "vmr"); +// powerpc_vsx-LABEL: vreg_f32_v18: +// powerpc_vsx: #APP +// powerpc_vsx: vmr 18, 18 +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f32_v18: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr 18, 18 +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check_reg!(vreg_f32_v18, f32, "18", "v18", "vmr"); -// powerpc_altivec-LABEL: vreg_i16x8_v0: +// powerpc_altivec-LABEL: vreg_f32x4_v0: // powerpc_altivec: #APP // powerpc_altivec: vmr 0, 0 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i16x8_v0: +// powerpc64-LABEL: vreg_f32x4_v0: // powerpc64: #APP // powerpc64: vmr 0, 0 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_i16x8_v0, i16x8, "0", "v0", "vmr"); +check_reg!(vreg_f32x4_v0, f32x4, "0", "v0", "vmr"); -// powerpc_altivec-LABEL: vreg_i32x4_v0: +// powerpc_altivec-LABEL: vreg_f32x4_v18: // powerpc_altivec: #APP -// powerpc_altivec: vmr 0, 0 +// powerpc_altivec: vmr 18, 18 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i32x4_v0: +// powerpc64-LABEL: vreg_f32x4_v18: // powerpc64: #APP -// powerpc64: vmr 0, 0 +// powerpc64: vmr 18, 18 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_i32x4_v0, i32x4, "0", "v0", "vmr"); +check_reg!(vreg_f32x4_v18, f32x4, "18", "v18", "vmr"); -// powerpc_vsx-LABEL: vreg_i64x2_v0: +// powerpc_vsx-LABEL: vreg_f64_v0: // powerpc_vsx: #APP // powerpc_vsx: vmr 0, 0 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_i64x2_v0: +// powerpc64_vsx-LABEL: vreg_f64_v0: // powerpc64_vsx: #APP // powerpc64_vsx: vmr 0, 0 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_i64x2_v0, i64x2, "0", "v0", "vmr"); - -// powerpc_altivec-LABEL: vreg_f32x4_v0: -// powerpc_altivec: #APP -// powerpc_altivec: vmr 0, 0 -// powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_f32x4_v0: -// powerpc64: #APP -// powerpc64: vmr 0, 0 -// powerpc64: #NO_APP -#[cfg(altivec)] -check_reg!(vreg_f32x4_v0, f32x4, "0", "v0", "vmr"); +check_reg!(vreg_f64_v0, f64, "0", "v0", "vmr"); -// powerpc_vsx-LABEL: vreg_f64x2_v0: +// powerpc_vsx-LABEL: vreg_f64_v18: // powerpc_vsx: #APP -// powerpc_vsx: vmr 0, 0 +// powerpc_vsx: vmr 18, 18 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64x2_v0: +// powerpc64_vsx-LABEL: vreg_f64_v18: // powerpc64_vsx: #APP -// powerpc64_vsx: vmr 0, 0 +// powerpc64_vsx: vmr 18, 18 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_f64x2_v0, f64x2, "0", "v0", "vmr"); +check_reg!(vreg_f64_v18, f64, "18", "v18", "vmr"); -// powerpc_vsx-LABEL: vreg_f32_v0: +// powerpc_vsx-LABEL: vreg_f64x2_v0: // powerpc_vsx: #APP // powerpc_vsx: vmr 0, 0 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f32_v0: +// powerpc64_vsx-LABEL: vreg_f64x2_v0: // powerpc64_vsx: #APP // powerpc64_vsx: vmr 0, 0 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_f32_v0, f32, "0", "v0", "vmr"); +check_reg!(vreg_f64x2_v0, f64x2, "0", "v0", "vmr"); -// powerpc_vsx-LABEL: vreg_f64_v0: +// powerpc_vsx-LABEL: vreg_f64x2_v18: // powerpc_vsx: #APP -// powerpc_vsx: vmr 0, 0 +// powerpc_vsx: vmr 18, 18 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64_v0: +// powerpc64_vsx-LABEL: vreg_f64x2_v18: // powerpc64_vsx: #APP -// powerpc64_vsx: vmr 0, 0 +// powerpc64_vsx: vmr 18, 18 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_f64_v0, f64, "0", "v0", "vmr"); +check_reg!(vreg_f64x2_v18, f64x2, "18", "v18", "vmr"); -// powerpc_altivec-LABEL: vreg_i8x16_v18: +// powerpc_altivec-LABEL: vreg_i16x8_v0: // powerpc_altivec: #APP -// powerpc_altivec: vmr 18, 18 +// powerpc_altivec: vmr 0, 0 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i8x16_v18: +// powerpc64-LABEL: vreg_i16x8_v0: // powerpc64: #APP -// powerpc64: vmr 18, 18 +// powerpc64: vmr 0, 0 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_i8x16_v18, i8x16, "18", "v18", "vmr"); +check_reg!(vreg_i16x8_v0, i16x8, "0", "v0", "vmr"); // powerpc_altivec-LABEL: vreg_i16x8_v18: // powerpc_altivec: #APP @@ -407,6 +407,17 @@ check_reg!(vreg_i8x16_v18, i8x16, "18", "v18", "vmr"); #[cfg(altivec)] check_reg!(vreg_i16x8_v18, i16x8, "18", "v18", "vmr"); +// powerpc_altivec-LABEL: vreg_i32x4_v0: +// powerpc_altivec: #APP +// powerpc_altivec: vmr 0, 0 +// powerpc_altivec: #NO_APP +// powerpc64-LABEL: vreg_i32x4_v0: +// powerpc64: #APP +// powerpc64: vmr 0, 0 +// powerpc64: #NO_APP +#[cfg(altivec)] +check_reg!(vreg_i32x4_v0, i32x4, "0", "v0", "vmr"); + // powerpc_altivec-LABEL: vreg_i32x4_v18: // powerpc_altivec: #APP // powerpc_altivec: vmr 18, 18 @@ -418,6 +429,17 @@ check_reg!(vreg_i16x8_v18, i16x8, "18", "v18", "vmr"); #[cfg(altivec)] check_reg!(vreg_i32x4_v18, i32x4, "18", "v18", "vmr"); +// powerpc_vsx-LABEL: vreg_i64x2_v0: +// powerpc_vsx: #APP +// powerpc_vsx: vmr 0, 0 +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_i64x2_v0: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr 0, 0 +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check_reg!(vreg_i64x2_v0, i64x2, "0", "v0", "vmr"); + // powerpc_vsx-LABEL: vreg_i64x2_v18: // powerpc_vsx: #APP // powerpc_vsx: vmr 18, 18 @@ -429,46 +451,24 @@ check_reg!(vreg_i32x4_v18, i32x4, "18", "v18", "vmr"); #[cfg(vsx)] check_reg!(vreg_i64x2_v18, i64x2, "18", "v18", "vmr"); -// powerpc_altivec-LABEL: vreg_f32x4_v18: +// powerpc_altivec-LABEL: vreg_i8x16_v0: +// powerpc_altivec: #APP +// powerpc_altivec: vmr 0, 0 +// powerpc_altivec: #NO_APP +// powerpc64-LABEL: vreg_i8x16_v0: +// powerpc64: #APP +// powerpc64: vmr 0, 0 +// powerpc64: #NO_APP +#[cfg(altivec)] +check_reg!(vreg_i8x16_v0, i8x16, "0", "v0", "vmr"); + +// powerpc_altivec-LABEL: vreg_i8x16_v18: // powerpc_altivec: #APP // powerpc_altivec: vmr 18, 18 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_f32x4_v18: +// powerpc64-LABEL: vreg_i8x16_v18: // powerpc64: #APP // powerpc64: vmr 18, 18 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_f32x4_v18, f32x4, "18", "v18", "vmr"); - -// powerpc_vsx-LABEL: vreg_f64x2_v18: -// powerpc_vsx: #APP -// powerpc_vsx: vmr 18, 18 -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64x2_v18: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr 18, 18 -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check_reg!(vreg_f64x2_v18, f64x2, "18", "v18", "vmr"); - -// powerpc_vsx-LABEL: vreg_f32_v18: -// powerpc_vsx: #APP -// powerpc_vsx: vmr 18, 18 -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f32_v18: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr 18, 18 -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check_reg!(vreg_f32_v18, f32, "18", "v18", "vmr"); - -// powerpc_vsx-LABEL: vreg_f64_v18: -// powerpc_vsx: #APP -// powerpc_vsx: vmr 18, 18 -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64_v18: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr 18, 18 -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check_reg!(vreg_f64_v18, f64, "18", "v18", "vmr"); +check_reg!(vreg_i8x16_v18, i8x16, "18", "v18", "vmr"); diff --git a/tests/assembly-llvm/asm/riscv-types.rs b/tests/assembly-llvm/asm/riscv-types.rs index 724aa154da8c0..78bb20fa0e373 100644 --- a/tests/assembly-llvm/asm/riscv-types.rs +++ b/tests/assembly-llvm/asm/riscv-types.rs @@ -86,29 +86,31 @@ macro_rules! check_reg { }; } -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: freg_f16: +// zfhmin-NOT: or // CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i8 i8 reg "mv"); +// zfhmin-NOT: or +check!(freg_f16 f16 freg "fmv.s"); -// CHECK-LABEL: reg_f16: +// CHECK-LABEL: freg_f32: // CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_f16 f16 reg "mv"); +check!(freg_f32 f32 freg "fmv.s"); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: freg_f64: // CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: fmv.d f{{[a-z0-9]+}}, f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i16 i16 reg "mv"); +check!(freg_f64 f64 freg "fmv.d"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: reg_f16: // CHECK: #APP // CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i32 i32 reg "mv"); +check!(reg_f16 f16 reg "mv"); // CHECK-LABEL: reg_f32: // CHECK: #APP @@ -116,13 +118,6 @@ check!(reg_i32 i32 reg "mv"); // 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]+}} @@ -130,49 +125,61 @@ check!(reg_i64 i64 reg "mv"); #[cfg(riscv64)] check!(reg_f64 f64 reg "mv"); -// CHECK-LABEL: reg_ptr: +// CHECK-LABEL: reg_i16: // CHECK: #APP // CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_ptr ptr reg "mv"); +check!(reg_i16 i16 reg "mv"); -// CHECK-LABEL: freg_f16: -// zfhmin-NOT: or +// CHECK-LABEL: reg_i32: // CHECK: #APP -// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} +// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -// zfhmin-NOT: or -check!(freg_f16 f16 freg "fmv.s"); +check!(reg_i32 i32 reg "mv"); -// CHECK-LABEL: freg_f32: +// 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"); + +// CHECK-LABEL: reg_i8: // CHECK: #APP -// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} +// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(freg_f32 f32 freg "fmv.s"); +check!(reg_i8 i8 reg "mv"); -// CHECK-LABEL: freg_f64: +// CHECK-LABEL: reg_ptr: // CHECK: #APP -// CHECK: fmv.d f{{[a-z0-9]+}}, f{{[a-z0-9]+}} +// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(freg_f64 f64 freg "fmv.d"); +check!(reg_ptr ptr reg "mv"); -// CHECK-LABEL: a0_i8: +// CHECK-LABEL: a0_f16: // CHECK: #APP // CHECK: mv a0, a0 // CHECK: #NO_APP -check_reg!(a0_i8 i8 "a0" "mv"); +check_reg!(a0_f16 f16 "a0" "mv"); -// CHECK-LABEL: a0_i16: +// CHECK-LABEL: a0_f32: // CHECK: #APP // CHECK: mv a0, a0 // CHECK: #NO_APP -check_reg!(a0_i16 i16 "a0" "mv"); +check_reg!(a0_f32 f32 "a0" "mv"); -// CHECK-LABEL: a0_f16: +// 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_i16: // CHECK: #APP // CHECK: mv a0, a0 // CHECK: #NO_APP -check_reg!(a0_f16 f16 "a0" "mv"); +check_reg!(a0_i16 i16 "a0" "mv"); // CHECK-LABEL: a0_i32: // CHECK: #APP @@ -180,12 +187,6 @@ check_reg!(a0_f16 f16 "a0" "mv"); // 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 @@ -193,12 +194,11 @@ check_reg!(a0_f32 f32 "a0" "mv"); #[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_i8: +// CHECK: #APP +// CHECK: mv a0, a0 +// CHECK: #NO_APP +check_reg!(a0_i8 i8 "a0" "mv"); // CHECK-LABEL: a0_ptr: // CHECK: #APP diff --git a/tests/assembly-llvm/asm/s390x-types.rs b/tests/assembly-llvm/asm/s390x-types.rs index e6fe38ecb0df2..e7e253e517718 100644 --- a/tests/assembly-llvm/asm/s390x-types.rs +++ b/tests/assembly-llvm/asm/s390x-types.rs @@ -43,6 +43,24 @@ extern "C" { static extern_static: u8; } +// CHECK-LABEL: sym_fn_32: +// CHECK: #APP +// CHECK: brasl %r14, extern_func +// CHECK: #NO_APP +#[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); +} + macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { #[no_mangle] pub unsafe fn $func(x: $ty) -> $ty { @@ -61,29 +79,17 @@ macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { } };} -// CHECK-LABEL: sym_fn_32: -// CHECK: #APP -// CHECK: brasl %r14, extern_func -// CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_fn_32() { - asm!("brasl %r14, {}", sym extern_func); -} - -// CHECK-LABEL: sym_static: +// CHECK-LABEL: reg_f32: // CHECK: #APP -// CHECK: brasl %r14, extern_static +// CHECK: ler %f{{[0-9]+}}, %f{{[0-9]+}} // CHECK: #NO_APP -#[no_mangle] -pub unsafe fn sym_static() { - asm!("brasl %r14, {}", sym extern_static); -} +check!(reg_f32, f32, freg, "ler"); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: reg_f64: // CHECK: #APP -// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} +// CHECK: ldr %f{{[0-9]+}}, %f{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8, i8, reg, "lgr"); +check!(reg_f64, f64, freg, "ldr"); // CHECK-LABEL: reg_i16: // CHECK: #APP @@ -91,35 +97,29 @@ check!(reg_i8, i8, reg, "lgr"); // 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-LABEL: reg_i16_addr: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i64, i64, reg, "lgr"); +check!(reg_i16_addr, i16, reg_addr, "lgr"); -// CHECK-LABEL: reg_i8_addr: +// CHECK-LABEL: reg_i32: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8_addr, i8, reg_addr, "lgr"); +check!(reg_i32, i32, reg, "lgr"); -// CHECK-LABEL: reg_i16_addr: +// CHECK-LABEL: reg_i32_addr: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16_addr, i16, reg_addr, "lgr"); +check!(reg_i32_addr, i32, reg_addr, "lgr"); -// CHECK-LABEL: reg_i32_addr: +// CHECK-LABEL: reg_i64: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i32_addr, i32, reg_addr, "lgr"); +check!(reg_i64, i64, reg, "lgr"); // CHECK-LABEL: reg_i64_addr: // CHECK: #APP @@ -127,17 +127,17 @@ check!(reg_i32_addr, i32, reg_addr, "lgr"); // CHECK: #NO_APP check!(reg_i64_addr, i64, reg_addr, "lgr"); -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: reg_i8: // CHECK: #APP -// CHECK: ler %f{{[0-9]+}}, %f{{[0-9]+}} +// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_f32, f32, freg, "ler"); +check!(reg_i8, i8, reg, "lgr"); -// CHECK-LABEL: reg_f64: +// CHECK-LABEL: reg_i8_addr: // CHECK: #APP -// CHECK: ldr %f{{[0-9]+}}, %f{{[0-9]+}} +// CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_f64, f64, freg, "ldr"); +check!(reg_i8_addr, i8, reg_addr, "lgr"); // CHECK-LABEL: reg_ptr: // CHECK: #APP @@ -145,95 +145,101 @@ check!(reg_f64, f64, freg, "ldr"); // CHECK: #NO_APP check!(reg_ptr, ptr, reg, "lgr"); -// s390x_vector-LABEL: vreg_i8x16: +// s390x_vector-LABEL: vreg_f128: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i8x16, i8x16, vreg, "vlr"); +check!(vreg_f128, f128, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i16x8: +// s390x_vector-LABEL: vreg_f32: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i16x8, i16x8, vreg, "vlr"); +check!(vreg_f32, f32, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i32x4: +// s390x_vector-LABEL: vreg_f32x4: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i32x4, i32x4, vreg, "vlr"); +check!(vreg_f32x4, f32x4, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i64x2: +// s390x_vector-LABEL: vreg_f64: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i64x2, i64x2, vreg, "vlr"); +check!(vreg_f64, f64, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f32x4: +// s390x_vector-LABEL: vreg_f64x2: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f32x4, f32x4, vreg, "vlr"); +check!(vreg_f64x2, f64x2, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f64x2: +// s390x_vector-LABEL: vreg_i128: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f64x2, f64x2, vreg, "vlr"); +check!(vreg_i128, i128, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i32: +// s390x_vector-LABEL: vreg_i16x8: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i32, i32, vreg, "vlr"); +check!(vreg_i16x8, i16x8, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i64: +// s390x_vector-LABEL: vreg_i32: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i64, i64, vreg, "vlr"); +check!(vreg_i32, i32, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i128: +// s390x_vector-LABEL: vreg_i32x4: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i128, i128, vreg, "vlr"); +check!(vreg_i32x4, i32x4, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f32: +// s390x_vector-LABEL: vreg_i64: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f32, f32, vreg, "vlr"); +check!(vreg_i64, i64, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f64: +// s390x_vector-LABEL: vreg_i64x2: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f64, f64, vreg, "vlr"); +check!(vreg_i64x2, i64x2, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f128: +// s390x_vector-LABEL: vreg_i8x16: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f128, f128, vreg, "vlr"); +check!(vreg_i8x16, i8x16, vreg, "vlr"); -// CHECK-LABEL: r0_i8: +// CHECK-LABEL: f0_f32: // CHECK: #APP -// CHECK: lr %r0, %r0 +// CHECK: ler %f0, %f0 // CHECK: #NO_APP -check_reg!(r0_i8, i8, "r0", "lr"); +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"); // CHECK-LABEL: r0_i16: // CHECK: #APP @@ -253,98 +259,92 @@ check_reg!(r0_i32, i32, "r0", "lr"); // 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-LABEL: r0_i8: // CHECK: #APP -// CHECK: ldr %f0, %f0 +// CHECK: lr %r0, %r0 // CHECK: #NO_APP -check_reg!(f0_f64, f64, "f0", "ldr"); +check_reg!(r0_i8, i8, "r0", "lr"); -// s390x_vector-LABEL: v0_i8x16: +// s390x_vector-LABEL: v0_f128: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i8x16, i8x16, "v0", "vlr"); +check_reg!(v0_f128, f128, "v0", "vlr"); -// s390x_vector-LABEL: v0_i16x8: +// s390x_vector-LABEL: v0_f32: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i16x8, i16x8, "v0", "vlr"); +check_reg!(v0_f32, f32, "v0", "vlr"); -// s390x_vector-LABEL: v0_i32x4: +// s390x_vector-LABEL: v0_f32x4: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i32x4, i32x4, "v0", "vlr"); +check_reg!(v0_f32x4, f32x4, "v0", "vlr"); -// s390x_vector-LABEL: v0_i64x2: +// s390x_vector-LABEL: v0_f64: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i64x2, i64x2, "v0", "vlr"); +check_reg!(v0_f64, f64, "v0", "vlr"); -// s390x_vector-LABEL: v0_f32x4: +// s390x_vector-LABEL: v0_f64x2: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f32x4, f32x4, "v0", "vlr"); +check_reg!(v0_f64x2, f64x2, "v0", "vlr"); -// s390x_vector-LABEL: v0_f64x2: +// s390x_vector-LABEL: v0_i128: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f64x2, f64x2, "v0", "vlr"); +check_reg!(v0_i128, i128, "v0", "vlr"); -// s390x_vector-LABEL: v0_i32: +// s390x_vector-LABEL: v0_i16x8: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i32, i32, "v0", "vlr"); +check_reg!(v0_i16x8, i16x8, "v0", "vlr"); -// s390x_vector-LABEL: v0_i64: +// s390x_vector-LABEL: v0_i32: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i64, i64, "v0", "vlr"); +check_reg!(v0_i32, i32, "v0", "vlr"); -// s390x_vector-LABEL: v0_i128: +// s390x_vector-LABEL: v0_i32x4: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i128, i128, "v0", "vlr"); +check_reg!(v0_i32x4, i32x4, "v0", "vlr"); -// s390x_vector-LABEL: v0_f32: +// s390x_vector-LABEL: v0_i64: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f32, f32, "v0", "vlr"); +check_reg!(v0_i64, i64, "v0", "vlr"); -// s390x_vector-LABEL: v0_f64: +// s390x_vector-LABEL: v0_i64x2: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f64, f64, "v0", "vlr"); +check_reg!(v0_i64x2, i64x2, "v0", "vlr"); -// s390x_vector-LABEL: v0_f128: +// s390x_vector-LABEL: v0_i8x16: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f128, f128, "v0", "vlr"); +check_reg!(v0_i8x16, i8x16, "v0", "vlr"); diff --git a/tests/assembly-llvm/asm/sparc-types.rs b/tests/assembly-llvm/asm/sparc-types.rs index 49cc377cd9527..292be00777651 100644 --- a/tests/assembly-llvm/asm/sparc-types.rs +++ b/tests/assembly-llvm/asm/sparc-types.rs @@ -24,24 +24,6 @@ extern "C" { static extern_static: u8; } -macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!($mov," {}, {}"), in($class) x, out($class) y); - y - } -};} - -macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!($mov, " %", $reg, ", %", $reg), in($reg) x, lateout($reg) y); - y - } -};} - // CHECK-LABEL: sym_fn_32: // CHECK: !APP // CHECK-NEXT: call extern_func @@ -60,11 +42,23 @@ pub unsafe fn sym_static() { asm!("call {}", sym extern_static); } -// CHECK-LABEL: reg_i8: -// CHECK: !APP -// CHECK-NEXT: mov %{{[goli]}}{{[0-9]+}}, %{{[goli]}}{{[0-9]+}} -// CHECK-NEXT: !NO_APP -check!(reg_i8, i8, reg, "mov"); +macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { + #[no_mangle] + pub unsafe fn $func(x: $ty) -> $ty { + let y; + asm!(concat!($mov," {}, {}"), in($class) x, out($class) y); + y + } +};} + +macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { + #[no_mangle] + pub unsafe fn $func(x: $ty) -> $ty { + let y; + asm!(concat!($mov, " %", $reg, ", %", $reg), in($reg) x, lateout($reg) y); + y + } +};} // CHECK-LABEL: reg_i16: // CHECK: !APP @@ -86,17 +80,17 @@ check!(reg_i32, i32, reg, "mov"); #[cfg(sparc64)] check!(reg_i64, i64, reg, "mov"); -// CHECK-LABEL: reg_ptr: +// CHECK-LABEL: reg_i8: // CHECK: !APP // CHECK-NEXT: mov %{{[goli]}}{{[0-9]+}}, %{{[goli]}}{{[0-9]+}} // CHECK-NEXT: !NO_APP -check!(reg_ptr, ptr, reg, "mov"); +check!(reg_i8, i8, reg, "mov"); -// CHECK-LABEL: o0_i8: +// CHECK-LABEL: reg_ptr: // CHECK: !APP -// CHECK-NEXT: mov %o0, %o0 +// CHECK-NEXT: mov %{{[goli]}}{{[0-9]+}}, %{{[goli]}}{{[0-9]+}} // CHECK-NEXT: !NO_APP -check_reg!(o0_i8, i8, "o0", "mov"); +check!(reg_ptr, ptr, reg, "mov"); // CHECK-LABEL: o0_i16: // CHECK: !APP @@ -118,11 +112,11 @@ check_reg!(o0_i32, i32, "o0", "mov"); #[cfg(sparc64)] check_reg!(o0_i64, i64, "o0", "mov"); -// CHECK-LABEL: r9_i8: +// CHECK-LABEL: o0_i8: // CHECK: !APP -// CHECK-NEXT: mov %o1, %o1 +// CHECK-NEXT: mov %o0, %o0 // CHECK-NEXT: !NO_APP -check_reg!(r9_i8, i8, "r9", "mov"); +check_reg!(o0_i8, i8, "o0", "mov"); // CHECK-LABEL: r9_i16: // CHECK: !APP @@ -143,3 +137,9 @@ check_reg!(r9_i32, i32, "r9", "mov"); // sparc64-NEXT: !NO_APP #[cfg(sparc64)] check_reg!(r9_i64, i64, "r9", "mov"); + +// CHECK-LABEL: r9_i8: +// CHECK: !APP +// CHECK-NEXT: mov %o1, %o1 +// CHECK-NEXT: !NO_APP +check_reg!(r9_i8, i8, "r9", "mov"); diff --git a/tests/assembly-llvm/asm/wasm-types.rs b/tests/assembly-llvm/asm/wasm-types.rs index 78e555c53173a..4c053a5d84fce 100644 --- a/tests/assembly-llvm/asm/wasm-types.rs +++ b/tests/assembly-llvm/asm/wasm-types.rs @@ -50,45 +50,45 @@ macro_rules! check { }; } -// CHECK-LABEL: i8_i32: +// CHECK-LABEL: f32_f32 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i32.clz +// CHECK: f32.abs // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i8_i32 i8 "i32.clz"); +check!(f32_f32 f32 "f32.abs"); -// CHECK-LABEL: i16_i32: +// CHECK-LABEL: f64_f64 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i32.clz +// CHECK: f64.abs // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i16_i32 i16 "i32.clz"); +check!(f64_f64 f64 "f64.abs"); -// CHECK-LABEL: i32_i32: +// CHECK-LABEL: i16_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!(i16_i32 i16 "i32.clz"); -// CHECK-LABEL: i8_i64 +// CHECK-LABEL: i16_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!(i16_i64 i16 "i64.clz"); -// CHECK-LABEL: i16_i64 +// CHECK-LABEL: i32_i32: // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i64.clz +// CHECK: i32.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i16_i64 i16 "i64.clz"); +check!(i32_i32 i32 "i32.clz"); // CHECK-LABEL: i32_i64 // CHECK: #APP @@ -98,34 +98,34 @@ check!(i16_i64 i16 "i64.clz"); // CHECK: #NO_APP check!(i32_i64 i32 "i64.clz"); -// CHECK-LABEL: i64_i64 +// CHECK-LABEL: i32_ptr // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i64.clz +// CHECK: i32.eqz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i64_i64 i64 "i64.clz"); +check!(i32_ptr ptr "i32.eqz"); -// CHECK-LABEL: f32_f32 +// CHECK-LABEL: i64_i64 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: f32.abs +// CHECK: i64.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(f32_f32 f32 "f32.abs"); +check!(i64_i64 i64 "i64.clz"); -// CHECK-LABEL: f64_f64 +// CHECK-LABEL: i8_i32: // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: f64.abs +// CHECK: i32.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(f64_f64 f64 "f64.abs"); +check!(i8_i32 i8 "i32.clz"); -// CHECK-LABEL: i32_ptr +// CHECK-LABEL: i8_i64 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i32.eqz +// CHECK: i64.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i32_ptr ptr "i32.eqz"); +check!(i8_i64 i8 "i64.clz"); diff --git a/tests/assembly-llvm/asm/x86-modifiers.rs b/tests/assembly-llvm/asm/x86-modifiers.rs index 5f68e5c7317f3..ef678e75c049e 100644 --- a/tests/assembly-llvm/asm/x86-modifiers.rs +++ b/tests/assembly-llvm/asm/x86-modifiers.rs @@ -30,6 +30,15 @@ macro_rules! check { }; } +// 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"); + // CHECK-LABEL: reg: // CHECK: #APP // x86_64: mov rax, rax @@ -37,38 +46,24 @@ macro_rules! check { // 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-LABEL: reg_abcd: // CHECK: #APP -// CHECK: mov ax, ax +// x86_64: mov rax, rax +// i686: mov eax, eax // CHECK: #NO_APP -check!(reg_x "x" reg "mov"); +check!(reg_abcd "" reg_abcd "mov"); -// CHECK-LABEL: reg_e: +// CHECK-LABEL: reg_abcd_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!(reg_abcd_e "e" reg_abcd "mov"); -// CHECK-LABEL: reg_abcd: +// CHECK-LABEL: reg_abcd_h: // CHECK: #APP -// x86_64: mov rax, rax -// i686: mov eax, eax +// CHECK: mov ah, ah // CHECK: #NO_APP -check!(reg_abcd "" reg_abcd "mov"); +check!(reg_abcd_h "h" reg_abcd "mov"); // CHECK-LABEL: reg_abcd_l: // CHECK: #APP @@ -76,11 +71,12 @@ check!(reg_abcd "" reg_abcd "mov"); // 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"); +// 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: reg_abcd_x: // CHECK: #APP @@ -88,18 +84,31 @@ check!(reg_abcd_h "h" reg_abcd "mov"); // CHECK: #NO_APP check!(reg_abcd_x "x" reg_abcd "mov"); -// CHECK-LABEL: reg_abcd_e: +// CHECK-LABEL: reg_e: // CHECK: #APP // CHECK: mov eax, eax // CHECK: #NO_APP -check!(reg_abcd_e "e" reg_abcd "mov"); +check!(reg_e "e" reg "mov"); -// x86_64-LABEL: reg_abcd_r: +// 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"); + +// x86_64-LABEL: reg_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!(reg_r "r" reg "mov"); + +// CHECK-LABEL: reg_x: +// CHECK: #APP +// CHECK: mov ax, ax +// CHECK: #NO_APP +check!(reg_x "x" reg "mov"); // CHECK-LABEL: xmm_reg // CHECK: #APP @@ -172,13 +181,3 @@ check!(zmm_reg_y "y" zmm_reg "vmovaps"); // 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/tests/assembly-llvm/asm/x86-types.rs b/tests/assembly-llvm/asm/x86-types.rs index 6120ed0d53275..b8eea21121664 100644 --- a/tests/assembly-llvm/asm/x86-types.rs +++ b/tests/assembly-llvm/asm/x86-types.rs @@ -123,109 +123,145 @@ macro_rules! check_reg { }; } -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: kreg_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: kmovw k{{[0-9]+}}, k{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16 i16 reg "mov"); +check!(kreg_i16 i16 kreg "kmovw"); -// CHECK-LABEL: reg_f16: +// CHECK-LABEL: kreg_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: kmovd k{{[0-9]+}}, k{{[0-9]+}} // CHECK: #NO_APP -check!(reg_f16 f16 reg "mov"); +check!(kreg_i32 i32 kreg "kmovd"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: kreg_i64: // CHECK: #APP -// x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}} -// i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}} +// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i32 i32 reg "mov"); +check!(kreg_i64 i64 kreg "kmovq"); -// CHECK-LABEL: reg_f32: +// 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_ptr: +// CHECK: #APP +// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} +// CHECK: #NO_APP +check!(kreg_ptr ptr kreg "kmovq"); + +// CHECK-LABEL: reg_abcd_f16: // 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"); +check!(reg_abcd_f16 f16 reg_abcd "mov"); -// x86_64-LABEL: reg_i64: -// x86_64: #APP +// CHECK-LABEL: reg_abcd_f32: +// CHECK: #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"); +// 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_f64: +// 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_f64 f64 reg "mov"); +check!(reg_abcd_f64 f64 reg_abcd "mov"); -// CHECK-LABEL: reg_ptr: +// 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_ptr ptr reg "mov"); +check!(reg_abcd_i16 i16 reg_abcd "mov"); -// CHECK-LABEL: reg_abcd_i16: +// 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_i16 i16 reg_abcd "mov"); +check!(reg_abcd_i32 i32 reg_abcd "mov"); -// CHECK-LABEL: reg_abcd_f16: +// 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"); + +// 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_f16 f16 reg_abcd "mov"); +check!(reg_abcd_ptr ptr reg_abcd "mov"); -// CHECK-LABEL: reg_abcd_i32: +// 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: reg_f16: // 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!(reg_f16 f16 reg "mov"); -// CHECK-LABEL: reg_abcd_f32: +// 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_abcd_f32 f32 reg_abcd "mov"); +check!(reg_f32 f32 reg "mov"); -// x86_64-LABEL: reg_abcd_i64: +// 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_abcd_i64 i64 reg_abcd "mov"); +check!(reg_f64 f64 reg "mov"); -// x86_64-LABEL: reg_abcd_f64: +// 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"); + +// 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_abcd_f64 f64 reg_abcd "mov"); +check!(reg_i64 i64 reg "mov"); -// CHECK-LABEL: reg_abcd_ptr: +// 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_abcd_ptr ptr reg_abcd "mov"); +check!(reg_ptr ptr reg "mov"); -// CHECK-LABEL: reg_byte: +// CHECK-LABEL: xmm_reg_f128: // CHECK: #APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(reg_byte i8 reg_byte "mov"); +check!(xmm_reg_f128 f128 xmm_reg "movaps"); // CHECK-LABEL: xmm_reg_f16: // CHECK: #APP @@ -233,11 +269,11 @@ check!(reg_byte i8 reg_byte "mov"); // CHECK: #NO_APP check!(xmm_reg_f16 f16 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i32: +// CHECK-LABEL: xmm_reg_f16x8: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i32 i32 xmm_reg "movaps"); +check!(xmm_reg_f16x8 f16x8 xmm_reg "movaps"); // CHECK-LABEL: xmm_reg_f32: // CHECK: #APP @@ -245,11 +281,11 @@ check!(xmm_reg_i32 i32 xmm_reg "movaps"); // CHECK: #NO_APP check!(xmm_reg_f32 f32 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i64: +// CHECK-LABEL: xmm_reg_f32x4: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i64 i64 xmm_reg "movaps"); +check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps"); // CHECK-LABEL: xmm_reg_f64: // CHECK: #APP @@ -257,35 +293,35 @@ check!(xmm_reg_i64 i64 xmm_reg "movaps"); // CHECK: #NO_APP check!(xmm_reg_f64 f64 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_f128: +// CHECK-LABEL: xmm_reg_f64x2: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f128 f128 xmm_reg "movaps"); +check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_ptr: +// CHECK-LABEL: xmm_reg_i16x8: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_ptr ptr xmm_reg "movaps"); +check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i8x16: +// CHECK-LABEL: xmm_reg_i32: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps"); +check!(xmm_reg_i32 i32 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i16x8: +// CHECK-LABEL: xmm_reg_i32x4: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps"); +check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i32x4: +// CHECK-LABEL: xmm_reg_i64: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps"); +check!(xmm_reg_i64 i64 xmm_reg "movaps"); // CHECK-LABEL: xmm_reg_i64x2: // CHECK: #APP @@ -293,23 +329,23 @@ check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps"); // CHECK: #NO_APP check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_f16x8: +// CHECK-LABEL: xmm_reg_i8x16: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f16x8 f16x8 xmm_reg "movaps"); +check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_f32x4: +// CHECK-LABEL: xmm_reg_ptr: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps"); +check!(xmm_reg_ptr ptr xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_f64x2: +// CHECK-LABEL: ymm_reg_f128: // CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} +// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps"); +check!(ymm_reg_f128 f128 ymm_reg "vmovaps"); // CHECK-LABEL: ymm_reg_f16: // CHECK: #APP @@ -317,101 +353,95 @@ check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps"); // CHECK: #NO_APP check!(ymm_reg_f16 f16 ymm_reg "vmovaps"); -// 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-LABEL: ymm_reg_f16x16: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f32 f32 ymm_reg "vmovaps"); +check!(ymm_reg_f16x16 f16x16 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i64: +// CHECK-LABEL: ymm_reg_f16x8: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i64 i64 ymm_reg "vmovaps"); +check!(ymm_reg_f16x8 f16x8 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f64: +// CHECK-LABEL: ymm_reg_f32: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f64 f64 ymm_reg "vmovaps"); +check!(ymm_reg_f32 f32 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f128: +// CHECK-LABEL: ymm_reg_f32x4: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f128 f128 ymm_reg "vmovaps"); +check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_ptr: +// CHECK-LABEL: ymm_reg_f32x8: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_ptr ptr ymm_reg "vmovaps"); +check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i8x16: +// CHECK-LABEL: ymm_reg_f64: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps"); +check!(ymm_reg_f64 f64 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i16x8: +// CHECK-LABEL: ymm_reg_f64x2: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps"); +check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i32x4: +// CHECK-LABEL: ymm_reg_f64x4: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps"); +check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i64x2: +// CHECK-LABEL: ymm_reg_i16x16: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps"); +check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f16x8: +// CHECK-LABEL: ymm_reg_i16x8: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f16x8 f16x8 ymm_reg "vmovaps"); +check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f32x4: +// CHECK-LABEL: ymm_reg_i32: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps"); +check!(ymm_reg_i32 i32 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f64x2: +// CHECK-LABEL: ymm_reg_i32x4: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps"); +check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i8x32: +// CHECK-LABEL: ymm_reg_i32x8: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps"); +check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i16x16: +// CHECK-LABEL: ymm_reg_i64: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps"); +check!(ymm_reg_i64 i64 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i32x8: +// CHECK-LABEL: ymm_reg_i64x2: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps"); +check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps"); // CHECK-LABEL: ymm_reg_i64x4: // CHECK: #APP @@ -419,167 +449,161 @@ check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps"); // CHECK: #NO_APP check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f16x16: +// CHECK-LABEL: ymm_reg_i8x16: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f16x16 f16x16 ymm_reg "vmovaps"); +check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f32x8: +// CHECK-LABEL: ymm_reg_i8x32: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps"); +check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f64x4: +// CHECK-LABEL: ymm_reg_ptr: // 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_f16: -// CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} -// CHECK: #NO_APP -check!(zmm_reg_f16 f16 zmm_reg "vmovaps"); +check!(ymm_reg_ptr ptr ymm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32: +// CHECK-LABEL: zmm_reg_f128: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32 i32 zmm_reg "vmovaps"); +check!(zmm_reg_f128 f128 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32: +// CHECK-LABEL: zmm_reg_f16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32 f32 zmm_reg "vmovaps"); +check!(zmm_reg_f16 f16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i64: +// CHECK-LABEL: zmm_reg_f16x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i64 i64 zmm_reg "vmovaps"); +check!(zmm_reg_f16x16 f16x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64: +// CHECK-LABEL: zmm_reg_f16x32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64 f64 zmm_reg "vmovaps"); +check!(zmm_reg_f16x32 f16x32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f128: +// CHECK-LABEL: zmm_reg_f16x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f128 f128 zmm_reg "vmovaps"); +check!(zmm_reg_f16x8 f16x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_ptr: +// CHECK-LABEL: zmm_reg_f32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_ptr ptr zmm_reg "vmovaps"); +check!(zmm_reg_f32 f32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i8x16: +// CHECK-LABEL: zmm_reg_f32x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps"); +check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i16x8: +// CHECK-LABEL: zmm_reg_f32x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps"); +check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32x4: +// CHECK-LABEL: zmm_reg_f32x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps"); +check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i64x2: +// CHECK-LABEL: zmm_reg_f64: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps"); +check!(zmm_reg_f64 f64 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f16x8: +// CHECK-LABEL: zmm_reg_f64x2: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f16x8 f16x8 zmm_reg "vmovaps"); +check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32x4: +// CHECK-LABEL: zmm_reg_f64x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps"); +check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64x2: +// CHECK-LABEL: zmm_reg_f64x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps"); +check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i8x32: +// CHECK-LABEL: zmm_reg_i16x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps"); +check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i16x16: +// CHECK-LABEL: zmm_reg_i16x32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps"); +check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32x8: +// CHECK-LABEL: zmm_reg_i16x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps"); +check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i64x4: +// CHECK-LABEL: zmm_reg_i32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps"); +check!(zmm_reg_i32 i32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f16x16: +// CHECK-LABEL: zmm_reg_i32x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f16x16 f16x16 zmm_reg "vmovaps"); +check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32x8: +// CHECK-LABEL: zmm_reg_i32x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps"); +check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64x4: +// CHECK-LABEL: zmm_reg_i32x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps"); +check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i8x64: +// CHECK-LABEL: zmm_reg_i64: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps"); +check!(zmm_reg_i64 i64 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i16x32: +// CHECK-LABEL: zmm_reg_i64x2: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps"); +check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32x16: +// CHECK-LABEL: zmm_reg_i64x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps"); +check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps"); // CHECK-LABEL: zmm_reg_i64x8: // CHECK: #APP @@ -587,53 +611,55 @@ check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps"); // CHECK: #NO_APP check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f16x32: +// CHECK-LABEL: zmm_reg_i8x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f16x32 f16x32 zmm_reg "vmovaps"); +check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32x16: +// CHECK-LABEL: zmm_reg_i8x32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps"); +check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64x8: +// CHECK-LABEL: zmm_reg_i8x64: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps"); +check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps"); -// CHECK-LABEL: kreg_i8: +// CHECK-LABEL: zmm_reg_ptr: // CHECK: #APP -// CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}} +// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(kreg_i8 i8 kreg "kmovb"); +check!(zmm_reg_ptr ptr zmm_reg "vmovaps"); -// CHECK-LABEL: kreg_i16: -// CHECK: #APP -// CHECK: kmovw k{{[0-9]+}}, k{{[0-9]+}} -// CHECK: #NO_APP -check!(kreg_i16 i16 kreg "kmovw"); +// i686-LABEL: ah_byte: +// i686: #APP +// i686: mov ah, ah +// i686: #NO_APP +#[cfg(i686)] +check_reg!(ah_byte i8 "ah" "mov"); -// CHECK-LABEL: kreg_i32: +// CHECK-LABEL: eax_f16: // CHECK: #APP -// CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}} +// CHECK: mov eax, eax // CHECK: #NO_APP -check!(kreg_i32 i32 kreg "kmovd"); +check_reg!(eax_f16 f16 "eax" "mov"); -// CHECK-LABEL: kreg_i64: +// CHECK-LABEL: eax_f32: // CHECK: #APP -// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} +// CHECK: mov eax, eax // CHECK: #NO_APP -check!(kreg_i64 i64 kreg "kmovq"); +check_reg!(eax_f32 f32 "eax" "mov"); -// CHECK-LABEL: kreg_ptr: -// CHECK: #APP -// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} -// CHECK: #NO_APP -check!(kreg_ptr ptr kreg "kmovq"); +// 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_i16: // CHECK: #APP @@ -641,24 +667,12 @@ check!(kreg_ptr ptr kreg "kmovq"); // CHECK: #NO_APP check_reg!(eax_i16 i16 "eax" "mov"); -// CHECK-LABEL: eax_f16: -// CHECK: #APP -// CHECK: mov eax, eax -// CHECK: #NO_APP -check_reg!(eax_f16 f16 "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 @@ -666,25 +680,47 @@ check_reg!(eax_f32 f32 "eax" "mov"); #[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: 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_i8: +// CHECK: #APP +// CHECK: kmovb k1, k1 +// CHECK: #NO_APP +check_reg!(k1_i8 i8 "k1" "kmovb"); + +// CHECK-LABEL: k1_ptr: +// CHECK: #APP +// CHECK: kmovq k1, k1 +// CHECK: #NO_APP +check_reg!(k1_ptr ptr "k1" "kmovq"); + +// CHECK-LABEL: xmm0_f128: +// CHECK: #APP +// CHECK: movaps xmm0, xmm0 +// CHECK: #NO_APP +check_reg!(xmm0_f128 f128 "xmm0" "movaps"); // CHECK-LABEL: xmm0_f16: // CHECK: #APP @@ -692,11 +728,11 @@ check_reg!(ah_byte i8 "ah" "mov"); // CHECK: #NO_APP check_reg!(xmm0_f16 f16 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i32: +// CHECK-LABEL: xmm0_f16x8: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i32 i32 "xmm0" "movaps"); +check_reg!(xmm0_f16x8 f16x8 "xmm0" "movaps"); // CHECK-LABEL: xmm0_f32: // CHECK: #APP @@ -704,11 +740,11 @@ check_reg!(xmm0_i32 i32 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(xmm0_f32 f32 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i64: +// CHECK-LABEL: xmm0_f32x4: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i64 i64 "xmm0" "movaps"); +check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps"); // CHECK-LABEL: xmm0_f64: // CHECK: #APP @@ -716,35 +752,35 @@ check_reg!(xmm0_i64 i64 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(xmm0_f64 f64 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_f128: +// CHECK-LABEL: xmm0_f64x2: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_f128 f128 "xmm0" "movaps"); +check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_ptr: +// CHECK-LABEL: xmm0_i16x8: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_ptr ptr "xmm0" "movaps"); +check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i8x16: +// CHECK-LABEL: xmm0_i32: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps"); +check_reg!(xmm0_i32 i32 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i16x8: +// CHECK-LABEL: xmm0_i32x4: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps"); +check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i32x4: +// CHECK-LABEL: xmm0_i64: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps"); +check_reg!(xmm0_i64 i64 "xmm0" "movaps"); // CHECK-LABEL: xmm0_i64x2: // CHECK: #APP @@ -752,23 +788,23 @@ check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_f16x8: +// CHECK-LABEL: xmm0_i8x16: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_f16x8 f16x8 "xmm0" "movaps"); +check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_f32x4: +// CHECK-LABEL: xmm0_ptr: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps"); +check_reg!(xmm0_ptr ptr "xmm0" "movaps"); -// CHECK-LABEL: xmm0_f64x2: +// CHECK-LABEL: ymm0_f128: // CHECK: #APP -// CHECK: movaps xmm0, xmm0 +// CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps"); +check_reg!(ymm0_f128 f128 "ymm0" "vmovaps"); // CHECK-LABEL: ymm0_f16: // CHECK: #APP @@ -776,101 +812,95 @@ check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(ymm0_f16 f16 "ymm0" "vmovaps"); -// 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-LABEL: ymm0_f16x16: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f32 f32 "ymm0" "vmovaps"); +check_reg!(ymm0_f16x16 f16x16 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i64: +// CHECK-LABEL: ymm0_f16x8: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i64 i64 "ymm0" "vmovaps"); +check_reg!(ymm0_f16x8 f16x8 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f64: +// CHECK-LABEL: ymm0_f32: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f64 f64 "ymm0" "vmovaps"); +check_reg!(ymm0_f32 f32 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f128: +// CHECK-LABEL: ymm0_f32x4: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f128 f128 "ymm0" "vmovaps"); +check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_ptr: +// CHECK-LABEL: ymm0_f32x8: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_ptr ptr "ymm0" "vmovaps"); +check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i8x16: +// CHECK-LABEL: ymm0_f64: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps"); +check_reg!(ymm0_f64 f64 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i16x8: +// CHECK-LABEL: ymm0_f64x2: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps"); +check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i32x4: +// CHECK-LABEL: ymm0_f64x4: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps"); +check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i64x2: +// CHECK-LABEL: ymm0_i16x16: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps"); +check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f16x8: +// CHECK-LABEL: ymm0_i16x8: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f16x8 f16x8 "ymm0" "vmovaps"); +check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f32x4: +// CHECK-LABEL: ymm0_i32: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps"); +check_reg!(ymm0_i32 i32 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f64x2: +// CHECK-LABEL: ymm0_i32x4: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps"); +check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i8x32: +// CHECK-LABEL: ymm0_i32x8: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps"); +check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i16x16: +// CHECK-LABEL: ymm0_i64: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps"); +check_reg!(ymm0_i64 i64 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i32x8: +// CHECK-LABEL: ymm0_i64x2: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps"); +check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps"); // CHECK-LABEL: ymm0_i64x4: // CHECK: #APP @@ -878,167 +908,161 @@ check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps"); // CHECK: #NO_APP check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f16x16: +// CHECK-LABEL: ymm0_i8x16: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f16x16 f16x16 "ymm0" "vmovaps"); +check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f32x8: +// CHECK-LABEL: ymm0_i8x32: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps"); +check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f64x4: +// CHECK-LABEL: ymm0_ptr: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps"); - -// CHECK-LABEL: zmm0_f16: -// CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 -// CHECK: #NO_APP -check_reg!(zmm0_f16 f16 "zmm0" "vmovaps"); +check_reg!(ymm0_ptr ptr "ymm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32: +// CHECK-LABEL: zmm0_f128: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32 i32 "zmm0" "vmovaps"); +check_reg!(zmm0_f128 f128 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32: +// CHECK-LABEL: zmm0_f16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32 f32 "zmm0" "vmovaps"); +check_reg!(zmm0_f16 f16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i64: +// CHECK-LABEL: zmm0_f16x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i64 i64 "zmm0" "vmovaps"); +check_reg!(zmm0_f16x16 f16x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64: +// CHECK-LABEL: zmm0_f16x32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f64 f64 "zmm0" "vmovaps"); +check_reg!(zmm0_f16x32 f16x32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f128: +// CHECK-LABEL: zmm0_f16x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f128 f128 "zmm0" "vmovaps"); +check_reg!(zmm0_f16x8 f16x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_ptr: +// CHECK-LABEL: zmm0_f32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_ptr ptr "zmm0" "vmovaps"); +check_reg!(zmm0_f32 f32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i8x16: +// CHECK-LABEL: zmm0_f32x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps"); +check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i16x8: +// CHECK-LABEL: zmm0_f32x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps"); +check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32x4: +// CHECK-LABEL: zmm0_f32x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps"); +check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i64x2: +// CHECK-LABEL: zmm0_f64: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps"); +check_reg!(zmm0_f64 f64 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f16x8: +// CHECK-LABEL: zmm0_f64x2: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f16x8 f16x8 "zmm0" "vmovaps"); +check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32x4: +// CHECK-LABEL: zmm0_f64x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps"); +check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64x2: +// CHECK-LABEL: zmm0_f64x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps"); +check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i8x32: +// CHECK-LABEL: zmm0_i16x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps"); +check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i16x16: +// CHECK-LABEL: zmm0_i16x32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps"); +check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32x8: +// CHECK-LABEL: zmm0_i16x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps"); +check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i64x4: +// CHECK-LABEL: zmm0_i32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps"); +check_reg!(zmm0_i32 i32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f16x16: +// CHECK-LABEL: zmm0_i32x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f16x16 f16x16 "zmm0" "vmovaps"); +check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32x8: +// CHECK-LABEL: zmm0_i32x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps"); +check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64x4: +// CHECK-LABEL: zmm0_i32x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps"); +check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i8x64: +// CHECK-LABEL: zmm0_i64: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps"); +check_reg!(zmm0_i64 i64 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i16x32: +// CHECK-LABEL: zmm0_i64x2: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps"); +check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32x16: +// CHECK-LABEL: zmm0_i64x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps"); +check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps"); // CHECK-LABEL: zmm0_i64x8: // CHECK: #APP @@ -1046,50 +1070,26 @@ check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps"); // CHECK: #NO_APP check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f16x32: +// CHECK-LABEL: zmm0_i8x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f16x32 f16x32 "zmm0" "vmovaps"); +check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32x16: +// CHECK-LABEL: zmm0_i8x32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps"); +check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64x8: +// CHECK-LABEL: zmm0_i8x64: // 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_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps"); -// CHECK-LABEL: k1_ptr: +// CHECK-LABEL: zmm0_ptr: // CHECK: #APP -// CHECK: kmovq k1, k1 +// CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(k1_ptr ptr "k1" "kmovq"); +check_reg!(zmm0_ptr ptr "zmm0" "vmovaps"); From ac5a404b248904dddccdd3099d99f1af4b3a36de Mon Sep 17 00:00:00 2001 From: ywxt Date: Thu, 31 Jul 2025 11:42:29 +0800 Subject: [PATCH 04/13] Add the test for the option codegen_source_order. --- compiler/rustc_interface/src/tests.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/rustc_interface/src/tests.rs b/compiler/rustc_interface/src/tests.rs index 86faab62d03a7..aaee0359b03a8 100644 --- a/compiler/rustc_interface/src/tests.rs +++ b/compiler/rustc_interface/src/tests.rs @@ -689,6 +689,7 @@ fn test_unstable_options_tracking_hash() { // Make sure that changing an [UNTRACKED] option leaves the hash unchanged. // tidy-alphabetical-start untracked!(assert_incr_state, Some(String::from("loaded"))); + untracked!(codegen_source_order, true); untracked!(deduplicate_diagnostics, false); untracked!(dump_dep_graph, true); untracked!(dump_mir, Some(String::from("abc"))); From 85736082560daa531154d2250560cc1b562418b8 Mon Sep 17 00:00:00 2001 From: ywxt Date: Thu, 31 Jul 2025 11:57:52 +0800 Subject: [PATCH 05/13] Improve comments. --- compiler/rustc_middle/src/mir/mono.rs | 10 +++++----- src/tools/compiletest/src/runtest.rs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index fbeb2a0ed79d1..3b90c87c3485f 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -525,14 +525,14 @@ impl<'tcx> CodegenUnit<'tcx> { tcx: TyCtxt<'tcx>, ) -> Vec<(MonoItem<'tcx>, MonoItemData)> { // The codegen tests rely on items being process in the same order as - // they appear in the file, so for local items, we sort by node_id first + // they appear in the file, so for local items, we sort by span and + // def_path first #[derive(PartialEq, Eq, PartialOrd, Ord)] struct ItemSortKey<'tcx>(Option, Option, SymbolName<'tcx>); - // We only want to take HirIds of user-defined - // instances into account. The others don't matter for - // the codegen tests and can even make item order - // unstable. + // We only want to take HirIds of user-defines instances into account. + // The others don't matter for the codegen tests and can even make item + // order unstable. fn local_item_query<'tcx, T>( item: MonoItem<'tcx>, op: impl FnOnce(DefId) -> T, diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs index 6662a039deee4..c7e13153338aa 100644 --- a/src/tools/compiletest/src/runtest.rs +++ b/src/tools/compiletest/src/runtest.rs @@ -1696,7 +1696,7 @@ impl<'test> TestCx<'test> { TestMode::Assembly | TestMode::Codegen => { rustc.arg("-Cdebug-assertions=no"); // For assembly and codegen tests, we want to use the same order - // of the items of a codegen unit as the source order,so that + // of the items of a codegen unit as the source order, so that // we can compare the output with the source code through filecheck. rustc.arg("-Zcodegen-source-order"); } From 50ecc127e97cd65b397f391739ed4983a29031b0 Mon Sep 17 00:00:00 2001 From: ywxt Date: Fri, 1 Aug 2025 09:22:12 +0800 Subject: [PATCH 06/13] Put the condition into the function items_in_deterministic_order --- compiler/rustc_codegen_llvm/src/base.rs | 7 +------ compiler/rustc_middle/src/mir/mono.rs | 4 ++++ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/compiler/rustc_codegen_llvm/src/base.rs b/compiler/rustc_codegen_llvm/src/base.rs index 0fef27f3a5b25..5dda836988c81 100644 --- a/compiler/rustc_codegen_llvm/src/base.rs +++ b/compiler/rustc_codegen_llvm/src/base.rs @@ -84,12 +84,7 @@ pub(crate) fn compile_codegen_unit( let llvm_module = ModuleLlvm::new(tcx, cgu_name.as_str()); { let mut cx = CodegenCx::new(tcx, cgu, &llvm_module); - let mono_items = if tcx.sess.opts.unstable_opts.codegen_source_order { - cx.codegen_unit.items_in_deterministic_order(cx.tcx) - } else { - // The `items` has a deterministic order, so we can use it directly. - cx.codegen_unit.items().iter().map(|(item, data)| (*item, *data)).collect() - }; + let mono_items = cx.codegen_unit.items_in_deterministic_order(cx.tcx); for &(mono_item, data) in &mono_items { mono_item.predefine::>( &mut cx, diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index 3b90c87c3485f..3bff4fc452b9c 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -568,6 +568,10 @@ impl<'tcx> CodegenUnit<'tcx> { } let mut items: Vec<_> = self.items().iter().map(|(&i, &data)| (i, data)).collect(); + if !tcx.sess.opts.unstable_opts.codegen_source_order { + // It's already deterministic, so we can just use it. + return items; + } items.sort_by_cached_key(|&(i, _)| item_sort_key(tcx, i)); items } From 114709432b8a3d5b9edd9739bdcbe17a0c36d123 Mon Sep 17 00:00:00 2001 From: ywxt Date: Mon, 4 Aug 2025 11:03:30 +0800 Subject: [PATCH 07/13] Use find_ancestor_not_from_macro --- compiler/rustc_middle/src/mir/mono.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index 3bff4fc452b9c..72483605b0e8f 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -533,13 +533,10 @@ impl<'tcx> CodegenUnit<'tcx> { // We only want to take HirIds of user-defines instances into account. // The others don't matter for the codegen tests and can even make item // order unstable. - fn local_item_query<'tcx, T>( - item: MonoItem<'tcx>, - op: impl FnOnce(DefId) -> T, - ) -> Option { + fn local_item_id<'tcx>(item: MonoItem<'tcx>) -> Option { match item { MonoItem::Fn(ref instance) => match instance.def { - InstanceKind::Item(def) => def.as_local().map(|_| op(def)), + InstanceKind::Item(def) => def.as_local().map(|_| def), InstanceKind::VTableShim(..) | InstanceKind::ReifyShim(..) | InstanceKind::Intrinsic(..) @@ -555,14 +552,14 @@ impl<'tcx> CodegenUnit<'tcx> { | InstanceKind::FutureDropPollShim(..) | InstanceKind::AsyncDropGlueCtorShim(..) => None, }, - MonoItem::Static(def_id) => def_id.as_local().map(|_| op(def_id)), - MonoItem::GlobalAsm(item_id) => Some(op(item_id.owner_id.def_id.to_def_id())), + MonoItem::Static(def_id) => def_id.as_local().map(|_| def_id), + MonoItem::GlobalAsm(item_id) => Some(item_id.owner_id.def_id.to_def_id()), } } fn item_sort_key<'tcx>(tcx: TyCtxt<'tcx>, item: MonoItem<'tcx>) -> ItemSortKey<'tcx> { ItemSortKey( - local_item_query(item, |def_id| tcx.def_span(def_id)), - local_item_query(item, |def_id| tcx.def_path(def_id).to_string_no_crate_verbose()), + local_item_id(item).map(|def_id| tcx.def_span(def_id).find_ancestor_not_from_macro()).flatten(), + local_item_id(item).map(|def_id| tcx.def_path(def_id).to_string_no_crate_verbose()), item.symbol_name(tcx), ) } From f3a2bc2fcdfcec06daa7a19d00f1205d4937b82c Mon Sep 17 00:00:00 2001 From: ywxt Date: Mon, 4 Aug 2025 11:11:07 +0800 Subject: [PATCH 08/13] Revert part of "Fix tests." This reverts commit 9f47e2613c517f418c88b1ced4bfef6637cc4475. --- tests/assembly-llvm/asm/aarch64-modifiers.rs | 56 +- tests/assembly-llvm/asm/aarch64-types.rs | 347 ++++----- tests/assembly-llvm/asm/arm-modifiers.rs | 53 +- tests/assembly-llvm/asm/arm-types.rs | 441 ++++++------ tests/assembly-llvm/asm/avr-modifiers.rs | 8 +- tests/assembly-llvm/asm/avr-types.rs | 114 +-- tests/assembly-llvm/asm/bpf-types.rs | 56 +- tests/assembly-llvm/asm/hexagon-types.rs | 69 +- tests/assembly-llvm/asm/loongarch-type.rs | 96 +-- tests/assembly-llvm/asm/m68k-types.rs | 24 +- tests/assembly-llvm/asm/mips-types.rs | 129 ++-- tests/assembly-llvm/asm/msp430-types.rs | 105 +-- tests/assembly-llvm/asm/nvptx-types.rs | 36 +- tests/assembly-llvm/asm/powerpc-types.rs | 370 +++++----- tests/assembly-llvm/asm/riscv-types.rs | 98 +-- tests/assembly-llvm/asm/s390x-types.rs | 196 ++--- tests/assembly-llvm/asm/sparc-types.rs | 62 +- tests/assembly-llvm/asm/wasm-types.rs | 50 +- tests/assembly-llvm/asm/x86-modifiers.rs | 83 +-- tests/assembly-llvm/asm/x86-types.rs | 706 +++++++++---------- 20 files changed, 1553 insertions(+), 1546 deletions(-) diff --git a/tests/assembly-llvm/asm/aarch64-modifiers.rs b/tests/assembly-llvm/asm/aarch64-modifiers.rs index 40ea33315647f..58f7c114d3a60 100644 --- a/tests/assembly-llvm/asm/aarch64-modifiers.rs +++ b/tests/assembly-llvm/asm/aarch64-modifiers.rs @@ -55,17 +55,35 @@ check!(vreg vreg "add {0}.4s, {0}.4s, {0}.4s"); // 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_h: +// CHECK-LABEL: vreg_q: // CHECK: //APP -// CHECK: ldr h0, [x0] +// CHECK: ldr q0, [x0] // CHECK: //NO_APP -check!(vreg_h vreg "ldr {:h}, [x0]"); +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 @@ -79,50 +97,32 @@ check!(vreg_low16 vreg_low16 "add {0}.4s, {0}.4s, {0}.4s"); // CHECK: //NO_APP check!(vreg_low16_b vreg_low16 "ldr {:b}, [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_h: // CHECK: //APP // CHECK: ldr h0, [x0] // CHECK: //NO_APP check!(vreg_low16_h vreg_low16 "ldr {:h}, [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_s: // CHECK: //APP // CHECK: ldr s0, [x0] // CHECK: //NO_APP check!(vreg_low16_s vreg_low16 "ldr {:s}, [x0]"); -// CHECK-LABEL: vreg_low16_v: +// CHECK-LABEL: vreg_low16_d: // CHECK: //APP -// CHECK: add v0.4s, v0.4s, v0.4s +// CHECK: ldr d0, [x0] // CHECK: //NO_APP -check!(vreg_low16_v vreg_low16 "add {0:v}.4s, {0:v}.4s, {0:v}.4s"); +check!(vreg_low16_d vreg_low16 "ldr {:d}, [x0]"); -// CHECK-LABEL: vreg_q: +// CHECK-LABEL: vreg_low16_q: // CHECK: //APP // CHECK: ldr q0, [x0] // CHECK: //NO_APP -check!(vreg_q vreg "ldr {:q}, [x0]"); - -// CHECK-LABEL: vreg_s: -// CHECK: //APP -// CHECK: ldr s0, [x0] -// CHECK: //NO_APP -check!(vreg_s vreg "ldr {:s}, [x0]"); +check!(vreg_low16_q vreg_low16 "ldr {:q}, [x0]"); -// CHECK-LABEL: vreg_v: +// CHECK-LABEL: vreg_low16_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!(vreg_low16_v vreg_low16 "add {0:v}.4s, {0:v}.4s, {0:v}.4s"); diff --git a/tests/assembly-llvm/asm/aarch64-types.rs b/tests/assembly-llvm/asm/aarch64-types.rs index 82af3f049407a..b7abeb0229865 100644 --- a/tests/assembly-llvm/asm/aarch64-types.rs +++ b/tests/assembly-llvm/asm/aarch64-types.rs @@ -128,35 +128,35 @@ macro_rules! check_reg { }; } -// CHECK-LABEL: {{("#)?}}reg_f16{{"?}} +// CHECK-LABEL: {{("#)?}}reg_i8{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_f16 f16 reg "mov" ""); +check!(reg_i8 i8 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_f32{{"?}} +// CHECK-LABEL: {{("#)?}}reg_i16{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_f32 f32 reg "mov" ""); +check!(reg_i16 i16 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_f64{{"?}} +// CHECK-LABEL: {{("#)?}}reg_f16{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_f64 f64 reg "mov" ""); +check!(reg_f16 f16 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_i16{{"?}} +// CHECK-LABEL: {{("#)?}}reg_i32{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_i16 i16 reg "mov" ""); +check!(reg_i32 i32 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_i32{{"?}} +// CHECK-LABEL: {{("#)?}}reg_f32{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_i32 i32 reg "mov" ""); +check!(reg_f32 f32 reg "mov" ""); // CHECK-LABEL: {{("#)?}}reg_i64{{"?}} // CHECK: //APP @@ -164,11 +164,11 @@ check!(reg_i32 i32 reg "mov" ""); // CHECK: //NO_APP check!(reg_i64 i64 reg "mov" ""); -// CHECK-LABEL: {{("#)?}}reg_i8{{"?}} +// CHECK-LABEL: {{("#)?}}reg_f64{{"?}} // CHECK: //APP // CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check!(reg_i8 i8 reg "mov" ""); +check!(reg_f64 f64 reg "mov" ""); // CHECK-LABEL: {{("#)?}}reg_ptr{{"?}} // CHECK: //APP @@ -176,29 +176,29 @@ check!(reg_i8 i8 reg "mov" ""); // CHECK: //NO_APP check!(reg_ptr ptr reg "mov" ""); -// CHECK-LABEL: {{("#)?}}vreg_f128{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f128 f128 vreg "fmov" "s"); +check!(vreg_i8 i8 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f16 f16 vreg "fmov" "s"); +check!(vreg_i16 i16 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f16x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f16x4 f16x4 vreg "fmov" "s"); +check!(vreg_f16 f16 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i32{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f16x8 f16x8 vreg "fmov" "s"); +check!(vreg_i32 i32 vreg "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_f32{{"?}} // CHECK: //APP @@ -206,17 +206,11 @@ check!(vreg_f16x8 f16x8 vreg "fmov" "s"); // CHECK: //NO_APP check!(vreg_f32 f32 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_f32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i64{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f32x4 f32x4 vreg "fmov" "s"); +check!(vreg_i64 i64 vreg "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_f64{{"?}} // CHECK: //APP @@ -224,23 +218,23 @@ check!(vreg_f32x4 f32x4 vreg "fmov" "s"); // CHECK: //NO_APP check!(vreg_f64 f64 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f128{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f64x1 f64x1 vreg "fmov" "s"); +check!(vreg_f128 f128 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_f64x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_ptr{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_f64x2 f64x2 vreg "fmov" "s"); +check!(vreg_ptr ptr vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i8x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i16 i16 vreg "fmov" "s"); +check!(vreg_i8x8 i8x8 vreg "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_i16x4{{"?}} // CHECK: //APP @@ -248,107 +242,107 @@ check!(vreg_i16 i16 vreg "fmov" "s"); // CHECK: //NO_APP check!(vreg_i16x4 i16x4 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i16x8 i16x8 vreg "fmov" "s"); +check!(vreg_i32x2 i32x2 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i32{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i32 i32 vreg "fmov" "s"); +check!(vreg_i64x1 i64x1 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i32x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f16x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i32x2 i32x2 vreg "fmov" "s"); +check!(vreg_f16x4 f16x4 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i32x4 i32x4 vreg "fmov" "s"); +check!(vreg_f32x2 f32x2 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i64{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i64 i64 vreg "fmov" "s"); +check!(vreg_f64x1 f64x1 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i8x16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i64x1 i64x1 vreg "fmov" "s"); +check!(vreg_i8x16 i8x16 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i64x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i64x2 i64x2 vreg "fmov" "s"); +check!(vreg_i16x8 i16x8 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i32x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i8 i8 vreg "fmov" "s"); +check!(vreg_i32x4 i32x4 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i8x16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_i64x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i8x16 i8x16 vreg "fmov" "s"); +check!(vreg_i64x2 i64x2 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_i8x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_i8x8 i8x8 vreg "fmov" "s"); +check!(vreg_f16x8 f16x8 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f128{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f32x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f128 f128 vreg_low16 "fmov" "s"); +check!(vreg_f32x4 f32x4 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_f64x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f16 f16 vreg_low16 "fmov" "s"); +check!(vreg_f64x2 f64x2 vreg "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f16x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f16x4 f16x4 vreg_low16 "fmov" "s"); +check!(vreg_low16_i8 i8 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f16x8 f16x8 vreg_low16 "fmov" "s"); +check!(vreg_low16_i16 i16 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f32{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f32 f32 vreg_low16 "fmov" "s"); +check!(vreg_low16_f16 f16 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f32x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f32{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f32x2 f32x2 vreg_low16 "fmov" "s"); +check!(vreg_low16_f32 f32 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i64{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f32x4 f32x4 vreg_low16 "fmov" "s"); +check!(vreg_low16_i64 i64 vreg_low16 "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_low16_f64{{"?}} // CHECK: //APP @@ -356,22 +350,23 @@ check!(vreg_low16_f32x4 f32x4 vreg_low16 "fmov" "s"); // CHECK: //NO_APP check!(vreg_low16_f64 f64 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f128{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f64x1 f64x1 vreg_low16 "fmov" "s"); +check!(vreg_low16_f128 f128 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_f64x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_ptr{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_f64x2 f64x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i16{{"?}} +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_i16 i16 vreg_low16 "fmov" "s"); +check!(vreg_low16_i8x8 i8x8 vreg_low16 "fmov" "s"); // CHECK-LABEL: {{("#)?}}vreg_low16_i16x4{{"?}} // CHECK: //APP @@ -379,131 +374,131 @@ check!(vreg_low16_i16 i16 vreg_low16 "fmov" "s"); // CHECK: //NO_APP check!(vreg_low16_i16x4 i16x4 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i16x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i16x8 i16x8 vreg_low16 "fmov" "s"); +check!(vreg_low16_i32x2 i32x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i32x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i32x2 i32x2 vreg_low16 "fmov" "s"); +check!(vreg_low16_i64x1 i64x1 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i32x4{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f16x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i32x4 i32x4 vreg_low16 "fmov" "s"); +check!(vreg_low16_f16x4 f16x4 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i64{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f32x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i64 i64 vreg_low16 "fmov" "s"); +check!(vreg_low16_f32x2 f32x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i64x1{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f64x1{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i64x1 i64x1 vreg_low16 "fmov" "s"); +check!(vreg_low16_f64x1 f64x1 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i64x2{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i8x16{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i64x2 i64x2 vreg_low16 "fmov" "s"); +check!(vreg_low16_i8x16 i8x16 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i8 i8 vreg_low16 "fmov" "s"); +check!(vreg_low16_i16x8 i16x8 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i8x16{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i32x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i8x16 i8x16 vreg_low16 "fmov" "s"); +check!(vreg_low16_i32x4 i32x4 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_i8x8{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_i64x2{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_i8x8 i8x8 vreg_low16 "fmov" "s"); +check!(vreg_low16_i64x2 i64x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_low16_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f16x8{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_low16_ptr ptr vreg_low16 "fmov" "s"); +check!(vreg_low16_f16x8 f16x8 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}vreg_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f32x4{{"?}} // CHECK: //APP // CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check!(vreg_ptr ptr vreg "fmov" "s"); +check!(vreg_low16_f32x4 f32x4 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}v0_f128{{"?}} +// CHECK-LABEL: {{("#)?}}vreg_low16_f64x2{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: fmov s{{[0-9]+}}, s{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f128 f128 "s0" "fmov"); +check!(vreg_low16_f64x2 f64x2 vreg_low16 "fmov" "s"); -// CHECK-LABEL: {{("#)?}}v0_f16{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i8{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f16 f16 "s0" "fmov"); +check_reg!(x0_i8 i8 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f16x4{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i16{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f16x4 f16x4 "s0" "fmov"); +check_reg!(x0_i16 i16 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f16x8{{"?}} +// CHECK-LABEL: {{("#)?}}x0_f16{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f16x8 f16x8 "s0" "fmov"); +check_reg!(x0_f16 f16 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f32{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i32{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f32 f32 "s0" "fmov"); +check_reg!(x0_i32 i32 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f32x2{{"?}} +// CHECK-LABEL: {{("#)?}}x0_f32{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f32x2 f32x2 "s0" "fmov"); +check_reg!(x0_f32 f32 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f32x4{{"?}} +// CHECK-LABEL: {{("#)?}}x0_i64{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f32x4 f32x4 "s0" "fmov"); +check_reg!(x0_i64 i64 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f64{{"?}} +// CHECK-LABEL: {{("#)?}}x0_f64{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f64 f64 "s0" "fmov"); +check_reg!(x0_f64 f64 "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f64x1{{"?}} +// CHECK-LABEL: {{("#)?}}x0_ptr{{"?}} // CHECK: //APP -// CHECK: fmov s0, s0 +// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} // CHECK: //NO_APP -check_reg!(v0_f64x1 f64x1 "s0" "fmov"); +check_reg!(x0_ptr ptr "x0" "mov"); -// CHECK-LABEL: {{("#)?}}v0_f64x2{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i8{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_f64x2 f64x2 "s0" "fmov"); +check_reg!(v0_i8 i8 "s0" "fmov"); // CHECK-LABEL: {{("#)?}}v0_i16{{"?}} // CHECK: //APP @@ -511,122 +506,128 @@ check_reg!(v0_f64x2 f64x2 "s0" "fmov"); // CHECK: //NO_APP check_reg!(v0_i16 i16 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i16x4{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f16{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i16x4 i16x4 "s0" "fmov"); +check_reg!(v0_f16 f16 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i16x8{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i32{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i16x8 i16x8 "s0" "fmov"); +check_reg!(v0_i32 i32 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i32{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f32{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i32 i32 "s0" "fmov"); +check_reg!(v0_f32 f32 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i32x2{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i64{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i32x2 i32x2 "s0" "fmov"); +check_reg!(v0_i64 i64 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i32x4{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f64{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i32x4 i32x4 "s0" "fmov"); +check_reg!(v0_f64 f64 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i64{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f128{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i64 i64 "s0" "fmov"); +check_reg!(v0_f128 f128 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i64x1{{"?}} +// CHECK-LABEL: {{("#)?}}v0_ptr{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i64x1 i64x1 "s0" "fmov"); +check_reg!(v0_ptr ptr "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i64x2{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i8x8{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i64x2 i64x2 "s0" "fmov"); +check_reg!(v0_i8x8 i8x8 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i8{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i16x4{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i8 i8 "s0" "fmov"); +check_reg!(v0_i16x4 i16x4 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i8x16{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i32x2{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i8x16 i8x16 "s0" "fmov"); +check_reg!(v0_i32x2 i32x2 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_i8x8{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i64x1{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_i8x8 i8x8 "s0" "fmov"); +check_reg!(v0_i64x1 i64x1 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}v0_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f16x4{{"?}} // CHECK: //APP // CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(v0_ptr ptr "s0" "fmov"); +check_reg!(v0_f16x4 f16x4 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_f16{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f32x2{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_f16 f16 "x0" "mov"); +check_reg!(v0_f32x2 f32x2 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_f32{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f64x1{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_f32 f32 "x0" "mov"); +check_reg!(v0_f64x1 f64x1 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_f64{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i8x16{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_f64 f64 "x0" "mov"); +check_reg!(v0_i8x16 i8x16 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i16{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i16x8{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i16 i16 "x0" "mov"); +check_reg!(v0_i16x8 i16x8 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i32{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i32x4{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i32 i32 "x0" "mov"); +check_reg!(v0_i32x4 i32x4 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i64{{"?}} +// CHECK-LABEL: {{("#)?}}v0_i64x2{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i64 i64 "x0" "mov"); +check_reg!(v0_i64x2 i64x2 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_i8{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f16x8{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_i8 i8 "x0" "mov"); +check_reg!(v0_f16x8 f16x8 "s0" "fmov"); -// CHECK-LABEL: {{("#)?}}x0_ptr{{"?}} +// CHECK-LABEL: {{("#)?}}v0_f32x4{{"?}} // CHECK: //APP -// CHECK: mov x{{[0-9]+}}, x{{[0-9]+}} +// CHECK: fmov s0, s0 // CHECK: //NO_APP -check_reg!(x0_ptr ptr "x0" "mov"); +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/tests/assembly-llvm/asm/arm-modifiers.rs b/tests/assembly-llvm/asm/arm-modifiers.rs index 9867e21a307af..32a368404924a 100644 --- a/tests/assembly-llvm/asm/arm-modifiers.rs +++ b/tests/assembly-llvm/asm/arm-modifiers.rs @@ -31,6 +31,24 @@ macro_rules! check { }; } +// 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 @@ -67,23 +85,6 @@ check!(qreg_e "e" qreg f32x4 "vmov.f64"); // CHECK: @NO_APP check!(qreg_f "f" qreg 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"); // CHECK-LABEL: qreg_low8: // CHECK: @APP // CHECK: vorr q0, q0, q0 @@ -102,20 +103,20 @@ check!(qreg_low8_e "e" qreg_low8 f32x4 "vmov.f64"); // CHECK: @NO_APP check!(qreg_low8_f "f" qreg_low8 f32x4 "vmov.f64"); -// CHECK-LABEL: reg: +// CHECK-LABEL: qreg_low4: // CHECK: @APP -// CHECK: mov r0, r0 +// CHECK: vorr q0, q0, q0 // CHECK: @NO_APP -check!(reg "" reg i32 "mov"); +check!(qreg_low4 "" qreg_low4 f32x4 "vmov"); -// CHECK-LABEL: sreg: +// CHECK-LABEL: qreg_low4_e: // CHECK: @APP -// CHECK: vmov.f32 s0, s0 +// CHECK: vmov.f64 d0, d0 // CHECK: @NO_APP -check!(sreg "" sreg f32 "vmov.f32"); +check!(qreg_low4_e "e" qreg_low4 f32x4 "vmov.f64"); -// CHECK-LABEL: sreg_low16: +// CHECK-LABEL: qreg_low4_f: // CHECK: @APP -// CHECK: vmov.f32 s0, s0 +// CHECK: vmov.f64 d1, d1 // CHECK: @NO_APP -check!(sreg_low16 "" sreg_low16 f32 "vmov.f32"); +check!(qreg_low4_f "f" qreg_low4 f32x4 "vmov.f64"); diff --git a/tests/assembly-llvm/asm/arm-types.rs b/tests/assembly-llvm/asm/arm-types.rs index 89f1686d78ac5..fb93f474c20eb 100644 --- a/tests/assembly-llvm/asm/arm-types.rs +++ b/tests/assembly-llvm/asm/arm-types.rs @@ -111,19 +111,90 @@ macro_rules! check_reg { }; } -// neon-LABEL: dreg_f16x4: -// neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(dreg_f16x4 f16x4 dreg "vmov.f64"); +// CHECK-LABEL: reg_i8: +// CHECK: @APP +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: @NO_APP +check!(reg_i8 i8 reg "mov"); -// neon-LABEL: dreg_f32x2: -// neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(dreg_f32x2 f32x2 dreg "vmov.f64"); +// 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_f16: +// CHECK: @APP +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: @NO_APP +check!(reg_f16 f16 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_f16: +// CHECK: @APP +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: @NO_APP +check!(sreg_f16 f16 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_f16: +// CHECK: @APP +// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: @NO_APP +check!(sreg_low16_f16 f16 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"); + +// d32-LABEL: dreg_i64: +// d32: @APP +// d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// d32: @NO_APP +#[cfg(d32)] +check!(dreg_i64 i64 dreg "vmov.f64"); // d32-LABEL: dreg_f64: // d32: @APP @@ -132,6 +203,13 @@ check!(dreg_f32x2 f32x2 dreg "vmov.f64"); #[cfg(d32)] check!(dreg_f64 f64 dreg "vmov.f64"); +// neon-LABEL: dreg_i8x8: +// neon: @APP +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(dreg_i8x8 i8x8 dreg "vmov.f64"); + // neon-LABEL: dreg_i16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -146,13 +224,6 @@ check!(dreg_i16x4 i16x4 dreg "vmov.f64"); #[cfg(neon)] check!(dreg_i32x2 i32x2 dreg "vmov.f64"); -// d32-LABEL: dreg_i64: -// d32: @APP -// d32: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// d32: @NO_APP -#[cfg(d32)] -check!(dreg_i64 i64 dreg "vmov.f64"); - // neon-LABEL: dreg_i64x1: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -160,26 +231,25 @@ check!(dreg_i64 i64 dreg "vmov.f64"); #[cfg(neon)] check!(dreg_i64x1 i64x1 dreg "vmov.f64"); -// neon-LABEL: dreg_i8x8: +// neon-LABEL: dreg_f16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_i8x8 i8x8 dreg "vmov.f64"); +check!(dreg_f16x4 f16x4 dreg "vmov.f64"); -// neon-LABEL: dreg_low16_f16x4: +// neon-LABEL: dreg_f32x2: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low16_f16x4 f16x4 dreg_low16 "vmov.f64"); +check!(dreg_f32x2 f32x2 dreg "vmov.f64"); -// neon-LABEL: dreg_low16_f32x2: -// neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(dreg_low16_f32x2 f32x2 dreg_low16 "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 @@ -187,6 +257,13 @@ check!(dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64"); // CHECK: @NO_APP check!(dreg_low16_f64 f64 dreg_low16 "vmov.f64"); +// neon-LABEL: dreg_low16_i8x8: +// neon: @APP +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64"); + // neon-LABEL: dreg_low16_i16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -201,12 +278,6 @@ check!(dreg_low16_i16x4 i16x4 dreg_low16 "vmov.f64"); #[cfg(neon)] check!(dreg_low16_i32x2 i32x2 dreg_low16 "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"); - // neon-LABEL: dreg_low16_i64x1: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -214,26 +285,25 @@ check!(dreg_low16_i64 i64 dreg_low16 "vmov.f64"); #[cfg(neon)] check!(dreg_low16_i64x1 i64x1 dreg_low16 "vmov.f64"); -// neon-LABEL: dreg_low16_i8x8: +// neon-LABEL: dreg_low16_f16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low16_i8x8 i8x8 dreg_low16 "vmov.f64"); +check!(dreg_low16_f16x4 f16x4 dreg_low16 "vmov.f64"); -// neon-LABEL: dreg_low8_f16x4: +// neon-LABEL: dreg_low16_f32x2: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low8_f16x4 f16x4 dreg_low8 "vmov.f64"); +check!(dreg_low16_f32x2 f32x2 dreg_low16 "vmov.f64"); -// neon-LABEL: dreg_low8_f32x2: -// neon: @APP -// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(dreg_low8_f32x2 f32x2 dreg_low8 "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 @@ -241,6 +311,13 @@ check!(dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64"); // CHECK: @NO_APP check!(dreg_low8_f64 f64 dreg_low8 "vmov.f64"); +// neon-LABEL: dreg_low8_i8x8: +// neon: @APP +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64"); + // neon-LABEL: dreg_low8_i16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -255,12 +332,6 @@ check!(dreg_low8_i16x4 i16x4 dreg_low8 "vmov.f64"); #[cfg(neon)] check!(dreg_low8_i32x2 i32x2 dreg_low8 "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"); - // neon-LABEL: dreg_low8_i64x1: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} @@ -268,26 +339,26 @@ check!(dreg_low8_i64 i64 dreg_low8 "vmov.f64"); #[cfg(neon)] check!(dreg_low8_i64x1 i64x1 dreg_low8 "vmov.f64"); -// neon-LABEL: dreg_low8_i8x8: +// neon-LABEL: dreg_low8_f16x4: // neon: @APP // neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(dreg_low8_i8x8 i8x8 dreg_low8 "vmov.f64"); +check!(dreg_low8_f16x4 f16x4 dreg_low8 "vmov.f64"); -// neon-LABEL: qreg_f16x8: +// neon-LABEL: dreg_low8_f32x2: // neon: @APP -// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} +// neon: vmov.f64 d{{[0-9]+}}, d{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_f16x8 f16x8 qreg "vmov"); +check!(dreg_low8_f32x2 f32x2 dreg_low8 "vmov.f64"); -// neon-LABEL: qreg_f32x4: +// neon-LABEL: qreg_i8x16: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_f32x4 f32x4 qreg "vmov"); +check!(qreg_i8x16 i8x16 qreg "vmov"); // neon-LABEL: qreg_i16x8: // neon: @APP @@ -310,54 +381,47 @@ check!(qreg_i32x4 i32x4 qreg "vmov"); #[cfg(neon)] check!(qreg_i64x2 i64x2 qreg "vmov"); -// neon-LABEL: qreg_i8x16: -// neon: @APP -// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} -// neon: @NO_APP -#[cfg(neon)] -check!(qreg_i8x16 i8x16 qreg "vmov"); - -// neon-LABEL: qreg_low4_f16x8: +// neon-LABEL: qreg_f16x8: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_f16x8 f16x8 qreg_low4 "vmov"); +check!(qreg_f16x8 f16x8 qreg "vmov"); -// neon-LABEL: qreg_low4_f32x4: +// neon-LABEL: qreg_f32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_f32x4 f32x4 qreg_low4 "vmov"); +check!(qreg_f32x4 f32x4 qreg "vmov"); -// neon-LABEL: qreg_low4_i16x8: +// neon-LABEL: qreg_low8_i8x16: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i16x8 i16x8 qreg_low4 "vmov"); +check!(qreg_low8_i8x16 i8x16 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_i32x4: +// neon-LABEL: qreg_low8_i16x8: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i32x4 i32x4 qreg_low4 "vmov"); +check!(qreg_low8_i16x8 i16x8 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_i64x2: +// neon-LABEL: qreg_low8_i32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i64x2 i64x2 qreg_low4 "vmov"); +check!(qreg_low8_i32x4 i32x4 qreg_low8 "vmov"); -// neon-LABEL: qreg_low4_i8x16: +// neon-LABEL: qreg_low8_i64x2: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low4_i8x16 i8x16 qreg_low4 "vmov"); +check!(qreg_low8_i64x2 i64x2 qreg_low8 "vmov"); // neon-LABEL: qreg_low8_f16x8: // neon: @APP @@ -373,125 +437,115 @@ check!(qreg_low8_f16x8 f16x8 qreg_low8 "vmov"); #[cfg(neon)] check!(qreg_low8_f32x4 f32x4 qreg_low8 "vmov"); -// neon-LABEL: qreg_low8_i16x8: +// neon-LABEL: qreg_low4_i8x16: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i16x8 i16x8 qreg_low8 "vmov"); +check!(qreg_low4_i8x16 i8x16 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_i32x4: +// neon-LABEL: qreg_low4_i16x8: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i32x4 i32x4 qreg_low8 "vmov"); +check!(qreg_low4_i16x8 i16x8 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_i64x2: +// neon-LABEL: qreg_low4_i32x4: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i64x2 i64x2 qreg_low8 "vmov"); +check!(qreg_low4_i32x4 i32x4 qreg_low4 "vmov"); -// neon-LABEL: qreg_low8_i8x16: +// neon-LABEL: qreg_low4_i64x2: // neon: @APP // neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} // neon: @NO_APP #[cfg(neon)] -check!(qreg_low8_i8x16 i8x16 qreg_low8 "vmov"); - -// CHECK-LABEL: reg_f16: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_f16 f16 reg "mov"); +check!(qreg_low4_i64x2 i64x2 qreg_low4 "vmov"); -// CHECK-LABEL: reg_f32: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_f32 f32 reg "mov"); +// neon-LABEL: qreg_low4_f16x8: +// neon: @APP +// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(qreg_low4_f16x8 f16x8 qreg_low4 "vmov"); -// CHECK-LABEL: reg_i16: -// CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} -// CHECK: @NO_APP -check!(reg_i16 i16 reg "mov"); +// neon-LABEL: qreg_low4_f32x4: +// neon: @APP +// neon: vorr q{{[0-9]+}}, q{{[0-9]+}}, q{{[0-9]+}} +// neon: @NO_APP +#[cfg(neon)] +check!(qreg_low4_f32x4 f32x4 qreg_low4 "vmov"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: r0_i8: // CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: mov r0, r0 // CHECK: @NO_APP -check!(reg_i32 i32 reg "mov"); +check_reg!(r0_i8 i8 "r0" "mov"); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: r0_i16: // CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: mov r0, r0 // CHECK: @NO_APP -check!(reg_i8 i8 reg "mov"); +check_reg!(r0_i16 i16 "r0" "mov"); -// CHECK-LABEL: reg_ptr: +// CHECK-LABEL: r0_i32: // CHECK: @APP -// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: mov r0, r0 // CHECK: @NO_APP -check!(reg_ptr ptr reg "mov"); +check_reg!(r0_i32 i32 "r0" "mov"); -// CHECK-LABEL: sreg_f16: +// CHECK-LABEL: r0_f16: // CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: mov r0, r0 // CHECK: @NO_APP -check!(sreg_f16 f16 sreg "vmov.f32"); +check_reg!(r0_f16 f16 "r0" "mov"); -// CHECK-LABEL: sreg_f32: +// CHECK-LABEL: r0_f32: // CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: mov r0, r0 // CHECK: @NO_APP -check!(sreg_f32 f32 sreg "vmov.f32"); +check_reg!(r0_f32 f32 "r0" "mov"); -// CHECK-LABEL: sreg_i32: +// CHECK-LABEL: r0_ptr: // CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: mov r0, r0 // CHECK: @NO_APP -check!(sreg_i32 i32 sreg "vmov.f32"); +check_reg!(r0_ptr ptr "r0" "mov"); -// CHECK-LABEL: sreg_low16_f16: +// CHECK-LABEL: s0_i32: // CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: vmov.f32 s0, s0 // CHECK: @NO_APP -check!(sreg_low16_f16 f16 sreg_low16 "vmov.f32"); +check_reg!(s0_i32 i32 "s0" "vmov.f32"); -// CHECK-LABEL: sreg_low16_f32: +// CHECK-LABEL: s0_f16: // CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: vmov.f32 s0, s0 // CHECK: @NO_APP -check!(sreg_low16_f32 f32 sreg_low16 "vmov.f32"); +check_reg!(s0_f16 f16 "s0" "vmov.f32"); -// CHECK-LABEL: sreg_low16_i32: +// CHECK-LABEL: s0_f32: // CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: vmov.f32 s0, s0 // CHECK: @NO_APP -check!(sreg_low16_i32 i32 sreg_low16 "vmov.f32"); +check_reg!(s0_f32 f32 "s0" "vmov.f32"); -// CHECK-LABEL: sreg_ptr: +// CHECK-LABEL: s0_ptr: // CHECK: @APP -// CHECK: vmov.f32 s{{[0-9]+}}, s{{[0-9]+}} +// CHECK: vmov.f32 s0, s0 // CHECK: @NO_APP -check!(sreg_ptr ptr sreg "vmov.f32"); - -// neon-LABEL: d0_f16x4: -// neon: @APP -// neon: vmov.f64 d0, d0 -// neon: @NO_APP -#[cfg(neon)] -check_reg!(d0_f16x4 f16x4 "d0" "vmov.f64"); +check_reg!(s0_ptr ptr "s0" "vmov.f32"); -// neon-LABEL: d0_f32x2: -// neon: @APP -// neon: vmov.f64 d0, d0 -// neon: @NO_APP -#[cfg(neon)] -check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64"); +// FIXME(#126797): "d0" should work with `i64` and `f64` even when `d32` is disabled. +// d32-LABEL: d0_i64: +// d32: @APP +// d32: vmov.f64 d0, d0 +// d32: @NO_APP +#[cfg(d32)] +check_reg!(d0_i64 i64 "d0" "vmov.f64"); // d32-LABEL: d0_f64: // d32: @APP @@ -500,6 +554,13 @@ check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64"); #[cfg(d32)] check_reg!(d0_f64 f64 "d0" "vmov.f64"); +// neon-LABEL: d0_i8x8: +// neon: @APP +// neon: vmov.f64 d0, d0 +// neon: @NO_APP +#[cfg(neon)] +check_reg!(d0_i8x8 i8x8 "d0" "vmov.f64"); + // neon-LABEL: d0_i16x4: // neon: @APP // neon: vmov.f64 d0, d0 @@ -514,14 +575,6 @@ check_reg!(d0_i16x4 i16x4 "d0" "vmov.f64"); #[cfg(neon)] check_reg!(d0_i32x2 i32x2 "d0" "vmov.f64"); -// FIXME(#126797): "d0" should work with `i64` and `f64` even when `d32` is disabled. -// d32-LABEL: d0_i64: -// d32: @APP -// d32: vmov.f64 d0, d0 -// d32: @NO_APP -#[cfg(d32)] -check_reg!(d0_i64 i64 "d0" "vmov.f64"); - // neon-LABEL: d0_i64x1: // neon: @APP // neon: vmov.f64 d0, d0 @@ -529,26 +582,27 @@ check_reg!(d0_i64 i64 "d0" "vmov.f64"); #[cfg(neon)] check_reg!(d0_i64x1 i64x1 "d0" "vmov.f64"); -// neon-LABEL: d0_i8x8: +// neon-LABEL: d0_f16x4: // neon: @APP // neon: vmov.f64 d0, d0 // neon: @NO_APP #[cfg(neon)] -check_reg!(d0_i8x8 i8x8 "d0" "vmov.f64"); +check_reg!(d0_f16x4 f16x4 "d0" "vmov.f64"); -// neon-LABEL: q0_f16x8: +// neon-LABEL: d0_f32x2: // neon: @APP -// neon: vorr q0, q0, q0 +// neon: vmov.f64 d0, d0 // neon: @NO_APP #[cfg(neon)] -check_reg!(q0_f16x8 f16x8 "q0" "vmov"); +check_reg!(d0_f32x2 f32x2 "d0" "vmov.f64"); -// neon-LABEL: q0_f32x4: +// neon-LABEL: q0_i8x16: // neon: @APP // neon: vorr q0, q0, q0 // neon: @NO_APP #[cfg(neon)] -check_reg!(q0_f32x4 f32x4 "q0" "vmov"); +check_reg!(q0_i8x16 i8x16 "q0" "vmov"); + // neon-LABEL: q0_i16x8: // neon: @APP // neon: vorr q0, q0, q0 @@ -570,69 +624,16 @@ check_reg!(q0_i32x4 i32x4 "q0" "vmov"); #[cfg(neon)] check_reg!(q0_i64x2 i64x2 "q0" "vmov"); -// neon-LABEL: q0_i8x16: +// neon-LABEL: q0_f16x8: // neon: @APP // neon: vorr q0, q0, q0 // neon: @NO_APP #[cfg(neon)] -check_reg!(q0_i8x16 i8x16 "q0" "vmov"); - -// CHECK-LABEL: r0_f16: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check_reg!(r0_f16 f16 "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_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_i8: -// CHECK: @APP -// CHECK: mov r0, r0 -// CHECK: @NO_APP -check_reg!(r0_i8 i8 "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_f16: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check_reg!(s0_f16 f16 "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_i32: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check_reg!(s0_i32 i32 "s0" "vmov.f32"); +check_reg!(q0_f16x8 f16x8 "q0" "vmov"); -// CHECK-LABEL: s0_ptr: -// CHECK: @APP -// CHECK: vmov.f32 s0, s0 -// CHECK: @NO_APP -check_reg!(s0_ptr ptr "s0" "vmov.f32"); +// neon-LABEL: q0_f32x4: +// neon: @APP +// neon: vorr q0, q0, q0 +// neon: @NO_APP +#[cfg(neon)] +check_reg!(q0_f32x4 f32x4 "q0" "vmov"); diff --git a/tests/assembly-llvm/asm/avr-modifiers.rs b/tests/assembly-llvm/asm/avr-modifiers.rs index 213f19099ef89..124cad9bef6a8 100644 --- a/tests/assembly-llvm/asm/avr-modifiers.rs +++ b/tests/assembly-llvm/asm/avr-modifiers.rs @@ -24,17 +24,17 @@ macro_rules! check { }; } -// CHECK-LABEL: reg_iw_modifiers: +// CHECK-LABEL: reg_pair_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!(reg_pair_modifiers "h" "l" reg_pair); -// CHECK-LABEL: reg_pair_modifiers: +// CHECK-LABEL: reg_iw_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!(reg_iw_modifiers "h" "l" reg_iw); // CHECK-LABEL: reg_ptr_modifiers: // CHECK: ;APP diff --git a/tests/assembly-llvm/asm/avr-types.rs b/tests/assembly-llvm/asm/avr-types.rs index 3a0528cb0b3b3..309405f4d51e7 100644 --- a/tests/assembly-llvm/asm/avr-types.rs +++ b/tests/assembly-llvm/asm/avr-types.rs @@ -13,6 +13,50 @@ use minicore::*; type ptr = *const u64; +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; @@ -100,50 +144,6 @@ pub unsafe fn muls_clobber(x: i8, y: i8) -> i16 { z } -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 - } - }; -} - // CHECK-LABEL: reg_i8: // CHECK: ;APP // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} @@ -156,17 +156,17 @@ check!(reg_i8 i8 reg); // CHECK: ;NO_APP check!(reg_upper_i8 i8 reg_upper); -// CHECK-LABEL: reg_iw_i16: +// CHECK-LABEL: reg_pair_i16: // CHECK: ;APP // CHECK: movw r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -checkw!(reg_iw_i16 i16 reg_iw); +checkw!(reg_pair_i16 i16 reg_pair); -// CHECK-LABEL: reg_pair_i16: +// CHECK-LABEL: reg_iw_i16: // CHECK: ;APP // CHECK: movw r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -checkw!(reg_pair_i16 i16 reg_pair); +checkw!(reg_iw_i16 i16 reg_iw); // CHECK-LABEL: reg_ptr_i16: // CHECK: ;APP @@ -180,26 +180,26 @@ checkw!(reg_ptr_i16 i16 reg_ptr); // CHECK: ;NO_APP check_reg!(r2_i8 i8 "r2"); -// CHECK-LABEL: xh_i8: -// CHECK: ;APP -// CHECK: mov r27, r27 -// CHECK: ;NO_APP -check_reg!(xh_i8 i8 "XH"); - // CHECK-LABEL: xl_i8: // CHECK: ;APP // CHECK: mov r26, r26 // CHECK: ;NO_APP check_reg!(xl_i8 i8 "XL"); -// CHECK-LABEL: r25r24_i16: +// CHECK-LABEL: xh_i8: // CHECK: ;APP -// CHECK: movw r24, r24 +// CHECK: mov r27, r27 // CHECK: ;NO_APP -check_regw!(r25r24_i16 i16 "r25r24" "r24"); +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/tests/assembly-llvm/asm/bpf-types.rs b/tests/assembly-llvm/asm/bpf-types.rs index 380b332730a8f..07ea7bd5ce055 100644 --- a/tests/assembly-llvm/asm/bpf-types.rs +++ b/tests/assembly-llvm/asm/bpf-types.rs @@ -13,19 +13,6 @@ use minicore::*; type ptr = *const u64; -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); -} - macro_rules! check { ($func:ident $ty:ident $class:ident) => { #[no_mangle] @@ -48,6 +35,25 @@ macro_rules! check_reg { }; } +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]+}} @@ -66,11 +72,11 @@ check!(reg_i32 i32 reg); // CHECK: #NO_APP check!(reg_i64 i64 reg); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: wreg_i8: // CHECK: #APP -// CHECK: r{{[0-9]+}} = r{{[0-9]+}} +// CHECK: w{{[0-9]+}} = w{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8 i8 reg); +check!(wreg_i8 i8 wreg); // CHECK-LABEL: wreg_i16: // CHECK: #APP @@ -84,11 +90,11 @@ check!(wreg_i16 i16 wreg); // CHECK: #NO_APP check!(wreg_i32 i32 wreg); -// CHECK-LABEL: wreg_i8: +// CHECK-LABEL: r0_i8: // CHECK: #APP -// CHECK: w{{[0-9]+}} = w{{[0-9]+}} +// CHECK: r0 = r0 // CHECK: #NO_APP -check!(wreg_i8 i8 wreg); +check_reg!(r0_i8 i8 "r0"); // CHECK-LABEL: r0_i16: // CHECK: #APP @@ -108,11 +114,11 @@ check_reg!(r0_i32 i32 "r0"); // CHECK: #NO_APP check_reg!(r0_i64 i64 "r0"); -// CHECK-LABEL: r0_i8: +// CHECK-LABEL: w0_i8: // CHECK: #APP -// CHECK: r0 = r0 +// CHECK: w0 = w0 // CHECK: #NO_APP -check_reg!(r0_i8 i8 "r0"); +check_reg!(w0_i8 i8 "w0"); // CHECK-LABEL: w0_i16: // CHECK: #APP @@ -125,9 +131,3 @@ check_reg!(w0_i16 i16 "w0"); // CHECK: w0 = w0 // CHECK: #NO_APP check_reg!(w0_i32 i32 "w0"); - -// CHECK-LABEL: w0_i8: -// CHECK: #APP -// CHECK: w0 = w0 -// CHECK: #NO_APP -check_reg!(w0_i8 i8 "w0"); diff --git a/tests/assembly-llvm/asm/hexagon-types.rs b/tests/assembly-llvm/asm/hexagon-types.rs index 999c0d686be2e..ce80fa75b359b 100644 --- a/tests/assembly-llvm/asm/hexagon-types.rs +++ b/tests/assembly-llvm/asm/hexagon-types.rs @@ -19,6 +19,28 @@ extern "C" { static extern_static: u8; } +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 + } + }; +} + // CHECK-LABEL: sym_static: // CHECK: InlineAsm Start // CHECK: r0 = {{#+}}extern_static @@ -56,39 +78,18 @@ pub unsafe fn packet() { }}", out(reg) _, in(reg) &val); } -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 - } - }; -} - -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: reg_ptr: // CHECK: InlineAsm Start // CHECK: r{{[0-9]+}} = r{{[0-9]+}} // CHECK: InlineAsm End -check!(reg_f32 f32 reg); +check!(reg_ptr ptr reg); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_f32: // CHECK: InlineAsm Start // CHECK: r{{[0-9]+}} = r{{[0-9]+}} // CHECK: InlineAsm End -check!(reg_i16 i16 reg); +check!(reg_f32 f32 reg); + // CHECK-LABEL: reg_i32: // CHECK: InlineAsm Start // CHECK: r{{[0-9]+}} = r{{[0-9]+}} @@ -101,23 +102,23 @@ check!(reg_i32 i32 reg); // CHECK: InlineAsm End check!(reg_i8 i8 reg); -// CHECK-LABEL: reg_ptr: +// CHECK-LABEL: reg_i16: // CHECK: InlineAsm Start // CHECK: r{{[0-9]+}} = r{{[0-9]+}} // CHECK: InlineAsm End -check!(reg_ptr ptr reg); +check!(reg_i16 i16 reg); -// CHECK-LABEL: r0_f32: +// CHECK-LABEL: r0_ptr: // CHECK: InlineAsm Start // CHECK: r0 = r0 // CHECK: InlineAsm End -check_reg!(r0_f32 f32 "r0"); +check_reg!(r0_ptr ptr "r0"); -// CHECK-LABEL: r0_i16: +// CHECK-LABEL: r0_f32: // CHECK: InlineAsm Start // CHECK: r0 = r0 // CHECK: InlineAsm End -check_reg!(r0_i16 i16 "r0"); +check_reg!(r0_f32 f32 "r0"); // CHECK-LABEL: r0_i32: // CHECK: InlineAsm Start @@ -131,8 +132,8 @@ check_reg!(r0_i32 i32 "r0"); // CHECK: InlineAsm End check_reg!(r0_i8 i8 "r0"); -// CHECK-LABEL: r0_ptr: +// CHECK-LABEL: r0_i16: // CHECK: InlineAsm Start // CHECK: r0 = r0 // CHECK: InlineAsm End -check_reg!(r0_ptr ptr "r0"); +check_reg!(r0_i16 i16 "r0"); diff --git a/tests/assembly-llvm/asm/loongarch-type.rs b/tests/assembly-llvm/asm/loongarch-type.rs index 4f15a09fd7f6c..c782be19f1d2a 100644 --- a/tests/assembly-llvm/asm/loongarch-type.rs +++ b/tests/assembly-llvm/asm/loongarch-type.rs @@ -57,53 +57,35 @@ macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { } };} -// CHECK-LABEL: freg_f16: -// CHECK: #APP -// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(freg_f16, f16, freg, "fmov.s"); - -// CHECK-LABEL: freg_f32: -// CHECK: #APP -// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(freg_f32, f32, freg, "fmov.s"); - -// CHECK-LABEL: freg_f64: -// CHECK: #APP -// CHECK: fmov.d $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} -// CHECK: #NO_APP -check!(freg_f64, f64, freg, "fmov.d"); - -// CHECK-LABEL: reg_f16: +// CHECK-LABEL: reg_i8: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_f16, f16, reg, "move"); +check!(reg_i8, i8, reg, "move"); -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: reg_i16: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_f32, f32, reg, "move"); +check!(reg_i16, i16, reg, "move"); -// CHECK-LABEL: reg_f64: +// CHECK-LABEL: reg_f16: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_f64, f64, reg, "move"); +check!(reg_f16, f16, reg, "move"); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_i32: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i16, i16, reg, "move"); +check!(reg_i32, i32, reg, "move"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: reg_f32: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i32, i32, reg, "move"); +check!(reg_f32, f32, reg, "move"); // CHECK-LABEL: reg_i64: // CHECK: #APP @@ -111,11 +93,11 @@ check!(reg_i32, i32, reg, "move"); // CHECK: #NO_APP check!(reg_i64, i64, reg, "move"); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: reg_f64: // CHECK: #APP // CHECK: move ${{[a-z0-9]+}}, ${{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i8, i8, reg, "move"); +check!(reg_f64, f64, reg, "move"); // CHECK-LABEL: reg_ptr: // CHECK: #APP @@ -123,53 +105,53 @@ check!(reg_i8, i8, reg, "move"); // CHECK: #NO_APP check!(reg_ptr, ptr, reg, "move"); -// CHECK-LABEL: f0_f16: +// CHECK-LABEL: freg_f16: // CHECK: #APP // CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check_reg!(f0_f16, f16, "$f0", "fmov.s"); +check!(freg_f16, f16, freg, "fmov.s"); -// CHECK-LABEL: f0_f32: +// CHECK-LABEL: freg_f32: // CHECK: #APP // CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check_reg!(f0_f32, f32, "$f0", "fmov.s"); +check!(freg_f32, f32, freg, "fmov.s"); -// CHECK-LABEL: f0_f64: +// CHECK-LABEL: freg_f64: // CHECK: #APP // CHECK: fmov.d $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} // CHECK: #NO_APP -check_reg!(f0_f64, f64, "$f0", "fmov.d"); +check!(freg_f64, f64, freg, "fmov.d"); -// CHECK-LABEL: r4_f16: +// CHECK-LABEL: r4_i8: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_f16, f16, "$r4", "move"); +check_reg!(r4_i8, i8, "$r4", "move"); -// CHECK-LABEL: r4_f32: +// CHECK-LABEL: r4_i16: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_f32, f32, "$r4", "move"); +check_reg!(r4_i16, i16, "$r4", "move"); -// CHECK-LABEL: r4_f64: +// CHECK-LABEL: r4_f16: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_f64, f64, "$r4", "move"); +check_reg!(r4_f16, f16, "$r4", "move"); -// CHECK-LABEL: r4_i16: +// CHECK-LABEL: r4_i32: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_i16, i16, "$r4", "move"); +check_reg!(r4_i32, i32, "$r4", "move"); -// CHECK-LABEL: r4_i32: +// CHECK-LABEL: r4_f32: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_i32, i32, "$r4", "move"); +check_reg!(r4_f32, f32, "$r4", "move"); // CHECK-LABEL: r4_i64: // CHECK: #APP @@ -177,14 +159,32 @@ check_reg!(r4_i32, i32, "$r4", "move"); // CHECK: #NO_APP check_reg!(r4_i64, i64, "$r4", "move"); -// CHECK-LABEL: r4_i8: +// CHECK-LABEL: r4_f64: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP -check_reg!(r4_i8, i8, "$r4", "move"); +check_reg!(r4_f64, f64, "$r4", "move"); // CHECK-LABEL: r4_ptr: // CHECK: #APP // CHECK: move $a0, $a0 // CHECK: #NO_APP check_reg!(r4_ptr, ptr, "$r4", "move"); + +// CHECK-LABEL: f0_f16: +// CHECK: #APP +// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} +// CHECK: #NO_APP +check_reg!(f0_f16, f16, "$f0", "fmov.s"); + +// CHECK-LABEL: f0_f32: +// CHECK: #APP +// CHECK: fmov.s $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} +// CHECK: #NO_APP +check_reg!(f0_f32, f32, "$f0", "fmov.s"); + +// CHECK-LABEL: f0_f64: +// CHECK: #APP +// CHECK: fmov.d $f{{[a-z0-9]+}}, $f{{[a-z0-9]+}} +// CHECK: #NO_APP +check_reg!(f0_f64, f64, "$f0", "fmov.d"); diff --git a/tests/assembly-llvm/asm/m68k-types.rs b/tests/assembly-llvm/asm/m68k-types.rs index af6cfae7b3f07..9e4f6d9a1a9d5 100644 --- a/tests/assembly-llvm/asm/m68k-types.rs +++ b/tests/assembly-llvm/asm/m68k-types.rs @@ -24,17 +24,11 @@ macro_rules! check { }; } -// CHECK-LABEL: reg_addr_i16: -// CHECK: ;APP -// CHECK: move.w %a{{[0-9]}}, %a{{[0-9]}} -// CHECK: ;NO_APP -check!(reg_addr_i16 i16 reg_addr "move.w"); - -// CHECK-LABEL: reg_addr_i32: +// CHECK-LABEL: reg_data_i8: // CHECK: ;APP -// CHECK: move.l %a{{[0-9]}}, %a{{[0-9]}} +// CHECK: move.b %d{{[0-9]}}, %d{{[0-9]}} // CHECK: ;NO_APP -check!(reg_addr_i32 i32 reg_addr "move.l"); +check!(reg_data_i8 i8 reg_data "move.b"); // CHECK-LABEL: reg_data_i16: // CHECK: ;APP @@ -48,11 +42,17 @@ check!(reg_data_i16 i16 reg_data "move.w"); // CHECK: ;NO_APP check!(reg_data_i32 i32 reg_data "move.l"); -// CHECK-LABEL: reg_data_i8: +// CHECK-LABEL: reg_addr_i16: // CHECK: ;APP -// CHECK: move.b %d{{[0-9]}}, %d{{[0-9]}} +// CHECK: move.w %a{{[0-9]}}, %a{{[0-9]}} // CHECK: ;NO_APP -check!(reg_data_i8 i8 reg_data "move.b"); +check!(reg_addr_i16 i16 reg_addr "move.w"); + +// CHECK-LABEL: reg_addr_i32: +// CHECK: ;APP +// CHECK: move.l %a{{[0-9]}}, %a{{[0-9]}} +// CHECK: ;NO_APP +check!(reg_addr_i32 i32 reg_addr "move.l"); // CHECK-LABEL: reg_i16: // CHECK: ;APP diff --git a/tests/assembly-llvm/asm/mips-types.rs b/tests/assembly-llvm/asm/mips-types.rs index 5a7873e885e56..00e8ce0b874aa 100644 --- a/tests/assembly-llvm/asm/mips-types.rs +++ b/tests/assembly-llvm/asm/mips-types.rs @@ -22,6 +22,24 @@ extern "C" { static extern_static: u8; } +macro_rules! check { ($func:ident, $ty:ty, $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 + } +};} + +macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { + #[no_mangle] + pub unsafe fn $func(x: $ty) -> $ty { + 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)($gp) @@ -66,41 +84,31 @@ pub unsafe fn sym_fn_64() { asm!("ld $v1, {}", sym extern_func); } -macro_rules! check { ($func:ident, $ty:ty, $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 - } -};} - -macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x); - y - } -};} - // 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: reg_f32_soft: +// CHECK-LABEL: f0_f32_64: // CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} +// CHECK: mov.d $f0, $f0 // CHECK: #NO_APP -check!(reg_f32_soft, f32, reg, "move"); +#[no_mangle] +check_reg!(f0_f32_64, f32, "$f0", "mov.d"); // CHECK-LABEL: reg_f64: // CHECK: #APP @@ -109,18 +117,18 @@ check!(reg_f32_soft, f32, reg, "move"); #[no_mangle] check!(reg_f64, f64, freg, "mov.d"); -// 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: 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_i16: +// CHECK-LABEL: reg_ptr: // CHECK: #APP // CHECK: move ${{[0-9]+}}, ${{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16, i16, reg, "move"); +check!(reg_ptr, ptr, reg, "move"); // CHECK-LABEL: reg_i32: // CHECK: #APP @@ -128,12 +136,18 @@ check!(reg_i16, i16, reg, "move"); // CHECK: #NO_APP check!(reg_i32, i32, reg, "move"); -// mips64-LABEL: reg_i64: +// 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_i64, i64, reg, "move"); +check!(reg_f64_soft, f64, reg, "move"); // CHECK-LABEL: reg_i8: // CHECK: #APP @@ -141,55 +155,42 @@ check!(reg_i64, i64, reg, "move"); // CHECK: #NO_APP check!(reg_i8, i8, reg, "move"); -// CHECK-LABEL: reg_ptr: -// CHECK: #APP -// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} -// CHECK: #NO_APP -check!(reg_ptr, ptr, 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: f0_f32: -// CHECK: #APP -// CHECK: mov.s $f0, $f0 -// CHECK: #NO_APP -#[no_mangle] -check_reg!(f0_f32, f32, "$f0", "mov.s"); - -// CHECK-LABEL: f0_f32_64: +// CHECK-LABEL: reg_i16: // CHECK: #APP -// CHECK: mov.d $f0, $f0 +// CHECK: move ${{[0-9]+}}, ${{[0-9]+}} // CHECK: #NO_APP -#[no_mangle] -check_reg!(f0_f32_64, f32, "$f0", "mov.d"); +check!(reg_i16, i16, reg, "move"); -// CHECK-LABEL: f0_f64: -// CHECK: #APP -// CHECK: mov.d $f0, $f0 -// CHECK: #NO_APP -#[no_mangle] -check_reg!(f0_f64, f64, "$f0", "mov.d"); +// 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_f32: +// CHECK-LABEL: r8_ptr: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP -check_reg!(r8_f32, f32, "$8", "move"); +check_reg!(r8_ptr, ptr, "$8", "move"); -// CHECK-LABEL: r8_i16: +// CHECK-LABEL: r8_i32: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP -check_reg!(r8_i16, i16, "$8", "move"); -// CHECK-LABEL: r8_i32: +check_reg!(r8_i32, i32, "$8", "move"); + +// CHECK-LABEL: r8_f32: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP -check_reg!(r8_i32, i32, "$8", "move"); +check_reg!(r8_f32, f32, "$8", "move"); // CHECK-LABEL: r8_i8: // CHECK: #APP @@ -197,14 +198,14 @@ check_reg!(r8_i32, i32, "$8", "move"); // CHECK: #NO_APP check_reg!(r8_i8, i8, "$8", "move"); -// CHECK-LABEL: r8_ptr: +// CHECK-LABEL: r8_u8: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP -check_reg!(r8_ptr, ptr, "$8", "move"); +check_reg!(r8_u8, u8, "$8", "move"); -// CHECK-LABEL: r8_u8: +// CHECK-LABEL: r8_i16: // CHECK: #APP // CHECK: move $8, $8 // CHECK: #NO_APP -check_reg!(r8_u8, u8, "$8", "move"); +check_reg!(r8_i16, i16, "$8", "move"); diff --git a/tests/assembly-llvm/asm/msp430-types.rs b/tests/assembly-llvm/asm/msp430-types.rs index 12e9b83a22ffa..442dc77999f54 100644 --- a/tests/assembly-llvm/asm/msp430-types.rs +++ b/tests/assembly-llvm/asm/msp430-types.rs @@ -13,6 +13,50 @@ use minicore::*; type ptr = *const i16; +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; @@ -60,61 +104,17 @@ pub unsafe fn mov_postincrement(mut x: *const i16) -> (i16, *const i16) { (y, x) } -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 - } - }; -} - -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_i8: // CHECK: ;APP // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -check!(reg_i16 i16 reg); +check!(reg_i8 i8 reg); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: reg_i16: // CHECK: ;APP // CHECK: mov r{{[0-9]+}}, r{{[0-9]+}} // CHECK: ;NO_APP -check!(reg_i8 i8 reg); +check!(reg_i16 i16 reg); // CHECK-LABEL: reg_i8b: // CHECK: ;APP @@ -122,16 +122,17 @@ check!(reg_i8 i8 reg); // CHECK: ;NO_APP checkb!(reg_i8b i8 reg); -// CHECK-LABEL: r5_i16: +// CHECK-LABEL: r5_i8: // CHECK: ;APP // CHECK: mov r5, r5 // CHECK: ;NO_APP -check_reg!(r5_i16 i16 "r5"); -// CHECK-LABEL: r5_i8: +check_reg!(r5_i8 i8 "r5"); + +// CHECK-LABEL: r5_i16: // CHECK: ;APP // CHECK: mov r5, r5 // CHECK: ;NO_APP -check_reg!(r5_i8 i8 "r5"); +check_reg!(r5_i16 i16 "r5"); // CHECK-LABEL: r5_i8b: // CHECK: ;APP diff --git a/tests/assembly-llvm/asm/nvptx-types.rs b/tests/assembly-llvm/asm/nvptx-types.rs index ee10bc5e03136..7e8ebd03024e4 100644 --- a/tests/assembly-llvm/asm/nvptx-types.rs +++ b/tests/assembly-llvm/asm/nvptx-types.rs @@ -36,23 +36,23 @@ macro_rules! check { }; } -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i16 +// 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_i16 i16 reg16 "mov.i16"); +check!(reg16_i8 i8 reg16 "mov.i16"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg16_i8 +// 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_i8 i8 reg16 "mov.i16"); +check!(reg16_i16 i16 reg16 "mov.i16"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_f32 +// 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_f32 f32 reg32 "mov.i32"); +check!(reg32_i8 i8 reg32 "mov.i32"); // CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i16 // CHECK: // begin inline asm @@ -66,23 +66,17 @@ check!(reg32_i16 i16 reg32 "mov.i32"); // CHECK: // end inline asm check!(reg32_i32 i32 reg32 "mov.i32"); -// CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg32_i8 +// 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_i8 i8 reg32 "mov.i32"); - -// 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!(reg32_f32 f32 reg32 "mov.i32"); -// CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_f64 +// 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_f64 f64 reg64 "mov.i64"); +check!(reg64_i8 i8 reg64 "mov.i64"); // CHECK-LABEL: .visible .func (.param .b32 func_retval0) reg64_i16 // CHECK: // begin inline asm @@ -96,17 +90,23 @@ check!(reg64_i16 i16 reg64 "mov.i64"); // 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 .b32 func_retval0) reg64_i8 +// 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_i8 i8 reg64 "mov.i64"); +check!(reg64_f64 f64 reg64 "mov.i64"); // CHECK-LABEL: .visible .func (.param .b64 func_retval0) reg64_ptr // CHECK: // begin inline asm diff --git a/tests/assembly-llvm/asm/powerpc-types.rs b/tests/assembly-llvm/asm/powerpc-types.rs index 55db090c049b3..4291e4c02f3be 100644 --- a/tests/assembly-llvm/asm/powerpc-types.rs +++ b/tests/assembly-llvm/asm/powerpc-types.rs @@ -73,35 +73,42 @@ macro_rules! check_reg { ($func:ident, $ty:ty, $rego:tt, $regc:tt, $mov:literal) } };} -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: reg_i8: // CHECK: #APP -// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} +// CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_f32, f32, freg, "fmr"); +check!(reg_i8, i8, reg, "mr"); -// CHECK-LABEL: reg_f64: +// CHECK-LABEL: reg_i16: // CHECK: #APP -// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} +// CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_f64, f64, freg, "fmr"); +check!(reg_i16, i16, reg, "mr"); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_i32: // CHECK: #APP // CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16, i16, reg, "mr"); +check!(reg_i32, i32, reg, "mr"); -// CHECK-LABEL: reg_i16_nz: +// 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_i16_nz, i16, reg_nonzero, "mr"); +check!(reg_i8_nz, i8, reg_nonzero, "mr"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: reg_i16_nz: // CHECK: #APP // CHECK: mr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i32, i32, reg, "mr"); +check!(reg_i16_nz, i16, reg_nonzero, "mr"); // CHECK-LABEL: reg_i32_nz: // CHECK: #APP @@ -109,13 +116,6 @@ check!(reg_i32, i32, reg, "mr"); // CHECK: #NO_APP check!(reg_i32_nz, i32, reg_nonzero, "mr"); -// powerpc64-LABEL: reg_i64: -// powerpc64: #APP -// powerpc64: mr {{[0-9]+}}, {{[0-9]+}} -// powerpc64: #NO_APP -#[cfg(powerpc64)] -check!(reg_i64, i64, reg, "mr"); - // powerpc64-LABEL: reg_i64_nz: // powerpc64: #APP // powerpc64: mr {{[0-9]+}}, {{[0-9]+}} @@ -123,61 +123,28 @@ check!(reg_i64, i64, reg, "mr"); #[cfg(powerpc64)] check!(reg_i64_nz, i64, reg_nonzero, "mr"); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: reg_f32: // CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} +// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8, i8, reg, "mr"); +check!(reg_f32, f32, freg, "fmr"); -// CHECK-LABEL: reg_i8_nz: +// CHECK-LABEL: reg_f64: // CHECK: #APP -// CHECK: mr {{[0-9]+}}, {{[0-9]+}} +// CHECK: fmr {{[0-9]+}}, {{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8_nz, i8, reg_nonzero, "mr"); - -// powerpc_vsx-LABEL: vreg_f32: -// powerpc_vsx: #APP -// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f32: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check!(vreg_f32, f32, vreg, "vmr"); +check!(reg_f64, f64, freg, "fmr"); -// powerpc_altivec-LABEL: vreg_f32x4: +// powerpc_altivec-LABEL: vreg_i8x16: // powerpc_altivec: #APP // powerpc_altivec: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_f32x4: +// powerpc64-LABEL: vreg_i8x16: // powerpc64: #APP // powerpc64: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc64: #NO_APP #[cfg(altivec)] -check!(vreg_f32x4, f32x4, vreg, "vmr"); - -// powerpc_vsx-LABEL: vreg_f64: -// powerpc_vsx: #APP -// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check!(vreg_f64, f64, vreg, "vmr"); - -// powerpc_vsx-LABEL: vreg_f64x2: -// powerpc_vsx: #APP -// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64x2: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check!(vreg_f64x2, f64x2, vreg, "vmr"); +check!(vreg_i8x16, i8x16, vreg, "vmr"); // powerpc_altivec-LABEL: vreg_i16x8: // powerpc_altivec: #APP @@ -212,40 +179,55 @@ check!(vreg_i32x4, i32x4, vreg, "vmr"); #[cfg(vsx)] check!(vreg_i64x2, i64x2, vreg, "vmr"); -// powerpc_altivec-LABEL: vreg_i8x16: +// powerpc_altivec-LABEL: vreg_f32x4: // powerpc_altivec: #APP // powerpc_altivec: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i8x16: +// powerpc64-LABEL: vreg_f32x4: // powerpc64: #APP // powerpc64: vmr {{[0-9]+}}, {{[0-9]+}} // powerpc64: #NO_APP #[cfg(altivec)] -check!(vreg_i8x16, i8x16, vreg, "vmr"); +check!(vreg_f32x4, f32x4, vreg, "vmr"); -// CHECK-LABEL: reg_f32_f0: -// CHECK: #APP -// CHECK: fmr 0, 0 -// CHECK: #NO_APP -check_reg!(reg_f32_f0, f32, "0", "f0", "fmr"); +// powerpc_vsx-LABEL: vreg_f64x2: +// powerpc_vsx: #APP +// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f64x2: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check!(vreg_f64x2, f64x2, vreg, "vmr"); -// CHECK-LABEL: reg_f32_f18: -// CHECK: #APP -// CHECK: fmr 18, 18 -// CHECK: #NO_APP -check_reg!(reg_f32_f18, f32, "18", "f18", "fmr"); +// powerpc_vsx-LABEL: vreg_f32: +// powerpc_vsx: #APP +// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f32: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check!(vreg_f32, f32, vreg, "vmr"); -// CHECK-LABEL: reg_f64_f0: -// CHECK: #APP -// CHECK: fmr 0, 0 -// CHECK: #NO_APP -check_reg!(reg_f64_f0, f64, "0", "f0", "fmr"); +// powerpc_vsx-LABEL: vreg_f64: +// powerpc_vsx: #APP +// powerpc_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f64: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr {{[0-9]+}}, {{[0-9]+}} +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check!(vreg_f64, f64, vreg, "vmr"); -// CHECK-LABEL: reg_f64_f18: +// CHECK-LABEL: reg_i8_r0: // CHECK: #APP -// CHECK: fmr 18, 18 +// CHECK: mr 0, 0 // CHECK: #NO_APP -check_reg!(reg_f64_f18, f64, "18", "f18", "fmr"); +check_reg!(reg_i8_r0, i8, "0", "0", "mr"); // CHECK-LABEL: reg_i16_r0: // CHECK: #APP @@ -253,24 +235,12 @@ check_reg!(reg_f64_f18, f64, "18", "f18", "fmr"); // CHECK: #NO_APP check_reg!(reg_i16_r0, i16, "0", "0", "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_r0: // CHECK: #APP // CHECK: mr 0, 0 // CHECK: #NO_APP check_reg!(reg_i32_r0, i32, "0", "0", "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_r0: // powerpc64: #APP // powerpc64: mr 0, 0 @@ -278,6 +248,24 @@ check_reg!(reg_i32_r18, i32, "18", "18", "mr"); #[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 @@ -285,116 +273,128 @@ check_reg!(reg_i64_r0, i64, "0", "0", "mr"); #[cfg(powerpc64)] check_reg!(reg_i64_r18, i64, "18", "18", "mr"); -// CHECK-LABEL: reg_i8_r0: +// CHECK-LABEL: reg_f32_f0: // CHECK: #APP -// CHECK: mr 0, 0 +// CHECK: fmr 0, 0 // CHECK: #NO_APP -check_reg!(reg_i8_r0, i8, "0", "0", "mr"); +check_reg!(reg_f32_f0, f32, "0", "f0", "fmr"); -// CHECK-LABEL: reg_i8_r18: +// CHECK-LABEL: reg_f64_f0: // CHECK: #APP -// CHECK: mr 18, 18 +// CHECK: fmr 0, 0 // CHECK: #NO_APP -check_reg!(reg_i8_r18, i8, "18", "18", "mr"); +check_reg!(reg_f64_f0, f64, "0", "f0", "fmr"); -// powerpc_vsx-LABEL: vreg_f32_v0: -// powerpc_vsx: #APP -// powerpc_vsx: vmr 0, 0 -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f32_v0: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr 0, 0 -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check_reg!(vreg_f32_v0, f32, "0", "v0", "vmr"); +// CHECK-LABEL: reg_f32_f18: +// CHECK: #APP +// CHECK: fmr 18, 18 +// CHECK: #NO_APP +check_reg!(reg_f32_f18, f32, "18", "f18", "fmr"); -// powerpc_vsx-LABEL: vreg_f32_v18: -// powerpc_vsx: #APP -// powerpc_vsx: vmr 18, 18 -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f32_v18: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr 18, 18 -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check_reg!(vreg_f32_v18, f32, "18", "v18", "vmr"); +// CHECK-LABEL: reg_f64_f18: +// CHECK: #APP +// CHECK: fmr 18, 18 +// CHECK: #NO_APP +check_reg!(reg_f64_f18, f64, "18", "f18", "fmr"); -// powerpc_altivec-LABEL: vreg_f32x4_v0: +// powerpc_altivec-LABEL: vreg_i8x16_v0: // powerpc_altivec: #APP // powerpc_altivec: vmr 0, 0 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_f32x4_v0: +// powerpc64-LABEL: vreg_i8x16_v0: // powerpc64: #APP // powerpc64: vmr 0, 0 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_f32x4_v0, f32x4, "0", "v0", "vmr"); +check_reg!(vreg_i8x16_v0, i8x16, "0", "v0", "vmr"); -// powerpc_altivec-LABEL: vreg_f32x4_v18: +// powerpc_altivec-LABEL: vreg_i16x8_v0: // powerpc_altivec: #APP -// powerpc_altivec: vmr 18, 18 +// powerpc_altivec: vmr 0, 0 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_f32x4_v18: +// powerpc64-LABEL: vreg_i16x8_v0: // powerpc64: #APP -// powerpc64: vmr 18, 18 +// powerpc64: vmr 0, 0 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_f32x4_v18, f32x4, "18", "v18", "vmr"); +check_reg!(vreg_i16x8_v0, i16x8, "0", "v0", "vmr"); -// powerpc_vsx-LABEL: vreg_f64_v0: +// powerpc_altivec-LABEL: vreg_i32x4_v0: +// powerpc_altivec: #APP +// powerpc_altivec: vmr 0, 0 +// powerpc_altivec: #NO_APP +// powerpc64-LABEL: vreg_i32x4_v0: +// powerpc64: #APP +// powerpc64: vmr 0, 0 +// powerpc64: #NO_APP +#[cfg(altivec)] +check_reg!(vreg_i32x4_v0, i32x4, "0", "v0", "vmr"); + +// powerpc_vsx-LABEL: vreg_i64x2_v0: // powerpc_vsx: #APP // powerpc_vsx: vmr 0, 0 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64_v0: +// powerpc64_vsx-LABEL: vreg_i64x2_v0: // powerpc64_vsx: #APP // powerpc64_vsx: vmr 0, 0 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_f64_v0, f64, "0", "v0", "vmr"); +check_reg!(vreg_i64x2_v0, i64x2, "0", "v0", "vmr"); -// powerpc_vsx-LABEL: vreg_f64_v18: +// powerpc_altivec-LABEL: vreg_f32x4_v0: +// powerpc_altivec: #APP +// powerpc_altivec: vmr 0, 0 +// powerpc_altivec: #NO_APP +// powerpc64-LABEL: vreg_f32x4_v0: +// powerpc64: #APP +// powerpc64: vmr 0, 0 +// powerpc64: #NO_APP +#[cfg(altivec)] +check_reg!(vreg_f32x4_v0, f32x4, "0", "v0", "vmr"); + +// powerpc_vsx-LABEL: vreg_f64x2_v0: // powerpc_vsx: #APP -// powerpc_vsx: vmr 18, 18 +// powerpc_vsx: vmr 0, 0 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64_v18: +// powerpc64_vsx-LABEL: vreg_f64x2_v0: // powerpc64_vsx: #APP -// powerpc64_vsx: vmr 18, 18 +// powerpc64_vsx: vmr 0, 0 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_f64_v18, f64, "18", "v18", "vmr"); +check_reg!(vreg_f64x2_v0, f64x2, "0", "v0", "vmr"); -// powerpc_vsx-LABEL: vreg_f64x2_v0: +// powerpc_vsx-LABEL: vreg_f32_v0: // powerpc_vsx: #APP // powerpc_vsx: vmr 0, 0 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64x2_v0: +// powerpc64_vsx-LABEL: vreg_f32_v0: // powerpc64_vsx: #APP // powerpc64_vsx: vmr 0, 0 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_f64x2_v0, f64x2, "0", "v0", "vmr"); +check_reg!(vreg_f32_v0, f32, "0", "v0", "vmr"); -// powerpc_vsx-LABEL: vreg_f64x2_v18: +// powerpc_vsx-LABEL: vreg_f64_v0: // powerpc_vsx: #APP -// powerpc_vsx: vmr 18, 18 +// powerpc_vsx: vmr 0, 0 // powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_f64x2_v18: +// powerpc64_vsx-LABEL: vreg_f64_v0: // powerpc64_vsx: #APP -// powerpc64_vsx: vmr 18, 18 +// powerpc64_vsx: vmr 0, 0 // powerpc64_vsx: #NO_APP #[cfg(vsx)] -check_reg!(vreg_f64x2_v18, f64x2, "18", "v18", "vmr"); +check_reg!(vreg_f64_v0, f64, "0", "v0", "vmr"); -// powerpc_altivec-LABEL: vreg_i16x8_v0: +// powerpc_altivec-LABEL: vreg_i8x16_v18: // powerpc_altivec: #APP -// powerpc_altivec: vmr 0, 0 +// powerpc_altivec: vmr 18, 18 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i16x8_v0: +// powerpc64-LABEL: vreg_i8x16_v18: // powerpc64: #APP -// powerpc64: vmr 0, 0 +// powerpc64: vmr 18, 18 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_i16x8_v0, i16x8, "0", "v0", "vmr"); +check_reg!(vreg_i8x16_v18, i8x16, "18", "v18", "vmr"); // powerpc_altivec-LABEL: vreg_i16x8_v18: // powerpc_altivec: #APP @@ -407,17 +407,6 @@ check_reg!(vreg_i16x8_v0, i16x8, "0", "v0", "vmr"); #[cfg(altivec)] check_reg!(vreg_i16x8_v18, i16x8, "18", "v18", "vmr"); -// powerpc_altivec-LABEL: vreg_i32x4_v0: -// powerpc_altivec: #APP -// powerpc_altivec: vmr 0, 0 -// powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i32x4_v0: -// powerpc64: #APP -// powerpc64: vmr 0, 0 -// powerpc64: #NO_APP -#[cfg(altivec)] -check_reg!(vreg_i32x4_v0, i32x4, "0", "v0", "vmr"); - // powerpc_altivec-LABEL: vreg_i32x4_v18: // powerpc_altivec: #APP // powerpc_altivec: vmr 18, 18 @@ -429,17 +418,6 @@ check_reg!(vreg_i32x4_v0, i32x4, "0", "v0", "vmr"); #[cfg(altivec)] check_reg!(vreg_i32x4_v18, i32x4, "18", "v18", "vmr"); -// powerpc_vsx-LABEL: vreg_i64x2_v0: -// powerpc_vsx: #APP -// powerpc_vsx: vmr 0, 0 -// powerpc_vsx: #NO_APP -// powerpc64_vsx-LABEL: vreg_i64x2_v0: -// powerpc64_vsx: #APP -// powerpc64_vsx: vmr 0, 0 -// powerpc64_vsx: #NO_APP -#[cfg(vsx)] -check_reg!(vreg_i64x2_v0, i64x2, "0", "v0", "vmr"); - // powerpc_vsx-LABEL: vreg_i64x2_v18: // powerpc_vsx: #APP // powerpc_vsx: vmr 18, 18 @@ -451,24 +429,46 @@ check_reg!(vreg_i64x2_v0, i64x2, "0", "v0", "vmr"); #[cfg(vsx)] check_reg!(vreg_i64x2_v18, i64x2, "18", "v18", "vmr"); -// powerpc_altivec-LABEL: vreg_i8x16_v0: -// powerpc_altivec: #APP -// powerpc_altivec: vmr 0, 0 -// powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i8x16_v0: -// powerpc64: #APP -// powerpc64: vmr 0, 0 -// powerpc64: #NO_APP -#[cfg(altivec)] -check_reg!(vreg_i8x16_v0, i8x16, "0", "v0", "vmr"); - -// powerpc_altivec-LABEL: vreg_i8x16_v18: +// powerpc_altivec-LABEL: vreg_f32x4_v18: // powerpc_altivec: #APP // powerpc_altivec: vmr 18, 18 // powerpc_altivec: #NO_APP -// powerpc64-LABEL: vreg_i8x16_v18: +// powerpc64-LABEL: vreg_f32x4_v18: // powerpc64: #APP // powerpc64: vmr 18, 18 // powerpc64: #NO_APP #[cfg(altivec)] -check_reg!(vreg_i8x16_v18, i8x16, "18", "v18", "vmr"); +check_reg!(vreg_f32x4_v18, f32x4, "18", "v18", "vmr"); + +// powerpc_vsx-LABEL: vreg_f64x2_v18: +// powerpc_vsx: #APP +// powerpc_vsx: vmr 18, 18 +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f64x2_v18: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr 18, 18 +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check_reg!(vreg_f64x2_v18, f64x2, "18", "v18", "vmr"); + +// powerpc_vsx-LABEL: vreg_f32_v18: +// powerpc_vsx: #APP +// powerpc_vsx: vmr 18, 18 +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f32_v18: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr 18, 18 +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check_reg!(vreg_f32_v18, f32, "18", "v18", "vmr"); + +// powerpc_vsx-LABEL: vreg_f64_v18: +// powerpc_vsx: #APP +// powerpc_vsx: vmr 18, 18 +// powerpc_vsx: #NO_APP +// powerpc64_vsx-LABEL: vreg_f64_v18: +// powerpc64_vsx: #APP +// powerpc64_vsx: vmr 18, 18 +// powerpc64_vsx: #NO_APP +#[cfg(vsx)] +check_reg!(vreg_f64_v18, f64, "18", "v18", "vmr"); diff --git a/tests/assembly-llvm/asm/riscv-types.rs b/tests/assembly-llvm/asm/riscv-types.rs index 78bb20fa0e373..724aa154da8c0 100644 --- a/tests/assembly-llvm/asm/riscv-types.rs +++ b/tests/assembly-llvm/asm/riscv-types.rs @@ -86,31 +86,29 @@ macro_rules! check_reg { }; } -// CHECK-LABEL: freg_f16: -// zfhmin-NOT: or +// CHECK-LABEL: reg_i8: // CHECK: #APP -// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} +// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -// zfhmin-NOT: or -check!(freg_f16 f16 freg "fmv.s"); +check!(reg_i8 i8 reg "mv"); -// CHECK-LABEL: freg_f32: +// CHECK-LABEL: reg_f16: // CHECK: #APP -// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} +// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(freg_f32 f32 freg "fmv.s"); +check!(reg_f16 f16 reg "mv"); -// CHECK-LABEL: freg_f64: +// CHECK-LABEL: reg_i16: // CHECK: #APP -// CHECK: fmv.d f{{[a-z0-9]+}}, f{{[a-z0-9]+}} +// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(freg_f64 f64 freg "fmv.d"); +check!(reg_i16 i16 reg "mv"); -// CHECK-LABEL: reg_f16: +// CHECK-LABEL: reg_i32: // CHECK: #APP // CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_f16 f16 reg "mv"); +check!(reg_i32 i32 reg "mv"); // CHECK-LABEL: reg_f32: // CHECK: #APP @@ -118,6 +116,13 @@ check!(reg_f16 f16 reg "mv"); // 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]+}} @@ -125,61 +130,49 @@ check!(reg_f32 f32 reg "mv"); #[cfg(riscv64)] check!(reg_f64 f64 reg "mv"); -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_ptr: // CHECK: #APP // CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i16 i16 reg "mv"); +check!(reg_ptr ptr reg "mv"); -// CHECK-LABEL: reg_i32: +// CHECK-LABEL: freg_f16: +// zfhmin-NOT: or // CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i32 i32 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"); +// zfhmin-NOT: or +check!(freg_f16 f16 freg "fmv.s"); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: freg_f32: // CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_i8 i8 reg "mv"); +check!(freg_f32 f32 freg "fmv.s"); -// CHECK-LABEL: reg_ptr: +// CHECK-LABEL: freg_f64: // CHECK: #APP -// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}} +// CHECK: fmv.d f{{[a-z0-9]+}}, f{{[a-z0-9]+}} // CHECK: #NO_APP -check!(reg_ptr ptr reg "mv"); +check!(freg_f64 f64 freg "fmv.d"); -// CHECK-LABEL: a0_f16: +// CHECK-LABEL: a0_i8: // CHECK: #APP // CHECK: mv a0, a0 // CHECK: #NO_APP -check_reg!(a0_f16 f16 "a0" "mv"); +check_reg!(a0_i8 i8 "a0" "mv"); -// CHECK-LABEL: a0_f32: +// CHECK-LABEL: a0_i16: // CHECK: #APP // CHECK: mv a0, a0 // CHECK: #NO_APP -check_reg!(a0_f32 f32 "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_reg!(a0_i16 i16 "a0" "mv"); -// CHECK-LABEL: a0_i16: +// CHECK-LABEL: a0_f16: // CHECK: #APP // CHECK: mv a0, a0 // CHECK: #NO_APP -check_reg!(a0_i16 i16 "a0" "mv"); +check_reg!(a0_f16 f16 "a0" "mv"); // CHECK-LABEL: a0_i32: // CHECK: #APP @@ -187,6 +180,12 @@ check_reg!(a0_i16 i16 "a0" "mv"); // 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 @@ -194,11 +193,12 @@ check_reg!(a0_i32 i32 "a0" "mv"); #[cfg(riscv64)] check_reg!(a0_i64 i64 "a0" "mv"); -// CHECK-LABEL: a0_i8: -// CHECK: #APP -// CHECK: mv a0, a0 -// CHECK: #NO_APP -check_reg!(a0_i8 i8 "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 diff --git a/tests/assembly-llvm/asm/s390x-types.rs b/tests/assembly-llvm/asm/s390x-types.rs index e7e253e517718..e6fe38ecb0df2 100644 --- a/tests/assembly-llvm/asm/s390x-types.rs +++ b/tests/assembly-llvm/asm/s390x-types.rs @@ -43,24 +43,6 @@ extern "C" { static extern_static: u8; } -// CHECK-LABEL: sym_fn_32: -// CHECK: #APP -// CHECK: brasl %r14, extern_func -// CHECK: #NO_APP -#[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); -} - macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { #[no_mangle] pub unsafe fn $func(x: $ty) -> $ty { @@ -79,29 +61,35 @@ macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { } };} -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: sym_fn_32: // CHECK: #APP -// CHECK: ler %f{{[0-9]+}}, %f{{[0-9]+}} +// CHECK: brasl %r14, extern_func // CHECK: #NO_APP -check!(reg_f32, f32, freg, "ler"); +#[no_mangle] +pub unsafe fn sym_fn_32() { + asm!("brasl %r14, {}", sym extern_func); +} -// CHECK-LABEL: reg_f64: +// CHECK-LABEL: sym_static: // CHECK: #APP -// CHECK: ldr %f{{[0-9]+}}, %f{{[0-9]+}} +// CHECK: brasl %r14, extern_static // CHECK: #NO_APP -check!(reg_f64, f64, freg, "ldr"); +#[no_mangle] +pub unsafe fn sym_static() { + asm!("brasl %r14, {}", sym extern_static); +} -// CHECK-LABEL: reg_i16: +// CHECK-LABEL: reg_i8: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16, i16, reg, "lgr"); +check!(reg_i8, i8, reg, "lgr"); -// CHECK-LABEL: reg_i16_addr: +// CHECK-LABEL: reg_i16: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i16_addr, i16, reg_addr, "lgr"); +check!(reg_i16, i16, reg, "lgr"); // CHECK-LABEL: reg_i32: // CHECK: #APP @@ -109,35 +97,47 @@ check!(reg_i16_addr, i16, reg_addr, "lgr"); // CHECK: #NO_APP check!(reg_i32, i32, reg, "lgr"); -// CHECK-LABEL: reg_i32_addr: +// CHECK-LABEL: reg_i64: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i32_addr, i32, reg_addr, "lgr"); +check!(reg_i64, i64, reg, "lgr"); -// CHECK-LABEL: reg_i64: +// CHECK-LABEL: reg_i8_addr: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i64, i64, reg, "lgr"); +check!(reg_i8_addr, i8, reg_addr, "lgr"); -// CHECK-LABEL: reg_i64_addr: +// CHECK-LABEL: reg_i16_addr: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i64_addr, i64, reg_addr, "lgr"); +check!(reg_i16_addr, i16, reg_addr, "lgr"); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: reg_i32_addr: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8, i8, reg, "lgr"); +check!(reg_i32_addr, i32, reg_addr, "lgr"); -// CHECK-LABEL: reg_i8_addr: +// CHECK-LABEL: reg_i64_addr: // CHECK: #APP // CHECK: lgr %r{{[0-9]+}}, %r{{[0-9]+}} // CHECK: #NO_APP -check!(reg_i8_addr, i8, reg_addr, "lgr"); +check!(reg_i64_addr, i64, reg_addr, "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 @@ -145,101 +145,95 @@ check!(reg_i8_addr, i8, reg_addr, "lgr"); // CHECK: #NO_APP check!(reg_ptr, ptr, reg, "lgr"); -// s390x_vector-LABEL: vreg_f128: +// s390x_vector-LABEL: vreg_i8x16: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f128, f128, vreg, "vlr"); +check!(vreg_i8x16, i8x16, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f32: +// s390x_vector-LABEL: vreg_i16x8: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f32, f32, vreg, "vlr"); +check!(vreg_i16x8, i16x8, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f32x4: +// s390x_vector-LABEL: vreg_i32x4: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f32x4, f32x4, vreg, "vlr"); +check!(vreg_i32x4, i32x4, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f64: +// s390x_vector-LABEL: vreg_i64x2: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f64, f64, vreg, "vlr"); +check!(vreg_i64x2, i64x2, vreg, "vlr"); -// s390x_vector-LABEL: vreg_f64x2: +// s390x_vector-LABEL: vreg_f32x4: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_f64x2, f64x2, vreg, "vlr"); +check!(vreg_f32x4, f32x4, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i128: +// s390x_vector-LABEL: vreg_f64x2: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i128, i128, vreg, "vlr"); +check!(vreg_f64x2, f64x2, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i16x8: +// s390x_vector-LABEL: vreg_i32: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i16x8, i16x8, vreg, "vlr"); +check!(vreg_i32, i32, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i32: +// s390x_vector-LABEL: vreg_i64: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i32, i32, vreg, "vlr"); +check!(vreg_i64, i64, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i32x4: +// s390x_vector-LABEL: vreg_i128: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i32x4, i32x4, vreg, "vlr"); +check!(vreg_i128, i128, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i64: +// s390x_vector-LABEL: vreg_f32: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i64, i64, vreg, "vlr"); +check!(vreg_f32, f32, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i64x2: +// s390x_vector-LABEL: vreg_f64: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i64x2, i64x2, vreg, "vlr"); +check!(vreg_f64, f64, vreg, "vlr"); -// s390x_vector-LABEL: vreg_i8x16: +// s390x_vector-LABEL: vreg_f128: // s390x_vector: #APP // s390x_vector: vlr %v{{[0-9]+}}, %v{{[0-9]+}} // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check!(vreg_i8x16, i8x16, vreg, "vlr"); - -// CHECK-LABEL: f0_f32: -// CHECK: #APP -// CHECK: ler %f0, %f0 -// CHECK: #NO_APP -check_reg!(f0_f32, f32, "f0", "ler"); +check!(vreg_f128, f128, vreg, "vlr"); -// CHECK-LABEL: f0_f64: +// CHECK-LABEL: r0_i8: // CHECK: #APP -// CHECK: ldr %f0, %f0 +// CHECK: lr %r0, %r0 // CHECK: #NO_APP -check_reg!(f0_f64, f64, "f0", "ldr"); +check_reg!(r0_i8, i8, "r0", "lr"); // CHECK-LABEL: r0_i16: // CHECK: #APP @@ -259,92 +253,98 @@ check_reg!(r0_i32, i32, "r0", "lr"); // CHECK: #NO_APP check_reg!(r0_i64, i64, "r0", "lr"); -// CHECK-LABEL: r0_i8: +// CHECK-LABEL: f0_f32: // CHECK: #APP -// CHECK: lr %r0, %r0 +// CHECK: ler %f0, %f0 // CHECK: #NO_APP -check_reg!(r0_i8, i8, "r0", "lr"); +check_reg!(f0_f32, f32, "f0", "ler"); -// s390x_vector-LABEL: v0_f128: +// CHECK-LABEL: f0_f64: +// CHECK: #APP +// CHECK: ldr %f0, %f0 +// CHECK: #NO_APP +check_reg!(f0_f64, f64, "f0", "ldr"); + +// s390x_vector-LABEL: v0_i8x16: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f128, f128, "v0", "vlr"); +check_reg!(v0_i8x16, i8x16, "v0", "vlr"); -// s390x_vector-LABEL: v0_f32: +// s390x_vector-LABEL: v0_i16x8: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f32, f32, "v0", "vlr"); +check_reg!(v0_i16x8, i16x8, "v0", "vlr"); -// s390x_vector-LABEL: v0_f32x4: +// s390x_vector-LABEL: v0_i32x4: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f32x4, f32x4, "v0", "vlr"); +check_reg!(v0_i32x4, i32x4, "v0", "vlr"); -// s390x_vector-LABEL: v0_f64: +// s390x_vector-LABEL: v0_i64x2: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f64, f64, "v0", "vlr"); +check_reg!(v0_i64x2, i64x2, "v0", "vlr"); -// s390x_vector-LABEL: v0_f64x2: +// s390x_vector-LABEL: v0_f32x4: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_f64x2, f64x2, "v0", "vlr"); +check_reg!(v0_f32x4, f32x4, "v0", "vlr"); -// s390x_vector-LABEL: v0_i128: +// s390x_vector-LABEL: v0_f64x2: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i128, i128, "v0", "vlr"); +check_reg!(v0_f64x2, f64x2, "v0", "vlr"); -// s390x_vector-LABEL: v0_i16x8: +// s390x_vector-LABEL: v0_i32: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i16x8, i16x8, "v0", "vlr"); +check_reg!(v0_i32, i32, "v0", "vlr"); -// s390x_vector-LABEL: v0_i32: +// s390x_vector-LABEL: v0_i64: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i32, i32, "v0", "vlr"); +check_reg!(v0_i64, i64, "v0", "vlr"); -// s390x_vector-LABEL: v0_i32x4: +// s390x_vector-LABEL: v0_i128: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i32x4, i32x4, "v0", "vlr"); +check_reg!(v0_i128, i128, "v0", "vlr"); -// s390x_vector-LABEL: v0_i64: +// s390x_vector-LABEL: v0_f32: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i64, i64, "v0", "vlr"); +check_reg!(v0_f32, f32, "v0", "vlr"); -// s390x_vector-LABEL: v0_i64x2: +// s390x_vector-LABEL: v0_f64: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i64x2, i64x2, "v0", "vlr"); +check_reg!(v0_f64, f64, "v0", "vlr"); -// s390x_vector-LABEL: v0_i8x16: +// s390x_vector-LABEL: v0_f128: // s390x_vector: #APP // s390x_vector: vlr %v0, %v0 // s390x_vector: #NO_APP #[cfg(s390x_vector)] -check_reg!(v0_i8x16, i8x16, "v0", "vlr"); +check_reg!(v0_f128, f128, "v0", "vlr"); diff --git a/tests/assembly-llvm/asm/sparc-types.rs b/tests/assembly-llvm/asm/sparc-types.rs index 292be00777651..49cc377cd9527 100644 --- a/tests/assembly-llvm/asm/sparc-types.rs +++ b/tests/assembly-llvm/asm/sparc-types.rs @@ -24,6 +24,24 @@ extern "C" { static extern_static: u8; } +macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { + #[no_mangle] + pub unsafe fn $func(x: $ty) -> $ty { + let y; + asm!(concat!($mov," {}, {}"), in($class) x, out($class) y); + y + } +};} + +macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { + #[no_mangle] + pub unsafe fn $func(x: $ty) -> $ty { + let y; + asm!(concat!($mov, " %", $reg, ", %", $reg), in($reg) x, lateout($reg) y); + y + } +};} + // CHECK-LABEL: sym_fn_32: // CHECK: !APP // CHECK-NEXT: call extern_func @@ -42,23 +60,11 @@ pub unsafe fn sym_static() { asm!("call {}", sym extern_static); } -macro_rules! check { ($func:ident, $ty:ty, $class:ident, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!($mov," {}, {}"), in($class) x, out($class) y); - y - } -};} - -macro_rules! check_reg { ($func:ident, $ty:ty, $reg:tt, $mov:literal) => { - #[no_mangle] - pub unsafe fn $func(x: $ty) -> $ty { - let y; - asm!(concat!($mov, " %", $reg, ", %", $reg), in($reg) x, lateout($reg) y); - y - } -};} +// CHECK-LABEL: reg_i8: +// CHECK: !APP +// CHECK-NEXT: mov %{{[goli]}}{{[0-9]+}}, %{{[goli]}}{{[0-9]+}} +// CHECK-NEXT: !NO_APP +check!(reg_i8, i8, reg, "mov"); // CHECK-LABEL: reg_i16: // CHECK: !APP @@ -80,17 +86,17 @@ check!(reg_i32, i32, reg, "mov"); #[cfg(sparc64)] check!(reg_i64, i64, reg, "mov"); -// CHECK-LABEL: reg_i8: +// CHECK-LABEL: reg_ptr: // CHECK: !APP // CHECK-NEXT: mov %{{[goli]}}{{[0-9]+}}, %{{[goli]}}{{[0-9]+}} // CHECK-NEXT: !NO_APP -check!(reg_i8, i8, reg, "mov"); +check!(reg_ptr, ptr, reg, "mov"); -// CHECK-LABEL: reg_ptr: +// CHECK-LABEL: o0_i8: // CHECK: !APP -// CHECK-NEXT: mov %{{[goli]}}{{[0-9]+}}, %{{[goli]}}{{[0-9]+}} +// CHECK-NEXT: mov %o0, %o0 // CHECK-NEXT: !NO_APP -check!(reg_ptr, ptr, reg, "mov"); +check_reg!(o0_i8, i8, "o0", "mov"); // CHECK-LABEL: o0_i16: // CHECK: !APP @@ -112,11 +118,11 @@ check_reg!(o0_i32, i32, "o0", "mov"); #[cfg(sparc64)] check_reg!(o0_i64, i64, "o0", "mov"); -// CHECK-LABEL: o0_i8: +// CHECK-LABEL: r9_i8: // CHECK: !APP -// CHECK-NEXT: mov %o0, %o0 +// CHECK-NEXT: mov %o1, %o1 // CHECK-NEXT: !NO_APP -check_reg!(o0_i8, i8, "o0", "mov"); +check_reg!(r9_i8, i8, "r9", "mov"); // CHECK-LABEL: r9_i16: // CHECK: !APP @@ -137,9 +143,3 @@ check_reg!(r9_i32, i32, "r9", "mov"); // sparc64-NEXT: !NO_APP #[cfg(sparc64)] check_reg!(r9_i64, i64, "r9", "mov"); - -// CHECK-LABEL: r9_i8: -// CHECK: !APP -// CHECK-NEXT: mov %o1, %o1 -// CHECK-NEXT: !NO_APP -check_reg!(r9_i8, i8, "r9", "mov"); diff --git a/tests/assembly-llvm/asm/wasm-types.rs b/tests/assembly-llvm/asm/wasm-types.rs index 4c053a5d84fce..78e555c53173a 100644 --- a/tests/assembly-llvm/asm/wasm-types.rs +++ b/tests/assembly-llvm/asm/wasm-types.rs @@ -50,45 +50,45 @@ macro_rules! check { }; } -// CHECK-LABEL: f32_f32 +// CHECK-LABEL: i8_i32: // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: f32.abs +// CHECK: i32.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(f32_f32 f32 "f32.abs"); +check!(i8_i32 i8 "i32.clz"); -// CHECK-LABEL: f64_f64 +// CHECK-LABEL: i16_i32: // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: f64.abs +// CHECK: i32.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(f64_f64 f64 "f64.abs"); +check!(i16_i32 i16 "i32.clz"); -// CHECK-LABEL: i16_i32: +// CHECK-LABEL: i32_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!(i32_i32 i32 "i32.clz"); -// CHECK-LABEL: i16_i64 +// CHECK-LABEL: i8_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!(i8_i64 i8 "i64.clz"); -// CHECK-LABEL: i32_i32: +// CHECK-LABEL: i16_i64 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i32.clz +// CHECK: i64.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i32_i32 i32 "i32.clz"); +check!(i16_i64 i16 "i64.clz"); // CHECK-LABEL: i32_i64 // CHECK: #APP @@ -98,34 +98,34 @@ check!(i32_i32 i32 "i32.clz"); // CHECK: #NO_APP check!(i32_i64 i32 "i64.clz"); -// CHECK-LABEL: i32_ptr +// CHECK-LABEL: i64_i64 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i32.eqz +// CHECK: i64.clz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i32_ptr ptr "i32.eqz"); +check!(i64_i64 i64 "i64.clz"); -// CHECK-LABEL: i64_i64 +// CHECK-LABEL: f32_f32 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i64.clz +// CHECK: f32.abs // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i64_i64 i64 "i64.clz"); +check!(f32_f32 f32 "f32.abs"); -// CHECK-LABEL: i8_i32: +// CHECK-LABEL: f64_f64 // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i32.clz +// CHECK: f64.abs // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i8_i32 i8 "i32.clz"); +check!(f64_f64 f64 "f64.abs"); -// CHECK-LABEL: i8_i64 +// CHECK-LABEL: i32_ptr // CHECK: #APP // CHECK: local.get {{[0-9]}} -// CHECK: i64.clz +// CHECK: i32.eqz // CHECK: local.set {{[0-9]}} // CHECK: #NO_APP -check!(i8_i64 i8 "i64.clz"); +check!(i32_ptr ptr "i32.eqz"); diff --git a/tests/assembly-llvm/asm/x86-modifiers.rs b/tests/assembly-llvm/asm/x86-modifiers.rs index ef678e75c049e..5f68e5c7317f3 100644 --- a/tests/assembly-llvm/asm/x86-modifiers.rs +++ b/tests/assembly-llvm/asm/x86-modifiers.rs @@ -30,15 +30,6 @@ macro_rules! check { }; } -// 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"); - // CHECK-LABEL: reg: // CHECK: #APP // x86_64: mov rax, rax @@ -46,24 +37,38 @@ check!(kreg "" kreg "kmovb"); // CHECK: #NO_APP check!(reg "" reg "mov"); -// CHECK-LABEL: reg_abcd: +// 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 -// x86_64: mov rax, rax -// i686: mov eax, eax +// CHECK: mov ax, ax // CHECK: #NO_APP -check!(reg_abcd "" reg_abcd "mov"); +check!(reg_x "x" reg "mov"); -// CHECK-LABEL: reg_abcd_e: +// CHECK-LABEL: reg_e: // CHECK: #APP // CHECK: mov eax, eax // CHECK: #NO_APP -check!(reg_abcd_e "e" reg_abcd "mov"); +check!(reg_e "e" reg "mov"); -// CHECK-LABEL: reg_abcd_h: +// 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 -// CHECK: mov ah, ah +// x86_64: mov rax, rax +// i686: mov eax, eax // CHECK: #NO_APP -check!(reg_abcd_h "h" reg_abcd "mov"); +check!(reg_abcd "" reg_abcd "mov"); // CHECK-LABEL: reg_abcd_l: // CHECK: #APP @@ -71,12 +76,11 @@ check!(reg_abcd_h "h" reg_abcd "mov"); // CHECK: #NO_APP check!(reg_abcd_l "l" 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: 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 @@ -84,31 +88,18 @@ check!(reg_abcd_r "r" reg_abcd "mov"); // CHECK: #NO_APP check!(reg_abcd_x "x" reg_abcd "mov"); -// CHECK-LABEL: reg_e: +// CHECK-LABEL: reg_abcd_e: // CHECK: #APP // CHECK: mov eax, eax // CHECK: #NO_APP -check!(reg_e "e" 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!(reg_abcd_e "e" reg_abcd "mov"); -// x86_64-LABEL: reg_r: +// x86_64-LABEL: reg_abcd_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_x: -// CHECK: #APP -// CHECK: mov ax, ax -// CHECK: #NO_APP -check!(reg_x "x" reg "mov"); +check!(reg_abcd_r "r" reg_abcd "mov"); // CHECK-LABEL: xmm_reg // CHECK: #APP @@ -181,3 +172,13 @@ check!(zmm_reg_y "y" zmm_reg "vmovaps"); // 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/tests/assembly-llvm/asm/x86-types.rs b/tests/assembly-llvm/asm/x86-types.rs index b8eea21121664..6120ed0d53275 100644 --- a/tests/assembly-llvm/asm/x86-types.rs +++ b/tests/assembly-llvm/asm/x86-types.rs @@ -123,145 +123,109 @@ macro_rules! check_reg { }; } -// 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_i8: +// CHECK-LABEL: reg_i16: // CHECK: #APP -// CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}} +// 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!(kreg_i8 i8 kreg "kmovb"); +check!(reg_i16 i16 reg "mov"); -// CHECK-LABEL: kreg_ptr: +// CHECK-LABEL: reg_f16: // CHECK: #APP -// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} +// 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!(kreg_ptr ptr kreg "kmovq"); +check!(reg_f16 f16 reg "mov"); -// CHECK-LABEL: reg_abcd_f16: +// 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_abcd_f16 f16 reg_abcd "mov"); +check!(reg_i32 i32 reg "mov"); -// CHECK-LABEL: reg_abcd_f32: +// 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_abcd_f32 f32 reg_abcd "mov"); +check!(reg_f32 f32 reg "mov"); -// x86_64-LABEL: reg_abcd_f64: +// 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_abcd_f64 f64 reg_abcd "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!(reg_i64 i64 reg "mov"); -// x86_64-LABEL: reg_abcd_i64: +// 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_abcd_i64 i64 reg_abcd "mov"); +check!(reg_f64 f64 reg "mov"); -// CHECK-LABEL: reg_abcd_ptr: +// 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_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!(reg_ptr ptr reg "mov"); -// CHECK-LABEL: reg_f16: +// 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_f16 f16 reg "mov"); +check!(reg_abcd_i16 i16 reg_abcd "mov"); -// CHECK-LABEL: reg_f32: +// CHECK-LABEL: reg_abcd_f16: // 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_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!(reg_abcd_f16 f16 reg_abcd "mov"); -// CHECK-LABEL: reg_i16: +// 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_i16 i16 reg "mov"); +check!(reg_abcd_i32 i32 reg_abcd "mov"); -// CHECK-LABEL: reg_i32: +// 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_i32 i32 reg "mov"); +check!(reg_abcd_f32 f32 reg_abcd "mov"); -// x86_64-LABEL: reg_i64: +// 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_i64 i64 reg "mov"); +check!(reg_abcd_i64 i64 reg_abcd "mov"); -// CHECK-LABEL: reg_ptr: +// 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_ptr ptr reg "mov"); +check!(reg_abcd_ptr ptr reg_abcd "mov"); -// CHECK-LABEL: xmm_reg_f128: +// CHECK-LABEL: reg_byte: // CHECK: #APP -// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} +// CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f128 f128 xmm_reg "movaps"); +check!(reg_byte i8 reg_byte "mov"); // CHECK-LABEL: xmm_reg_f16: // CHECK: #APP @@ -269,11 +233,11 @@ check!(xmm_reg_f128 f128 xmm_reg "movaps"); // CHECK: #NO_APP check!(xmm_reg_f16 f16 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_f16x8: +// CHECK-LABEL: xmm_reg_i32: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f16x8 f16x8 xmm_reg "movaps"); +check!(xmm_reg_i32 i32 xmm_reg "movaps"); // CHECK-LABEL: xmm_reg_f32: // CHECK: #APP @@ -281,11 +245,11 @@ check!(xmm_reg_f16x8 f16x8 xmm_reg "movaps"); // CHECK: #NO_APP check!(xmm_reg_f32 f32 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_f32x4: +// CHECK-LABEL: xmm_reg_i64: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps"); +check!(xmm_reg_i64 i64 xmm_reg "movaps"); // CHECK-LABEL: xmm_reg_f64: // CHECK: #APP @@ -293,35 +257,35 @@ check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps"); // CHECK: #NO_APP check!(xmm_reg_f64 f64 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_f64x2: +// CHECK-LABEL: xmm_reg_f128: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps"); +check!(xmm_reg_f128 f128 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i16x8: +// CHECK-LABEL: xmm_reg_ptr: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps"); +check!(xmm_reg_ptr ptr xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i32: +// CHECK-LABEL: xmm_reg_i8x16: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i32 i32 xmm_reg "movaps"); +check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i32x4: +// CHECK-LABEL: xmm_reg_i16x8: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps"); +check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i64: +// CHECK-LABEL: xmm_reg_i32x4: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i64 i64 xmm_reg "movaps"); +check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps"); // CHECK-LABEL: xmm_reg_i64x2: // CHECK: #APP @@ -329,23 +293,23 @@ check!(xmm_reg_i64 i64 xmm_reg "movaps"); // CHECK: #NO_APP check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_i8x16: +// CHECK-LABEL: xmm_reg_f16x8: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps"); +check!(xmm_reg_f16x8 f16x8 xmm_reg "movaps"); -// CHECK-LABEL: xmm_reg_ptr: +// CHECK-LABEL: xmm_reg_f32x4: // CHECK: #APP // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(xmm_reg_ptr ptr xmm_reg "movaps"); +check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps"); -// CHECK-LABEL: ymm_reg_f128: +// CHECK-LABEL: xmm_reg_f64x2: // CHECK: #APP -// CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} +// CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f128 f128 ymm_reg "vmovaps"); +check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps"); // CHECK-LABEL: ymm_reg_f16: // CHECK: #APP @@ -353,95 +317,101 @@ check!(ymm_reg_f128 f128 ymm_reg "vmovaps"); // CHECK: #NO_APP check!(ymm_reg_f16 f16 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f16x16: +// CHECK-LABEL: ymm_reg_i32: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f16x16 f16x16 ymm_reg "vmovaps"); +check!(ymm_reg_i32 i32 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f16x8: +// CHECK-LABEL: ymm_reg_f32: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f16x8 f16x8 ymm_reg "vmovaps"); +check!(ymm_reg_f32 f32 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f32: +// CHECK-LABEL: ymm_reg_i64: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f32 f32 ymm_reg "vmovaps"); +check!(ymm_reg_i64 i64 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f32x4: +// CHECK-LABEL: ymm_reg_f64: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps"); +check!(ymm_reg_f64 f64 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f32x8: +// CHECK-LABEL: ymm_reg_f128: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps"); +check!(ymm_reg_f128 f128 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f64: +// CHECK-LABEL: ymm_reg_ptr: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f64 f64 ymm_reg "vmovaps"); +check!(ymm_reg_ptr ptr ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f64x2: +// CHECK-LABEL: ymm_reg_i8x16: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps"); +check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_f64x4: +// CHECK-LABEL: ymm_reg_i16x8: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps"); +check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i16x16: +// CHECK-LABEL: ymm_reg_i32x4: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps"); +check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i16x8: +// CHECK-LABEL: ymm_reg_i64x2: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps"); +check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i32: +// CHECK-LABEL: ymm_reg_f16x8: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i32 i32 ymm_reg "vmovaps"); +check!(ymm_reg_f16x8 f16x8 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i32x4: +// CHECK-LABEL: ymm_reg_f32x4: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps"); +check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i32x8: +// CHECK-LABEL: ymm_reg_f64x2: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps"); +check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i64: +// CHECK-LABEL: ymm_reg_i8x32: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i64 i64 ymm_reg "vmovaps"); +check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i64x2: +// CHECK-LABEL: ymm_reg_i16x16: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps"); +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 @@ -449,161 +419,167 @@ check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps"); // CHECK: #NO_APP check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i8x16: +// CHECK-LABEL: ymm_reg_f16x16: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps"); +check!(ymm_reg_f16x16 f16x16 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_i8x32: +// CHECK-LABEL: ymm_reg_f32x8: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps"); +check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps"); -// CHECK-LABEL: ymm_reg_ptr: +// CHECK-LABEL: ymm_reg_f64x4: // CHECK: #APP // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}} // CHECK: #NO_APP -check!(ymm_reg_ptr ptr ymm_reg "vmovaps"); +check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f128: +// CHECK-LABEL: zmm_reg_f16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f128 f128 zmm_reg "vmovaps"); +check!(zmm_reg_f16 f16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f16: +// CHECK-LABEL: zmm_reg_i32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f16 f16 zmm_reg "vmovaps"); +check!(zmm_reg_i32 i32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f16x16: +// CHECK-LABEL: zmm_reg_f32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f16x16 f16x16 zmm_reg "vmovaps"); +check!(zmm_reg_f32 f32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f16x32: +// CHECK-LABEL: zmm_reg_i64: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f16x32 f16x32 zmm_reg "vmovaps"); +check!(zmm_reg_i64 i64 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f16x8: +// CHECK-LABEL: zmm_reg_f64: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f16x8 f16x8 zmm_reg "vmovaps"); +check!(zmm_reg_f64 f64 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32: +// CHECK-LABEL: zmm_reg_f128: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32 f32 zmm_reg "vmovaps"); +check!(zmm_reg_f128 f128 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32x16: +// CHECK-LABEL: zmm_reg_ptr: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps"); +check!(zmm_reg_ptr ptr zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32x4: +// CHECK-LABEL: zmm_reg_i8x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps"); +check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f32x8: +// CHECK-LABEL: zmm_reg_i16x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps"); +check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64: +// CHECK-LABEL: zmm_reg_i32x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64 f64 zmm_reg "vmovaps"); +check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64x2: +// CHECK-LABEL: zmm_reg_i64x2: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps"); +check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64x4: +// CHECK-LABEL: zmm_reg_f16x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps"); +check!(zmm_reg_f16x8 f16x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_f64x8: +// CHECK-LABEL: zmm_reg_f32x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps"); +check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i16x16: +// CHECK-LABEL: zmm_reg_f64x2: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps"); +check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i16x32: +// CHECK-LABEL: zmm_reg_i8x32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps"); +check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i16x8: +// CHECK-LABEL: zmm_reg_i16x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps"); +check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32: +// CHECK-LABEL: zmm_reg_i32x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32 i32 zmm_reg "vmovaps"); +check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32x16: +// CHECK-LABEL: zmm_reg_i64x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps"); +check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32x4: +// CHECK-LABEL: zmm_reg_f16x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps"); +check!(zmm_reg_f16x16 f16x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i32x8: +// CHECK-LABEL: zmm_reg_f32x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps"); +check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i64: +// CHECK-LABEL: zmm_reg_f64x4: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i64 i64 zmm_reg "vmovaps"); +check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i64x2: +// CHECK-LABEL: zmm_reg_i8x64: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps"); +check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i64x4: +// CHECK-LABEL: zmm_reg_i16x32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps"); +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 @@ -611,55 +587,53 @@ check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps"); // CHECK: #NO_APP check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i8x16: +// CHECK-LABEL: zmm_reg_f16x32: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps"); +check!(zmm_reg_f16x32 f16x32 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i8x32: +// CHECK-LABEL: zmm_reg_f32x16: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps"); +check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_i8x64: +// CHECK-LABEL: zmm_reg_f64x8: // CHECK: #APP // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps"); +check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps"); -// CHECK-LABEL: zmm_reg_ptr: +// CHECK-LABEL: kreg_i8: // CHECK: #APP -// CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}} +// CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}} // CHECK: #NO_APP -check!(zmm_reg_ptr ptr zmm_reg "vmovaps"); +check!(kreg_i8 i8 kreg "kmovb"); -// i686-LABEL: ah_byte: -// i686: #APP -// i686: mov ah, ah -// i686: #NO_APP -#[cfg(i686)] -check_reg!(ah_byte i8 "ah" "mov"); +// 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: eax_f16: +// CHECK-LABEL: kreg_i32: // CHECK: #APP -// CHECK: mov eax, eax +// CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}} // CHECK: #NO_APP -check_reg!(eax_f16 f16 "eax" "mov"); +check!(kreg_i32 i32 kreg "kmovd"); -// CHECK-LABEL: eax_f32: +// CHECK-LABEL: kreg_i64: // CHECK: #APP -// CHECK: mov eax, eax +// CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}} // CHECK: #NO_APP -check_reg!(eax_f32 f32 "eax" "mov"); +check!(kreg_i64 i64 kreg "kmovq"); -// 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: 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 @@ -667,12 +641,24 @@ check_reg!(eax_f64 f64 "eax" "mov"); // CHECK: #NO_APP check_reg!(eax_i16 i16 "eax" "mov"); +// CHECK-LABEL: eax_f16: +// CHECK: #APP +// CHECK: mov eax, eax +// CHECK: #NO_APP +check_reg!(eax_f16 f16 "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 @@ -680,47 +666,25 @@ check_reg!(eax_i32 i32 "eax" "mov"); #[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"); -// 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_i8: -// CHECK: #APP -// CHECK: kmovb k1, k1 -// CHECK: #NO_APP -check_reg!(k1_i8 i8 "k1" "kmovb"); - -// CHECK-LABEL: k1_ptr: -// CHECK: #APP -// CHECK: kmovq k1, k1 -// CHECK: #NO_APP -check_reg!(k1_ptr ptr "k1" "kmovq"); - -// CHECK-LABEL: xmm0_f128: -// CHECK: #APP -// CHECK: movaps xmm0, xmm0 -// CHECK: #NO_APP -check_reg!(xmm0_f128 f128 "xmm0" "movaps"); +// 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_f16: // CHECK: #APP @@ -728,11 +692,11 @@ check_reg!(xmm0_f128 f128 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(xmm0_f16 f16 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_f16x8: +// CHECK-LABEL: xmm0_i32: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_f16x8 f16x8 "xmm0" "movaps"); +check_reg!(xmm0_i32 i32 "xmm0" "movaps"); // CHECK-LABEL: xmm0_f32: // CHECK: #APP @@ -740,11 +704,11 @@ check_reg!(xmm0_f16x8 f16x8 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(xmm0_f32 f32 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_f32x4: +// CHECK-LABEL: xmm0_i64: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps"); +check_reg!(xmm0_i64 i64 "xmm0" "movaps"); // CHECK-LABEL: xmm0_f64: // CHECK: #APP @@ -752,35 +716,35 @@ check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(xmm0_f64 f64 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_f64x2: +// CHECK-LABEL: xmm0_f128: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps"); +check_reg!(xmm0_f128 f128 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i16x8: +// CHECK-LABEL: xmm0_ptr: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps"); +check_reg!(xmm0_ptr ptr "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i32: +// CHECK-LABEL: xmm0_i8x16: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i32 i32 "xmm0" "movaps"); +check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i32x4: +// CHECK-LABEL: xmm0_i16x8: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps"); +check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i64: +// CHECK-LABEL: xmm0_i32x4: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i64 i64 "xmm0" "movaps"); +check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps"); // CHECK-LABEL: xmm0_i64x2: // CHECK: #APP @@ -788,23 +752,23 @@ check_reg!(xmm0_i64 i64 "xmm0" "movaps"); // CHECK: #NO_APP check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_i8x16: +// CHECK-LABEL: xmm0_f16x8: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps"); +check_reg!(xmm0_f16x8 f16x8 "xmm0" "movaps"); -// CHECK-LABEL: xmm0_ptr: +// CHECK-LABEL: xmm0_f32x4: // CHECK: #APP // CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(xmm0_ptr ptr "xmm0" "movaps"); +check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps"); -// CHECK-LABEL: ymm0_f128: +// CHECK-LABEL: xmm0_f64x2: // CHECK: #APP -// CHECK: vmovaps ymm0, ymm0 +// CHECK: movaps xmm0, xmm0 // CHECK: #NO_APP -check_reg!(ymm0_f128 f128 "ymm0" "vmovaps"); +check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps"); // CHECK-LABEL: ymm0_f16: // CHECK: #APP @@ -812,95 +776,101 @@ check_reg!(ymm0_f128 f128 "ymm0" "vmovaps"); // CHECK: #NO_APP check_reg!(ymm0_f16 f16 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f16x16: +// CHECK-LABEL: ymm0_i32: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f16x16 f16x16 "ymm0" "vmovaps"); +check_reg!(ymm0_i32 i32 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f16x8: +// CHECK-LABEL: ymm0_f32: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f16x8 f16x8 "ymm0" "vmovaps"); +check_reg!(ymm0_f32 f32 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f32: +// CHECK-LABEL: ymm0_i64: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f32 f32 "ymm0" "vmovaps"); +check_reg!(ymm0_i64 i64 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f32x4: +// CHECK-LABEL: ymm0_f64: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps"); +check_reg!(ymm0_f64 f64 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f32x8: +// CHECK-LABEL: ymm0_f128: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps"); +check_reg!(ymm0_f128 f128 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f64: +// CHECK-LABEL: ymm0_ptr: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f64 f64 "ymm0" "vmovaps"); +check_reg!(ymm0_ptr ptr "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f64x2: +// CHECK-LABEL: ymm0_i8x16: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps"); +check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_f64x4: +// CHECK-LABEL: ymm0_i16x8: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps"); +check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i16x16: +// CHECK-LABEL: ymm0_i32x4: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps"); +check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i16x8: +// CHECK-LABEL: ymm0_i64x2: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps"); +check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i32: +// CHECK-LABEL: ymm0_f16x8: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i32 i32 "ymm0" "vmovaps"); +check_reg!(ymm0_f16x8 f16x8 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i32x4: +// CHECK-LABEL: ymm0_f32x4: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps"); +check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i32x8: +// CHECK-LABEL: ymm0_f64x2: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps"); +check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i64: +// CHECK-LABEL: ymm0_i8x32: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i64 i64 "ymm0" "vmovaps"); +check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i64x2: +// CHECK-LABEL: ymm0_i16x16: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps"); +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 @@ -908,161 +878,167 @@ check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps"); // CHECK: #NO_APP check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i8x16: +// CHECK-LABEL: ymm0_f16x16: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps"); +check_reg!(ymm0_f16x16 f16x16 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_i8x32: +// CHECK-LABEL: ymm0_f32x8: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps"); +check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps"); -// CHECK-LABEL: ymm0_ptr: +// CHECK-LABEL: ymm0_f64x4: // CHECK: #APP // CHECK: vmovaps ymm0, ymm0 // CHECK: #NO_APP -check_reg!(ymm0_ptr ptr "ymm0" "vmovaps"); +check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps"); -// CHECK-LABEL: zmm0_f128: +// CHECK-LABEL: zmm0_f16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f128 f128 "zmm0" "vmovaps"); +check_reg!(zmm0_f16 f16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f16: +// CHECK-LABEL: zmm0_i32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f16 f16 "zmm0" "vmovaps"); +check_reg!(zmm0_i32 i32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f16x16: +// CHECK-LABEL: zmm0_f32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f16x16 f16x16 "zmm0" "vmovaps"); +check_reg!(zmm0_f32 f32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f16x32: +// CHECK-LABEL: zmm0_i64: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f16x32 f16x32 "zmm0" "vmovaps"); +check_reg!(zmm0_i64 i64 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f16x8: +// CHECK-LABEL: zmm0_f64: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f16x8 f16x8 "zmm0" "vmovaps"); +check_reg!(zmm0_f64 f64 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32: +// CHECK-LABEL: zmm0_f128: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32 f32 "zmm0" "vmovaps"); +check_reg!(zmm0_f128 f128 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32x16: +// CHECK-LABEL: zmm0_ptr: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps"); +check_reg!(zmm0_ptr ptr "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32x4: +// CHECK-LABEL: zmm0_i8x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps"); +check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f32x8: +// CHECK-LABEL: zmm0_i16x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps"); +check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64: +// CHECK-LABEL: zmm0_i32x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f64 f64 "zmm0" "vmovaps"); +check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64x2: +// CHECK-LABEL: zmm0_i64x2: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps"); +check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64x4: +// CHECK-LABEL: zmm0_f16x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps"); +check_reg!(zmm0_f16x8 f16x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_f64x8: +// CHECK-LABEL: zmm0_f32x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps"); +check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i16x16: +// CHECK-LABEL: zmm0_f64x2: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps"); +check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i16x32: +// CHECK-LABEL: zmm0_i8x32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps"); +check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i16x8: +// CHECK-LABEL: zmm0_i16x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps"); +check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32: +// CHECK-LABEL: zmm0_i32x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32 i32 "zmm0" "vmovaps"); +check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32x16: +// CHECK-LABEL: zmm0_i64x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps"); +check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32x4: +// CHECK-LABEL: zmm0_f16x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps"); +check_reg!(zmm0_f16x16 f16x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i32x8: +// CHECK-LABEL: zmm0_f32x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps"); +check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i64: +// CHECK-LABEL: zmm0_f64x4: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i64 i64 "zmm0" "vmovaps"); +check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i64x2: +// CHECK-LABEL: zmm0_i8x64: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps"); +check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i64x4: +// CHECK-LABEL: zmm0_i16x32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps"); +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 @@ -1070,26 +1046,50 @@ check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps"); // CHECK: #NO_APP check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i8x16: +// CHECK-LABEL: zmm0_f16x32: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps"); +check_reg!(zmm0_f16x32 f16x32 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i8x32: +// CHECK-LABEL: zmm0_f32x16: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps"); +check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_i8x64: +// CHECK-LABEL: zmm0_f64x8: // CHECK: #APP // CHECK: vmovaps zmm0, zmm0 // CHECK: #NO_APP -check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps"); +check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps"); -// CHECK-LABEL: zmm0_ptr: +// CHECK-LABEL: k1_i8: // CHECK: #APP -// CHECK: vmovaps zmm0, zmm0 +// CHECK: kmovb k1, k1 // CHECK: #NO_APP -check_reg!(zmm0_ptr ptr "zmm0" "vmovaps"); +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"); From 88c71df161b8902eeea18a9ace5ca411f43ebbe3 Mon Sep 17 00:00:00 2001 From: ywxt Date: Mon, 4 Aug 2025 11:16:33 +0800 Subject: [PATCH 09/13] Fix fmt. --- compiler/rustc_middle/src/mir/mono.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index 72483605b0e8f..6550eafaa7850 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -558,7 +558,9 @@ impl<'tcx> CodegenUnit<'tcx> { } fn item_sort_key<'tcx>(tcx: TyCtxt<'tcx>, item: MonoItem<'tcx>) -> ItemSortKey<'tcx> { ItemSortKey( - local_item_id(item).map(|def_id| tcx.def_span(def_id).find_ancestor_not_from_macro()).flatten(), + local_item_id(item) + .map(|def_id| tcx.def_span(def_id).find_ancestor_not_from_macro()) + .flatten(), local_item_id(item).map(|def_id| tcx.def_path(def_id).to_string_no_crate_verbose()), item.symbol_name(tcx), ) From c0775a0868b165539041bf951ad109e8282e767f Mon Sep 17 00:00:00 2001 From: ywxt Date: Mon, 4 Aug 2025 11:28:56 +0800 Subject: [PATCH 10/13] Remove DefPath --- compiler/rustc_middle/src/mir/mono.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index 6550eafaa7850..e16f3dc4ce309 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -525,10 +525,9 @@ impl<'tcx> CodegenUnit<'tcx> { tcx: TyCtxt<'tcx>, ) -> Vec<(MonoItem<'tcx>, MonoItemData)> { // The codegen tests rely on items being process in the same order as - // they appear in the file, so for local items, we sort by span and - // def_path first + // they appear in the file, so for local items, we sort by span first #[derive(PartialEq, Eq, PartialOrd, Ord)] - struct ItemSortKey<'tcx>(Option, Option, SymbolName<'tcx>); + struct ItemSortKey<'tcx>(Option, SymbolName<'tcx>); // We only want to take HirIds of user-defines instances into account. // The others don't matter for the codegen tests and can even make item @@ -561,7 +560,6 @@ impl<'tcx> CodegenUnit<'tcx> { local_item_id(item) .map(|def_id| tcx.def_span(def_id).find_ancestor_not_from_macro()) .flatten(), - local_item_id(item).map(|def_id| tcx.def_path(def_id).to_string_no_crate_verbose()), item.symbol_name(tcx), ) } From dd0772bbb91578127ccd55f0838f5296e7908950 Mon Sep 17 00:00:00 2001 From: ywxt Date: Tue, 5 Aug 2025 09:23:18 +0800 Subject: [PATCH 11/13] Bless to intrinsics tests. --- .../bad-intrinsic-monomorphization.stderr | 16 ++-- tests/ui/intrinsics/non-integer-atomic.stderr | 88 +++++++++---------- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/tests/ui/intrinsics/bad-intrinsic-monomorphization.stderr b/tests/ui/intrinsics/bad-intrinsic-monomorphization.stderr index f49d95e9cfcbe..51ef71c9e2988 100644 --- a/tests/ui/intrinsics/bad-intrinsic-monomorphization.stderr +++ b/tests/ui/intrinsics/bad-intrinsic-monomorphization.stderr @@ -1,8 +1,8 @@ -error[E0511]: invalid monomorphization of `cttz` intrinsic: expected basic integer type, found `Foo` - --> $DIR/bad-intrinsic-monomorphization.rs:16:5 +error[E0511]: invalid monomorphization of `simd_add` intrinsic: expected SIMD input type, found non-SIMD `Foo` + --> $DIR/bad-intrinsic-monomorphization.rs:26:5 | -LL | intrinsics::cttz(v) - | ^^^^^^^^^^^^^^^^^^^ +LL | intrinsics::simd::simd_add(a, b) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0511]: invalid monomorphization of `fadd_fast` intrinsic: expected basic float type, found `Foo` --> $DIR/bad-intrinsic-monomorphization.rs:21:5 @@ -10,11 +10,11 @@ error[E0511]: invalid monomorphization of `fadd_fast` intrinsic: expected basic LL | intrinsics::fadd_fast(a, b) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `simd_add` intrinsic: expected SIMD input type, found non-SIMD `Foo` - --> $DIR/bad-intrinsic-monomorphization.rs:26:5 +error[E0511]: invalid monomorphization of `cttz` intrinsic: expected basic integer type, found `Foo` + --> $DIR/bad-intrinsic-monomorphization.rs:16:5 | -LL | intrinsics::simd::simd_add(a, b) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | intrinsics::cttz(v) + | ^^^^^^^^^^^^^^^^^^^ error: aborting due to 3 previous errors diff --git a/tests/ui/intrinsics/non-integer-atomic.stderr b/tests/ui/intrinsics/non-integer-atomic.stderr index e539d99b8aebd..8589dae76bbf3 100644 --- a/tests/ui/intrinsics/non-integer-atomic.stderr +++ b/tests/ui/intrinsics/non-integer-atomic.stderr @@ -1,59 +1,53 @@ -error[E0511]: invalid monomorphization of `atomic_load` intrinsic: expected basic integer type, found `bool` - --> $DIR/non-integer-atomic.rs:15:5 +error[E0511]: invalid monomorphization of `atomic_load` intrinsic: expected basic integer type, found `&dyn Fn()` + --> $DIR/non-integer-atomic.rs:55:5 | LL | intrinsics::atomic_load::<_, { SeqCst }>(p); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_store` intrinsic: expected basic integer type, found `bool` - --> $DIR/non-integer-atomic.rs:20:5 +error[E0511]: invalid monomorphization of `atomic_load` intrinsic: expected basic integer type, found `Foo` + --> $DIR/non-integer-atomic.rs:35:5 + | +LL | intrinsics::atomic_load::<_, { SeqCst }>(p); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0511]: invalid monomorphization of `atomic_store` intrinsic: expected basic integer type, found `&dyn Fn()` + --> $DIR/non-integer-atomic.rs:60:5 | LL | intrinsics::atomic_store::<_, { SeqCst }>(p, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_xchg` intrinsic: expected basic integer type, found `bool` - --> $DIR/non-integer-atomic.rs:25:5 +error[E0511]: invalid monomorphization of `atomic_xchg` intrinsic: expected basic integer type, found `[u8; 100]` + --> $DIR/non-integer-atomic.rs:85:5 | LL | intrinsics::atomic_xchg::<_, { SeqCst }>(p, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `bool` - --> $DIR/non-integer-atomic.rs:30:5 +error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `&dyn Fn()` + --> $DIR/non-integer-atomic.rs:70:5 | LL | intrinsics::atomic_cxchg::<_, { SeqCst }, { SeqCst }>(p, v, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_load` intrinsic: expected basic integer type, found `Foo` - --> $DIR/non-integer-atomic.rs:35:5 - | -LL | intrinsics::atomic_load::<_, { SeqCst }>(p); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - error[E0511]: invalid monomorphization of `atomic_store` intrinsic: expected basic integer type, found `Foo` --> $DIR/non-integer-atomic.rs:40:5 | LL | intrinsics::atomic_store::<_, { SeqCst }>(p, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_xchg` intrinsic: expected basic integer type, found `Foo` - --> $DIR/non-integer-atomic.rs:45:5 - | -LL | intrinsics::atomic_xchg::<_, { SeqCst }>(p, v); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `Foo` - --> $DIR/non-integer-atomic.rs:50:5 +error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `[u8; 100]` + --> $DIR/non-integer-atomic.rs:90:5 | LL | intrinsics::atomic_cxchg::<_, { SeqCst }, { SeqCst }>(p, v, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_load` intrinsic: expected basic integer type, found `&dyn Fn()` - --> $DIR/non-integer-atomic.rs:55:5 +error[E0511]: invalid monomorphization of `atomic_store` intrinsic: expected basic integer type, found `[u8; 100]` + --> $DIR/non-integer-atomic.rs:80:5 | -LL | intrinsics::atomic_load::<_, { SeqCst }>(p); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | intrinsics::atomic_store::<_, { SeqCst }>(p, v); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_store` intrinsic: expected basic integer type, found `&dyn Fn()` - --> $DIR/non-integer-atomic.rs:60:5 +error[E0511]: invalid monomorphization of `atomic_store` intrinsic: expected basic integer type, found `bool` + --> $DIR/non-integer-atomic.rs:20:5 | LL | intrinsics::atomic_store::<_, { SeqCst }>(p, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -64,36 +58,42 @@ error[E0511]: invalid monomorphization of `atomic_xchg` intrinsic: expected basi LL | intrinsics::atomic_xchg::<_, { SeqCst }>(p, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `&dyn Fn()` - --> $DIR/non-integer-atomic.rs:70:5 - | -LL | intrinsics::atomic_cxchg::<_, { SeqCst }, { SeqCst }>(p, v, v); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - error[E0511]: invalid monomorphization of `atomic_load` intrinsic: expected basic integer type, found `[u8; 100]` --> $DIR/non-integer-atomic.rs:75:5 | LL | intrinsics::atomic_load::<_, { SeqCst }>(p); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_store` intrinsic: expected basic integer type, found `[u8; 100]` - --> $DIR/non-integer-atomic.rs:80:5 +error[E0511]: invalid monomorphization of `atomic_load` intrinsic: expected basic integer type, found `bool` + --> $DIR/non-integer-atomic.rs:15:5 | -LL | intrinsics::atomic_store::<_, { SeqCst }>(p, v); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | intrinsics::atomic_load::<_, { SeqCst }>(p); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_xchg` intrinsic: expected basic integer type, found `[u8; 100]` - --> $DIR/non-integer-atomic.rs:85:5 +error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `bool` + --> $DIR/non-integer-atomic.rs:30:5 | -LL | intrinsics::atomic_xchg::<_, { SeqCst }>(p, v); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | intrinsics::atomic_cxchg::<_, { SeqCst }, { SeqCst }>(p, v, v); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `[u8; 100]` - --> $DIR/non-integer-atomic.rs:90:5 +error[E0511]: invalid monomorphization of `atomic_cxchg` intrinsic: expected basic integer type, found `Foo` + --> $DIR/non-integer-atomic.rs:50:5 | LL | intrinsics::atomic_cxchg::<_, { SeqCst }, { SeqCst }>(p, v, v); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +error[E0511]: invalid monomorphization of `atomic_xchg` intrinsic: expected basic integer type, found `Foo` + --> $DIR/non-integer-atomic.rs:45:5 + | +LL | intrinsics::atomic_xchg::<_, { SeqCst }>(p, v); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0511]: invalid monomorphization of `atomic_xchg` intrinsic: expected basic integer type, found `bool` + --> $DIR/non-integer-atomic.rs:25:5 + | +LL | intrinsics::atomic_xchg::<_, { SeqCst }>(p, v); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + error: aborting due to 16 previous errors For more information about this error, try `rustc --explain E0511`. From 9e4f2966a878d9b8b09c10e76ff92eb01a18e545 Mon Sep 17 00:00:00 2001 From: ywxt Date: Wed, 6 Aug 2025 09:45:29 +0800 Subject: [PATCH 12/13] Add `-Zcodegen-source-order` for linkage external tests. --- .../linkage-detect-extern-generated-name-collision.rs | 7 +++++-- .../linkage-detect-local-generated-name-collision.rs | 5 ++++- .../linkage-detect-local-generated-name-collision.stderr | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs b/tests/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs index 23848056ee1aa..359e48e5da238 100644 --- a/tests/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs +++ b/tests/ui/linkage-attr/linkage-detect-extern-generated-name-collision.rs @@ -5,7 +5,10 @@ //@ build-fail //@ aux-build:def_colliding_external.rs // FIXME(#83838) codegen-units=1 triggers llvm asserts -//@ compile-flags: -Ccodegen-units=16 +// FIXME(#144940) `-Zcodegen-source-order` avoids `_rust_extern_with_linkage_collision` +// sorted after the main, otherwise it causes an ICE. Remove this option +// once this issue fixed. +//@ compile-flags: -Ccodegen-units=16 -Zcodegen-source-order extern crate def_colliding_external as dep1; @@ -19,7 +22,7 @@ mod dep2 { fn main() { unsafe { - println!("{:p}", &dep1::collision); + println!("{:p}", &dep1::collision); } } diff --git a/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs b/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs index df952504eef7a..1454a93d27616 100644 --- a/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs +++ b/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.rs @@ -1,6 +1,9 @@ //@ build-fail // FIXME(#83838) codegen-units=1 triggers llvm asserts -//@ compile-flags: -Ccodegen-units=16 +// FIXME(#144940) `-Zcodegen-source-order` avoids `_rust_extern_with_linkage_collision` +// sorted after the main, otherwise it causes an ICE. Remove this option +// once this issue fixed. +//@ compile-flags: -Ccodegen-units=16 -Zcodegen-source-order #![feature(linkage)] mod dep1 { diff --git a/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr b/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr index fcaaa39b6744e..7d2025e1feceb 100644 --- a/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr +++ b/tests/ui/linkage-attr/linkage-detect-local-generated-name-collision.stderr @@ -1,5 +1,5 @@ error: symbol `collision` is already defined - --> $DIR/linkage-detect-local-generated-name-collision.rs:10:9 + --> $DIR/linkage-detect-local-generated-name-collision.rs:13:9 | LL | pub static collision: *const i32; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 8a0237196a3a67bb0155156a940730dfbedbd00f Mon Sep 17 00:00:00 2001 From: ywxt Date: Wed, 6 Aug 2025 10:07:36 +0800 Subject: [PATCH 13/13] Improve doc. --- .../src/compiler-flags/codegen-source-order.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/doc/unstable-book/src/compiler-flags/codegen-source-order.md b/src/doc/unstable-book/src/compiler-flags/codegen-source-order.md index a55e0984e63b3..cb019fe0176cb 100644 --- a/src/doc/unstable-book/src/compiler-flags/codegen-source-order.md +++ b/src/doc/unstable-book/src/compiler-flags/codegen-source-order.md @@ -3,15 +3,10 @@ --- This feature allows you to have a predictive and -deterministic order for items after codegen. +deterministic order for items after codegen, which +is the same as in source code. For every `CodegenUnit`, local `MonoItem`s would -be sorted by `(Span, DefPath, SymbolName)`, which +be sorted by `(Span, SymbolName)`, which makes codegen tests rely on the order of items in source files work. - -Note: If you would like to use it, you have to -manually sort items that are generated by a macro -in lexicographical order in source files, because -of the same spans owned by all items of a macro. -So we have to distinguish them by `DefPath`s.