1;;;
2;;;  Test all opcodes and argument permuation
3;;;  To make our job a lot simpler, we define a couple of
4;;;  insn classes, that we use to generate the proper
5;;;  test output.
6;;;
7;;;  To rebuild this file you must use
8;;;    ./rebuild.sh
9;;;
10;;;  These definitions are used within this file:
11;;;    TEST_C3X    Enables testing of c3x opcodes
12;;;    TEST_C4X    Enables testing of c4x opcodes
13;;;    TEST_ENH    Enable testing of enhanced opcodes
14;;;    TEST_IDLE2  Enable testing of IDLE2 command
15;;;    TEST_LPWR   Enable testing of LOPOWER commands
16;;;
17#include "opclasses.h"
18
19            .text
20            ;;------------------------------------
21            ;;  C3X INSNS
22            ;;------------------------------------
23start:      B_CLASS(   absf,        TEST_C3X )
24            P_CLASS(   absf, stf,   TEST_C3X )
25            A_CLASS(   absi,        TEST_C3X )
26            P_CLASS(   absi, sti,   TEST_C3X )
27            A_CLASS(   addc,        TEST_C3X )
28            TC_CLASS(  addc,        TEST_C3X )
29            B_CLASS(   addf,        TEST_C3X )
30            SC_CLASS(  addf,        TEST_C3X )
31            QC_CLASS(  addf, stf,   TEST_C3X )
32            A_CLASS(   addi,        TEST_C3X )
33            TC_CLASS(  addi,        TEST_C3X )
34            QC_CLASS(  addi, sti,   TEST_C3X )
35            AU_CLASS(  and,         TEST_C3X )
36            TC_CLASS(  and,         TEST_C3X )
37            QC_CLASS(  and, sti,    TEST_C3X )
38            AU_CLASS(  andn,        TEST_C3X )
39            T_CLASS(   andn,        TEST_C3X )
40            A_CLASS(   ash,         TEST_C3X )
41            T_CLASS(   ash,         TEST_C3X )
42            Q_CLASS(   ash, sti,    TEST_C3X )
43            J_CLASS(   bC, b,       TEST_C3X )
44            J_CLASS(   bCd, bd,     TEST_C3X )
45            .ifdef TEST_C3X
46br_I:       br      start
47brd_I:      brd     start
48call_I:     call    start
49call_JS:    callc   R0
50            callc   start
51            .endif
52            B_CLASS(   cmpf,        TEST_C3X )
53            S2_CLASS(  cmpf,        TEST_C3X )
54            A_CLASS(   cmpi,        TEST_C3X )
55            T2_CLASS(  cmpi,        TEST_C3X )
56            D_CLASS(   dbC, db,     TEST_C3X )
57            D_CLASS(   dbCd, dbd,   TEST_C3X )
58            AF_CLASS(  fix,         TEST_C3X )
59            P_CLASS(   fix, sti,    TEST_C3X )
60            BI_CLASS(  float,       TEST_C3X )
61            P_CLASS(   float, stf,  TEST_C3X )
62            .ifdef TEST_C3X
63iack_Z:     iack    @start
64            iack    *+AR0(1)
65idle_Z:     idle
66            .endif
67            .ifdef TEST_IDLE2
68idle2_Z:    idle2
69            .endif
70            B_CLASS(   lde,         TEST_C3X )
71            B_CLASS(   ldf,         TEST_C3X )
72            LL_CLASS(  ldf,         TEST_C3X )
73            P_CLASS(   ldf, stf,    TEST_C3X )
74            BB_CLASS(  ldfC,        TEST_C3X )
75            B6_CLASS(  ldfi,        TEST_C3X )
76            A_CLASS(   ldi,         TEST_C3X )
77            LL_CLASS(  ldi,         TEST_C3X )
78            P_CLASS(   ldi, sti,    TEST_C3X )
79            AB_CLASS(  ldiC,        TEST_C3X )
80            A6_CLASS(  ldii,        TEST_C3X )
81            .ifdef TEST_C3X
82ldp_Z:      ldp     start
83            .endif
84            B_CLASS(  ldm,          TEST_C3X )
85            .ifdef TEST_LPWR
86lopower_Z:  lopower
87            .endif
88            A_CLASS(   lsh,         TEST_C3X )
89            T_CLASS(   lsh,         TEST_C3X )
90            Q_CLASS(   lsh, sti,    TEST_C3X )
91            .ifdef TEST_LPWR
92maxspeed_Z: maxspeed
93            .endif
94            B_CLASS(   mpyf,        TEST_C3X )
95            SC_CLASS(  mpyf,        TEST_C3X )
96            M_CLASS(   mpyf, addf,  TEST_C3X )
97            QC_CLASS(  mpyf, stf,   TEST_C3X )
98            M_CLASS(   mpyf, subf,  TEST_C3X )
99            A_CLASS(   mpyi,        TEST_C3X )
100            TC_CLASS(  mpyi,        TEST_C3X )
101            M_CLASS(   mpyi, addi,  TEST_C3X )
102            QC_CLASS(  mpyi, sti,   TEST_C3X )
103            M_CLASS(   mpyi, subi,  TEST_C3X )
104            A_CLASS(   negb,        TEST_C3X )
105            B_CLASS(   negf,        TEST_C3X )
106            P_CLASS(   negf, stf,   TEST_C3X )
107            A_CLASS(   negi,        TEST_C3X )
108            P_CLASS(   negi, sti,   TEST_C3X )
109            A2_CLASS(  nop,         TEST_C3X )
110            B_CLASS(   norm,        TEST_C3X )
111            AU_CLASS(  not,         TEST_C3X )
112            P_CLASS(   not, sti,    TEST_C3X )
113            AU_CLASS(  or,          TEST_C3X )
114            TC_CLASS(  or,          TEST_C3X )
115            QC_CLASS(  or, sti,     TEST_C3X )
116            R_CLASS(   pop,         TEST_C3X )
117            RF_CLASS(  popf,        TEST_C3X )
118            R_CLASS(   push,        TEST_C3X )
119            RF_CLASS(  pushf,       TEST_C3X )
120            .ifdef TEST_C3X
121reti_Z:     retiC
122            reti
123rets_Z:     retsC
124            rets
125            .endif
126            B_CLASS(   rnd,         TEST_C3X )
127            R_CLASS(   rol,         TEST_C3X )
128            R_CLASS(   rolc,        TEST_C3X )
129            R_CLASS(   ror,         TEST_C3X )
130            R_CLASS(   rorc,        TEST_C3X )
131            .ifdef TEST_C3X
132rptb_I2:    rptb    start
133            .endif
134            A3_CLASS(  rpts,        TEST_C3X )
135            .ifdef TEST_C3X
136sigi_Z:     sigi
137            .endif
138            B7_CLASS(  stf,         TEST_C3X )
139            LS_CLASS(  stf,         TEST_C3X )
140            B7_CLASS(  stfi,        TEST_C3X )
141            A7_CLASS(  sti,         TEST_C3X )
142            LS_CLASS(  sti,         TEST_C3X )
143            A7_CLASS(  stii,        TEST_C3X )
144            A_CLASS(   subb,        TEST_C3X )
145            T_CLASS(   subb,        TEST_C3X )
146            A_CLASS(   subc,        TEST_C3X )
147            B_CLASS(   subf,        TEST_C3X )
148            S_CLASS(   subf,        TEST_C3X )
149            Q_CLASS(   subf, stf,   TEST_C3X )
150            A_CLASS(   subi,        TEST_C3X )
151            T_CLASS(   subi,        TEST_C3X )
152            Q_CLASS(   subi, sti,   TEST_C3X )
153            A_CLASS(   subrb,       TEST_C3X )
154            B_CLASS(   subrf,       TEST_C3X )
155            A_CLASS(   subri,       TEST_C3X )
156            .ifdef TEST_C3X
157swi_Z:      swi
158trap_Z:     trapC   10
159            trap    10
160            .endif
161            AU_CLASS(  tstb,        TEST_C3X )
162            T2C_CLASS( tstb,        TEST_C3X )
163            AU_CLASS(  xor,         TEST_C3X )
164            TC_CLASS(  xor,         TEST_C3X )
165            QC_CLASS(  xor, sti,    TEST_C3X )
166
167            ;;------------------------------------
168            ;;  C4X INSNS
169            ;;------------------------------------
170            .ifdef  TEST_C4X
171            J_CLASS(   bCaf, baf,   TEST_C4X )
172            J_CLASS(   bCat, bat,   TEST_C4X )
173            B6_CLASS(  frieee,      TEST_C4X )
174            P_CLASS(   frieee, stf, TEST_C4X )
175            .ifdef TEST_C4X
176laj_I:      laj     start
177laj_JS:     lajc    R0
178            lajc    start
179lat_Z:      latC    10
180            .endif
181            A_CLASS(   lb0,         TEST_C4X )
182            A_CLASS(   lb1,         TEST_C4X )
183            A_CLASS(   lb2,         TEST_C4X )
184            A_CLASS(   lb3,         TEST_C4X )
185            AU_CLASS(  lbu0,        TEST_C4X )
186            AU_CLASS(  lbu1,        TEST_C4X )
187            AU_CLASS(  lbu2,        TEST_C4X )
188            AU_CLASS(  lbu3,        TEST_C4X )
189            AY_CLASS(  lda,         TEST_C4X )
190            .ifdef TEST_C4X
191ldep_Z:     ldep    IVTP, AR0
192ldhi_Z:     ldhi    35, R0
193            ldhi    start, R0
194ldpe_Z:     ldpe    AR0, IVTP
195ldpk_Z:     ldpk    start
196            .endif
197            A_CLASS(   lh0,         TEST_C4X )
198            A_CLASS(   lh1,         TEST_C4X )
199            AU_CLASS(  lhu0,        TEST_C4X )
200            AU_CLASS(  lhu1,        TEST_C4X )
201            A_CLASS(   lwl0,        TEST_C4X )
202            A_CLASS(   lwl1,        TEST_C4X )
203            A_CLASS(   lwl2,        TEST_C4X )
204            A_CLASS(   lwl3,        TEST_C4X )
205            A_CLASS(   lwr0,        TEST_C4X )
206            A_CLASS(   lwr1,        TEST_C4X )
207            A_CLASS(   lwr2,        TEST_C4X )
208            A_CLASS(   lwr3,        TEST_C4X )
209            A_CLASS(   mb0,         TEST_C4X )
210            A_CLASS(   mb1,         TEST_C4X )
211            A_CLASS(   mb2,         TEST_C4X )
212            A_CLASS(   mb3,         TEST_C4X )
213            A_CLASS(   mh0,         TEST_C4X )
214            A_CLASS(   mh1,         TEST_C4X )
215            A_CLASS(   mh2,         TEST_C4X )
216            A_CLASS(   mh3,         TEST_C4X )
217            A_CLASS(   mpyshi,      TEST_C4X )
218            TC_CLASS(  mpyshi,      TEST_C4X )
219            A_CLASS(   mpyuhi,      TEST_C4X )
220            TC_CLASS(  mpyuhi,      TEST_C4X )
221            BA_CLASS(  rcpf,        TEST_C4X )
222            .ifdef TEST_C4X
223retid_Z:    retiCd
224            retid
225rptb2_I2:   rptb    AR0
226rptbd_I2:   rptbd  start
227            rptbd   AR0
228            .endif
229            B_CLASS(   rsqrf,       TEST_C4X )
230            A6_CLASS(  sigi,        TEST_C4X )
231            .ifdef TEST_C4X
232sti2_A7:    sti     -5, @start
233            sti     -5, *+AR0(5)
234stik_Z:     stik    -5, @start
235            stik    -5, *+AR0(5)
236            .endif
237            B_CLASS(   toieee,      TEST_C4X )
238            P_CLASS(   toieee, stf, TEST_C4X )
239            .endif
240            .end
241
242