mirror of
				https://git.proxmox.com/git/rustc
				synced 2025-11-04 03:23:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			649 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			649 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// run-pass
 | 
						|
// needs-asm-support
 | 
						|
// only-x86_64
 | 
						|
 | 
						|
// Checks that multiple clobber_abi options can be used
 | 
						|
 | 
						|
use std::arch::asm;
 | 
						|
 | 
						|
extern "sysv64" fn foo(x: i32) -> i32 {
 | 
						|
    x + 16
 | 
						|
}
 | 
						|
 | 
						|
extern "win64" fn bar(x: i32) -> i32 {
 | 
						|
    x / 2
 | 
						|
}
 | 
						|
 | 
						|
fn main() {
 | 
						|
    let x = 8;
 | 
						|
    let y: i32;
 | 
						|
    // call `foo` with `x` as the input, and then `bar` with the output of `foo`
 | 
						|
    // and output that to `y`
 | 
						|
    unsafe {
 | 
						|
        asm!(
 | 
						|
            "call {}; mov rcx, rax; call {}",
 | 
						|
            sym foo,
 | 
						|
            sym bar,
 | 
						|
            in("rdi") x,
 | 
						|
            out("rax") y,
 | 
						|
            clobber_abi("sysv64", "win64"),
 | 
						|
        );
 | 
						|
    }
 | 
						|
    assert_eq!((x, y), (8, 12));
 | 
						|
}
 |