;;; ;;; Test all opcodes and argument permuation ;;; To make our job a lot simpler, we define a couple of ;;; insn classes, that we use to generate the proper ;;; test output. ;;; ;;; To rebuild this file you must use ;;; ./rebuild.sh ;;; ;;; These definitions are used within this file: ;;; TEST_C3X Enables testing of c3x opcodes ;;; TEST_C4X Enables testing of c4x opcodes ;;; TEST_ENH Enable testing of enhanced opcodes ;;; TEST_IDLE2 Enable testing of IDLE2 command ;;; TEST_LPWR Enable testing of LOPOWER commands ;;; #include "opclasses.h" .text ;;------------------------------------ ;; C3X INSNS ;;------------------------------------ start: B_CLASS( absf, TEST_C3X ) P_CLASS( absf, stf, TEST_C3X ) A_CLASS( absi, TEST_C3X ) P_CLASS( absi, sti, TEST_C3X ) A_CLASS( addc, TEST_C3X ) TC_CLASS( addc, TEST_C3X ) B_CLASS( addf, TEST_C3X ) SC_CLASS( addf, TEST_C3X ) QC_CLASS( addf, stf, TEST_C3X ) A_CLASS( addi, TEST_C3X ) TC_CLASS( addi, TEST_C3X ) QC_CLASS( addi, sti, TEST_C3X ) AU_CLASS( and, TEST_C3X ) TC_CLASS( and, TEST_C3X ) QC_CLASS( and, sti, TEST_C3X ) AU_CLASS( andn, TEST_C3X ) T_CLASS( andn, TEST_C3X ) A_CLASS( ash, TEST_C3X ) T_CLASS( ash, TEST_C3X ) Q_CLASS( ash, sti, TEST_C3X ) J_CLASS( bC, b, TEST_C3X ) J_CLASS( bCd, bd, TEST_C3X ) .ifdef TEST_C3X br_I: br start brd_I: brd start call_I: call start call_JS: callc R0 callc start .endif B_CLASS( cmpf, TEST_C3X ) S2_CLASS( cmpf, TEST_C3X ) A_CLASS( cmpi, TEST_C3X ) T2_CLASS( cmpi, TEST_C3X ) D_CLASS( dbC, db, TEST_C3X ) D_CLASS( dbCd, dbd, TEST_C3X ) AF_CLASS( fix, TEST_C3X ) P_CLASS( fix, sti, TEST_C3X ) BI_CLASS( float, TEST_C3X ) P_CLASS( float, stf, TEST_C3X ) .ifdef TEST_C3X iack_Z: iack @start iack *+AR0(1) idle_Z: idle .endif .ifdef TEST_IDLE2 idle2_Z: idle2 .endif B_CLASS( lde, TEST_C3X ) B_CLASS( ldf, TEST_C3X ) LL_CLASS( ldf, TEST_C3X ) P_CLASS( ldf, stf, TEST_C3X ) BB_CLASS( ldfC, TEST_C3X ) B6_CLASS( ldfi, TEST_C3X ) A_CLASS( ldi, TEST_C3X ) LL_CLASS( ldi, TEST_C3X ) P_CLASS( ldi, sti, TEST_C3X ) AB_CLASS( ldiC, TEST_C3X ) A6_CLASS( ldii, TEST_C3X ) .ifdef TEST_C3X ldp_Z: ldp start .endif B_CLASS( ldm, TEST_C3X ) .ifdef TEST_LPWR lopower_Z: lopower .endif A_CLASS( lsh, TEST_C3X ) T_CLASS( lsh, TEST_C3X ) Q_CLASS( lsh, sti, TEST_C3X ) .ifdef TEST_LPWR maxspeed_Z: maxspeed .endif B_CLASS( mpyf, TEST_C3X ) SC_CLASS( mpyf, TEST_C3X ) M_CLASS( mpyf, addf, TEST_C3X ) QC_CLASS( mpyf, stf, TEST_C3X ) M_CLASS( mpyf, subf, TEST_C3X ) A_CLASS( mpyi, TEST_C3X ) TC_CLASS( mpyi, TEST_C3X ) M_CLASS( mpyi, addi, TEST_C3X ) QC_CLASS( mpyi, sti, TEST_C3X ) M_CLASS( mpyi, subi, TEST_C3X ) A_CLASS( negb, TEST_C3X ) B_CLASS( negf, TEST_C3X ) P_CLASS( negf, stf, TEST_C3X ) A_CLASS( negi, TEST_C3X ) P_CLASS( negi, sti, TEST_C3X ) A2_CLASS( nop, TEST_C3X ) B_CLASS( norm, TEST_C3X ) AU_CLASS( not, TEST_C3X ) P_CLASS( not, sti, TEST_C3X ) AU_CLASS( or, TEST_C3X ) TC_CLASS( or, TEST_C3X ) QC_CLASS( or, sti, TEST_C3X ) R_CLASS( pop, TEST_C3X ) RF_CLASS( popf, TEST_C3X ) R_CLASS( push, TEST_C3X ) RF_CLASS( pushf, TEST_C3X ) .ifdef TEST_C3X reti_Z: retiC reti rets_Z: retsC rets .endif B_CLASS( rnd, TEST_C3X ) R_CLASS( rol, TEST_C3X ) R_CLASS( rolc, TEST_C3X ) R_CLASS( ror, TEST_C3X ) R_CLASS( rorc, TEST_C3X ) .ifdef TEST_C3X rptb_I2: rptb start .endif A3_CLASS( rpts, TEST_C3X ) .ifdef TEST_C3X sigi_Z: sigi .endif B7_CLASS( stf, TEST_C3X ) LS_CLASS( stf, TEST_C3X ) B7_CLASS( stfi, TEST_C3X ) A7_CLASS( sti, TEST_C3X ) LS_CLASS( sti, TEST_C3X ) A7_CLASS( stii, TEST_C3X ) A_CLASS( subb, TEST_C3X ) T_CLASS( subb, TEST_C3X ) A_CLASS( subc, TEST_C3X ) B_CLASS( subf, TEST_C3X ) S_CLASS( subf, TEST_C3X ) Q_CLASS( subf, stf, TEST_C3X ) A_CLASS( subi, TEST_C3X ) T_CLASS( subi, TEST_C3X ) Q_CLASS( subi, sti, TEST_C3X ) A_CLASS( subrb, TEST_C3X ) B_CLASS( subrf, TEST_C3X ) A_CLASS( subri, TEST_C3X ) .ifdef TEST_C3X swi_Z: swi trap_Z: trapC 10 trap 10 .endif AU_CLASS( tstb, TEST_C3X ) T2C_CLASS( tstb, TEST_C3X ) AU_CLASS( xor, TEST_C3X ) TC_CLASS( xor, TEST_C3X ) QC_CLASS( xor, sti, TEST_C3X ) ;;------------------------------------ ;; C4X INSNS ;;------------------------------------ .ifdef TEST_C4X J_CLASS( bCaf, baf, TEST_C4X ) J_CLASS( bCat, bat, TEST_C4X ) B6_CLASS( frieee, TEST_C4X ) P_CLASS( frieee, stf, TEST_C4X ) .ifdef TEST_C4X laj_I: laj start laj_JS: lajc R0 lajc start lat_Z: latC 10 .endif A_CLASS( lb0, TEST_C4X ) A_CLASS( lb1, TEST_C4X ) A_CLASS( lb2, TEST_C4X ) A_CLASS( lb3, TEST_C4X ) AU_CLASS( lbu0, TEST_C4X ) AU_CLASS( lbu1, TEST_C4X ) AU_CLASS( lbu2, TEST_C4X ) AU_CLASS( lbu3, TEST_C4X ) AY_CLASS( lda, TEST_C4X ) .ifdef TEST_C4X ldep_Z: ldep IVTP, AR0 ldhi_Z: ldhi 35, R0 ldhi start, R0 ldpe_Z: ldpe AR0, IVTP ldpk_Z: ldpk start .endif A_CLASS( lh0, TEST_C4X ) A_CLASS( lh1, TEST_C4X ) AU_CLASS( lhu0, TEST_C4X ) AU_CLASS( lhu1, TEST_C4X ) A_CLASS( lwl0, TEST_C4X ) A_CLASS( lwl1, TEST_C4X ) A_CLASS( lwl2, TEST_C4X ) A_CLASS( lwl3, TEST_C4X ) A_CLASS( lwr0, TEST_C4X ) A_CLASS( lwr1, TEST_C4X ) A_CLASS( lwr2, TEST_C4X ) A_CLASS( lwr3, TEST_C4X ) A_CLASS( mb0, TEST_C4X ) A_CLASS( mb1, TEST_C4X ) A_CLASS( mb2, TEST_C4X ) A_CLASS( mb3, TEST_C4X ) A_CLASS( mh0, TEST_C4X ) A_CLASS( mh1, TEST_C4X ) A_CLASS( mh2, TEST_C4X ) A_CLASS( mh3, TEST_C4X ) A_CLASS( mpyshi, TEST_C4X ) TC_CLASS( mpyshi, TEST_C4X ) A_CLASS( mpyuhi, TEST_C4X ) TC_CLASS( mpyuhi, TEST_C4X ) BA_CLASS( rcpf, TEST_C4X ) .ifdef TEST_C4X retid_Z: retiCd retid rptb2_I2: rptb AR0 rptbd_I2: rptbd start rptbd AR0 .endif B_CLASS( rsqrf, TEST_C4X ) A6_CLASS( sigi, TEST_C4X ) .ifdef TEST_C4X sti2_A7: sti -5, @start sti -5, *+AR0(5) stik_Z: stik -5, @start stik -5, *+AR0(5) .endif B_CLASS( toieee, TEST_C4X ) P_CLASS( toieee, stf, TEST_C4X ) .endif .end