summaryrefslogtreecommitdiffstats
path: root/src/test/ui/asm/aarch64/const.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/asm/aarch64/const.rs')
-rw-r--r--src/test/ui/asm/aarch64/const.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/test/ui/asm/aarch64/const.rs b/src/test/ui/asm/aarch64/const.rs
new file mode 100644
index 000000000..de299bfdb
--- /dev/null
+++ b/src/test/ui/asm/aarch64/const.rs
@@ -0,0 +1,44 @@
+// only-aarch64
+// run-pass
+// needs-asm-support
+// revisions: mirunsafeck thirunsafeck
+// [thirunsafeck]compile-flags: -Z thir-unsafeck
+
+#![feature(asm_const)]
+
+use std::arch::{asm, global_asm};
+
+fn const_generic<const X: usize>() -> usize {
+ unsafe {
+ let a: usize;
+ asm!("mov {}, {}", out(reg) a, const X);
+ a
+ }
+}
+
+const fn constfn(x: usize) -> usize {
+ x
+}
+
+fn main() {
+ unsafe {
+ let a: usize;
+ asm!("mov {}, {}", out(reg) a, const 5);
+ assert_eq!(a, 5);
+
+ let b: usize;
+ asm!("mov {}, {}", out(reg) b, const constfn(5));
+ assert_eq!(b, 5);
+
+ let c: usize;
+ asm!("mov {}, {}", out(reg) c, const constfn(5) + constfn(5));
+ assert_eq!(c, 10);
+ }
+
+ let d = const_generic::<5>();
+ assert_eq!(d, 5);
+}
+
+global_asm!("mov x0, {}", const 5);
+global_asm!("mov x0, {}", const constfn(5));
+global_asm!("mov x0, {}", const constfn(5) + constfn(5));