summaryrefslogtreecommitdiff
path: root/x86.h
diff options
context:
space:
mode:
Diffstat (limited to 'x86.h')
-rw-r--r--x86.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/x86.h b/x86.h
index b905f83..7bc677f 100644
--- a/x86.h
+++ b/x86.h
@@ -244,6 +244,30 @@ read_esp(void)
return esp;
}
+static __inline uint32_t
+read_esi(void)
+{
+ uint32_t esi;
+ __asm __volatile("movl %%esi,%0" : "=r" (esi));
+ return esi;
+}
+
+static __inline uint32_t
+read_edi(void)
+{
+ uint32_t edi;
+ __asm __volatile("movl %%edi,%0" : "=r" (edi));
+ return edi;
+}
+
+static __inline uint32_t
+read_ebx(void)
+{
+ uint32_t ebx;
+ __asm __volatile("movl %%ebx,%0" : "=r" (ebx));
+ return ebx;
+}
+
static __inline void
cpuid(uint32_t info, uint32_t *eaxp, uint32_t *ebxp, uint32_t *ecxp, uint32_t *edxp)
{
@@ -280,6 +304,20 @@ read_tsc(void)
return tsc;
}
+// disable interrupts
+static __inline void
+cli(void)
+{
+ __asm __volatile("cli");
+}
+
+// enable interrupts
+static __inline void
+sti(void)
+{
+ __asm __volatile("sti");
+}
+
struct PushRegs {
/* registers as pushed by pusha */
uint32_t reg_edi;