diff options
Diffstat (limited to 'i386')
-rw-r--r-- | i386/i386/proc_reg.h | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/i386/i386/proc_reg.h b/i386/i386/proc_reg.h index 80835361..c787ef26 100644 --- a/i386/i386/proc_reg.h +++ b/i386/i386/proc_reg.h @@ -81,14 +81,22 @@ static inline unsigned long get_eflags(void) { unsigned long eflags; +#ifdef __x86_64__ + asm("pushfq; pop %0" : "=r" (eflags)); +#else asm("pushfd; pop %0" : "=r" (eflags)); +#endif return eflags; } static inline void set_eflags(unsigned long eflags) { +#ifdef __x86_64__ + asm volatile("push %0; popfq" : : "r" (eflags)); +#else asm volatile("push %0; popfd" : : "r" (eflags)); +#endif } #define get_esp() \ @@ -97,12 +105,21 @@ set_eflags(unsigned long eflags) _temp__; \ }) +#ifdef __x86_64__ #define get_eflags() \ ({ \ register unsigned long _temp__; \ - asm("pushf; pop %0" : "=r" (_temp__)); \ + asm("pushfq; pop %0" : "=r" (_temp__)); \ _temp__; \ }) +#else +#define get_eflags() \ + ({ \ + register unsigned long _temp__; \ + asm("pushfd; pop %0" : "=r" (_temp__)); \ + _temp__; \ + }) +#endif #define get_cr0() \ ({ \ @@ -240,7 +257,7 @@ extern unsigned long cr3; #define get_dr0() \ ({ \ register unsigned long _temp__; \ - asm volatile("movl %%dr0, %0" : "=r" (_temp__)); \ + asm volatile("mov %%dr0, %0" : "=r" (_temp__)); \ _temp__; \ }) #endif @@ -251,7 +268,7 @@ extern unsigned long cr3; #define set_dr0(value) \ ({ \ register unsigned long _temp__ = (value); \ - asm volatile("movl %0,%%dr0" : : "r" (_temp__)); \ + asm volatile("mov %0,%%dr0" : : "r" (_temp__)); \ }) #endif @@ -261,7 +278,7 @@ extern unsigned long cr3; #define get_dr1() \ ({ \ register unsigned long _temp__; \ - asm volatile("movl %%dr1, %0" : "=r" (_temp__)); \ + asm volatile("mov %%dr1, %0" : "=r" (_temp__)); \ _temp__; \ }) #endif @@ -272,7 +289,7 @@ extern unsigned long cr3; #define set_dr1(value) \ ({ \ register unsigned long _temp__ = (value); \ - asm volatile("movl %0,%%dr1" : : "r" (_temp__)); \ + asm volatile("mov %0,%%dr1" : : "r" (_temp__)); \ }) #endif @@ -282,7 +299,7 @@ extern unsigned long cr3; #define get_dr2() \ ({ \ register unsigned long _temp__; \ - asm volatile("movl %%dr2, %0" : "=r" (_temp__)); \ + asm volatile("mov %%dr2, %0" : "=r" (_temp__)); \ _temp__; \ }) #endif @@ -293,7 +310,7 @@ extern unsigned long cr3; #define set_dr2(value) \ ({ \ register unsigned long _temp__ = (value); \ - asm volatile("movl %0,%%dr2" : : "r" (_temp__)); \ + asm volatile("mov %0,%%dr2" : : "r" (_temp__)); \ }) #endif @@ -303,7 +320,7 @@ extern unsigned long cr3; #define get_dr3() \ ({ \ register unsigned long _temp__; \ - asm volatile("movl %%dr3, %0" : "=r" (_temp__)); \ + asm volatile("mov %%dr3, %0" : "=r" (_temp__)); \ _temp__; \ }) #endif @@ -314,7 +331,7 @@ extern unsigned long cr3; #define set_dr3(value) \ ({ \ register unsigned long _temp__ = (value); \ - asm volatile("movl %0,%%dr3" : : "r" (_temp__)); \ + asm volatile("mov %0,%%dr3" : : "r" (_temp__)); \ }) #endif @@ -324,7 +341,7 @@ extern unsigned long cr3; #define get_dr6() \ ({ \ register unsigned long _temp__; \ - asm volatile("movl %%dr6, %0" : "=r" (_temp__)); \ + asm volatile("mov %%dr6, %0" : "=r" (_temp__)); \ _temp__; \ }) #endif @@ -335,7 +352,7 @@ extern unsigned long cr3; #define set_dr6(value) \ ({ \ register unsigned long _temp__ = (value); \ - asm volatile("movl %0,%%dr6" : : "r" (_temp__)); \ + asm volatile("mov %0,%%dr6" : : "r" (_temp__)); \ }) #endif @@ -345,7 +362,7 @@ extern unsigned long cr3; #define get_dr7() \ ({ \ register unsigned long _temp__; \ - asm volatile("movl %%dr7, %0" : "=r" (_temp__)); \ + asm volatile("mov %%dr7, %0" : "=r" (_temp__)); \ _temp__; \ }) #endif @@ -356,7 +373,7 @@ extern unsigned long cr3; #define set_dr7(value) \ ({ \ register unsigned long _temp__ = (value); \ - asm volatile("movl %0,%%dr7" : : "r" (_temp__)); \ + asm volatile("mov %0,%%dr7" : : "r" (_temp__)); \ }) #endif |