#include "arch/kernel/cpu/segment_register.hpp" #include "arch/context_switching/interrupt_descriptor_table/segment_selector.hpp" namespace teachos::arch::kernel::cpu { [[gnu::naked]] auto reload_segment_registers() -> void { asm volatile("xor %rax, %rax\n" "mov %rax, %ss\n" "mov %rax, %ds\n" "mov %rax, %es\n" "mov %rax, %fs\n" "mov %rax, %gs\n" "ret"); } [[gnu::naked]] auto set_segment_registers(context_switching::interrupt_descriptor_table::segment_selector segment_selector) -> void { asm volatile("xor %%rax, %%rax\n" "mov %[input], %%ax\n" "mov %%rax, %%ds\n" "mov %%rax, %%es\n" "mov %%rax, %%fs\n" "mov %%rax, %%gs\n" "ret" : /* No output from call */ : [input] "m"(segment_selector)); } } // namespace teachos::arch::kernel::cpu