summaryrefslogtreecommitdiff
path: root/src/x86.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/x86.h')
-rw-r--r--src/x86.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/x86.h b/src/x86.h
new file mode 100644
index 0000000..484e5c2
--- /dev/null
+++ b/src/x86.h
@@ -0,0 +1,58 @@
+//|_ _ _. _ ._ |_ _. _ |
+//| | (/_ (_| \/ (/_ | | | | (_| (_ |<
+
+#pragma once
+#include "typedef.h"
+
+enum X86Regs_t : U8 {
+ eax = 0,
+ ecx,
+ edx,
+ ebx,
+ esp,
+ ebp,
+ esi,
+ edi
+};
+
+enum X64Regs_t : U8 {
+ rax = 0,
+ rcx,
+ rdx,
+ rbx,
+ rsp,
+ rbp,
+ rsi,
+ rdi,
+ r8,
+ r9,
+ r10,
+ r11,
+ r12,
+ r13,
+ r14,
+ r15
+};
+
+union REG64 {
+ REG64() = default;
+ REG64( U64 x ) : u64( x ) {}
+ REG64( U32 x ) { u64 = x; }
+
+ REG64( I64 x ) : u64( *(U64*)( &x ) ) {}
+ REG64( I32 x ) { u64 = *(U32*)( &x ); }
+
+ U32 u32[2];
+ U64 u64;
+};
+
+constexpr U32 x86_encode_mov_imm32( U32 reg ) { return ( 0xb8 + reg ); }
+constexpr U32 x86_encode_push_reg( U32 reg ) { return 0x50 | ( reg & 7 ); }
+constexpr U32 x86_encoded_pop_reg( U32 reg ) { return 0x58 | ( reg & 7 ); }
+
+enum X86Instructions_t : U8 {
+ RET_NEAR = 0xc3,
+ RET_FAR = 0xcb,
+ RET_NEAR_IMM16 = 0xc2,
+ RET_FAR_IMM16 = 0xca,
+}; \ No newline at end of file