| //@ only-aarch64 |
| //@ run-pass |
| //@ needs-asm-support |
| |
| 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)); |