abyss/x86_64/
intrinsics.rs

1//! Intrinsics of x86_64 not included in [`core::arch::x86_64`].
2//!
3//! [`core::arch::x86_64`]: https://doc.rust-lang.org/beta/core/arch/x86_64/index.html
4use core::arch::asm;
5
6/// Get cpuid of this core.
7pub fn cpuid() -> usize {
8    unsafe { (core::arch::x86_64::__cpuid(1).ebx >> 24) as usize }
9}
10
11/// read current cr3.
12pub fn read_cr3() -> usize {
13    unsafe {
14        let r: u64;
15        asm!("mov {}, cr3", out(reg) r);
16        r as usize
17    }
18}