comparison gen_x86.h @ 18:3e7bfde7606e

M68K to x86 translation works for a limited subset of instructions and addressing modes
author Mike Pavone <pavone@retrodev.com>
date Tue, 04 Dec 2012 19:13:12 -0800
parents c0f339564819
children d2e43d64e999
comparison
equal deleted inserted replaced
17:de0085d4ea40 18:3e7bfde7606e
50 SZ_W, 50 SZ_W,
51 SZ_D, 51 SZ_D,
52 SZ_Q 52 SZ_Q
53 } x86_size; 53 } x86_size;
54 54
55 enum {
56 MODE_REG_INDIRECT = 0,
57 MODE_REG_INDEXED = 4,
58 MODE_REG_DISPLACE8 = 0x40,
59 MODE_REG_INDEXED_DISPLACE8 = 0x44,
60 MODE_REG_DIPSLACE32 = 0x80,
61 MODE_REG_INDEXED_DIPSLACE32 = 0x84,
62 MODE_REG_DIRECT = 0xC0,
63 //"phony" mode
64 MODE_IMMED = 0xFF
65 } x86_modes;
66
67
55 uint8_t * add_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 68 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); 69 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); 70 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); 71 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); 72 uint8_t * sub_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
62 uint8_t * or_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 75 uint8_t * or_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size);
63 uint8_t * xor_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 76 uint8_t * xor_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size);
64 uint8_t * and_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 77 uint8_t * and_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size);
65 uint8_t * sub_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 78 uint8_t * sub_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size);
66 uint8_t * cmp_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 79 uint8_t * cmp_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size);
80 uint8_t * add_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size);
81 uint8_t * or_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size);
82 uint8_t * xor_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size);
83 uint8_t * and_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size);
84 uint8_t * sub_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size);
85 uint8_t * cmp_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size);
86 uint8_t * add_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
87 uint8_t * add_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
88 uint8_t * or_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
89 uint8_t * or_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
90 uint8_t * xor_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
91 uint8_t * xor_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
92 uint8_t * and_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
93 uint8_t * and_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
94 uint8_t * sub_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
95 uint8_t * sub_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
96 uint8_t * cmp_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
97 uint8_t * cmp_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
67 uint8_t * mov_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 98 uint8_t * mov_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
68 uint8_t * mov_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 99 uint8_t * mov_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size);
69 uint8_t * mov_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 100 uint8_t * mov_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size);
70 uint8_t * mov_rrind(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 101 uint8_t * mov_rrind(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
71 uint8_t * mov_rindr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 102 uint8_t * mov_rindr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size);
72 uint8_t * mov_ir(uint8_t * out, int64_t val, uint8_t dst, uint8_t size); 103 uint8_t * mov_ir(uint8_t * out, int64_t val, uint8_t dst, uint8_t size);
104 uint8_t * mov_irdisp8(uint8_t * out, int32_t val, uint8_t dst, int8_t disp, uint8_t size);
73 uint8_t * pushf(uint8_t * out); 105 uint8_t * pushf(uint8_t * out);
74 uint8_t * popf(uint8_t * out); 106 uint8_t * popf(uint8_t * out);
75 uint8_t * push_r(uint8_t * out, uint8_t reg); 107 uint8_t * push_r(uint8_t * out, uint8_t reg);
76 uint8_t * pop_r(uint8_t * out, uint8_t reg); 108 uint8_t * pop_r(uint8_t * out, uint8_t reg);
77 uint8_t * setcc_r(uint8_t * out, uint8_t cc, uint8_t dst); 109 uint8_t * setcc_r(uint8_t * out, uint8_t cc, uint8_t dst);
78 uint8_t * setcc_rind(uint8_t * out, uint8_t cc, uint8_t dst); 110 uint8_t * setcc_rind(uint8_t * out, uint8_t cc, uint8_t dst);
79 uint8_t * jcc(uint8_t * out, uint8_t cc, int32_t disp); 111 uint8_t * jcc(uint8_t * out, uint8_t cc, uint8_t *dest);
112 uint8_t * jmp(uint8_t * out, uint8_t *dest);
80 uint8_t * call(uint8_t * out, uint8_t * fun); 113 uint8_t * call(uint8_t * out, uint8_t * fun);
81 uint8_t * retn(uint8_t * out); 114 uint8_t * retn(uint8_t * out);
82 115
83 #endif //GEN_X86_H_ 116 #endif //GEN_X86_H_
84 117