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