Mercurial > repos > blastem
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 |