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}