Back to index

cell-binutils  2.17cvs20070401
opclasses.h
Go to the documentation of this file.
00001 /* Opcode infix
00002    B  condition              16--20   U,C,Z,LO,HI, etc.
00003    C  condition              23--27   U,C,Z,LO,HI, etc.
00004 
00005    Arguments
00006    ,  required arg follows
00007    ;  optional arg follows
00008 
00009    Argument types             bits    [classes] - example
00010    -----------------------------------------------------------
00011    *  indirect (all)          0--15   [A,AB,AU,AF,A2,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - *+AR0(5), *++AR0(IR0)
00012    #  direct (for LDP)        0--15   [Z] - @start, start
00013    @  direct                  0--15   [A,AB,AU,AF,A3,A6,A7,AY,B,BA,BB,BI,B6,B7] - @start, start
00014    A  address register       22--24   [D] - AR0, AR7
00015    B  unsigned integer        0--23   [I,I2] - @start, start  (absolute on C3x, relative on C4x)
00016    C  indirect (disp - C4x)   0--7    [S,SC,S2,T,TC,T2,T2C] - *+AR0(5)
00017    E  register (all)          0--7    [T,TC,T2,T2C] - R0, R7, R11, AR0, DP
00018    e  register (0-11)         0--7    [S,SC,S2] - R0, R7, R11
00019    F  short float immediate   0--15   [AF,B,BA,BB] - 3.5, 0e-3.5e-1
00020    G  register (all)          8--15   [T,TC,T2,T2C] - R0, R7, R11, AR0, DP
00021    g  register (0-11)         0--7    [S,SC,S2] - R0, R7, R11
00022    H  register (0-7)         18--16   [LS,M,P,Q] - R0, R7
00023    I  indirect (no disp)      0--7    [S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0)
00024    i  indirect (enhanced)     0--7    [LL,LS,M,P,Q,QC] - *+AR0(1), R5
00025    J  indirect (no disp)      8--15   [LL,LS,P,Q,QC,S,SC,S2,T,TC,T2,T2C] - *+AR0(1), *+AR0(IR0)
00026    j  indirect (enhanced)     8--15   [M] - *+AR0(1), R5
00027    K  register               19--21   [LL,M,Q,QC] - R0, R7
00028    L  register               22--24   [LL,LS,P,Q,QC] - R0, R7
00029    M  register (R2,R3)       22--22   [M] R2, R3
00030    N  register (R0,R1)       23--23   [M] R0, R1
00031    O  indirect(disp - C4x)    8--15   [S,SC,S2,T,TC,T2] - *+AR0(5)
00032    P  displacement (PC Rel)   0--15   [D,J,JS] - @start, start
00033    Q  register (all)          0--15   [A,AB,AU,A2,A3,AY,BA,BI,D,I2,J,JS] - R0, AR0, DP, SP
00034    q  register (0-11)         0--15   [AF,B,BB] - R0, R7, R11
00035    R  register (all)         16--20   [A,AB,AU,AF,A6,A7,R,T,TC] - R0, AR0, DP, SP
00036    r  register (0-11)        16--20   [B,BA,BB,BI,B6,B7,RF,S,SC] - R0, R1, R11
00037    S  short int immediate     0--15   [A,AB,AY,BI] - -5, 5
00038    T  integer (C4x)          16--20   [Z] - -5, 12
00039    U  unsigned integer        0--15   [AU,A3] - 0, 65535
00040    V  vector (C4x: 0--8)      0--4    [Z] - 25, 7
00041    W  short int (C4x)         0--7    [T,TC,T2,T2C] - -3, 5
00042    X  expansion reg (C4x)     0--4    [Z] - IVTP, TVTP
00043    Y  address reg (C4x)      16--20   [Z] - AR0, DP, SP, IR0
00044    Z  expansion reg (C4x)    16--20   [Z] - IVTP, TVTP
00045 */
00046 
00047 /* A: General 2-operand integer operations
00048    Syntax: <i> src, dst
00049       src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
00050       dst = Register (R)
00051    Instr: 15/8 - ABSI, ADDC, ADDI, ASH, CMPI, LDI, LSH, MPYI, NEGB, NEGI,
00052                 SUBB, SUBC, SUBI, SUBRB, SUBRI, C4x: LBn, LHn, LWLn, LWRn,
00053                 MBn, MHn, MPYSHI, MPYUHI
00054 */
00055 #define A_CLASS(name, level) \
00056   .ifdef level                    &\
00057 name##_A:                         &\
00058   name  AR1, AR0        /* Q;R */ &\
00059   name  AR0             /* Q;R */ &\
00060   name  @start, AR0     /* @,R */ &\
00061   name  *+AR0(5), AR0   /* *,R */ &\
00062   name  -5, AR0         /* S,R */ &\
00063   .endif
00064 
00065 
00066 /* AB: General 2-operand integer operation with condition
00067    Syntax: <i>c src, dst
00068        c   = Condition
00069        src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
00070        dst = Register (R)
00071    Instr: 1/0 - LDIc
00072 */
00073 #define AB_CLASS(name, level) \
00074   .ifdef level                    &\
00075 name##_AB:                        &\
00076   name  AR1, AR0        /* Q;R */ &\
00077   name  AR0             /* Q;R */ &\
00078   name  @start, AR0     /* @,R */ &\
00079   name  *+AR0(5), AR0   /* *,R */ &\
00080   name  -5, AR0         /* S,R */ &\
00081   .endif
00082 
00083 
00084 /* AU: General 2-operand unsigned integer operation
00085    Syntax: <i> src, dst
00086         src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U)
00087         dst = Register (R)
00088    Instr: 6/2 - AND, ANDN, NOT, OR, TSTB, XOR, C4x: LBUn, LHUn
00089 */
00090 #define AU_CLASS(name, level) \
00091   .ifdef level                    &\
00092 name##_AU:                        &\
00093   name  AR1, AR0        /* Q;R */ &\
00094   name  AR0             /* Q;R */ &\
00095   name  @start, AR0     /* @,R */ &\
00096   name  *+AR0(5), AR0   /* *,R */ &\
00097   name  5, AR0          /* U,R */ &\
00098   .endif
00099 
00100 
00101 /* AF: General 2-operand float to integer operation
00102    Syntax: <i> src, dst
00103         src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
00104         dst = Register (R)
00105    Instr: 1/0 - FIX
00106 */
00107 #define AF_CLASS(name, level) \
00108   .ifdef level                    &\
00109 name##_AF:                        &\
00110   name  R1, R0          /* q;R */ &\
00111   name  R0              /* q;R */ &\
00112   name  @start, AR0     /* @,R */ &\
00113   name  *+AR0(5), AR0   /* *,R */ &\
00114   name  3.5, AR0        /* F,R */ &\
00115   .endif
00116 
00117 
00118 /* A2: Limited 1-operand (integer) operation
00119    Syntax: <i> src
00120        src = Register (Q), Indirect (*), None
00121    Instr: 1/0 - NOP
00122 */
00123 #define A2_CLASS(name, level) \
00124   .ifdef level                    &\
00125 name##_A2:                        &\
00126   name  AR0               /* Q */ &\
00127   name  *+AR0(5)          /* * */ &\
00128   name                    /*   */ &\
00129   .endif
00130 
00131 
00132 /* A3: General 1-operand unsigned integer operation
00133    Syntax: <i> src
00134         src = Register (Q), Direct (@), Indirect (*), Unsigned immediate (U)
00135    Instr: 1/0 - RPTS
00136 */
00137 #define A3_CLASS(name, level) \
00138   .ifdef level                    &\
00139 name##_A3:                        &\
00140   name  AR1               /* Q */ &\
00141   name  @start            /* @ */ &\
00142   name  *+AR0(5)          /* * */ &\
00143   name  5                 /* U */ &\
00144   .endif
00145 
00146 
00147 /* A6: Limited 2-operand integer operation
00148    Syntax: <i> src, dst
00149        src = Direct (@), Indirect (*)
00150        dst = Register (R)
00151    Instr: 1/1 - LDII, C4x: SIGI
00152 */
00153 #define A6_CLASS(name, level) \
00154   .ifdef level                    &\
00155 name##_A6:                        &\
00156   name  @start, AR0     /* @,R */ &\
00157   name  *+AR0(5), AR0   /* *,R */ &\
00158   .endif
00159 
00160 
00161 /* A7: Limited 2-operand integer store operation
00162    Syntax: <i> src, dst
00163        src = Register (R)
00164        dst = Direct (@), Indirect (*)
00165    Instr: 2/0 - STI, STII
00166 */
00167 #define A7_CLASS(name, level) \
00168   .ifdef level                    &\
00169 name##_A7:                        &\
00170   name  AR0, @start     /* R,@ */ &\
00171   name  AR0, *+AR0(5)   /* R,* */ &\
00172   .endif
00173 
00174 
00175 /* AY: General 2-operand signed address load operation
00176    Syntax: <i> src, dst
00177         src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
00178         dst = Address register - ARx, IRx, DP, BK, SP (Y)
00179    Instr: 0/1 - C4x: LDA
00180    Note: Q and Y should *never* be the same register
00181 */
00182 #define AY_CLASS(name, level) \
00183   .ifdef level                    &\
00184 name##_AY:                        &\
00185   name  AR1, AR0        /* Q,Y */ &\
00186   name  @start, AR0     /* @,Y */ &\
00187   name  *+AR0(5), AR0   /* *,Y */ &\
00188   name  -5, AR0         /* S,Y */ &\
00189   .endif
00190 
00191 
00192 /* B: General 2-operand float operation
00193    Syntax: <i> src, dst
00194        src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
00195        dst = Register 0-11 (r)
00196    Instr: 12/2 - ABSF, ADDF, CMPF, LDE, LDF, LDM, MPYF, NEGF, NORM, RND,
00197                  SUBF, SUBRF, C4x: RSQRF, TOIEEE
00198 */
00199 #define B_CLASS(name, level) \
00200   .ifdef level                    &\
00201 name##_B:                         &\
00202   name  R1, R0          /* q;r */ &\
00203   name  R0              /* q;r */ &\
00204   name  @start, R0      /* @,r */ &\
00205   name  *+AR0(5), R0    /* *,r */ &\
00206   name  3.5, R0         /* F,r */ &\
00207   .endif
00208 
00209 
00210 /* BA: General 2-operand integer to float operation
00211    Syntax: <i> src, dst
00212        src = Register (Q), Direct (@), Indirect (*), Float immediate (F)
00213        dst = Register 0-11 (r)
00214    Instr: 0/1 - C4x: CRCPF
00215 */
00216 #define BA_CLASS(name, level) \
00217   .ifdef level                    &\
00218 name##_BA:                        &\
00219   name  AR1, R0         /* Q;r */ &\
00220   name  R0              /* Q;r */ &\
00221   name  @start, R0      /* @,r */ &\
00222   name  *+AR0(5), R0    /* *,r */ &\
00223   name  3.5, R0         /* F,r */ &\
00224   .endif
00225 
00226 
00227 /* BB: General 2-operand conditional float operation
00228    Syntax: <i>c src, dst
00229        c   = Condition
00230        src = Register 0-11 (q), Direct (@), Indirect (*), Float immediate (F)
00231        dst = Register 0-11 (r)
00232    Instr: 1/0 - LDFc
00233 */
00234 #define BB_CLASS(name, level) \
00235   .ifdef level                    &\
00236 name##_BB:                        &\
00237   name  R1, R0          /* q;r */ &\
00238   name  R0              /* q;r */ &\
00239   name  @start, R0      /* @,r */ &\
00240   name  *+AR0(5), R0    /* *,r */ &\
00241   name  3.5, R0         /* F,r */ &\
00242   .endif
00243 
00244 
00245 /* BI: General 2-operand integer to float operation (yet different to BA)
00246    Syntax: <i> src, dst
00247        src = Register (Q), Direct (@), Indirect (*), Signed immediate (S)
00248        dst = Register 0-11 (r)
00249    Instr: 1/0 - FLOAT
00250 */
00251 #define BI_CLASS(name, level) \
00252   .ifdef level                    &\
00253 name##_BI:                        &\
00254   name  AR1, R0         /* Q;r */ &\
00255   name  R0              /* Q;r */ &\
00256   name  @start, R0      /* @,r */ &\
00257   name  *+AR0(5), R0    /* *,r */ &\
00258   name  -5, R0          /* S,r */ &\
00259   .endif
00260 
00261 
00262 /* B6: Limited 2-operand float operation 
00263    Syntax: <i> src, dst
00264        src = Direct (@), Indirect (*)
00265        dst = Register 0-11 (r)
00266    Instr: 1/1 - LDFI, C4x: FRIEEE
00267 */
00268 #define B6_CLASS(name, level) \
00269   .ifdef level                    &\
00270 name##_B6:                        &\
00271   name  @start, R0      /* @,r */ &\
00272   name  *+AR0(5), R0    /* *,r */ &\
00273   .endif
00274 
00275 
00276 /* B7: Limited 2-operand float store operation
00277    Syntax: <i> src, dst
00278        src = Register 0-11 (r)
00279        dst = Direct (@), Indirect (*)
00280    Instr: 2/0 - STF, STFI
00281 */
00282 #define B7_CLASS(name, level) \
00283   .ifdef level                    &\
00284 name##_B7:                        &\
00285   name  R0, @start      /* r,@ */ &\
00286   name  R0, *+AR0(5)    /* r,* */ &\
00287   .endif
00288 
00289 
00290 /* D: Decrement and brach operations
00291    Syntax: <i>c ARn, dst
00292        c   = condition
00293        ARn = AR register 0-7 (A)
00294        dst = Register (Q), PC-relative (P)
00295    Instr: 2/0 - DBc, DBcD
00296    Alias: <namea> <nameb>
00297 */
00298 #define D_CLASS(namea, nameb, level) \
00299   .ifdef level                    &\
00300 namea##_D:                        &\
00301   namea  AR0, R0        /* A,Q */ &\
00302   namea  AR0, start     /* A,P */ &\
00303 nameb##_D:                        &\
00304   nameb  AR0, R0        /* A,Q */ &\
00305   nameb  AR0, start     /* A,P */ &\
00306   .endif
00307 
00308 
00309 /* J: General conditional branch operations
00310    Syntax: <i>c dst
00311        c   = Condition
00312        dst = Register (Q), PC-relative (P)
00313    Instr: 2/3 - Bc, BcD, C4x: BcAF, BcAT, LAJc
00314    Alias: <namea> <nameb>
00315 */
00316 #define J_CLASS(namea, nameb, level) \
00317   .ifdef level                    &\
00318 namea##_J:                        &\
00319   namea  R0               /* Q */ &\
00320   namea  start            /* P */ &\
00321 nameb##_J:                        &\
00322   nameb  R0               /* Q */ &\
00323   nameb  start            /* P */ &\
00324   .endif
00325 
00326 
00327 /* LL: Load-load parallell operation
00328    Syntax: <i> src2, dst2 || <i> src1, dst1
00329        src1 = Indirect 0,1,IR0,IR1 (J)
00330        dst1 = Register 0-7 (K)
00331        src2 = Indirect 0,1,IR0,IR1, ENH: Register (i)
00332        dst2 = Register 0-7 (L)
00333    Instr: 2/0 - LDF||LDF, LDI||LDI
00334    Alias: i||i, i1||i2, i2||i1
00335 */
00336 #define LL_CLASS(name, level) \
00337   .ifdef level                                                      &\
00338 name##_LL:                                                          &\
00339   name     *+AR0(1), R0  &||  name     *+AR1(1), R1   /* i;L|J,K */ &\
00340   name##2  *+AR0(1), R0  &||  name##1  *+AR1(1), R1   /* i;L|J,K */ &\
00341   name##1  *+AR1(1), R1  &||  name##2  *+AR0(1), R0   /* J,K|i;L */ &\
00342   .endif                                                            &\
00343   .ifdef TEST_ENH                                                   &\
00344 name##_LL_enh:                                                      &\
00345   name     R0, R0        &||  name     *+AR1(1), R1   /* i;L|J,K */ &\
00346   name     R0            &||  name     *+AR1(1), R1   /* i;L|J,K */ &\
00347   name##2  R0, R0        &||  name##1  *+AR1(1), R1   /* i;L|J,K */ &\
00348   name##2  R0            &||  name##1  *+AR1(1), R1   /* i;L|J,K */ &\
00349   name##1  *+AR1(1), R1  &||  name##2  R0, R0         /* J,K|i;L */ &\
00350   name##1  *+AR1(1), R1  &||  name##2  R0             /* J,K|i;L */ &\
00351   .endif
00352 
00353 
00354 
00355 /* LS: Store-store parallell operation
00356    Syntax: <i> src2, dst2 || <i> src1, dst1
00357        src1 = Register 0-7 (H)
00358        dst1 = Indirect 0,1,IR0,IR1 (J)
00359        src2 = Register 0-7 (L)
00360        dst2 = Indirect 0,1,IR0,IR1, ENH: register (i)
00361    Instr: 2/0 - STF||STF, STI||STI
00362    Alias: i||i, i1||i2, i2||i1.
00363 */
00364 #define LS_CLASS(name, level) \
00365   .ifdef level                                                      &\
00366 name##_LS:                                                          &\
00367   name     R0, *+AR0(1)  &||  name     R1, *+AR1(1)   /* L;i|H,J */ &\
00368   name##2  R0, *+AR0(1)  &||  name##1  R1, *+AR1(1)   /* L;i|H,J */ &\
00369   name##1  R1, *+AR1(1)  &||  name##2  R0, *+AR0(1)   /* H,J|L;i */ &\
00370   .endif                                                            &\
00371   .ifdef TEST_ENH                                                   &\
00372 name##_LS_enh:                                                      &\
00373   name     R0, R0        &||  name     R1, *+AR1(1)   /* L;i|H,J */ &\
00374   name     R0            &||  name     R1, *+AR1(1)   /* L;i|H,J */ &\
00375   name##2  R0, R0        &||  name##1  R1, *+AR1(1)   /* L;i|H,J */ &\
00376   name##2  R0            &||  name##1  R1, *+AR1(1)   /* L;i|H,J */ &\
00377   name##1  R1, *+AR1(1)  &||  name##2  R0, R0         /* H,J|L;i */ &\
00378   name##1  R1, *+AR1(1)  &||  name##2  R0             /* H,J|L;i */ &\
00379   .endif
00380 
00381 
00382 /* M: General multiply and add/sub operations
00383    Syntax: <ia> src3,src4,dst1 || <ib> src2,src1,dst2 [00] - Manual
00384            <ia> src3,src1,dst1 || <ib> src2,src4,dst2 [01] - Manual
00385            <ia> src1,src3,dst1 || <ib> src2,src4,dst2 [01]
00386            <ia> src1,src2,dst1 || <ib> src4,src3,dst2 [02] - Manual
00387            <ia> src3,src1,dst1 || <ib> src4,src2,dst2 [03] - Manual
00388            <ia> src1,src3,dst1 || <ib> src4,src2,dst2 [03]
00389        src1 = Register 0-7 (K)
00390        src2 = Register 0-7 (H)
00391        src3 = Indirect 0,1,IR0,IR1, ENH: register (j)
00392        src4 = Indirect 0,1,IR0,IR1, ENH: register (i)
00393        dst1 = Register 0-1 (N)
00394        dst2 = Register 2-3 (M)
00395    Instr: 4/0 - MPYF3||ADDF3, MPYF3||SUBF3, MPYI3||ADDI3, MPYI3||SUBI3
00396    Alias: a||b, a3||n, a||b3, a3||b3, b||a, b3||a, b||a3, b3||a3
00397 */
00398 #define M_CLASS(namea, nameb, level) \
00399   .ifdef level                                                                                &\
00400 namea##_##nameb##_M:                                                                          &\
00401   namea     *+AR0(1), *+AR1(1), R0  &||  nameb     R0, R1, R2               /* i;j;N|H;K;M */ &\
00402   namea     *+AR0(1), *+AR1(1), R0  &||  nameb     R0, R2                   /* i;j;N|H;K;M */ &\
00403   namea     *+AR0(1), R0, R0        &||  nameb     R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00404   namea     *+AR0(1), R0            &||  nameb     R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00405   namea     R0, *+AR0(1), R0        &||  nameb     R0, *+AR1(1), R2         /* K;j;N|H;i;M */ &\
00406   namea     R2, R1, R0              &||  nameb     *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00407   namea     R2, R0                  &||  nameb     *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00408   namea     *+AR0(1), R1, R0        &||  nameb     *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00409   namea     *+AR0(1), R0            &||  nameb     *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00410   namea     *+AR0(1), R1, R0        &||  nameb     *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00411   namea     *+AR0(1), R0            &||  nameb     *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00412   namea     R0, *+AR0(1), R0        &||  nameb     *+AR1(1), R0, R2         /* K;j;N|i;H;M */ &\
00413   namea     R0, *+AR0(1), R0        &||  nameb     *+AR1(1), R2             /* K;j;N|i;H;M */ &\
00414   .endif                                                                                      &\
00415   .ifdef TEST_ENH                                                                             &\
00416 namea##_##nameb##_M_enh:                                                                      &\
00417   namea     R0, R0, R0              &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00418   namea     R0, R0                  &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00419   namea     R0                      &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00420   namea     R0, R0                  &||  nameb     R2, R2                   /* i;j;N|H;K;M */ &\
00421   namea     R0                      &||  nameb     R2, R2                   /* i;j;N|H;K;M */ &\
00422   namea     R0                      &||  nameb     R2                       /* i;j;N|H;K;M */ &\
00423   namea     AR0, AR0, R0            &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00424   namea     AR0, R0, R0             &||  nameb     R0, AR0, R2              /* j;K;N|H;i;M */ &\
00425   namea     R0, AR0, R0             &||  nameb     R0, AR0, R2              /* K;j;N|H;i;M */ &\
00426   namea     R2, R1, R0              &||  nameb     AR0, AR1, R2             /* H;K;N|i;j;M */ &\
00427   namea     AR0, R1, R0             &||  nameb     AR0, R3, R2              /* j;K;N|i;H;M */ &\
00428   namea     R0, AR0, R0             &||  nameb     AR0, R0, R2              /* K;j;N|i;H;M */ &\
00429   .endif                                                                                      &\
00430   .ifdef level                                                                                &\
00431 namea##3_##nameb##_M:                                                                         &\
00432   namea##3  *+AR0(1), *+AR1(1), R0  &||  nameb     R0, R1, R2               /* i;j;N|H;K;M */ &\
00433   namea##3  *+AR0(1), *+AR1(1), R0  &||  nameb     R0, R2                   /* i;j;N|H;K;M */ &\
00434   namea##3  *+AR0(1), R0, R0        &||  nameb     R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00435   namea##3  *+AR0(1), R0            &||  nameb     R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00436   namea##3  R0, *+AR0(1), R0        &||  nameb     R0, *+AR1(1), R2         /* K;j;N|H;i;M */ &\
00437   namea##3  R2, R1, R0              &||  nameb     *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00438   namea##3  R2, R0                  &||  nameb     *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00439   namea##3  *+AR0(1), R1, R0        &||  nameb     *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00440   namea##3  *+AR0(1), R0            &||  nameb     *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00441   namea##3  *+AR0(1), R1, R0        &||  nameb     *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00442   namea##3  *+AR0(1), R0            &||  nameb     *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00443   namea##3  R0, *+AR0(1), R0        &||  nameb     *+AR1(1), R0, R2         /* K;j;N|i;H;M */ &\
00444   namea##3  R0, *+AR0(1), R0        &||  nameb     *+AR1(1), R2             /* K;j;N|i;H;M */ &\
00445   .endif                                                                                      &\
00446   .ifdef TEST_ENH                                                                             &\
00447 namea##3_##nameb##_M_enh:                                                                     &\
00448   namea##3  R0, R0, R0              &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00449   namea##3  R0, R0                  &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00450   namea##3  R0                      &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00451   namea##3  R0, R0                  &||  nameb     R2, R2                   /* i;j;N|H;K;M */ &\
00452   namea##3  R0                      &||  nameb     R2, R2                   /* i;j;N|H;K;M */ &\
00453   namea##3  R0                      &||  nameb     R2                       /* i;j;N|H;K;M */ &\
00454   namea##3  AR0, AR0, R0            &||  nameb     R2, R2, R2               /* i;j;N|H;K;M */ &\
00455   namea##3  AR0, R0, R0             &||  nameb     R0, AR0, R2              /* j;K;N|H;i;M */ &\
00456   namea##3  R0, AR0, R0             &||  nameb     R0, AR0, R2              /* K;j;N|H;i;M */ &\
00457   namea##3  R2, R1, R0              &||  nameb     AR0, AR1, R2             /* H;K;N|i;j;M */ &\
00458   namea##3  AR0, R1, R0             &||  nameb     AR0, R3, R2              /* j;K;N|i;H;M */ &\
00459   namea##3  R0, AR0, R0             &||  nameb     AR0, R0, R2              /* K;j;N|i;H;M */ &\
00460   .endif                                                                                      &\
00461   .ifdef level                                                                                &\
00462 namea##_##nameb##3_M:                                                                         &\
00463   namea     *+AR0(1), *+AR1(1), R0  &||  nameb##3  R0, R1, R2               /* i;j;N|H;K;M */ &\
00464   namea     *+AR0(1), *+AR1(1), R0  &||  nameb##3  R0, R2                   /* i;j;N|H;K;M */ &\
00465   namea     *+AR0(1), R0, R0        &||  nameb##3  R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00466   namea     *+AR0(1), R0            &||  nameb##3  R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00467   namea     R0, *+AR0(1), R0        &||  nameb##3  R0, *+AR1(1), R2         /* K;j;N|H;i;M */ &\
00468   namea     R2, R1, R0              &||  nameb##3  *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00469   namea     R2, R0                  &||  nameb##3  *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00470   namea     *+AR0(1), R1, R0        &||  nameb##3  *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00471   namea     *+AR0(1), R0            &||  nameb##3  *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00472   namea     *+AR0(1), R1, R0        &||  nameb##3  *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00473   namea     *+AR0(1), R0            &||  nameb##3  *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00474   namea     R0, *+AR0(1), R0        &||  nameb##3  *+AR1(1), R0, R2         /* K;j;N|i;H;M */ &\
00475   namea     R0, *+AR0(1), R0        &||  nameb##3  *+AR1(1), R2             /* K;j;N|i;H;M */ &\
00476   .endif                                                                                      &\
00477   .ifdef TEST_ENH                                                                             &\
00478 namea##_##nameb##3_M_enh:                                                                     &\
00479   namea     R0, R0, R0              &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00480   namea     R0, R0                  &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00481   namea     R0                      &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00482   namea     R0, R0                  &||  nameb##3  R2, R2                   /* i;j;N|H;K;M */ &\
00483   namea     R0                      &||  nameb##3  R2, R2                   /* i;j;N|H;K;M */ &\
00484   namea     R0                      &||  nameb##3  R2                       /* i;j;N|H;K;M */ &\
00485   namea     AR0, AR0, R0            &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00486   namea     AR0, R0, R0             &||  nameb##3  R0, AR0, R2              /* j;K;N|H;i;M */ &\
00487   namea     R0, AR0, R0             &||  nameb##3  R0, AR0, R2              /* K;j;N|H;i;M */ &\
00488   namea     R2, R1, R0              &||  nameb##3  AR0, AR1, R2             /* H;K;N|i;j;M */ &\
00489   namea     AR0, R1, R0             &||  nameb##3  AR0, R3, R2              /* j;K;N|i;H;M */ &\
00490   namea     R0, AR0, R0             &||  nameb##3  AR0, R0, R2              /* K;j;N|i;H;M */ &\
00491   .endif                                                                                      &\
00492   .ifdef level                                                                                &\
00493 namea##3_##nameb##3_M:                                                                        &\
00494   namea##3  *+AR0(1), *+AR1(1), R0  &||  nameb##3  R0, R1, R2               /* i;j;N|H;K;M */ &\
00495   namea##3  *+AR0(1), *+AR1(1), R0  &||  nameb##3  R0, R2                   /* i;j;N|H;K;M */ &\
00496   namea##3  *+AR0(1), R0, R0        &||  nameb##3  R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00497   namea##3  *+AR0(1), R0            &||  nameb##3  R0, *+AR1(1), R2         /* j;K;N|H;i;M */ &\
00498   namea##3  R0, *+AR0(1), R0        &||  nameb##3  R0, *+AR1(1), R2         /* K;j;N|H;i;M */ &\
00499   namea##3  R2, R1, R0              &||  nameb##3  *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00500   namea##3  R2, R0                  &||  nameb##3  *+AR0(1), *+AR1(1), R2   /* H;K;N|i;j;M */ &\
00501   namea##3  *+AR0(1), R1, R0        &||  nameb##3  *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00502   namea##3  *+AR0(1), R0            &||  nameb##3  *+AR1(1), R3, R2         /* j;K;N|i;H;M */ &\
00503   namea##3  *+AR0(1), R1, R0        &||  nameb##3  *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00504   namea##3  *+AR0(1), R0            &||  nameb##3  *+AR1(1), R2             /* j;K;N|i;H;M */ &\
00505   namea##3  R0, *+AR0(1), R0        &||  nameb##3  *+AR1(1), R0, R2         /* K;j;N|i;H;M */ &\
00506   namea##3  R0, *+AR0(1), R0        &||  nameb##3  *+AR1(1), R2             /* K;j;N|i;H;M */ &\
00507   .endif                                                                                      &\
00508   .ifdef TEST_ENH                                                                             &\
00509 namea##3_##nameb##3_M_enh:                                                                    &\
00510   namea##3  R0, R0, R0              &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00511   namea##3  R0, R0                  &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00512   namea##3  R0                      &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00513   namea##3  R0, R0                  &||  nameb##3  R2, R2                   /* i;j;N|H;K;M */ &\
00514   namea##3  R0                      &||  nameb##3  R2, R2                   /* i;j;N|H;K;M */ &\
00515   namea##3  R0                      &||  nameb##3  R2                       /* i;j;N|H;K;M */ &\
00516   namea##3  AR0, AR0, R0            &||  nameb##3  R2, R2, R2               /* i;j;N|H;K;M */ &\
00517   namea##3  AR0, R0, R0             &||  nameb##3  R0, AR0, R2              /* j;K;N|H;i;M */ &\
00518   namea##3  R0, AR0, R0             &||  nameb##3  R0, AR0, R2              /* K;j;N|H;i;M */ &\
00519   namea##3  R2, R1, R0              &||  nameb##3  AR0, AR1, R2             /* H;K;N|i;j;M */ &\
00520   namea##3  AR0, R1, R0             &||  nameb##3  AR0, R3, R2              /* j;K;N|i;H;M */ &\
00521   namea##3  R0, AR0, R0             &||  nameb##3  AR0, R0, R2              /* K;j;N|i;H;M */ &\
00522   .endif                                                                                      &\
00523   .ifdef level                                                                                &\
00524 nameb##_##namea##_M:                                                                          &\
00525   nameb     R0, R1, R2              &||  namea     *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00526   nameb     R0, R2                  &||  namea     *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00527   nameb     R0, *+AR1(1), R2        &||  namea     *+AR0(1), R0, R0         /* H;i;M|j;K;N */ &\
00528   nameb     R0, *+AR1(1), R2        &||  namea     *+AR0(1), R0             /* H;i;M|j;K;N */ &\
00529   nameb     R0, *+AR1(1), R2        &||  namea     R0, *+AR0(1), R0         /* H;i;M|K;j;N */ &\
00530   nameb     *+AR0(1), *+AR1(1), R2  &||  namea     R2, R1, R0               /* i;j;M|H;K;N */ &\
00531   nameb     *+AR0(1), *+AR1(1), R2  &||  namea     R2, R0                   /* i;j;M|H;K;N */ &\
00532   nameb     *+AR1(1), R3, R2        &||  namea     *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00533   nameb     *+AR1(1), R3, R2        &||  namea     *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00534   nameb     *+AR1(1), R2            &||  namea     *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00535   nameb     *+AR1(1), R2            &||  namea     *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00536   nameb     *+AR1(1), R0, R2        &||  namea     R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00537   nameb     *+AR1(1), R2            &||  namea     R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00538   .endif                                                                                      &\
00539   .ifdef TEST_ENH                                                                             &\
00540 nameb##_##namea##_M_enh:                                                                      &\
00541   nameb     R2, R2, R2              &||  namea     R0, R0, R0               /* H;K;M|i;j;N */ &\
00542   nameb     R2, R2, R2              &||  namea     R0, R0                   /* H;K;M|i;j;N */ &\
00543   nameb     R2, R2, R2              &||  namea     R0                       /* H;K;M|i;j;N */ &\
00544   nameb     R2, R2                  &||  namea     R0, R0                   /* H;K;M|i;j;N */ &\
00545   nameb     R2, R2                  &||  namea     R0                       /* H;K;M|i;j;N */ &\
00546   nameb     R2                      &||  namea     R0                       /* H;K;M|i;j;N */ &\
00547   nameb     R2, R2, R2              &||  namea     AR0, AR0, R0             /* H;K;M|i;j;N */ &\
00548   nameb     R0, AR0, R2             &||  namea     AR0, R0, R0              /* H;i;M|j;K;N */ &\
00549   nameb     R0, AR0, R2             &||  namea     R0, AR0, R0              /* H;i;M|K;j;N */ &\
00550   nameb     AR0, AR1, R2            &||  namea     R2, R1, R0               /* i;j;M|H;K;N */ &\
00551   nameb     AR0, R3, R2             &||  namea     AR0, R1, R0              /* i;H;M|j;K;N */ &\
00552   nameb     AR0, R0, R2             &||  namea     R0, AR0, R0              /* i;H;M|K;j;N */ &\
00553   .endif                                                                                      &\
00554   .ifdef level                                                                                &\
00555 nameb##3_##namea##_M:                                                                         &\
00556   nameb##3  R0, R1, R2              &||  namea     *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00557   nameb##3  R0, R2                  &||  namea     *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00558   nameb##3  R0, *+AR1(1), R2        &||  namea     *+AR0(1), R0, R0         /* H;i;M|j;K;N */ &\
00559   nameb##3  R0, *+AR1(1), R2        &||  namea     *+AR0(1), R0             /* H;i;M|j;K;N */ &\
00560   nameb##3  R0, *+AR1(1), R2        &||  namea     R0, *+AR0(1), R0         /* H;i;M|K;j;N */ &\
00561   nameb##3  *+AR0(1), *+AR1(1), R2  &||  namea     R2, R1, R0               /* i;j;M|H;K;N */ &\
00562   nameb##3  *+AR0(1), *+AR1(1), R2  &||  namea     R2, R0                   /* i;j;M|H;K;N */ &\
00563   nameb##3  *+AR1(1), R3, R2        &||  namea     *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00564   nameb##3  *+AR1(1), R3, R2        &||  namea     *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00565   nameb##3  *+AR1(1), R2            &||  namea     *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00566   nameb##3  *+AR1(1), R2            &||  namea     *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00567   nameb##3  *+AR1(1), R0, R2        &||  namea     R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00568   nameb##3  *+AR1(1), R2            &||  namea     R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00569   .endif                                                                                      &\
00570   .ifdef TEST_ENH                                                                             &\
00571 nameb##3_##namea##_M_enh:                                                                     &\
00572   nameb##3  R2, R2, R2              &||  namea     R0, R0, R0               /* H;K;M|i;j;N */ &\
00573   nameb##3  R2, R2, R2              &||  namea     R0, R0                   /* H;K;M|i;j;N */ &\
00574   nameb##3  R2, R2, R2              &||  namea     R0                       /* H;K;M|i;j;N */ &\
00575   nameb##3  R2, R2                  &||  namea     R0, R0                   /* H;K;M|i;j;N */ &\
00576   nameb##3  R2, R2                  &||  namea     R0                       /* H;K;M|i;j;N */ &\
00577   nameb##3  R2                      &||  namea     R0                       /* H;K;M|i;j;N */ &\
00578   nameb##3  R2, R2, R2              &||  namea     AR0, AR0, R0             /* H;K;M|i;j;N */ &\
00579   nameb##3  R0, AR0, R2             &||  namea     AR0, R0, R0              /* H;i;M|j;K;N */ &\
00580   nameb##3  R0, AR0, R2             &||  namea     R0, AR0, R0              /* H;i;M|K;j;N */ &\
00581   nameb##3  AR0, AR1, R2            &||  namea     R2, R1, R0               /* i;j;M|H;K;N */ &\
00582   nameb##3  AR0, R3, R2             &||  namea     AR0, R1, R0              /* i;H;M|j;K;N */ &\
00583   nameb##3  AR0, R0, R2             &||  namea     R0, AR0, R0              /* i;H;M|K;j;N */ &\
00584   .endif                                                                                      &\
00585   .ifdef level                                                                                &\
00586 nameb##_##namea##3_M:                                                                         &\
00587   nameb     R0, R1, R2              &||  namea##3  *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00588   nameb     R0, R2                  &||  namea##3  *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00589   nameb     R0, *+AR1(1), R2        &||  namea##3  *+AR0(1), R0, R0         /* H;i;M|j;K;N */ &\
00590   nameb     R0, *+AR1(1), R2        &||  namea##3  *+AR0(1), R0             /* H;i;M|j;K;N */ &\
00591   nameb     R0, *+AR1(1), R2        &||  namea##3  R0, *+AR0(1), R0         /* H;i;M|K;j;N */ &\
00592   nameb     *+AR0(1), *+AR1(1), R2  &||  namea##3  R2, R1, R0               /* i;j;M|H;K;N */ &\
00593   nameb     *+AR0(1), *+AR1(1), R2  &||  namea##3  R2, R0                   /* i;j;M|H;K;N */ &\
00594   nameb     *+AR1(1), R3, R2        &||  namea##3  *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00595   nameb     *+AR1(1), R3, R2        &||  namea##3  *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00596   nameb     *+AR1(1), R2            &||  namea##3  *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00597   nameb     *+AR1(1), R2            &||  namea##3  *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00598   nameb     *+AR1(1), R0, R2        &||  namea##3  R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00599   nameb     *+AR1(1), R2            &||  namea##3  R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00600   .endif                                                                                      &\
00601   .ifdef TEST_ENH                                                                             &\
00602 nameb##_##namea##3_M_enh:                                                                     &\
00603   nameb     R2, R2, R2              &||  namea##3  R0, R0, R0               /* H;K;M|i;j;N */ &\
00604   nameb     R2, R2, R2              &||  namea##3  R0, R0                   /* H;K;M|i;j;N */ &\
00605   nameb     R2, R2, R2              &||  namea##3  R0                       /* H;K;M|i;j;N */ &\
00606   nameb     R2, R2                  &||  namea##3  R0, R0                   /* H;K;M|i;j;N */ &\
00607   nameb     R2, R2                  &||  namea##3  R0                       /* H;K;M|i;j;N */ &\
00608   nameb     R2                      &||  namea##3  R0                       /* H;K;M|i;j;N */ &\
00609   nameb     R2, R2, R2              &||  namea##3  AR0, AR0, R0             /* H;K;M|i;j;N */ &\
00610   nameb     R0, AR0, R2             &||  namea##3  AR0, R0, R0              /* H;i;M|j;K;N */ &\
00611   nameb     R0, AR0, R2             &||  namea##3  R0, AR0, R0              /* H;i;M|K;j;N */ &\
00612   nameb     AR0, AR1, R2            &||  namea##3  R2, R1, R0               /* i;j;M|H;K;N */ &\
00613   nameb     AR0, R3, R2             &||  namea##3  AR0, R1, R0              /* i;H;M|j;K;N */ &\
00614   nameb     AR0, R0, R2             &||  namea##3  R0, AR0, R0              /* i;H;M|K;j;N */ &\
00615   .endif                                                                                      &\
00616   .ifdef level                                                                                &\
00617 nameb##3_##namea##3_M:                                                                        &\
00618   nameb##3  R0, R1, R2              &||  namea##3  *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00619   nameb##3  R0, R2                  &||  namea##3  *+AR0(1), *+AR1(1), R0   /* H;K;M|i;j;N */ &\
00620   nameb##3  R0, *+AR1(1), R2        &||  namea##3  *+AR0(1), R0, R0         /* H;i;M|j;K;N */ &\
00621   nameb##3  R0, *+AR1(1), R2        &||  namea##3  *+AR0(1), R0             /* H;i;M|j;K;N */ &\
00622   nameb##3  R0, *+AR1(1), R2        &||  namea##3  R0, *+AR0(1), R0         /* H;i;M|K;j;N */ &\
00623   nameb##3  *+AR0(1), *+AR1(1), R2  &||  namea##3  R2, R1, R0               /* i;j;M|H;K;N */ &\
00624   nameb##3  *+AR0(1), *+AR1(1), R2  &||  namea##3  R2, R0                   /* i;j;M|H;K;N */ &\
00625   nameb##3  *+AR1(1), R3, R2        &||  namea##3  *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00626   nameb##3  *+AR1(1), R3, R2        &||  namea##3  *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00627   nameb##3  *+AR1(1), R2            &||  namea##3  *+AR0(1), R1, R0         /* i;H;M|j;K;N */ &\
00628   nameb##3  *+AR1(1), R2            &||  namea##3  *+AR0(1), R0             /* i;H;M|j;K;N */ &\
00629   nameb##3  *+AR1(1), R0, R2        &||  namea##3  R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00630   nameb##3  *+AR1(1), R2            &||  namea##3  R0, *+AR0(1), R0         /* i;H;M|K;j;N */ &\
00631   .endif                                                                                      &\
00632   .ifdef TEST_ENH                                                                             &\
00633 nameb##3_##namea##3_M_enh:                                                                    &\
00634   nameb##3  R2, R2, R2              &||  namea##3  R0, R0, R0               /* H;K;M|i;j;N */ &\
00635   nameb##3  R2, R2, R2              &||  namea##3  R0, R0                   /* H;K;M|i;j;N */ &\
00636   nameb##3  R2, R2, R2              &||  namea##3  R0                       /* H;K;M|i;j;N */ &\
00637   nameb##3  R2, R2                  &||  namea##3  R0, R0                   /* H;K;M|i;j;N */ &\
00638   nameb##3  R2, R2                  &||  namea##3  R0                       /* H;K;M|i;j;N */ &\
00639   nameb##3  R2                      &||  namea##3  R0                       /* H;K;M|i;j;N */ &\
00640   nameb##3  R2, R2, R2              &||  namea##3  AR0, AR0, R0             /* H;K;M|i;j;N */ &\
00641   nameb##3  R0, AR0, R2             &||  namea##3  AR0, R0, R0              /* H;i;M|j;K;N */ &\
00642   nameb##3  R0, AR0, R2             &||  namea##3  R0, AR0, R0              /* H;i;M|K;j;N */ &\
00643   nameb##3  AR0, AR1, R2            &||  namea##3  R2, R1, R0               /* i;j;M|H;K;N */ &\
00644   nameb##3  AR0, R3, R2             &||  namea##3  AR0, R1, R0              /* i;H;M|j;K;N */ &\
00645   nameb##3  AR0, R0, R2             &||  namea##3  R0, AR0, R0              /* i;H;M|K;j;N */ &\
00646   .endif
00647 
00648 /* P: General 2-operand operation with parallell store
00649    Syntax: <ia> src2, dst1 || <ib> src3, dst2
00650        src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
00651        dst1 = Register 0-7 (L)
00652        src3 = Register 0-7 (H)
00653        dst2 = Indirect 0,1,IR0,IR1 (J)
00654    Instr: 9/2 - ABSF||STF, ABSI||STI, FIX||STI, FLOAT||STF, LDF||STF,
00655                 LDI||STI, NEGF||STF, NEGI||STI, NOT||STI, C4x: FRIEEE||STF,
00656                 TOIEEE||STF
00657    Alias: a||b, b||a
00658 */
00659 #define P_CLASS(namea, nameb, level) \
00660   .ifdef level                                                  &\
00661 namea##_##nameb##_P:                                            &\
00662   namea  *+AR0(1), R0  &||  nameb  R1, *+AR1(1)   /* i;L|H,J */ &\
00663   nameb  R1, *+AR1(1)  &||  namea  *+AR0(1), R0   /* H,J|i;L */ &\
00664   .endif                                                        &\
00665   .ifdef TEST_ENH                                               &\
00666 namea##_##nameb##_P_enh:                                        &\
00667   namea  R0, R0        &||  nameb  R1, *+AR1(1)   /* i;L|H,J */ &\
00668   namea  R0            &||  nameb  R1, *+AR1(1)   /* i;L|H,J */ &\
00669   nameb  R1, *+AR1(1)  &||  namea  R0, R0         /* H,J|i;L */ &\
00670   nameb  R1, *+AR1(1)  &||  namea  R0             /* H,J|i;L */ &\
00671   .endif
00672   
00673 
00674 /* Q: General 3-operand operation with parallell store
00675    Syntax: <ia> src1, src2, dst1 || <ib> src3, dst2
00676        src1 = Register 0-7 (K)
00677        src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
00678        dst1 = Register 0-7 (L)
00679        src3 = Register 0-7 (H)
00680        dst2 = Indirect 0,1,IR0,IR1 (J)
00681    Instr: 4/0 - ASH3||STI, LSH3||STI, SUBF3||STF, SUBI3||STI
00682    Alias: a||b, b||a, a3||b, b||a3
00683 */
00684 #define Q_CLASS(namea, nameb, level) \
00685   .ifdef level                                                                  &\
00686 namea##_##nameb##_Q:                                                            &\
00687   namea     R0, *+AR0(1), R0  &||  nameb     R1, *+AR1(1)       /* K,i;L|H,J */ &\
00688   nameb     R1, *+AR1(1)      &||  namea     R0, *+AR0(1), R0   /* H,J|K,i;L */ &\
00689   .endif                                                                        &\
00690   .ifdef TEST_ENH                                                               &\
00691 namea##_##nameb##_Q_enh:                                                        &\
00692   namea     R0, R0, R0        &||  nameb     R1, *+AR1(1)       /* K,i;L|H,J */ &\
00693   namea     R0, R0            &||  nameb     R1, *+AR1(1)       /* K,i;L|H,J */ &\
00694   nameb     R1, *+AR1(1)      &||  namea     R0, R0, R0         /* H,J|K,i;L */ &\
00695   nameb     R1, *+AR1(1)      &||  namea     R0, R0             /* H,J|K,i;L */ &\
00696   .endif                                                                        &\
00697   .ifdef level                                                                  &\
00698 namea##3_##nameb##_Q:                                                           &\
00699   namea##3  R0, *+AR0(1), R0  &||  nameb     R1, *+AR1(1)       /* K,i;L|H,J */ &\
00700   nameb     R1, *+AR1(1)      &||  namea##3  R0, *+AR0(1), R0   /* H,J|K,i;L */ &\
00701   .endif                                                                        &\
00702   .ifdef TEST_ENH                                                               &\
00703 namea##3_##nameb##_Q_enh:                                                       &\
00704   namea##3  R0, R0, R0        &||  nameb     R1, *+AR1(1)       /* K,i;L|H,J */ &\
00705   namea##3  R0, R0            &||  nameb     R1, *+AR1(1)       /* K,i;L|H,J */ &\
00706   nameb     R1, *+AR1(1)      &||  namea##3  R0, R0, R0         /* H,J|K,i;L */ &\
00707   nameb     R1, *+AR1(1)      &||  namea##3  R0, R0             /* H,J|K,i;L */ &\
00708   .endif
00709 
00710 
00711 /* QC: General commutative 3-operand operation with parallell store
00712    Syntax: <ia> src2, src1, dst1 || <ib> src3, dst2
00713            <ia> src1, src2, dst1 || <ib> src3, dst2 - Manual
00714        src1 = Register 0-7 (K)
00715        src2 = Indirect 0,1,IR0,IR1, ENH: register (i)
00716        dst1 = Register 0-7 (L)
00717        src3 = Register 0-7 (H)
00718        dst2 = Indirect 0,1,IR0,IR1 (J)
00719    Instr: 7/0 - ADDF3||STF, ADDI3||STI, AND3||STI, MPYF3||STF, MPYI3||STI,
00720                 OR3||STI, XOR3||STI
00721    Alias: a||b, b||a, a3||b, b||a3
00722 */
00723 #define QC_CLASS(namea, nameb, level) \
00724   .ifdef level                                                                  &\
00725 namea##_##nameb##_QC:                                                           &\
00726   namea     *+AR0(1), R1, R0  &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00727   namea     *+AR0(1), R0      &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00728   namea     R0, *+AR0(1), R0  &||  nameb     R1, *+AR1(1)       /* K;i;L|H,J */ &\
00729   nameb     R1, *+AR1(1)      &||  namea     *+AR0(1), R1, R0   /* H,J|i;K;L */ &\
00730   nameb     R1, *+AR1(1)      &||  namea     *+AR0(1), R0       /* H,J|i;K;L */ &\
00731   nameb     R1, *+AR1(1)      &||  namea     R0, *+AR0(1), R0   /* H,J|K;i;L */ &\
00732   .endif                                                                        &\
00733   .ifdef TEST_ENH                                                               &\
00734 namea##_##nameb##_QC_enh:                                                       &\
00735   namea     AR0, R1, R0       &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00736   namea     R2, R1, R0        &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00737   namea     R1, R0            &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00738   namea     R0                &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00739   namea     R0, AR0, R0       &||  nameb     R1, *+AR1(1)       /* K;i;L|H,J */ &\
00740   nameb     R1, *+AR1(1)      &||  namea     AR0, R1, R0        /* H,J|i;K;L */ &\
00741   nameb     R1, *+AR1(1)      &||  namea     R2, R1, R0         /* H,J|i;K;L */ &\
00742   nameb     R1, *+AR1(1)      &||  namea     R1, R0             /* H,J|i;K;L */ &\
00743   nameb     R1, *+AR1(1)      &||  namea     R0                 /* H,J|i;K;L */ &\
00744   nameb     R1, *+AR1(1)      &||  namea     R0, AR0, R0        /* H,J|K;i;L */ &\
00745   .endif                                                                        &\
00746   .ifdef level                                                                  &\
00747 namea##3_##nameb##_QC:                                                          &\
00748   namea##3  *+AR0(1), R1, R0  &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00749   namea##3  *+AR0(1), R0      &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00750   namea##3  R0, *+AR0(1), R0  &||  nameb     R1, *+AR1(1)       /* K;i;L|H,J */ &\
00751   nameb     R1, *+AR1(1)      &||  namea##3  *+AR0(1), R1, R0   /* H,J|i;K;L */ &\
00752   nameb     R1, *+AR1(1)      &||  namea##3  *+AR0(1), R0       /* H,J|i;K;L */ &\
00753   nameb     R1, *+AR1(1)      &||  namea##3  R0, *+AR0(1), R0   /* H,J|K;i;L */ &\
00754   .endif                                                                        &\
00755   .ifdef TEST_ENH                                                               &\
00756 namea##3_##nameb##_QC_enh:                                                      &\
00757   namea##3  AR0, R1, R0       &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00758   namea##3  R2, R1, R0        &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00759   namea##3  R1, R0            &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00760   namea##3  R0                &||  nameb     R1, *+AR1(1)       /* i;K;L|H,J */ &\
00761   namea##3  R0, AR0, R0       &||  nameb     R1, *+AR1(1)       /* K;i;L|H,J */ &\
00762   nameb     R1, *+AR1(1)      &||  namea##3  AR0, R1, R0        /* H,J|i;K;L */ &\
00763   nameb     R1, *+AR1(1)      &||  namea##3  R2, R1, R0         /* H,J|i;K;L */ &\
00764   nameb     R1, *+AR1(1)      &||  namea##3  R1, R0             /* H,J|i;K;L */ &\
00765   nameb     R1, *+AR1(1)      &||  namea##3  R0                 /* H,J|i;K;L */ &\
00766   nameb     R1, *+AR1(1)      &||  namea##3  R0, AR0, R0        /* H,J|K;i;L */ &\
00767   .endif
00768 
00769 
00770 /* R: General register integer operation
00771    Syntax: <i> dst
00772        dst = Register (R)
00773    Instr: 6/0 - POP, PUSH, ROL, ROLC, ROR, RORC
00774 */
00775 #define R_CLASS(name, level) \
00776   .ifdef level                    &\
00777 name##_R:                         &\
00778   name  AR0               /* R */ &\
00779   .endif
00780 
00781 
00782 /* RF: General register float operation
00783    Syntax: <i> dst
00784        dst = Register 0-11 (r)
00785    Instr: 2/0 - POPF, PUSHF
00786 */
00787 #define RF_CLASS(name, level) \
00788   .ifdef level                    &\
00789 name##_RF:                        &\
00790   name  F0                /* r */ &\
00791   .endif
00792 
00793 
00794 /* S: General 3-operand float operation
00795    Syntax: <i> src2, src1, dst
00796        src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
00797        src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
00798        dst  = Register 0-11 (r)
00799    Instr: 1/0 - SUBF3
00800    Alias: i, i3
00801 */
00802 #define S_CLASS(name, level) \
00803   .ifdef level                                  &\
00804 name##_S:                                       &\
00805   name     R2, R1, R0               /* e,g;r */ &\
00806   name     R1, R0                   /* e,g;r */ &\
00807   name     R1, *+AR0(1), R0         /* e,J,r */ &\
00808   name     *+AR0(1), R1, R0         /* I,g;r */ &\
00809   name     *+AR0(1), R0             /* I,g;r */ &\
00810   name     *+AR0(1), *+AR1(1), R0   /* I,J,r */ &\
00811   .endif                                        &\
00812   .ifdef TEST_C4X                               &\
00813 name##_S_c4x:                                   &\
00814   name     *+AR0(5), R1, R0         /* C,g;r */ &\
00815   name     *+AR0(5), R0             /* C,g;r */ &\
00816   name     *+AR0(5), *+AR1(5), R0   /* C,O,r */ &\
00817   .endif                                        &\
00818   .ifdef level                                  &\
00819 name##3_S:                                      &\
00820   name##3  R2, R1, R0               /* e,g;r */ &\
00821   name##3  R1, R0                   /* e,g;r */ &\
00822   name##3  R1, *+AR0(1), R0         /* e,J,r */ &\
00823   name##3  *+AR0(1), R1, R0         /* I,g;r */ &\
00824   name##3  *+AR0(1), R0             /* I,g;r */ &\
00825   name##3  *+AR0(1), *+AR1(1), R0   /* I,J,r */ &\
00826   .endif                                        &\
00827   .ifdef TEST_C4X                               &\
00828 name##3_S_c4x:                                  &\
00829   name##3  *+AR0(5), R1, R0         /* C,g;r */ &\
00830   name##3  *+AR0(5), R0             /* C,g;r */ &\
00831   name##3  *+AR0(5), *+AR1(5), R0   /* C,O,r */ &\
00832   .endif                                        
00833 
00834 
00835 /* SC: General commutative 3-operand float operation
00836    Syntax: <i> src2, src1, dst - Manual
00837            <i> src1, src2, dst
00838        src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
00839        src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
00840        dst  = Register 0-11 (r)
00841    Instr: 2/0 - ADDF3, MPYF3
00842    Alias: i, i3
00843 */
00844 #define SC_CLASS(name, level) \
00845   .ifdef level                                  &\
00846 name##_SC:                                      &\
00847   name     R2, R1, R0               /* e,g;r */ &\
00848   name     R1, R0                   /* e,g;r */ &\
00849   name     R1, *+AR0(1), R0         /* e,J,r */ &\
00850   name     *+AR0(1), R1, R0         /* I,g;r */ &\
00851   name     *+AR0(1), R0             /* I,g;r */ &\
00852   name     *+AR0(1), *+AR1(1), R0   /* I,J,r */ &\
00853   .endif                                        &\
00854   .ifdef TEST_C4X                               &\
00855 name##_SC_c4x:                                  &\
00856   name     *+AR0(5), R1, R0         /* C,g;r */ &\
00857   name     *+AR0(5), R0             /* C,g;r */ &\
00858   name     R1, *+AR0(5), R0         /* g,C,r */ &\
00859   name     *+AR0(5), *+AR1(5), R0   /* C,O,r */ &\
00860   .endif                                        &\
00861   .ifdef level                                  &\
00862 name##3_SC:                                     &\
00863   name##3  R2, R1, R0               /* e,g;r */ &\
00864   name##3  R1, R0                   /* e,g;r */ &\
00865   name##3  R1, *+AR0(1), R0         /* e,J,r */ &\
00866   name##3  *+AR0(1), R1, R0         /* I,g;r */ &\
00867   name##3  *+AR0(1), R0             /* I,g;r */ &\
00868   name##3  *+AR0(1), *+AR1(1), R0   /* I,J,r */ &\
00869   .endif                                        &\
00870   .ifdef TEST_C4X                               &\
00871 name##3_SC_c4x:                                 &\
00872   name##3  *+AR0(5), R1, R0         /* C,g;r */ &\
00873   name##3  *+AR0(5), R0             /* C,g;r */ &\
00874   name##3  R1, *+AR0(5), R0         /* g,C,r */ &\
00875   name##3  *+AR0(5), *+AR1(5), R0   /* C,O,r */ &\
00876   .endif                                        
00877 
00878 
00879 /* S2: General 3-operand float operation with 2 args
00880    Syntax: <i> src2, src1
00881        src2 = Register 0-11 (e), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C)
00882        src1 = Register 0-11 (g), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
00883    Instr: 1/0 - CMPF3
00884    Alias: i, i3
00885 */
00886 #define S2_CLASS(name, level) \
00887   .ifdef level                                &\
00888 name##_S2:                                    &\
00889   name     R2, R1                   /* e,g */ &\
00890   name     R1, *+AR0(1)             /* e,J */ &\
00891   name     *+AR0(1), R1             /* I,g */ &\
00892   name     *+AR0(1), *+AR1(1)       /* I,J */ &\
00893   .endif                                      &\
00894   .ifdef TEST_C4X                             &\
00895 name##_S2_c4x:                                &\
00896   name     *+AR0(5), R1             /* C,g */ &\
00897   name     *+AR0(5), *+AR1(5)       /* C,O */ &\
00898   .endif                                      &\
00899   .ifdef level                                &\
00900 name##3_S2:                                   &\
00901   name##3  R2, R1                   /* e,g */ &\
00902   name##3  R1, *+AR0(1)             /* e,J */ &\
00903   name##3  *+AR0(1), R1             /* I,g */ &\
00904   name##3  *+AR0(1), *+AR1(1)       /* I,J */ &\
00905   .endif                                      &\
00906   .ifdef TEST_C4X                             &\
00907 name##3_S2_c4x:                               &\
00908   name##3  *+AR0(5), R1             /* C,g */ &\
00909   name##3  *+AR0(5), *+AR1(5)       /* C,O */ &\
00910   .endif                                        
00911 
00912 
00913 /* T: General 3-operand integer operand
00914    Syntax: <i> src2, src1, dst
00915        src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
00916        src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
00917        dst  = Register (R)
00918    Instr: 5/0 - ANDN3, ASH3, LSH3, SUBB3, SUBI3
00919    Alias: i, i3
00920 */
00921 #define T_CLASS(name, level) \
00922   .ifdef level                                   &\
00923 name##_T:                                        &\
00924   name     AR2, AR1, AR0             /* E,G;R */ &\
00925   name     AR1, AR0                  /* E,G;R */ &\
00926   name     AR1, *+AR0(1), AR0        /* E,J,R */ &\
00927   name     *+AR0(1), AR1, AR0        /* I,G;R */ &\
00928   name     *+AR0(1), AR0             /* I,G;R */ &\
00929   name     *+AR1(1), *+AR0(1), AR0   /* I,J,R */ &\
00930   .endif                                         &\
00931   .ifdef   TEST_C4X                              &\
00932 name##_T_sc:                                     &\
00933   name     -5, AR1, AR0              /* W,G;R */ &\
00934   name     -5, AR0                   /* W,G;R */ &\
00935   name     *+AR0(5), AR1, AR0        /* C,G;R */ &\
00936   name     *+AR0(5), AR0             /* C,G;R */ &\
00937   name     -5, *+AR0(5), AR0         /* W,O,R */ &\
00938   name     *+AR0(5), *+AR1(5), AR0   /* C,O,R */ &\
00939   .endif                                         &\
00940   .ifdef level                                   &\
00941 name##3_T:                                       &\
00942   name##3  AR2, AR1, AR0             /* E,G;R */ &\
00943   name##3  AR1, AR0                  /* E,G;R */ &\
00944   name##3  AR1, *+AR0(1), AR0        /* E,J,R */ &\
00945   name##3  *+AR0(1), AR1, AR0        /* I,G;R */ &\
00946   name##3  *+AR0(1), AR0             /* I,G;R */ &\
00947   name##3  *+AR1(1), *+AR0(1), AR0   /* I,J,R */ &\
00948   .endif                                         &\
00949   .ifdef   TEST_C4X                              &\
00950 name##3_T_sc:                                    &\
00951   name##3  -5, AR1, AR0              /* W,G;R */ &\
00952   name##3  -5, AR0                   /* W,G;R */ &\
00953   name##3  *+AR0(5), AR1, AR0        /* C,G;R */ &\
00954   name##3  *+AR0(5), AR0             /* C,G;R */ &\
00955   name##3  -5, *+AR0(5), AR0         /* W,O,R */ &\
00956   name##3  *+AR0(5), *+AR1(5), AR0   /* C,O,R */ &\
00957   .endif
00958 
00959 
00960 /* TC: General commutative 3-operand integer operation
00961    Syntax: <i> src2, src1, dst
00962            <i> src1, src2, dst
00963        src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
00964        src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
00965        dst  = Register (R)
00966    Instr: 6/2 - ADDC3, ADDI3, AND3, MPYI3, OR3, XOR3, C4x: MPYSHI, MPYUHI
00967    Alias: i, i3
00968 */
00969 #define TC_CLASS(name, level) \
00970   .ifdef level                                   &\
00971 name##_TC:                                       &\
00972   name     AR2, AR1, AR0             /* E,G;R */ &\
00973   name     AR1, AR0                  /* E,G;R */ &\
00974   name     AR1, *+AR0(1), AR0        /* E,J,R */ &\
00975   name     *+AR0(1), AR1, AR0        /* I,G;R */ &\
00976   name     *+AR0(1), AR0             /* I,G;R */ &\
00977   name     *+AR1(1), *+AR0(1), AR0   /* I,J,R */ &\
00978   .endif                                         &\
00979   .ifdef   TEST_C4X                              &\
00980 name##_TC_c4x:                                   &\
00981   name     -5, AR1, AR0              /* W,G;R */ &\
00982   name     -5, AR0                   /* W,G;R */ &\
00983   name     AR1, -5, AR0              /* G,W,R */ &\
00984   name     *+AR0(5), AR1, AR0        /* C,G;R */ &\
00985   name     *+AR0(5), AR0             /* C,G;R */ &\
00986   name     AR1, *+AR0(5), AR0        /* G,C,R */ &\
00987   name     -5, *+AR0(5), AR0         /* W,O,R */ &\
00988   name     *+AR0(5), -5, AR0         /* O,W,R */ &\
00989   name     *+AR0(5), *+AR1(5), AR0   /* C,O,R */ &\
00990   .endif                                         &\
00991   .ifdef level                                   &\
00992 name##3_TC:                                      &\
00993   name##3  AR2, AR1, AR0             /* E,G;R */ &\
00994   name##3  AR1, AR0                  /* E,G;R */ &\
00995   name##3  AR1, *+AR0(1), AR0        /* E,J,R */ &\
00996   name##3  *+AR0(1), AR1, AR0        /* I,G;R */ &\
00997   name##3  *+AR0(1), AR0             /* I,G;R */ &\
00998   name##3  *+AR1(1), *+AR0(1), AR0   /* I,J,R */ &\
00999   .endif                                         &\
01000   .ifdef   TEST_C4X                              &\
01001 name##3_TC_c4x:                                  &\
01002   name##3  -5, AR1, AR0              /* W,G;R */ &\
01003   name##3  -5, AR0                   /* W,G;R */ &\
01004   name##3  AR1, -5, AR0              /* G,W,R */ &\
01005   name##3  *+AR0(5), AR1, AR0        /* C,G;R */ &\
01006   name##3  *+AR0(5), AR0             /* C,G;R */ &\
01007   name##3  AR1, *+AR0(5), AR0        /* G,C,R */ &\
01008   name##3  -5, *+AR0(5), AR0         /* W,O,R */ &\
01009   name##3  *+AR0(5), -5, AR0         /* O,W,R */ &\
01010   name##3  *+AR0(5), *+AR1(5), AR0   /* C,O,R */ &\
01011   .endif
01012 
01013 
01014 /* T2: General 3-operand integer operation with 2 args
01015    Syntax: <i> src2, src1
01016        src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
01017        src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (O)
01018    Instr: 1/0 - CMPI3
01019    Alias: i, i3
01020 */
01021 #define T2_CLASS(name, level) \
01022   .ifdef level                                 &\
01023 name##_T2:                                     &\
01024   name     AR2, AR1                  /* E,G */ &\
01025   name     AR1, *+AR0(1)             /* E,J */ &\
01026   name     *+AR0(1), AR1             /* I,G */ &\
01027   name     *+AR1(1), *+AR0(1)        /* I,J */ &\
01028   .endif                                       &\
01029   .ifdef   TEST_C4X                            &\
01030 name##_T2_c4x:                                 &\
01031   name     -5, AR1                   /* W,G */ &\
01032   name     *+AR0(5), AR1             /* C,G */ &\
01033   name     -5, *+AR0(5)              /* W,O */ &\
01034   name     *+AR0(5), *+AR1(5)        /* C,O */ &\
01035   .endif                                       &\
01036   .ifdef level                                 &\
01037 name##3_T2:                                    &\
01038   name##3  AR2, AR1                  /* E,G */ &\
01039   name##3  AR1, *+AR0(1)             /* E,J */ &\
01040   name##3  *+AR0(1), AR1             /* I,G */ &\
01041   name##3  *+AR1(1), *+AR0(1)        /* I,J */ &\
01042   .endif                                       &\
01043   .ifdef   TEST_C4X                            &\
01044 name##3_T2_c4x:                                &\
01045   name##3  -5, AR1                   /* W,G */ &\
01046   name##3  *+AR0(5), AR1             /* C,G */ &\
01047   name##3  -5, *+AR0(5)              /* W,O */ &\
01048   name##3  *+AR0(5), *+AR1(5)        /* C,O */ &\
01049   .endif
01050 
01051 
01052 /* T2C: General commutative 3-operand integer operation with 2 args 
01053    Syntax: <i> src2, src1 - Manual
01054            <i> src1, src2 
01055        src2 = Register (E), Indirect 0,1,IR0,IR1 (I), C4x T2: Indirect (C), Immediate (W)
01056        src1 = Register (G), Indirect 0,1,IR0,IR1 (J), C4x T2: Indirect (0)
01057    Instr: 1/0 - TSTB3
01058    Alias: i, i3
01059 */
01060 #define T2C_CLASS(name, level) \
01061   .ifdef level                                 &\
01062 name##_T2C:                                    &\
01063   name     AR2, AR1                  /* E,G */ &\
01064   name     AR1, *+AR0(1)             /* E,J */ &\
01065   name     *+AR0(1), AR1             /* I,G */ &\
01066   name     *+AR1(1), *+AR0(1)        /* I,J */ &\
01067   .endif                                       &\
01068   .ifdef   TEST_C4X                            &\
01069 name##_T2C_c4x:                                &\
01070   name     -5, AR1                   /* W,G */ &\
01071   name     AR1, -5                   /* G,W */ &\
01072   name     *+AR0(5), AR1             /* C,G */ &\
01073   name     AR1, *+AR0(5)             /* G,C */ &\
01074   name     -5, *+AR0(5)              /* W,O */ &\
01075   name     *+AR0(5), -5              /* O,W */ &\
01076   name     *+AR0(5), *+AR1(5)        /* C,O */ &\
01077   .endif                                       &\
01078   .ifdef level                                 &\
01079 name##3_T2C:                                   &\
01080   name##3  AR2, AR1                  /* E,G */ &\
01081   name##3  AR1, *+AR0(1)             /* E,J */ &\
01082   name##3  *+AR0(1), AR1             /* I,G */ &\
01083   name##3  *+AR1(1), *+AR0(1)        /* I,J */ &\
01084   .endif                                       &\
01085   .ifdef   TEST_C4X                            &\
01086 name##3_T2C_c4x:                               &\
01087   name##3  -5, AR1                   /* W,G */ &\
01088   name##3  AR1, -5                   /* G,W */ &\
01089   name##3  *+AR0(5), AR1             /* C,G */ &\
01090   name##3  AR1, *+AR0(5)             /* G,C */ &\
01091   name##3  -5, *+AR0(5)              /* W,O */ &\
01092   name##3  *+AR0(5), -5              /* O,W */ &\
01093   name##3  *+AR0(5), *+AR1(5)        /* C,O */ &\
01094   .endif