diff --git a/Kernel/Arch/x86/ASM_wrapper.h b/Kernel/Arch/x86/ASM_wrapper.h index 09ff8eeb34..1df759d7a0 100644 --- a/Kernel/Arch/x86/ASM_wrapper.h +++ b/Kernel/Arch/x86/ASM_wrapper.h @@ -62,25 +62,20 @@ ALWAYS_INLINE u16 get_gs() } #endif -ALWAYS_INLINE u32 read_gs_u32(u32 offset) +ALWAYS_INLINE FlatPtr read_gs_ptr(FlatPtr offset) { - u32 val; + FlatPtr val; asm volatile( - "movl %%gs:%a[off], %k[val]" + "mov %%gs:%a[off], %[val]" : [val] "=r"(val) : [off] "ir"(offset)); return val; } -ALWAYS_INLINE FlatPtr read_gs_ptr(u32 offset) -{ - return read_gs_u32(offset); -} - -ALWAYS_INLINE void write_gs_u32(u32 offset, u32 val) +ALWAYS_INLINE void write_gs_ptr(u32 offset, FlatPtr val) { asm volatile( - "movl %k[val], %%gs:%a[off]" ::[off] "ir"(offset), [val] "ir"(val) + "mov %[val], %%gs:%a[off]" ::[off] "ir"(offset), [val] "ir"(val) : "memory"); } diff --git a/Kernel/Arch/x86/Processor.h b/Kernel/Arch/x86/Processor.h index 2236d4a772..478ab0c2f7 100644 --- a/Kernel/Arch/x86/Processor.h +++ b/Kernel/Arch/x86/Processor.h @@ -256,7 +256,7 @@ public: #if ARCH(I386) get_gs() == GDT_SELECTOR_PROC && #endif - read_gs_u32(__builtin_offsetof(Processor, m_self)) != 0; + read_gs_ptr(__builtin_offsetof(Processor, m_self)) != 0; } ALWAYS_INLINE void set_scheduler_data(SchedulerPerProcessorData& scheduler_data) @@ -298,7 +298,7 @@ public: ALWAYS_INLINE static void set_current_thread(Thread& current_thread) { // See comment in Processor::current_thread - write_gs_u32(__builtin_offsetof(Processor, m_current_thread), FlatPtr(¤t_thread)); + write_gs_ptr(__builtin_offsetof(Processor, m_current_thread), FlatPtr(¤t_thread)); } ALWAYS_INLINE static Thread* idle_thread()