kernel: Change x86_*_msr to be an inline function on 32-bit platform

Change-Id: Ida5ff96cda06ca4463f15b636f1275977f3ec0ac
Reviewed-on: https://review.haiku-os.org/c/haiku/+/9015
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
Vladimir Serbinenko
2025-02-21 02:27:20 +00:00
committed by waddlesplash
parent 2013cf27d1
commit 801a0ee83d
4 changed files with 14 additions and 35 deletions
-16
View File
@@ -13,22 +13,6 @@ extern uint16 gFPUControlDefault;
extern uint32 gFPUMXCSRDefault;
static inline uint64_t
x86_read_msr(uint32_t msr)
{
uint64_t high, low;
asm volatile("rdmsr" : "=a" (low), "=d" (high) : "c" (msr));
return (high << 32) | low;
}
static inline void
x86_write_msr(uint32_t msr, uint64_t value)
{
asm volatile("wrmsr" : : "a" (value) , "d" (value >> 32), "c" (msr));
}
static inline void
x86_context_switch(arch_thread* oldState, arch_thread* newState)
{
@@ -697,9 +697,6 @@ void x86_page_fault_exception(iframe* iframe);
void x86_swap_pgdir(addr_t newPageDir);
uint64 x86_read_msr(uint32 registerNumber);
void x86_write_msr(uint32 registerNumber, uint64 value);
void x86_context_switch(struct arch_thread* oldState,
struct arch_thread* newState);
@@ -13,6 +13,20 @@
#define nop() __asm__ ("nop"::)
static inline uint64_t
x86_read_msr(uint32_t msr)
{
uint32_t high, low;
asm volatile("rdmsr" : "=a" (low), "=d" (high) : "c" (msr));
return (((uint64_t) high) << 32) | low;
}
static inline void
x86_write_msr(uint32_t msr, uint64_t value)
{
asm volatile("wrmsr" : : "a" ((uint32_t)value) , "d" ((uint32_t)(value >> 32)), "c" (msr));
}
#define x86_read_cr0() ({ \
size_t _v; \
__asm__("mov %%cr0,%0" : "=r" (_v)); \
-16
View File
@@ -77,22 +77,6 @@ FUNCTION(x86_get_stack_frame):
ret
FUNCTION_END(x86_get_stack_frame)
/* uint64 x86_read_msr(uint32 register); */
FUNCTION(x86_read_msr):
movl 4(%esp), %ecx
rdmsr
ret
FUNCTION_END(x86_read_msr)
/* void x86_write_msr(uint32 register, uint64 value); */
FUNCTION(x86_write_msr):
movl 4(%esp), %ecx
movl 8(%esp), %eax
movl 12(%esp), %edx
wrmsr
ret
FUNCTION_END(x86_write_msr)
/* void x86_context_switch(struct arch_thread* oldState,
struct arch_thread* newState); */
FUNCTION(x86_context_switch):