1 #ifdef SUPERFX_CPP
2
initialize_opcode_table()3 void SuperFX::initialize_opcode_table() {
4 #define op4(id, name) \
5 op(id+ 0, name< 1>) op(id+ 1, name< 2>) op(id+ 2, name< 3>) op(id+ 3, name< 4>)
6
7 #define op6(id, name) \
8 op(id+ 0, name< 8>) op(id+ 1, name< 9>) op(id+ 2, name<10>) op(id+ 3, name<11>) \
9 op(id+ 4, name<12>) op(id+ 5, name<13>)
10
11 #define op12(id, name) \
12 op(id+ 0, name< 0>) op(id+ 1, name< 1>) op(id+ 2, name< 2>) op(id+ 3, name< 3>) \
13 op(id+ 4, name< 4>) op(id+ 5, name< 5>) op(id+ 6, name< 6>) op(id+ 7, name< 7>) \
14 op(id+ 8, name< 8>) op(id+ 9, name< 9>) op(id+10, name<10>) op(id+11, name<11>)
15
16 #define op15l(id, name) \
17 op(id+ 0, name< 0>) op(id+ 1, name< 1>) op(id+ 2, name< 2>) op(id+ 3, name< 3>) \
18 op(id+ 4, name< 4>) op(id+ 5, name< 5>) op(id+ 6, name< 6>) op(id+ 7, name< 7>) \
19 op(id+ 8, name< 8>) op(id+ 9, name< 9>) op(id+10, name<10>) op(id+11, name<11>) \
20 op(id+12, name<12>) op(id+13, name<13>) op(id+14, name<14>)
21
22 #define op15h(id, name) \
23 op(id+ 0, name< 1>) op(id+ 1, name< 2>) op(id+ 2, name< 3>) op(id+ 3, name< 4>) \
24 op(id+ 4, name< 5>) op(id+ 5, name< 6>) op(id+ 6, name< 7>) op(id+ 7, name< 8>) \
25 op(id+ 8, name< 9>) op(id+ 9, name<10>) op(id+10, name<11>) op(id+11, name<12>) \
26 op(id+12, name<13>) op(id+13, name<14>) op(id+14, name<15>)
27
28 #define op16(id, name) \
29 op(id+ 0, name< 0>) op(id+ 1, name< 1>) op(id+ 2, name< 2>) op(id+ 3, name< 3>) \
30 op(id+ 4, name< 4>) op(id+ 5, name< 5>) op(id+ 6, name< 6>) op(id+ 7, name< 7>) \
31 op(id+ 8, name< 8>) op(id+ 9, name< 9>) op(id+10, name<10>) op(id+11, name<11>) \
32 op(id+12, name<12>) op(id+13, name<13>) op(id+14, name<14>) op(id+15, name<15>)
33
34 //======
35 // ALT0
36 //======
37
38 #define op(id, name) opcode_table[ 0 + id] = &SuperFX::op_##name;
39 op (0x00, stop)
40 op (0x01, nop)
41 op (0x02, cache)
42 op (0x03, lsr)
43 op (0x04, rol)
44 op (0x05, bra)
45 op (0x06, blt)
46 op (0x07, bge)
47 op (0x08, bne)
48 op (0x09, beq)
49 op (0x0a, bpl)
50 op (0x0b, bmi)
51 op (0x0c, bcc)
52 op (0x0d, bcs)
53 op (0x0e, bvc)
54 op (0x0f, bvs)
55 op16 (0x10, to_r)
56 op16 (0x20, with_r)
57 op12 (0x30, stw_ir)
58 op (0x3c, loop)
59 op (0x3d, alt1)
60 op (0x3e, alt2)
61 op (0x3f, alt3)
62 op12 (0x40, ldw_ir)
63 op (0x4c, plot)
64 op (0x4d, swap)
65 op (0x4e, color)
66 op (0x4f, not)
67 op16 (0x50, add_r)
68 op16 (0x60, sub_r)
69 op (0x70, merge)
70 op15h(0x71, and_r)
71 op16 (0x80, mult_r)
72 op (0x90, sbk)
73 op4 (0x91, link)
74 op (0x95, sex)
75 op (0x96, asr)
76 op (0x97, ror)
77 op6 (0x98, jmp_r)
78 op (0x9e, lob)
79 op (0x9f, fmult)
80 op16 (0xa0, ibt_r)
81 op16 (0xb0, from_r)
82 op (0xc0, hib)
83 op15h(0xc1, or_r)
84 op15l(0xd0, inc_r)
85 op (0xdf, getc)
86 op15l(0xe0, dec_r)
87 op (0xef, getb)
88 op16 (0xf0, iwt_r)
89 #undef op
90
91 //======
92 // ALT1
93 //======
94
95 #define op(id, name) opcode_table[256 + id] = &SuperFX::op_##name;
96 op (0x00, stop)
97 op (0x01, nop)
98 op (0x02, cache)
99 op (0x03, lsr)
100 op (0x04, rol)
101 op (0x05, bra)
102 op (0x06, blt)
103 op (0x07, bge)
104 op (0x08, bne)
105 op (0x09, beq)
106 op (0x0a, bpl)
107 op (0x0b, bmi)
108 op (0x0c, bcc)
109 op (0x0d, bcs)
110 op (0x0e, bvc)
111 op (0x0f, bvs)
112 op16 (0x10, to_r)
113 op16 (0x20, with_r)
114 op12 (0x30, stb_ir)
115 op (0x3c, loop)
116 op (0x3d, alt1)
117 op (0x3e, alt2)
118 op (0x3f, alt3)
119 op12 (0x40, ldb_ir)
120 op (0x4c, rpix)
121 op (0x4d, swap)
122 op (0x4e, cmode)
123 op (0x4f, not)
124 op16 (0x50, adc_r)
125 op16 (0x60, sbc_r)
126 op (0x70, merge)
127 op15h(0x71, bic_r)
128 op16 (0x80, umult_r)
129 op (0x90, sbk)
130 op4 (0x91, link)
131 op (0x95, sex)
132 op (0x96, div2)
133 op (0x97, ror)
134 op6 (0x98, ljmp_r)
135 op (0x9e, lob)
136 op (0x9f, lmult)
137 op16 (0xa0, lms_r)
138 op16 (0xb0, from_r)
139 op (0xc0, hib)
140 op15h(0xc1, xor_r)
141 op15l(0xd0, inc_r)
142 op (0xdf, getc)
143 op15l(0xe0, dec_r)
144 op (0xef, getbh)
145 op16 (0xf0, lm_r)
146 #undef op
147
148 //======
149 // ALT2
150 //======
151
152 #define op(id, name) opcode_table[512 + id] = &SuperFX::op_##name;
153 op (0x00, stop)
154 op (0x01, nop)
155 op (0x02, cache)
156 op (0x03, lsr)
157 op (0x04, rol)
158 op (0x05, bra)
159 op (0x06, blt)
160 op (0x07, bge)
161 op (0x08, bne)
162 op (0x09, beq)
163 op (0x0a, bpl)
164 op (0x0b, bmi)
165 op (0x0c, bcc)
166 op (0x0d, bcs)
167 op (0x0e, bvc)
168 op (0x0f, bvs)
169 op16 (0x10, to_r)
170 op16 (0x20, with_r)
171 op12 (0x30, stw_ir)
172 op (0x3c, loop)
173 op (0x3d, alt1)
174 op (0x3e, alt2)
175 op (0x3f, alt3)
176 op12 (0x40, ldw_ir)
177 op (0x4c, plot)
178 op (0x4d, swap)
179 op (0x4e, color)
180 op (0x4f, not)
181 op16 (0x50, add_i)
182 op16 (0x60, sub_i)
183 op (0x70, merge)
184 op15h(0x71, and_i)
185 op16 (0x80, mult_i)
186 op (0x90, sbk)
187 op4 (0x91, link)
188 op (0x95, sex)
189 op (0x96, asr)
190 op (0x97, ror)
191 op6 (0x98, jmp_r)
192 op (0x9e, lob)
193 op (0x9f, fmult)
194 op16 (0xa0, sms_r)
195 op16 (0xb0, from_r)
196 op (0xc0, hib)
197 op15h(0xc1, or_i)
198 op15l(0xd0, inc_r)
199 op (0xdf, ramb)
200 op15l(0xe0, dec_r)
201 op (0xef, getbl)
202 op16 (0xf0, sm_r)
203 #undef op
204
205 //======
206 // ALT3
207 //======
208
209 #define op(id, name) opcode_table[768 + id] = &SuperFX::op_##name;
210 op (0x00, stop)
211 op (0x01, nop)
212 op (0x02, cache)
213 op (0x03, lsr)
214 op (0x04, rol)
215 op (0x05, bra)
216 op (0x06, blt)
217 op (0x07, bge)
218 op (0x08, bne)
219 op (0x09, beq)
220 op (0x0a, bpl)
221 op (0x0b, bmi)
222 op (0x0c, bcc)
223 op (0x0d, bcs)
224 op (0x0e, bvc)
225 op (0x0f, bvs)
226 op16 (0x10, to_r)
227 op16 (0x20, with_r)
228 op12 (0x30, stb_ir)
229 op (0x3c, loop)
230 op (0x3d, alt1)
231 op (0x3e, alt2)
232 op (0x3f, alt3)
233 op12 (0x40, ldb_ir)
234 op (0x4c, rpix)
235 op (0x4d, swap)
236 op (0x4e, cmode)
237 op (0x4f, not)
238 op16 (0x50, adc_i)
239 op16 (0x60, cmp_r)
240 op (0x70, merge)
241 op15h(0x71, bic_i)
242 op16 (0x80, umult_i)
243 op (0x90, sbk)
244 op4 (0x91, link)
245 op (0x95, sex)
246 op (0x96, div2)
247 op (0x97, ror)
248 op6 (0x98, ljmp_r)
249 op (0x9e, lob)
250 op (0x9f, lmult)
251 op16 (0xa0, lms_r)
252 op16 (0xb0, from_r)
253 op (0xc0, hib)
254 op15h(0xc1, xor_i)
255 op15l(0xd0, inc_r)
256 op (0xdf, romb)
257 op15l(0xe0, dec_r)
258 op (0xef, getbs)
259 op16 (0xf0, lm_r)
260 #undef op
261
262 #undef op4
263 #undef op6
264 #undef op12
265 #undef op15l
266 #undef op15h
267 #undef op16
268 }
269
270 #endif
271