use crate::{Arch, cfg_if};
#[cfg(any_target_arch_linux)]
#[cfg_attr(
nightly_doc,
doc(cfg(any(
target_arch = "x86",
target_arch = "x86_64",
target_arch = "arm",
target_arch = "aarch64",
target_arch = "riscv32",
target_arch = "riscv64",
)))
)]
impl Arch {
#[inline(always)]
pub fn cycles() -> u64 {
cfg_if! {
if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
Arch::rdtsc()
} else if #[cfg(target_arch = "arm")] {
Arch::cntvct()
} else if #[cfg(target_arch = "aarch64")] {
Arch::cntvct()
} else if #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))] {
Arch::rdcycle().into()
} else {
compile_error!("Cycle counter not implemented for this architecture");
}
}
}
}