1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//! intrinsics of x86_64 not included in [`core::arch::x86_64`].
//!
//! [`core::arch::x86_64`]: https://doc.rust-lang.org/beta/core/arch/x86_64/index.html
use core::arch::asm;

/// Get cpuid of this core.
pub fn cpuid() -> usize {
    unsafe { (core::arch::x86_64::__cpuid(1).ebx >> 24) as usize }
}

/// read current cr3.
pub fn read_cr3() -> usize {
    unsafe {
        let r: u64;
        asm!("mov {}, cr3", out(reg) r);
        r as usize
    }
}