--- /dev/null
+#ifndef __LUNAIX_CPU_X86_H
+#define __LUNAIX_CPU_X86_H
+
+#include "cpu.h"
+#include "x86_crx.h"
+
+#ifdef CONFIG_ARCH_X86_64
+# define _POP "popq "
+# define _MOV "movq "
+#else
+# define _POP "popl "
+# define _MOV "movl "
+#endif
+
+/**
+ * @brief Load current processor state
+ *
+ * @return reg_t
+ */
+static inline reg_t
+cpu_ldstate()
+{
+ ptr_t val;
+ asm volatile("pushf\n"
+ _POP "%0\n"
+ : "=r"(val)::);
+ return val;
+}
+
+/**
+ * @brief Load current processor config
+ *
+ * @return reg_t
+ */
+static inline reg_t
+cpu_ldconfig()
+{
+ reg_t val;
+ asm volatile(_MOV "%%cr0,%0" : "=r"(val));
+ return val;
+}
+
+/**
+ * @brief Change current processor state
+ *
+ * @return reg_t
+ */
+static inline void
+cpu_chconfig(reg_t val)
+{
+ asm(_MOV "%0, %%cr0" ::"r"(val));
+}
+
+/**
+ * @brief Change current virtual memory space
+ *
+ * @return reg_t
+ */
+static inline void
+cpu_chvmspace(reg_t val)
+{
+ asm(_MOV "%0, %%cr3" ::"r"(val));
+}
+
+/**
+ * @brief Read exeception address
+ *
+ * @return ptr_t
+ */
+static inline ptr_t
+cpu_ldeaddr()
+{
+ ptr_t val;
+ asm volatile(_MOV "%%cr2,%0" : "=r"(val));
+ return val;
+}
+
+#endif /* __LUNAIX_CPU_X86_H */