00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef ZYGOMA_X86_REGISTERS_H_
00023 #define ZYGOMA_X86_REGISTERS_H_
00024
00025 #include <arch/types.h>
00026
00027 namespace Zygoma
00028 {
00096 static inline u32 __attribute__((__unused__))
00097 getCR2()
00098 {
00099 register u32 faultAddress;
00100
00101 __asm__ __volatile__("mov %%cr2, %[faultAddress]"
00102 : [faultAddress] "=r" (faultAddress)
00103 :);
00104 return faultAddress;
00105 }
00106
00113 static inline void __attribute__((__unused__))
00114 setCR3(u32 pagedir)
00115 {
00116 __asm__ __volatile__("mov %[pagedir], %%cr3"
00117 :
00118 : [pagedir] "r" (pagedir));
00119 }
00120
00127 static inline u32 __attribute__((__unused__))
00128 getCR3()
00129 {
00130 u32 pagedir;
00131
00132 __asm__ __volatile__("mov %%cr3, %[pagedir]"
00133 : [pagedir] "=r" (pagedir));
00134 return pagedir;
00135 }
00136
00138 }
00139
00140 #endif // ZYGOMA_X86_REGISTERS_H_