Skip to content

Commit

Permalink
Update asm to use the new format for inline assembly.
Browse files Browse the repository at this point in the history
  • Loading branch information
jlb6740 committed Jul 26, 2020
1 parent 7564a33 commit 76d2a9b
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
8 changes: 6 additions & 2 deletions src/cpucounter.c
Expand Up @@ -4,14 +4,18 @@
uint64_t cpucounter(void)
{
uint64_t low, high;
__asm__ __volatile__ ("rdtscp" : "=a" (low), "=d" (high) : : "%ecx");
__asm__ __volatile__("rdtscp"
: "=a"(low), "=d"(high)
:
: "%ecx");
return (high << 32) | low;
}
#elif defined(__aarch64__)
uint64_t cpucounter(void)
{
uint64_t virtual_timer_value;
__asm__ __volatile__ ("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
__asm__ __volatile__("mrs %0, cntvct_el0"
: "=r"(virtual_timer_value));
return virtual_timer_value;
}
#endif
7 changes: 3 additions & 4 deletions src/cpucounter.rs
Expand Up @@ -6,18 +6,17 @@ pub(crate) struct CPUCounter;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
unsafe fn cpucounter() -> u64 {
let (low, high): (u64, u64);
asm!("rdtscp" : "={eax}" (low), "={edx}" (high) : : "ecx");
//asm!("rdtscp" : "={eax}" (low), "={edx}" (high) : : "ecx");
asm!("rdtscp", out(rax) low, out(rdx) high, out(rcx) _);
(high << 32) | low
}


// https://github.com/google/benchmark/blob/v1.1.0/src/cycleclock.h#L116
#[cfg(asm)]
#[inline]
#[cfg(any(target_arch = "aarch64"))]
unsafe fn cpucounter() -> u64 {
let (vtm): (u64);
asm!("mrs %0, cntvct_el0" : "=r"(vtm));
asm!("mrs {}, cntvct_el0", out(reg) vtm);
vtm
}

Expand Down

0 comments on commit 76d2a9b

Please sign in to comment.