about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorAmanieu d'Antras <amanieu@gmail.com>2021-04-04 08:09:56 +0100
committerAmanieu d'Antras <amanieu@gmail.com>2021-04-04 10:42:32 +0100
commitddc53f809b89001c08296b5b49fe1fcad1e566d5 (patch)
tree064fd17eabd790a99427a207b22ac20434c7b598 /src/test
parentcbd6ec760453b333e86aac106f47fe9132498924 (diff)
downloadrust-ddc53f809b89001c08296b5b49fe1fcad1e566d5.tar.gz
rust-ddc53f809b89001c08296b5b49fe1fcad1e566d5.zip
Allow clobbering unsupported registers in asm!
Previously registers could only be marked as clobbered if the target feature for that register was enabled. This restriction is now removed.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/codegen/asm-target-clobbers.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/test/codegen/asm-target-clobbers.rs b/src/test/codegen/asm-target-clobbers.rs
new file mode 100644
index 00000000000..f637cdcd234
--- /dev/null
+++ b/src/test/codegen/asm-target-clobbers.rs
@@ -0,0 +1,21 @@
+// only-x86_64
+// revisions: base avx512
+// [avx512]compile-flags: -C target-feature=+avx512f
+
+#![crate_type = "rlib"]
+#![feature(asm)]
+
+// CHECK-LABEL: @avx512_clobber
+// base: call void asm sideeffect inteldialect "", "~{xmm31}"()
+// avx512: call float asm sideeffect inteldialect "", "=&{xmm31}"()
+#[no_mangle]
+pub unsafe fn avx512_clobber() {
+    asm!("", out("zmm31") _, options(nostack, nomem, preserves_flags));
+}
+
+// CHECK-LABEL: @eax_clobber
+// CHECK: call i32 asm sideeffect inteldialect "", "=&{ax}"()
+#[no_mangle]
+pub unsafe fn eax_clobber() {
+    asm!("", out("eax") _, options(nostack, nomem, preserves_flags));
+}