summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2020-03-28 18:57:22 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-03-28 18:57:22 +0100
commit133732ffbbf16fd05fd1db3f6995ad2646166bcc (patch)
tree51a17bee4460f5db9f209f0823faa90a88feaea5
parent7b820145fcd05552ab3496affaa94d0330959d19 (diff)
parent328335176df95e9762cc5e04877cb231b0b2292e (diff)
Merge branch 'master' into master-x86_64
-rw-r--r--i386/i386/hardclock.c2
-rw-r--r--i386/i386/proc_reg.h43
2 files changed, 31 insertions, 14 deletions
diff --git a/i386/i386/hardclock.c b/i386/i386/hardclock.c
index 82761ec3..eb6ff34f 100644
--- a/i386/i386/hardclock.c
+++ b/i386/i386/hardclock.c
@@ -35,7 +35,7 @@
#include <kern/mach_clock.h>
#include <i386/thread.h>
-#if defined(AT386)
+#if defined(AT386) || defined(ATX86_64)
#include <i386/ipl.h>
#endif
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