comparison gen_x86.h @ 14:2bdad0f52f42

x86 code gen, initial work on translator
author Mike Pavone <pavone@retrodev.com>
date Tue, 27 Nov 2012 09:28:13 -0800
parents
children c0f339564819
comparison
equal deleted inserted replaced
13:168b1a873895 14:2bdad0f52f42
1 #ifndef GEN_X86_H_
2 #define GEN_X86_H_
3
4 #include <stdint.h>
5
6 enum {
7 RAX = 0,
8 RCX,
9 RDX,
10 RBX,
11 RSP,
12 RBP,
13 RSI,
14 RDI,
15 AH,
16 CH,
17 DH,
18 BH,
19 R8,
20 R9,
21 R10,
22 R11,
23 R12,
24 R13,
25 R14,
26 R15
27 } x86_regs;
28
29 enum {
30 CC_O = 0,
31 CC_NO,
32 CC_C,
33 CC_NC,
34 CC_Z,
35 CC_NZ,
36 CC_BE,
37 CC_A,
38 CC_S,
39 CC_NS,
40 CC_P,
41 CC_NP,
42 CC_L,
43 CC_GE,
44 CC_LE,
45 CC_G
46 } x86_cc;
47
48 enum {
49 SZ_B = 0,
50 SZ_W,
51 SZ_D,
52 SZ_Q
53 } x86_size;
54
55 uint8_t * add_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
56 uint8_t * or_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
57 uint8_t * xor_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
58 uint8_t * and_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
59 uint8_t * sub_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
60 uint8_t * cmp_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
61 uint8_t * add_i8r(uint8_t * out, uint8_t val, uint8_t dst);
62 uint8_t * or_i8r(uint8_t * out, uint8_t val, uint8_t dst);
63 uint8_t * xor_i8r(uint8_t * out, uint8_t val, uint8_t dst);
64 uint8_t * and_i8r(uint8_t * out, uint8_t val, uint8_t dst);
65 uint8_t * sub_i8r(uint8_t * out, uint8_t val, uint8_t dst);
66 uint8_t * cmp_i8r(uint8_t * out, uint8_t val, uint8_t dst);
67 uint8_t * add_i32r(uint8_t * out, int32_t val, uint8_t dst);
68 uint8_t * or_i32r(uint8_t * out, int32_t val, uint8_t dst);
69 uint8_t * xor_i32r(uint8_t * out, int32_t val, uint8_t dst);
70 uint8_t * and_i32r(uint8_t * out, int32_t val, uint8_t dst);
71 uint8_t * sub_i32r(uint8_t * out, int32_t val, uint8_t dst);
72 uint8_t * cmp_i32r(uint8_t * out, int32_t val, uint8_t dst);
73 uint8_t * mov_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
74 uint8_t * mov_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
75 uint8_t * mov_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
76 uint8_t * mov_rrind(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
77 uint8_t * mov_rindr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
78 uint8_t * mov_i8r(uint8_t * out, uint8_t val, uint8_t dst);
79 uint8_t * mov_i16r(uint8_t * out, uint16_t val, uint8_t dst);
80 uint8_t * mov_i32r(uint8_t * out, uint32_t val, uint8_t dst);
81 uint8_t * pushf(uint8_t * out);
82 uint8_t * popf(uint8_t * out);
83 uint8_t * push_r(uint8_t * out, uint8_t reg);
84 uint8_t * pop_r(uint8_t * out, uint8_t reg);
85 uint8_t * setcc_r(uint8_t * out, uint8_t cc, uint8_t dst);
86 uint8_t * setcc_rind(uint8_t * out, uint8_t cc, uint8_t dst);
87 uint8_t * jcc(uint8_t * out, uint8_t cc, int32_t disp);
88 uint8_t * call(uint8_t * out, uint8_t * fun);
89 uint8_t * retn(uint8_t * out);
90
91 #endif //GEN_X86_H_
92