Do not use explicit register fo x86_64 table operations

This commit is contained in:
Jeremy Soller
2020-09-06 14:20:29 -06:00
parent 379294b59f
commit a40b26293b
2 changed files with 6 additions and 8 deletions
+4 -1
View File
@@ -51,7 +51,10 @@ pub trait Arch {
unsafe fn invalidate(address: VirtualAddress);
unsafe fn invalidate_all();
#[inline(always)]
unsafe fn invalidate_all() {
Self::set_table(Self::table());
}
unsafe fn table() -> PhysicalAddress;
+2 -7
View File
@@ -30,21 +30,16 @@ impl Arch for X8664Arch {
asm!("invlpg [{0}]", in(reg) address.data());
}
#[inline(always)]
unsafe fn invalidate_all() {
Self::set_table(Self::table());
}
#[inline(always)]
unsafe fn table() -> PhysicalAddress {
let address: usize;
asm!("mov rax, cr3", out("rax") address);
asm!("mov {0}, cr3", out(reg) address);
PhysicalAddress::new(address)
}
#[inline(always)]
unsafe fn set_table(address: PhysicalAddress) {
asm!("mov cr3, rax", in("rax") address.data());
asm!("mov cr3, {0}", in(reg) address.data());
}
}