1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
#![no_std] #![feature(asm)] #[no_mangle] #[inline(never)] #[cfg(target_arch = "x86_64")] pub fn ticks() -> u64 { let mask = 0x00000000FFFFFFFFu64; let high: u64; let low: u64; unsafe { asm!("lfence;rdtsc" : "={rdx}"(high), "={rax}"(low) : : "rdx", "rax" : "volatile" ); } (mask&high) | (mask&low) } #[no_mangle] #[inline(never)] #[cfg(target_arch = "x86")] pub fn ticks() -> u64 { let high: u32; let low: u32; unsafe { asm!("lfence;rdtsc" : "={edx}"(high), "={eax}"(low) : : "edx", "eax" : "volatile" ); } let high_val = (high as u64) << 32; let low_val = low as u64; high_val|low_val }