From a40b26293ba4efec7b3960d97815907649a9d162 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 6 Sep 2020 14:20:29 -0600 Subject: [PATCH] Do not use explicit register fo x86_64 table operations --- src/arch/mod.rs | 5 ++++- src/arch/x86_64.rs | 9 ++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/arch/mod.rs b/src/arch/mod.rs index 32f6b2a797..a53d7e8a92 100644 --- a/src/arch/mod.rs +++ b/src/arch/mod.rs @@ -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; diff --git a/src/arch/x86_64.rs b/src/arch/x86_64.rs index d4e1ec6e3e..a718b273e8 100644 --- a/src/arch/x86_64.rs +++ b/src/arch/x86_64.rs @@ -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()); } }