Import binutils 2.18
[nacl-binutils.git] / gas / testsuite / gas / tic4x / opclasses.h
blob3fb35248104ea22a2708065ebd75627bb1342dc9
1 /* Opcode infix
2 B condition 16--20 U,C,Z,LO,HI, etc.
3 C condition 23--27 U,C,Z,LO,HI, etc.
5 Arguments
6 , required arg follows
7 ; optional arg follows
9 Argument types bits [classes] - example
10 -----------------------------------------------------------
11 * indirect (all) 0--15 [A,AB,AU,AF,A2,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - *+AR0(5), *++AR0(IR0)
12 # direct (for LDP) 0--15 [Z] - @start, start
13 @ direct 0--15 [A,AB,AU,AF,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - @start, start
14 A address register 22--24 [D] - AR0, AR7
15 B unsigned integer 0--23 [I,I2] - @start, start (absolute on C3x, relative on C4x)
16 C indirect (disp - C4x) 0--7 [S,SC,S2,T,TC,T2,T2C] - *+AR0(5)
17 E register (all) 0--7 [T,TC,T2,T2C] - R0, R7, R11, AR0, DP
18 e register (0-11) 0--7 [S,SC,S2] - R0, R7, R11
19 F short float immediate 0--15 [AF,B,BA,BB] - 3.5, 0e-3.5e-1
20 G register (all) 8--15 [T,TC,T2,T2C] - R0, R7, R11, AR0, DP
21 g register (0-11) 0--7 [S,SC,S2] - R0, R7, R11
22 H register (0-7) 18--16 [LS,M,P,Q] - R0, R7
23 I indirect (no disp) 0--7 [S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0)
24 i indirect (enhanced) 0--7 [LL,LS,M,P,Q,QC] - *+AR0(1), R5
25 J indirect (no disp) 8--15 [LL,LS,P,Q,QC,S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0)
26 j indirect (enhanced) 8--15 [M] - *+AR0(1), R5
27 K register 19--21 [LL,M,Q,QC] - R0, R7
28 L register 22--24 [LL,LS,P,Q,QC] - R0, R7
29 M register (R2,R3) 22--22 [M] R2, R3
30 N register (R0,R1) 23--23 [M] R0, R1
31 O indirect(disp - C4x) 8--15 [S,SC,S2,T,TC,T2] - *+AR0(5)
32 P displacement (PC Rel) 0--15 [D,J,JS] - @start, start
33 Q register (all) 0--15 [A,AB,AU,A2,A3,AY,BA,BI,D,I2,J,JS] - R0, AR0, DP, SP
34 q register (0-11) 0--15 [AF,B,BB] - R0, R7, R11
35 R register (all) 16--20 [A,AB,AU,AF,A6,A7,R,T,TC] - R0, AR0, DP, SP
36 r register (0-11) 16--20 [B,BA,BB,BI,B6,B7,RF,S,SC] - R0, R1, R11
37 S short int immediate 0--15 [A,AB,AY,BI] - -5, 5
38 T integer (C4x) 16--20 [Z] - -5, 12
39 U unsigned integer 0--15 [AU,A3] - 0, 65535
40 V vector (C4x: 0--8) 0--4 [Z] - 25, 7
41 W short int (C4x) 0--7 [T,TC,T2,T2C] - -3, 5
42 X expansion reg (C4x) 0--4 [Z] - IVTP, TVTP
43 Y address reg (C4x) 16--20 [Z] - AR0, DP, SP, IR0
44 Z expansion reg (C4x) 16--20 [Z] - IVTP, TVTP
47 /* A: General 2-operand integer operations
48 Syntax: <i> src, dst
49 src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
50 dst = Register (R)
51 Instr: 15/8 - ABSI, ADDC, ADDI, ASH, CMPI, LDI, LSH, MPYI, NEGB, NEGI,
52 SUBB, SUBC, SUBI, SUBRB, SUBRI, C4x: LBn, LHn, LWLn, LWRn,
53 MBn, MHn, MPYSHI, MPYUHI
55 #define A_CLASS(name, level) \
56 .ifdef level &\
57 name##_A: &\
58 name AR1, AR0 /* Q;R */ &\
59 name AR0 /* Q;R */ &\
60 name @start, AR0 /* @,R */ &\
61 name *+AR0(5), AR0 /* *,R */ &\
62 name -5, AR0 /* S,R */ &\
63 .endif
66 /* AB: General 2-operand integer operation with condition
67 Syntax: <i>c src, dst
68 c = Condition
69 src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
70 dst = Register (R)
71 Instr: 1/0 - LDIc
73 #define AB_CLASS(name, level) \
74 .ifdef level &\
75 name##_AB: &\
76 name AR1, AR0 /* Q;R */ &\
77 name AR0 /* Q;R */ &\
78 name @start, AR0 /* @,R */ &\
79 name *+AR0(5), AR0 /* *,R */ &\
80 name -5, AR0 /* S,R */ &\
81 .endif
84 /* AU: General 2-operand unsigned integer operation
85 Syntax: <i> src, dst
86 src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U)
87 dst = Register (R)
88 Instr: 6/2 - AND, ANDN, NOT, OR, TSTB, XOR, C4x: LBUn, LHUn
90 #define AU_CLASS(name, level) \
91 .ifdef level &\
92 name##_AU: &\
93 name AR1, AR0 /* Q;R */ &\
94 name AR0 /* Q;R */ &\
95 name @start, AR0 /* @,R */ &\
96 name *+AR0(5), AR0 /* *,R */ &\
97 name 5, AR0 /* U,R */ &\
98 .endif
101 /* AF: General 2-operand float to integer operation
102 Syntax: <i> src, dst
103 src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
104 dst = Register (R)
105 Instr: 1/0 - FIX
107 #define AF_CLASS(name, level) \
108 .ifdef level &\
109 name##_AF: &\
110 name R1, R0 /* q;R */ &\
111 name R0 /* q;R */ &\
112 name @start, AR0 /* @,R */ &\
113 name *+AR0(5), AR0 /* *,R */ &\
114 name 3.5, AR0 /* F,R */ &\
115 .endif
118 /* A2: Limited 1-operand (integer) operation
119 Syntax: <i> src
120 src = Register (Q), Indirect (*), None
121 Instr: 1/0 - NOP
123 #define A2_CLASS(name, level) \
124 .ifdef level &\
125 name##_A2: &\
126 name AR0 /* Q */ &\
127 name *+AR0(5) /* * */ &\
128 name /* */ &\
129 .endif
132 /* A3: General 1-operand unsigned integer operation
133 Syntax: <i> src
134 src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U)
135 Instr: 1/0 - RPTS
137 #define A3_CLASS(name, level) \
138 .ifdef level &\
139 name##_A3: &\
140 name AR1 /* Q */ &\
141 name @start /* @ */ &\
142 name *+AR0(5) /* * */ &\
143 name 5 /* U */ &\
144 .endif
147 /* A6: Limited 2-operand integer operation
148 Syntax: <i> src, dst
149 src = Direct (@), Indirect (*)
150 dst = Register (R)
151 Instr: 1/1 - LDII, C4x: SIGI
153 #define A6_CLASS(name, level) \
154 .ifdef level &\
155 name##_A6: &\
156 name @start, AR0 /* @,R */ &\
157 name *+AR0(5), AR0 /* *,R */ &\
158 .endif
161 /* A7: Limited 2-operand integer store operation
162 Syntax: <i> src, dst
163 src = Register (R)
164 dst = Direct (@), Indirect (*)
165 Instr: 2/0 - STI, STII
167 #define A7_CLASS(name, level) \
168 .ifdef level &\
169 name##_A7: &\
170 name AR0, @start /* R,@ */ &\
171 name AR0, *+AR0(5) /* R,* */ &\
172 .endif
175 /* AY: General 2-operand signed address load operation
176 Syntax: <i> src, dst
177 src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
178 dst = Address register - ARx, IRx, DP, BK, SP (Y)
179 Instr: 0/1 - C4x: LDA
180 Note: Q and Y should *never* be the same register
182 #define AY_CLASS(name, level) \
183 .ifdef level &\
184 name##_AY: &\
185 name AR1, AR0 /* Q,Y */ &\
186 name @start, AR0 /* @,Y */ &\
187 name *+AR0(5), AR0 /* *,Y */ &\
188 name -5, AR0 /* S,Y */ &\
189 .endif
192 /* B: General 2-operand float operation
193 Syntax: <i> src, dst
194 src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
195 dst = Register 0-11 (r)
196 Instr: 12/2 - ABSF, ADDF, CMPF, LDE, LDF, LDM, MPYF, NEGF, NORM, RND,
197 SUBF, SUBRF, C4x: RSQRF, TOIEEE
199 #define B_CLASS(name, level) \
200 .ifdef level &\
201 name##_B: &\
202 name R1, R0 /* q;r */ &\
203 name R0 /* q;r */ &\
204 name @start, R0 /* @,r */ &\
205 name *+AR0(5), R0 /* *,r */ &\
206 name 3.5, R0 /* F,r */ &\
207 .endif
210 /* BA: General 2-operand integer to float operation
211 Syntax: <i> src, dst
212 src = Register (Q), Direct (@), Indirect (*), Float immediate (F)
213 dst = Register 0-11 (r)
214 Instr: 0/1 - C4x: CRCPF
216 #define BA_CLASS(name, level) \
217 .ifdef level &\
218 name##_BA: &\
219 name AR1, R0 /* Q;r */ &\
220 name R0 /* Q;r */ &\
221 name @start, R0 /* @,r */ &\
222 name *+AR0(5), R0 /* *,r */ &\
223 name 3.5, R0 /* F,r */ &\
224 .endif
227 /* BB: General 2-operand conditional float operation
228 Syntax: <i>c src, dst
229 c = Condition
230 src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
231 dst = Register 0-11 (r)
232 Instr: 1/0 - LDFc
234 #define BB_CLASS(name, level) \
235 .ifdef level &\
236 name##_BB: &\
237 name R1, R0 /* q;r */ &\
238 name R0 /* q;r */ &\
239 name @start, R0 /* @,r */ &\
240 name *+AR0(5), R0 /* *,r */ &\
241 name 3.5, R0 /* F,r */ &\
242 .endif
245 /* BI: General 2-operand integer to float operation (yet different to BA)
246 Syntax: <i> src, dst
247 src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
248 dst = Register 0-11 (r)
249 Instr: 1/0 - FLOAT
251 #define BI_CLASS(name, level) \
252 .ifdef level &\
253 name##_BI: &\
254 name AR1, R0 /* Q;r */ &\
255 name R0 /* Q;r */ &\
256 name @start, R0 /* @,r */ &\
257 name *+AR0(5), R0 /* *,r */ &\
258 name -5, R0 /* S,r */ &\
259 .endif
262 /* B6: Limited 2-operand float operation
263 Syntax: <i> src, dst
264 src = Direct (@), Indirect (*)
265 dst = Register 0-11 (r)
266 Instr: 1/1 - LDFI, C4x: FRIEEE
268 #define B6_CLASS(name, level) \
269 .ifdef level &\
270 name##_B6: &\
271 name @start, R0 /* @,r */ &\
272 name *+AR0(5), R0 /* *,r */ &\
273 .endif
276 /* B7: Limited 2-operand float store operation
277 Syntax: <i> src, dst
278 src = Register 0-11 (r)
279 dst = Direct (@), Indirect (*)
280 Instr: 2/0 - STF, STFI
282 #define B7_CLASS(name, level) \
283 .ifdef level &\
284 name##_B7: &\
285 name R0, @start /* r,@ */ &\
286 name R0, *+AR0(5) /* r,* */ &\
287 .endif
290 /* D: Decrement and brach operations
291 Syntax: <i>c ARn, dst
292 c = condition
293 ARn = AR register 0-7 (A)
294 dst = Register (Q), PC-relative (P)
295 Instr: 2/0 - DBc, DBcD
296 Alias: <namea> <nameb>
298 #define D_CLASS(namea, nameb, level) \
299 .ifdef level &\
300 namea##_D: &\
301 namea AR0, R0 /* A,Q */ &\
302 namea AR0, start /* A,P */ &\
303 nameb##_D: &\
304 nameb AR0, R0 /* A,Q */ &\
305 nameb AR0, start /* A,P */ &\
306 .endif
309 /* J: General conditional branch operations
310 Syntax: <i>c dst
311 c = Condition
312 dst = Register (Q), PC-relative (P)
313 Instr: 2/3 - Bc, BcD, C4x: BcAF, BcAT, LAJc
314 Alias: <namea> <nameb>
316 #define J_CLASS(namea, nameb, level) \
317 .ifdef level &\
318 namea##_J: &\
319 namea R0 /* Q */ &\
320 namea start /* P */ &\
321 nameb##_J: &\
322 nameb R0 /* Q */ &\
323 nameb start /* P */ &\
324 .endif
327 /* LL: Load-load parallell operation
328 Syntax: <i> src2, dst2 || <i> src1, dst1
329 src1 = Indirect 0,1,IR0,IR1 (J)
330 dst1 = Register 0-7 (K)
331 src2 = Indirect 0,1,IR0,IR1, ENH: Register (i)
332 dst2 = Register 0-7 (L)
333 Instr: 2/0 - LDF||LDF, LDI||LDI
334 Alias: i||i, i1||i2, i2||i1
336 #define LL_CLASS(name, level) \
337 .ifdef level &\
338 name##_LL: &\
339 name *+AR0(1), R0 &|| name *+AR1(1), R1 /* i;L|J,K */ &\
340 name##2 *+AR0(1), R0 &|| name##1 *+AR1(1), R1 /* i;L|J,K */ &\
341 name##1 *+AR1(1), R1 &|| name##2 *+AR0(1), R0 /* J,K|i;L */ &\
342 .endif &\
343 .ifdef TEST_ENH &\
344 name##_LL_enh: &\
345 name R0, R0 &|| name *+AR1(1), R1 /* i;L|J,K */ &\
346 name R0 &|| name *+AR1(1), R1 /* i;L|J,K */ &\
347 name##2 R0, R0 &|| name##1 *+AR1(1), R1 /* i;L|J,K */ &\
348 name##2 R0 &|| name##1 *+AR1(1), R1 /* i;L|J,K */ &\
349 name##1 *+AR1(1), R1 &|| name##2 R0, R0 /* J,K|i;L */ &\
350 name##1 *+AR1(1), R1 &|| name##2 R0 /* J,K|i;L */ &\
351 .endif
355 /* LS: Store-store parallell operation
356 Syntax: <i> src2, dst2 || <i> src1, dst1
357 src1 = Register 0-7 (H)
358 dst1 = Indirect 0,1,IR0,IR1 (J)
359 src2 = Register 0-7 (L)
360 dst2 = Indirect 0,1,IR0,IR1, ENH: register (i)
361 Instr: 2/0 - STF||STF, STI||STI
362 Alias: i||i, i1||i2, i2||i1.
364 #define LS_CLASS(name, level) \
365 .ifdef level &\
366 name##_LS: &\
367 name R0, *+AR0(1) &|| name R1, *+AR1(1) /* L;i|H,J */ &\
368 name##2 R0, *+AR0(1) &|| name##1 R1, *+AR1(1) /* L;i|H,J */ &\
369 name##1 R1, *+AR1(1) &|| name##2 R0, *+AR0(1) /* H,J|L;i */ &\
370 .endif &\
371 .ifdef TEST_ENH &\
372 name##_LS_enh: &\
373 name R0, R0 &|| name R1, *+AR1(1) /* L;i|H,J */ &\
374 name R0 &|| name R1, *+AR1(1) /* L;i|H,J */ &\
375 name##2 R0, R0 &|| name##1 R1, *+AR1(1) /* L;i|H,J */ &\
376 name##2 R0 &|| name##1 R1, *+AR1(1) /* L;i|H,J */ &\
377 name##1 R1, *+AR1(1) &|| name##2 R0, R0 /* H,J|L;i */ &\
378 name##1 R1, *+AR1(1) &|| name##2 R0 /* H,J|L;i */ &\
379 .endif
382 /* M: General multiply and add/sub operations
383 Syntax: <ia> src3,src4,dst1 || <ib> src2,src1,dst2 [00] - Manual
384 <ia> src3,src1,dst1 || <ib> src2,src4,dst2 [01] - Manual
385 <ia> src1,src3,dst1 || <ib> src2,src4,dst2 [01]
386 <ia> src1,src2,dst1 || <ib> src4,src3,dst2 [02] - Manual
387 <ia> src3,src1,dst1 || <ib> src4,src2,dst2 [03] - Manual
388 <ia> src1,src3,dst1 || <ib> src4,src2,dst2 [03]
389 src1 = Register 0-7 (K)
390 src2 = Register 0-7 (H)
391 src3 = Indirect 0,1,IR0,IR1, ENH: register (j)
392 src4 = Indirect 0,1,IR0,IR1, ENH: register (i)
393 dst1 = Register 0-1 (N)
394 dst2 = Register 2-3 (M)
395 Instr: 4/0 - MPYF3||ADDF3, MPYF3||SUBF3, MPYI3||ADDI3, MPYI3||SUBI3
396 Alias: a||b, a3||n, a||b3, a3||b3, b||a, b3||a, b||a3, b3||a3
398 #define M_CLASS(namea, nameb, level) \
399 .ifdef level &\
400 namea##_##nameb##_M: &\
401 namea *+AR0(1), *+AR1(1), R0 &|| nameb R0, R1, R2 /* i;j;N|H;K;M */ &\
402 namea *+AR0(1), *+AR1(1), R0 &|| nameb R0, R2 /* i;j;N|H;K;M */ &\
403 namea *+AR0(1), R0, R0 &|| nameb R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
404 namea *+AR0(1), R0 &|| nameb R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
405 namea R0, *+AR0(1), R0 &|| nameb R0, *+AR1(1), R2 /* K;j;N|H;i;M */ &\
406 namea R2, R1, R0 &|| nameb *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
407 namea R2, R0 &|| nameb *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
408 namea *+AR0(1), R1, R0 &|| nameb *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
409 namea *+AR0(1), R0 &|| nameb *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
410 namea *+AR0(1), R1, R0 &|| nameb *+AR1(1), R2 /* j;K;N|i;H;M */ &\
411 namea *+AR0(1), R0 &|| nameb *+AR1(1), R2 /* j;K;N|i;H;M */ &\
412 namea R0, *+AR0(1), R0 &|| nameb *+AR1(1), R0, R2 /* K;j;N|i;H;M */ &\
413 namea R0, *+AR0(1), R0 &|| nameb *+AR1(1), R2 /* K;j;N|i;H;M */ &\
414 .endif &\
415 .ifdef TEST_ENH &\
416 namea##_##nameb##_M_enh: &\
417 namea R0, R0, R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
418 namea R0, R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
419 namea R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
420 namea R0, R0 &|| nameb R2, R2 /* i;j;N|H;K;M */ &\
421 namea R0 &|| nameb R2, R2 /* i;j;N|H;K;M */ &\
422 namea R0 &|| nameb R2 /* i;j;N|H;K;M */ &\
423 namea AR0, AR0, R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
424 namea AR0, R0, R0 &|| nameb R0, AR0, R2 /* j;K;N|H;i;M */ &\
425 namea R0, AR0, R0 &|| nameb R0, AR0, R2 /* K;j;N|H;i;M */ &\
426 namea R2, R1, R0 &|| nameb AR0, AR1, R2 /* H;K;N|i;j;M */ &\
427 namea AR0, R1, R0 &|| nameb AR0, R3, R2 /* j;K;N|i;H;M */ &\
428 namea R0, AR0, R0 &|| nameb AR0, R0, R2 /* K;j;N|i;H;M */ &\
429 .endif &\
430 .ifdef level &\
431 namea##3_##nameb##_M: &\
432 namea##3 *+AR0(1), *+AR1(1), R0 &|| nameb R0, R1, R2 /* i;j;N|H;K;M */ &\
433 namea##3 *+AR0(1), *+AR1(1), R0 &|| nameb R0, R2 /* i;j;N|H;K;M */ &\
434 namea##3 *+AR0(1), R0, R0 &|| nameb R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
435 namea##3 *+AR0(1), R0 &|| nameb R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
436 namea##3 R0, *+AR0(1), R0 &|| nameb R0, *+AR1(1), R2 /* K;j;N|H;i;M */ &\
437 namea##3 R2, R1, R0 &|| nameb *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
438 namea##3 R2, R0 &|| nameb *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
439 namea##3 *+AR0(1), R1, R0 &|| nameb *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
440 namea##3 *+AR0(1), R0 &|| nameb *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
441 namea##3 *+AR0(1), R1, R0 &|| nameb *+AR1(1), R2 /* j;K;N|i;H;M */ &\
442 namea##3 *+AR0(1), R0 &|| nameb *+AR1(1), R2 /* j;K;N|i;H;M */ &\
443 namea##3 R0, *+AR0(1), R0 &|| nameb *+AR1(1), R0, R2 /* K;j;N|i;H;M */ &\
444 namea##3 R0, *+AR0(1), R0 &|| nameb *+AR1(1), R2 /* K;j;N|i;H;M */ &\
445 .endif &\
446 .ifdef TEST_ENH &\
447 namea##3_##nameb##_M_enh: &\
448 namea##3 R0, R0, R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
449 namea##3 R0, R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
450 namea##3 R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
451 namea##3 R0, R0 &|| nameb R2, R2 /* i;j;N|H;K;M */ &\
452 namea##3 R0 &|| nameb R2, R2 /* i;j;N|H;K;M */ &\
453 namea##3 R0 &|| nameb R2 /* i;j;N|H;K;M */ &\
454 namea##3 AR0, AR0, R0 &|| nameb R2, R2, R2 /* i;j;N|H;K;M */ &\
455 namea##3 AR0, R0, R0 &|| nameb R0, AR0, R2 /* j;K;N|H;i;M */ &\
456 namea##3 R0, AR0, R0 &|| nameb R0, AR0, R2 /* K;j;N|H;i;M */ &\
457 namea##3 R2, R1, R0 &|| nameb AR0, AR1, R2 /* H;K;N|i;j;M */ &\
458 namea##3 AR0, R1, R0 &|| nameb AR0, R3, R2 /* j;K;N|i;H;M */ &\
459 namea##3 R0, AR0, R0 &|| nameb AR0, R0, R2 /* K;j;N|i;H;M */ &\
460 .endif &\
461 .ifdef level &\
462 namea##_##nameb##3_M: &\
463 namea *+AR0(1), *+AR1(1), R0 &|| nameb##3 R0, R1, R2 /* i;j;N|H;K;M */ &\
464 namea *+AR0(1), *+AR1(1), R0 &|| nameb##3 R0, R2 /* i;j;N|H;K;M */ &\
465 namea *+AR0(1), R0, R0 &|| nameb##3 R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
466 namea *+AR0(1), R0 &|| nameb##3 R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
467 namea R0, *+AR0(1), R0 &|| nameb##3 R0, *+AR1(1), R2 /* K;j;N|H;i;M */ &\
468 namea R2, R1, R0 &|| nameb##3 *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
469 namea R2, R0 &|| nameb##3 *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
470 namea *+AR0(1), R1, R0 &|| nameb##3 *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
471 namea *+AR0(1), R0 &|| nameb##3 *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
472 namea *+AR0(1), R1, R0 &|| nameb##3 *+AR1(1), R2 /* j;K;N|i;H;M */ &\
473 namea *+AR0(1), R0 &|| nameb##3 *+AR1(1), R2 /* j;K;N|i;H;M */ &\
474 namea R0, *+AR0(1), R0 &|| nameb##3 *+AR1(1), R0, R2 /* K;j;N|i;H;M */ &\
475 namea R0, *+AR0(1), R0 &|| nameb##3 *+AR1(1), R2 /* K;j;N|i;H;M */ &\
476 .endif &\
477 .ifdef TEST_ENH &\
478 namea##_##nameb##3_M_enh: &\
479 namea R0, R0, R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
480 namea R0, R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
481 namea R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
482 namea R0, R0 &|| nameb##3 R2, R2 /* i;j;N|H;K;M */ &\
483 namea R0 &|| nameb##3 R2, R2 /* i;j;N|H;K;M */ &\
484 namea R0 &|| nameb##3 R2 /* i;j;N|H;K;M */ &\
485 namea AR0, AR0, R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
486 namea AR0, R0, R0 &|| nameb##3 R0, AR0, R2 /* j;K;N|H;i;M */ &\
487 namea R0, AR0, R0 &|| nameb##3 R0, AR0, R2 /* K;j;N|H;i;M */ &\
488 namea R2, R1, R0 &|| nameb##3 AR0, AR1, R2 /* H;K;N|i;j;M */ &\
489 namea AR0, R1, R0 &|| nameb##3 AR0, R3, R2 /* j;K;N|i;H;M */ &\
490 namea R0, AR0, R0 &|| nameb##3 AR0, R0, R2 /* K;j;N|i;H;M */ &\
491 .endif &\
492 .ifdef level &\
493 namea##3_##nameb##3_M: &\
494 namea##3 *+AR0(1), *+AR1(1), R0 &|| nameb##3 R0, R1, R2 /* i;j;N|H;K;M */ &\
495 namea##3 *+AR0(1), *+AR1(1), R0 &|| nameb##3 R0, R2 /* i;j;N|H;K;M */ &\
496 namea##3 *+AR0(1), R0, R0 &|| nameb##3 R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
497 namea##3 *+AR0(1), R0 &|| nameb##3 R0, *+AR1(1), R2 /* j;K;N|H;i;M */ &\
498 namea##3 R0, *+AR0(1), R0 &|| nameb##3 R0, *+AR1(1), R2 /* K;j;N|H;i;M */ &\
499 namea##3 R2, R1, R0 &|| nameb##3 *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
500 namea##3 R2, R0 &|| nameb##3 *+AR0(1), *+AR1(1), R2 /* H;K;N|i;j;M */ &\
501 namea##3 *+AR0(1), R1, R0 &|| nameb##3 *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
502 namea##3 *+AR0(1), R0 &|| nameb##3 *+AR1(1), R3, R2 /* j;K;N|i;H;M */ &\
503 namea##3 *+AR0(1), R1, R0 &|| nameb##3 *+AR1(1), R2 /* j;K;N|i;H;M */ &\
504 namea##3 *+AR0(1), R0 &|| nameb##3 *+AR1(1), R2 /* j;K;N|i;H;M */ &\
505 namea##3 R0, *+AR0(1), R0 &|| nameb##3 *+AR1(1), R0, R2 /* K;j;N|i;H;M */ &\
506 namea##3 R0, *+AR0(1), R0 &|| nameb##3 *+AR1(1), R2 /* K;j;N|i;H;M */ &\
507 .endif &\
508 .ifdef TEST_ENH &\
509 namea##3_##nameb##3_M_enh: &\
510 namea##3 R0, R0, R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
511 namea##3 R0, R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
512 namea##3 R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
513 namea##3 R0, R0 &|| nameb##3 R2, R2 /* i;j;N|H;K;M */ &\
514 namea##3 R0 &|| nameb##3 R2, R2 /* i;j;N|H;K;M */ &\
515 namea##3 R0 &|| nameb##3 R2 /* i;j;N|H;K;M */ &\
516 namea##3 AR0, AR0, R0 &|| nameb##3 R2, R2, R2 /* i;j;N|H;K;M */ &\
517 namea##3 AR0, R0, R0 &|| nameb##3 R0, AR0, R2 /* j;K;N|H;i;M */ &\
518 namea##3 R0, AR0, R0 &|| nameb##3 R0, AR0, R2 /* K;j;N|H;i;M */ &\
519 namea##3 R2, R1, R0 &|| nameb##3 AR0, AR1, R2 /* H;K;N|i;j;M */ &\
520 namea##3 AR0, R1, R0 &|| nameb##3 AR0, R3, R2 /* j;K;N|i;H;M */ &\
521 namea##3 R0, AR0, R0 &|| nameb##3 AR0, R0, R2 /* K;j;N|i;H;M */ &\
522 .endif &\
523 .ifdef level &\
524 nameb##_##namea##_M: &\
525 nameb R0, R1, R2 &|| namea *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
526 nameb R0, R2 &|| namea *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
527 nameb R0, *+AR1(1), R2 &|| namea *+AR0(1), R0, R0 /* H;i;M|j;K;N */ &\
528 nameb R0, *+AR1(1), R2 &|| namea *+AR0(1), R0 /* H;i;M|j;K;N */ &\
529 nameb R0, *+AR1(1), R2 &|| namea R0, *+AR0(1), R0 /* H;i;M|K;j;N */ &\
530 nameb *+AR0(1), *+AR1(1), R2 &|| namea R2, R1, R0 /* i;j;M|H;K;N */ &\
531 nameb *+AR0(1), *+AR1(1), R2 &|| namea R2, R0 /* i;j;M|H;K;N */ &\
532 nameb *+AR1(1), R3, R2 &|| namea *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
533 nameb *+AR1(1), R3, R2 &|| namea *+AR0(1), R0 /* i;H;M|j;K;N */ &\
534 nameb *+AR1(1), R2 &|| namea *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
535 nameb *+AR1(1), R2 &|| namea *+AR0(1), R0 /* i;H;M|j;K;N */ &\
536 nameb *+AR1(1), R0, R2 &|| namea R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
537 nameb *+AR1(1), R2 &|| namea R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
538 .endif &\
539 .ifdef TEST_ENH &\
540 nameb##_##namea##_M_enh: &\
541 nameb R2, R2, R2 &|| namea R0, R0, R0 /* H;K;M|i;j;N */ &\
542 nameb R2, R2, R2 &|| namea R0, R0 /* H;K;M|i;j;N */ &\
543 nameb R2, R2, R2 &|| namea R0 /* H;K;M|i;j;N */ &\
544 nameb R2, R2 &|| namea R0, R0 /* H;K;M|i;j;N */ &\
545 nameb R2, R2 &|| namea R0 /* H;K;M|i;j;N */ &\
546 nameb R2 &|| namea R0 /* H;K;M|i;j;N */ &\
547 nameb R2, R2, R2 &|| namea AR0, AR0, R0 /* H;K;M|i;j;N */ &\
548 nameb R0, AR0, R2 &|| namea AR0, R0, R0 /* H;i;M|j;K;N */ &\
549 nameb R0, AR0, R2 &|| namea R0, AR0, R0 /* H;i;M|K;j;N */ &\
550 nameb AR0, AR1, R2 &|| namea R2, R1, R0 /* i;j;M|H;K;N */ &\
551 nameb AR0, R3, R2 &|| namea AR0, R1, R0 /* i;H;M|j;K;N */ &\
552 nameb AR0, R0, R2 &|| namea R0, AR0, R0 /* i;H;M|K;j;N */ &\
553 .endif &\
554 .ifdef level &\
555 nameb##3_##namea##_M: &\
556 nameb##3 R0, R1, R2 &|| namea *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
557 nameb##3 R0, R2 &|| namea *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
558 nameb##3 R0, *+AR1(1), R2 &|| namea *+AR0(1), R0, R0 /* H;i;M|j;K;N */ &\
559 nameb##3 R0, *+AR1(1), R2 &|| namea *+AR0(1), R0 /* H;i;M|j;K;N */ &\
560 nameb##3 R0, *+AR1(1), R2 &|| namea R0, *+AR0(1), R0 /* H;i;M|K;j;N */ &\
561 nameb##3 *+AR0(1), *+AR1(1), R2 &|| namea R2, R1, R0 /* i;j;M|H;K;N */ &\
562 nameb##3 *+AR0(1), *+AR1(1), R2 &|| namea R2, R0 /* i;j;M|H;K;N */ &\
563 nameb##3 *+AR1(1), R3, R2 &|| namea *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
564 nameb##3 *+AR1(1), R3, R2 &|| namea *+AR0(1), R0 /* i;H;M|j;K;N */ &\
565 nameb##3 *+AR1(1), R2 &|| namea *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
566 nameb##3 *+AR1(1), R2 &|| namea *+AR0(1), R0 /* i;H;M|j;K;N */ &\
567 nameb##3 *+AR1(1), R0, R2 &|| namea R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
568 nameb##3 *+AR1(1), R2 &|| namea R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
569 .endif &\
570 .ifdef TEST_ENH &\
571 nameb##3_##namea##_M_enh: &\
572 nameb##3 R2, R2, R2 &|| namea R0, R0, R0 /* H;K;M|i;j;N */ &\
573 nameb##3 R2, R2, R2 &|| namea R0, R0 /* H;K;M|i;j;N */ &\
574 nameb##3 R2, R2, R2 &|| namea R0 /* H;K;M|i;j;N */ &\
575 nameb##3 R2, R2 &|| namea R0, R0 /* H;K;M|i;j;N */ &\
576 nameb##3 R2, R2 &|| namea R0 /* H;K;M|i;j;N */ &\
577 nameb##3 R2 &|| namea R0 /* H;K;M|i;j;N */ &\
578 nameb##3 R2, R2, R2 &|| namea AR0, AR0, R0 /* H;K;M|i;j;N */ &\
579 nameb##3 R0, AR0, R2 &|| namea AR0, R0, R0 /* H;i;M|j;K;N */ &\
580 nameb##3 R0, AR0, R2 &|| namea R0, AR0, R0 /* H;i;M|K;j;N */ &\
581 nameb##3 AR0, AR1, R2 &|| namea R2, R1, R0 /* i;j;M|H;K;N */ &\
582 nameb##3 AR0, R3, R2 &|| namea AR0, R1, R0 /* i;H;M|j;K;N */ &\
583 nameb##3 AR0, R0, R2 &|| namea R0, AR0, R0 /* i;H;M|K;j;N */ &\
584 .endif &\
585 .ifdef level &\
586 nameb##_##namea##3_M: &\
587 nameb R0, R1, R2 &|| namea##3 *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
588 nameb R0, R2 &|| namea##3 *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
589 nameb R0, *+AR1(1), R2 &|| namea##3 *+AR0(1), R0, R0 /* H;i;M|j;K;N */ &\
590 nameb R0, *+AR1(1), R2 &|| namea##3 *+AR0(1), R0 /* H;i;M|j;K;N */ &\
591 nameb R0, *+AR1(1), R2 &|| namea##3 R0, *+AR0(1), R0 /* H;i;M|K;j;N */ &\
592 nameb *+AR0(1), *+AR1(1), R2 &|| namea##3 R2, R1, R0 /* i;j;M|H;K;N */ &\
593 nameb *+AR0(1), *+AR1(1), R2 &|| namea##3 R2, R0 /* i;j;M|H;K;N */ &\
594 nameb *+AR1(1), R3, R2 &|| namea##3 *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
595 nameb *+AR1(1), R3, R2 &|| namea##3 *+AR0(1), R0 /* i;H;M|j;K;N */ &\
596 nameb *+AR1(1), R2 &|| namea##3 *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
597 nameb *+AR1(1), R2 &|| namea##3 *+AR0(1), R0 /* i;H;M|j;K;N */ &\
598 nameb *+AR1(1), R0, R2 &|| namea##3 R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
599 nameb *+AR1(1), R2 &|| namea##3 R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
600 .endif &\
601 .ifdef TEST_ENH &\
602 nameb##_##namea##3_M_enh: &\
603 nameb R2, R2, R2 &|| namea##3 R0, R0, R0 /* H;K;M|i;j;N */ &\
604 nameb R2, R2, R2 &|| namea##3 R0, R0 /* H;K;M|i;j;N */ &\
605 nameb R2, R2, R2 &|| namea##3 R0 /* H;K;M|i;j;N */ &\
606 nameb R2, R2 &|| namea##3 R0, R0 /* H;K;M|i;j;N */ &\
607 nameb R2, R2 &|| namea##3 R0 /* H;K;M|i;j;N */ &\
608 nameb R2 &|| namea##3 R0 /* H;K;M|i;j;N */ &\
609 nameb R2, R2, R2 &|| namea##3 AR0, AR0, R0 /* H;K;M|i;j;N */ &\
610 nameb R0, AR0, R2 &|| namea##3 AR0, R0, R0 /* H;i;M|j;K;N */ &\
611 nameb R0, AR0, R2 &|| namea##3 R0, AR0, R0 /* H;i;M|K;j;N */ &\
612 nameb AR0, AR1, R2 &|| namea##3 R2, R1, R0 /* i;j;M|H;K;N */ &\
613 nameb AR0, R3, R2 &|| namea##3 AR0, R1, R0 /* i;H;M|j;K;N */ &\
614 nameb AR0, R0, R2 &|| namea##3 R0, AR0, R0 /* i;H;M|K;j;N */ &\
615 .endif &\
616 .ifdef level &\
617 nameb##3_##namea##3_M: &\
618 nameb##3 R0, R1, R2 &|| namea##3 *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
619 nameb##3 R0, R2 &|| namea##3 *+AR0(1), *+AR1(1), R0 /* H;K;M|i;j;N */ &\
620 nameb##3 R0, *+AR1(1), R2 &|| namea##3 *+AR0(1), R0, R0 /* H;i;M|j;K;N */ &\
621 nameb##3 R0, *+AR1(1), R2 &|| namea##3 *+AR0(1), R0 /* H;i;M|j;K;N */ &\
622 nameb##3 R0, *+AR1(1), R2 &|| namea##3 R0, *+AR0(1), R0 /* H;i;M|K;j;N */ &\
623 nameb##3 *+AR0(1), *+AR1(1), R2 &|| namea##3 R2, R1, R0 /* i;j;M|H;K;N */ &\
624 nameb##3 *+AR0(1), *+AR1(1), R2 &|| namea##3 R2, R0 /* i;j;M|H;K;N */ &\
625 nameb##3 *+AR1(1), R3, R2 &|| namea##3 *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
626 nameb##3 *+AR1(1), R3, R2 &|| namea##3 *+AR0(1), R0 /* i;H;M|j;K;N */ &\
627 nameb##3 *+AR1(1), R2 &|| namea##3 *+AR0(1), R1, R0 /* i;H;M|j;K;N */ &\
628 nameb##3 *+AR1(1), R2 &|| namea##3 *+AR0(1), R0 /* i;H;M|j;K;N */ &\
629 nameb##3 *+AR1(1), R0, R2 &|| namea##3 R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
630 nameb##3 *+AR1(1), R2 &|| namea##3 R0, *+AR0(1), R0 /* i;H;M|K;j;N */ &\
631 .endif &\
632 .ifdef TEST_ENH &\
633 nameb##3_##namea##3_M_enh: &\
634 nameb##3 R2, R2, R2 &|| namea##3 R0, R0, R0 /* H;K;M|i;j;N */ &\
635 nameb##3 R2, R2, R2 &|| namea##3 R0, R0 /* H;K;M|i;j;N */ &\
636 nameb##3 R2, R2, R2 &|| namea##3 R0 /* H;K;M|i;j;N */ &\
637 nameb##3 R2, R2 &|| namea##3 R0, R0 /* H;K;M|i;j;N */ &\
638 nameb##3 R2, R2 &|| namea##3 R0 /* H;K;M|i;j;N */ &\
639 nameb##3 R2 &|| namea##3 R0 /* H;K;M|i;j;N */ &\
640 nameb##3 R2, R2, R2 &|| namea##3 AR0, AR0, R0 /* H;K;M|i;j;N */ &\
641 nameb##3 R0, AR0, R2 &|| namea##3 AR0, R0, R0 /* H;i;M|j;K;N */ &\
642 nameb##3 R0, AR0, R2 &|| namea##3 R0, AR0, R0 /* H;i;M|K;j;N */ &\
643 nameb##3 AR0, AR1, R2 &|| namea##3 R2, R1, R0 /* i;j;M|H;K;N */ &\
644 nameb##3 AR0, R3, R2 &|| namea##3 AR0, R1, R0 /* i;H;M|j;K;N */ &\
645 nameb##3 AR0, R0, R2 &|| namea##3 R0, AR0, R0 /* i;H;M|K;j;N */ &\
646 .endif
648 /* P: General 2-operand operation with parallell store
649 Syntax: <ia> src2, dst1 || <ib> src3, dst2
650 src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
651 dst1 = Register 0-7 (L)
652 src3 = Register 0-7 (H)
653 dst2 = Indirect 0,1,IR0,IR1 (J)
654 Instr: 9/2 - ABSF||STF, ABSI||STI, FIX||STI, FLOAT||STF, LDF||STF,
655 LDI||STI, NEGF||STF, NEGI||STI, NOT||STI, C4x: FRIEEE||STF,
656 TOIEEE||STF
657 Alias: a||b, b||a
659 #define P_CLASS(namea, nameb, level) \
660 .ifdef level &\
661 namea##_##nameb##_P: &\
662 namea *+AR0(1), R0 &|| nameb R1, *+AR1(1) /* i;L|H,J */ &\
663 nameb R1, *+AR1(1) &|| namea *+AR0(1), R0 /* H,J|i;L */ &\
664 .endif &\
665 .ifdef TEST_ENH &\
666 namea##_##nameb##_P_enh: &\
667 namea R0, R0 &|| nameb R1, *+AR1(1) /* i;L|H,J */ &\
668 namea R0 &|| nameb R1, *+AR1(1) /* i;L|H,J */ &\
669 nameb R1, *+AR1(1) &|| namea R0, R0 /* H,J|i;L */ &\
670 nameb R1, *+AR1(1) &|| namea R0 /* H,J|i;L */ &\
671 .endif
674 /* Q: General 3-operand operation with parallell store
675 Syntax: <ia> src1, src2, dst1 || <ib> src3, dst2
676 src1 = Register 0-7 (K)
677 src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
678 dst1 = Register 0-7 (L)
679 src3 = Register 0-7 (H)
680 dst2 = Indirect 0,1,IR0,IR1 (J)
681 Instr: 4/0 - ASH3||STI, LSH3||STI, SUBF3||STF, SUBI3||STI
682 Alias: a||b, b||a, a3||b, b||a3
684 #define Q_CLASS(namea, nameb, level) \
685 .ifdef level &\
686 namea##_##nameb##_Q: &\
687 namea R0, *+AR0(1), R0 &|| nameb R1, *+AR1(1) /* K,i;L|H,J */ &\
688 nameb R1, *+AR1(1) &|| namea R0, *+AR0(1), R0 /* H,J|K,i;L */ &\
689 .endif &\
690 .ifdef TEST_ENH &\
691 namea##_##nameb##_Q_enh: &\
692 namea R0, R0, R0 &|| nameb R1, *+AR1(1) /* K,i;L|H,J */ &\
693 namea R0, R0 &|| nameb R1, *+AR1(1) /* K,i;L|H,J */ &\
694 nameb R1, *+AR1(1) &|| namea R0, R0, R0 /* H,J|K,i;L */ &\
695 nameb R1, *+AR1(1) &|| namea R0, R0 /* H,J|K,i;L */ &\
696 .endif &\
697 .ifdef level &\
698 namea##3_##nameb##_Q: &\
699 namea##3 R0, *+AR0(1), R0 &|| nameb R1, *+AR1(1) /* K,i;L|H,J */ &\
700 nameb R1, *+AR1(1) &|| namea##3 R0, *+AR0(1), R0 /* H,J|K,i;L */ &\
701 .endif &\
702 .ifdef TEST_ENH &\
703 namea##3_##nameb##_Q_enh: &\
704 namea##3 R0, R0, R0 &|| nameb R1, *+AR1(1) /* K,i;L|H,J */ &\
705 namea##3 R0, R0 &|| nameb R1, *+AR1(1) /* K,i;L|H,J */ &\
706 nameb R1, *+AR1(1) &|| namea##3 R0, R0, R0 /* H,J|K,i;L */ &\
707 nameb R1, *+AR1(1) &|| namea##3 R0, R0 /* H,J|K,i;L */ &\
708 .endif
711 /* QC: General commutative 3-operand operation with parallell store
712 Syntax: <ia> src2, src1, dst1 || <ib> src3, dst2
713 <ia> src1, src2, dst1 || <ib> src3, dst2 - Manual
714 src1 = Register 0-7 (K)
715 src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
716 dst1 = Register 0-7 (L)
717 src3 = Register 0-7 (H)
718 dst2 = Indirect 0,1,IR0,IR1 (J)
719 Instr: 7/0 - ADDF3||STF, ADDI3||STI, AND3||STI, MPYF3||STF, MPYI3||STI,
720 OR3||STI, XOR3||STI
721 Alias: a||b, b||a, a3||b, b||a3
723 #define QC_CLASS(namea, nameb, level) \
724 .ifdef level &\
725 namea##_##nameb##_QC: &\
726 namea *+AR0(1), R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
727 namea *+AR0(1), R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
728 namea R0, *+AR0(1), R0 &|| nameb R1, *+AR1(1) /* K;i;L|H,J */ &\
729 nameb R1, *+AR1(1) &|| namea *+AR0(1), R1, R0 /* H,J|i;K;L */ &\
730 nameb R1, *+AR1(1) &|| namea *+AR0(1), R0 /* H,J|i;K;L */ &\
731 nameb R1, *+AR1(1) &|| namea R0, *+AR0(1), R0 /* H,J|K;i;L */ &\
732 .endif &\
733 .ifdef TEST_ENH &\
734 namea##_##nameb##_QC_enh: &\
735 namea AR0, R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
736 namea R2, R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
737 namea R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
738 namea R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
739 namea R0, AR0, R0 &|| nameb R1, *+AR1(1) /* K;i;L|H,J */ &\
740 nameb R1, *+AR1(1) &|| namea AR0, R1, R0 /* H,J|i;K;L */ &\
741 nameb R1, *+AR1(1) &|| namea R2, R1, R0 /* H,J|i;K;L */ &\
742 nameb R1, *+AR1(1) &|| namea R1, R0 /* H,J|i;K;L */ &\
743 nameb R1, *+AR1(1) &|| namea R0 /* H,J|i;K;L */ &\
744 nameb R1, *+AR1(1) &|| namea R0, AR0, R0 /* H,J|K;i;L */ &\
745 .endif &\
746 .ifdef level &\
747 namea##3_##nameb##_QC: &\
748 namea##3 *+AR0(1), R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
749 namea##3 *+AR0(1), R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
750 namea##3 R0, *+AR0(1), R0 &|| nameb R1, *+AR1(1) /* K;i;L|H,J */ &\
751 nameb R1, *+AR1(1) &|| namea##3 *+AR0(1), R1, R0 /* H,J|i;K;L */ &\
752 nameb R1, *+AR1(1) &|| namea##3 *+AR0(1), R0 /* H,J|i;K;L */ &\
753 nameb R1, *+AR1(1) &|| namea##3 R0, *+AR0(1), R0 /* H,J|K;i;L */ &\
754 .endif &\
755 .ifdef TEST_ENH &\
756 namea##3_##nameb##_QC_enh: &\
757 namea##3 AR0, R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
758 namea##3 R2, R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
759 namea##3 R1, R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
760 namea##3 R0 &|| nameb R1, *+AR1(1) /* i;K;L|H,J */ &\
761 namea##3 R0, AR0, R0 &|| nameb R1, *+AR1(1) /* K;i;L|H,J */ &\
762 nameb R1, *+AR1(1) &|| namea##3 AR0, R1, R0 /* H,J|i;K;L */ &\
763 nameb R1, *+AR1(1) &|| namea##3 R2, R1, R0 /* H,J|i;K;L */ &\
764 nameb R1, *+AR1(1) &|| namea##3 R1, R0 /* H,J|i;K;L */ &\
765 nameb R1, *+AR1(1) &|| namea##3 R0 /* H,J|i;K;L */ &\
766 nameb R1, *+AR1(1) &|| namea##3 R0, AR0, R0 /* H,J|K;i;L */ &\
767 .endif
770 /* R: General register integer operation
771 Syntax: <i> dst
772 dst = Register (R)
773 Instr: 6/0 - POP, PUSH, ROL, ROLC, ROR, RORC
775 #define R_CLASS(name, level) \
776 .ifdef level &\
777 name##_R: &\
778 name AR0 /* R */ &\
779 .endif
782 /* RF: General register float operation
783 Syntax: <i> dst
784 dst = Register 0-11 (r)
785 Instr: 2/0 - POPF, PUSHF
787 #define RF_CLASS(name, level) \
788 .ifdef level &\
789 name##_RF: &\
790 name F0 /* r */ &\
791 .endif
794 /* S: General 3-operand float operation
795 Syntax: <i> src2, src1, dst
796 src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
797 src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
798 dst = Register 0-11 (r)
799 Instr: 1/0 - SUBF3
800 Alias: i, i3
802 #define S_CLASS(name, level) \
803 .ifdef level &\
804 name##_S: &\
805 name R2, R1, R0 /* e,g;r */ &\
806 name R1, R0 /* e,g;r */ &\
807 name R1, *+AR0(1), R0 /* e,J,r */ &\
808 name *+AR0(1), R1, R0 /* I,g;r */ &\
809 name *+AR0(1), R0 /* I,g;r */ &\
810 name *+AR0(1), *+AR1(1), R0 /* I,J,r */ &\
811 .endif &\
812 .ifdef TEST_C4X &\
813 name##_S_c4x: &\
814 name *+AR0(5), R1, R0 /* C,g;r */ &\
815 name *+AR0(5), R0 /* C,g;r */ &\
816 name *+AR0(5), *+AR1(5), R0 /* C,O,r */ &\
817 .endif &\
818 .ifdef level &\
819 name##3_S: &\
820 name##3 R2, R1, R0 /* e,g;r */ &\
821 name##3 R1, R0 /* e,g;r */ &\
822 name##3 R1, *+AR0(1), R0 /* e,J,r */ &\
823 name##3 *+AR0(1), R1, R0 /* I,g;r */ &\
824 name##3 *+AR0(1), R0 /* I,g;r */ &\
825 name##3 *+AR0(1), *+AR1(1), R0 /* I,J,r */ &\
826 .endif &\
827 .ifdef TEST_C4X &\
828 name##3_S_c4x: &\
829 name##3 *+AR0(5), R1, R0 /* C,g;r */ &\
830 name##3 *+AR0(5), R0 /* C,g;r */ &\
831 name##3 *+AR0(5), *+AR1(5), R0 /* C,O,r */ &\
832 .endif
835 /* SC: General commutative 3-operand float operation
836 Syntax: <i> src2, src1, dst - Manual
837 <i> src1, src2, dst
838 src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
839 src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
840 dst = Register 0-11 (r)
841 Instr: 2/0 - ADDF3, MPYF3
842 Alias: i, i3
844 #define SC_CLASS(name, level) \
845 .ifdef level &\
846 name##_SC: &\
847 name R2, R1, R0 /* e,g;r */ &\
848 name R1, R0 /* e,g;r */ &\
849 name R1, *+AR0(1), R0 /* e,J,r */ &\
850 name *+AR0(1), R1, R0 /* I,g;r */ &\
851 name *+AR0(1), R0 /* I,g;r */ &\
852 name *+AR0(1), *+AR1(1), R0 /* I,J,r */ &\
853 .endif &\
854 .ifdef TEST_C4X &\
855 name##_SC_c4x: &\
856 name *+AR0(5), R1, R0 /* C,g;r */ &\
857 name *+AR0(5), R0 /* C,g;r */ &\
858 name R1, *+AR0(5), R0 /* g,C,r */ &\
859 name *+AR0(5), *+AR1(5), R0 /* C,O,r */ &\
860 .endif &\
861 .ifdef level &\
862 name##3_SC: &\
863 name##3 R2, R1, R0 /* e,g;r */ &\
864 name##3 R1, R0 /* e,g;r */ &\
865 name##3 R1, *+AR0(1), R0 /* e,J,r */ &\
866 name##3 *+AR0(1), R1, R0 /* I,g;r */ &\
867 name##3 *+AR0(1), R0 /* I,g;r */ &\
868 name##3 *+AR0(1), *+AR1(1), R0 /* I,J,r */ &\
869 .endif &\
870 .ifdef TEST_C4X &\
871 name##3_SC_c4x: &\
872 name##3 *+AR0(5), R1, R0 /* C,g;r */ &\
873 name##3 *+AR0(5), R0 /* C,g;r */ &\
874 name##3 R1, *+AR0(5), R0 /* g,C,r */ &\
875 name##3 *+AR0(5), *+AR1(5), R0 /* C,O,r */ &\
876 .endif
879 /* S2: General 3-operand float operation with 2 args
880 Syntax: <i> src2, src1
881 src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
882 src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
883 Instr: 1/0 - CMPF3
884 Alias: i, i3
886 #define S2_CLASS(name, level) \
887 .ifdef level &\
888 name##_S2: &\
889 name R2, R1 /* e,g */ &\
890 name R1, *+AR0(1) /* e,J */ &\
891 name *+AR0(1), R1 /* I,g */ &\
892 name *+AR0(1), *+AR1(1) /* I,J */ &\
893 .endif &\
894 .ifdef TEST_C4X &\
895 name##_S2_c4x: &\
896 name *+AR0(5), R1 /* C,g */ &\
897 name *+AR0(5), *+AR1(5) /* C,O */ &\
898 .endif &\
899 .ifdef level &\
900 name##3_S2: &\
901 name##3 R2, R1 /* e,g */ &\
902 name##3 R1, *+AR0(1) /* e,J */ &\
903 name##3 *+AR0(1), R1 /* I,g */ &\
904 name##3 *+AR0(1), *+AR1(1) /* I,J */ &\
905 .endif &\
906 .ifdef TEST_C4X &\
907 name##3_S2_c4x: &\
908 name##3 *+AR0(5), R1 /* C,g */ &\
909 name##3 *+AR0(5), *+AR1(5) /* C,O */ &\
910 .endif
913 /* T: General 3-operand integer operand
914 Syntax: <i> src2, src1, dst
915 src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
916 src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
917 dst = Register (R)
918 Instr: 5/0 - ANDN3, ASH3, LSH3, SUBB3, SUBI3
919 Alias: i, i3
921 #define T_CLASS(name, level) \
922 .ifdef level &\
923 name##_T: &\
924 name AR2, AR1, AR0 /* E,G;R */ &\
925 name AR1, AR0 /* E,G;R */ &\
926 name AR1, *+AR0(1), AR0 /* E,J,R */ &\
927 name *+AR0(1), AR1, AR0 /* I,G;R */ &\
928 name *+AR0(1), AR0 /* I,G;R */ &\
929 name *+AR1(1), *+AR0(1), AR0 /* I,J,R */ &\
930 .endif &\
931 .ifdef TEST_C4X &\
932 name##_T_sc: &\
933 name -5, AR1, AR0 /* W,G;R */ &\
934 name -5, AR0 /* W,G;R */ &\
935 name *+AR0(5), AR1, AR0 /* C,G;R */ &\
936 name *+AR0(5), AR0 /* C,G;R */ &\
937 name -5, *+AR0(5), AR0 /* W,O,R */ &\
938 name *+AR0(5), *+AR1(5), AR0 /* C,O,R */ &\
939 .endif &\
940 .ifdef level &\
941 name##3_T: &\
942 name##3 AR2, AR1, AR0 /* E,G;R */ &\
943 name##3 AR1, AR0 /* E,G;R */ &\
944 name##3 AR1, *+AR0(1), AR0 /* E,J,R */ &\
945 name##3 *+AR0(1), AR1, AR0 /* I,G;R */ &\
946 name##3 *+AR0(1), AR0 /* I,G;R */ &\
947 name##3 *+AR1(1), *+AR0(1), AR0 /* I,J,R */ &\
948 .endif &\
949 .ifdef TEST_C4X &\
950 name##3_T_sc: &\
951 name##3 -5, AR1, AR0 /* W,G;R */ &\
952 name##3 -5, AR0 /* W,G;R */ &\
953 name##3 *+AR0(5), AR1, AR0 /* C,G;R */ &\
954 name##3 *+AR0(5), AR0 /* C,G;R */ &\
955 name##3 -5, *+AR0(5), AR0 /* W,O,R */ &\
956 name##3 *+AR0(5), *+AR1(5), AR0 /* C,O,R */ &\
957 .endif
960 /* TC: General commutative 3-operand integer operation
961 Syntax: <i> src2, src1, dst
962 <i> src1, src2, dst
963 src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
964 src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
965 dst = Register (R)
966 Instr: 6/2 - ADDC3, ADDI3, AND3, MPYI3, OR3, XOR3, C4x: MPYSHI, MPYUHI
967 Alias: i, i3
969 #define TC_CLASS(name, level) \
970 .ifdef level &\
971 name##_TC: &\
972 name AR2, AR1, AR0 /* E,G;R */ &\
973 name AR1, AR0 /* E,G;R */ &\
974 name AR1, *+AR0(1), AR0 /* E,J,R */ &\
975 name *+AR0(1), AR1, AR0 /* I,G;R */ &\
976 name *+AR0(1), AR0 /* I,G;R */ &\
977 name *+AR1(1), *+AR0(1), AR0 /* I,J,R */ &\
978 .endif &\
979 .ifdef TEST_C4X &\
980 name##_TC_c4x: &\
981 name -5, AR1, AR0 /* W,G;R */ &\
982 name -5, AR0 /* W,G;R */ &\
983 name AR1, -5, AR0 /* G,W,R */ &\
984 name *+AR0(5), AR1, AR0 /* C,G;R */ &\
985 name *+AR0(5), AR0 /* C,G;R */ &\
986 name AR1, *+AR0(5), AR0 /* G,C,R */ &\
987 name -5, *+AR0(5), AR0 /* W,O,R */ &\
988 name *+AR0(5), -5, AR0 /* O,W,R */ &\
989 name *+AR0(5), *+AR1(5), AR0 /* C,O,R */ &\
990 .endif &\
991 .ifdef level &\
992 name##3_TC: &\
993 name##3 AR2, AR1, AR0 /* E,G;R */ &\
994 name##3 AR1, AR0 /* E,G;R */ &\
995 name##3 AR1, *+AR0(1), AR0 /* E,J,R */ &\
996 name##3 *+AR0(1), AR1, AR0 /* I,G;R */ &\
997 name##3 *+AR0(1), AR0 /* I,G;R */ &\
998 name##3 *+AR1(1), *+AR0(1), AR0 /* I,J,R */ &\
999 .endif &\
1000 .ifdef TEST_C4X &\
1001 name##3_TC_c4x: &\
1002 name##3 -5, AR1, AR0 /* W,G;R */ &\
1003 name##3 -5, AR0 /* W,G;R */ &\
1004 name##3 AR1, -5, AR0 /* G,W,R */ &\
1005 name##3 *+AR0(5), AR1, AR0 /* C,G;R */ &\
1006 name##3 *+AR0(5), AR0 /* C,G;R */ &\
1007 name##3 AR1, *+AR0(5), AR0 /* G,C,R */ &\
1008 name##3 -5, *+AR0(5), AR0 /* W,O,R */ &\
1009 name##3 *+AR0(5), -5, AR0 /* O,W,R */ &\
1010 name##3 *+AR0(5), *+AR1(5), AR0 /* C,O,R */ &\
1011 .endif
1014 /* T2: General 3-operand integer operation with 2 args
1015 Syntax: <i> src2, src1
1016 src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
1017 src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
1018 Instr: 1/0 - CMPI3
1019 Alias: i, i3
1021 #define T2_CLASS(name, level) \
1022 .ifdef level &\
1023 name##_T2: &\
1024 name AR2, AR1 /* E,G */ &\
1025 name AR1, *+AR0(1) /* E,J */ &\
1026 name *+AR0(1), AR1 /* I,G */ &\
1027 name *+AR1(1), *+AR0(1) /* I,J */ &\
1028 .endif &\
1029 .ifdef TEST_C4X &\
1030 name##_T2_c4x: &\
1031 name -5, AR1 /* W,G */ &\
1032 name *+AR0(5), AR1 /* C,G */ &\
1033 name -5, *+AR0(5) /* W,O */ &\
1034 name *+AR0(5), *+AR1(5) /* C,O */ &\
1035 .endif &\
1036 .ifdef level &\
1037 name##3_T2: &\
1038 name##3 AR2, AR1 /* E,G */ &\
1039 name##3 AR1, *+AR0(1) /* E,J */ &\
1040 name##3 *+AR0(1), AR1 /* I,G */ &\
1041 name##3 *+AR1(1), *+AR0(1) /* I,J */ &\
1042 .endif &\
1043 .ifdef TEST_C4X &\
1044 name##3_T2_c4x: &\
1045 name##3 -5, AR1 /* W,G */ &\
1046 name##3 *+AR0(5), AR1 /* C,G */ &\
1047 name##3 -5, *+AR0(5) /* W,O */ &\
1048 name##3 *+AR0(5), *+AR1(5) /* C,O */ &\
1049 .endif
1052 /* T2C: General commutative 3-operand integer operation with 2 args
1053 Syntax: <i> src2, src1 - Manual
1054 <i> src1, src2
1055 src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
1056 src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (0)
1057 Instr: 1/0 - TSTB3
1058 Alias: i, i3
1060 #define T2C_CLASS(name, level) \
1061 .ifdef level &\
1062 name##_T2C: &\
1063 name AR2, AR1 /* E,G */ &\
1064 name AR1, *+AR0(1) /* E,J */ &\
1065 name *+AR0(1), AR1 /* I,G */ &\
1066 name *+AR1(1), *+AR0(1) /* I,J */ &\
1067 .endif &\
1068 .ifdef TEST_C4X &\
1069 name##_T2C_c4x: &\
1070 name -5, AR1 /* W,G */ &\
1071 name AR1, -5 /* G,W */ &\
1072 name *+AR0(5), AR1 /* C,G */ &\
1073 name AR1, *+AR0(5) /* G,C */ &\
1074 name -5, *+AR0(5) /* W,O */ &\
1075 name *+AR0(5), -5 /* O,W */ &\
1076 name *+AR0(5), *+AR1(5) /* C,O */ &\
1077 .endif &\
1078 .ifdef level &\
1079 name##3_T2C: &\
1080 name##3 AR2, AR1 /* E,G */ &\
1081 name##3 AR1, *+AR0(1) /* E,J */ &\
1082 name##3 *+AR0(1), AR1 /* I,G */ &\
1083 name##3 *+AR1(1), *+AR0(1) /* I,J */ &\
1084 .endif &\
1085 .ifdef TEST_C4X &\
1086 name##3_T2C_c4x: &\
1087 name##3 -5, AR1 /* W,G */ &\
1088 name##3 AR1, -5 /* G,W */ &\
1089 name##3 *+AR0(5), AR1 /* C,G */ &\
1090 name##3 AR1, *+AR0(5) /* G,C */ &\
1091 name##3 -5, *+AR0(5) /* W,O */ &\
1092 name##3 *+AR0(5), -5 /* O,W */ &\
1093 name##3 *+AR0(5), *+AR1(5) /* C,O */ &\
1094 .endif