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. 4 5 Arguments 6 , required arg follows 7 ; optional arg follows 8 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 45 */ 46 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 54 */ 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 64 65 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 72 */ 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 82 83 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 89 */ 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 99 100 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 106 */ 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 116 117 118 /* A2: Limited 1-operand (integer) operation 119 Syntax: <i> src 120 src = Register (Q), Indirect (*), None 121 Instr: 1/0 - NOP 122 */ 123 #define A2_CLASS(name, level) \ 124 .ifdef level &\ 125 name##_A2: &\ 126 name AR0 /* Q */ &\ 127 name *+AR0(5) /* * */ &\ 128 name /* */ &\ 129 .endif 130 131 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 136 */ 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 145 146 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 152 */ 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 159 160 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 166 */ 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 173 174 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 181 */ 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 190 191 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 198 */ 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 208 209 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 215 */ 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 225 226 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 233 */ 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 243 244 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 250 */ 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 260 261 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 267 */ 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 274 275 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 281 */ 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 288 289 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> 297 */ 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 307 308 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> 315 */ 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 325 326 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 335 */ 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 352 353 354 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. 363 */ 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 380 381 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 397 */ 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 647 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 658 */ 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 672 673 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 683 */ 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 709 710 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 722 */ 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 768 769 770 /* R: General register integer operation 771 Syntax: <i> dst 772 dst = Register (R) 773 Instr: 6/0 - POP, PUSH, ROL, ROLC, ROR, RORC 774 */ 775 #define R_CLASS(name, level) \ 776 .ifdef level &\ 777 name##_R: &\ 778 name AR0 /* R */ &\ 779 .endif 780 781 782 /* RF: General register float operation 783 Syntax: <i> dst 784 dst = Register 0-11 (r) 785 Instr: 2/0 - POPF, PUSHF 786 */ 787 #define RF_CLASS(name, level) \ 788 .ifdef level &\ 789 name##_RF: &\ 790 name F0 /* r */ &\ 791 .endif 792 793 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 801 */ 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 833 834 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 843 */ 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 877 878 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 885 */ 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 911 912 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 920 */ 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 958 959 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 968 */ 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 1012 1013 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 1020 */ 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 1050 1051 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 1059 */ 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 1095