Home | History | Annotate | Download | only in tic4x
      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             ;;------------------------------------
     23 start:      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
     46 br_I:       br      start
     47 brd_I:      brd     start
     48 call_I:     call    start
     49 call_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
     63 iack_Z:     iack    @start
     64             iack    *+AR0(1)
     65 idle_Z:     idle
     66             .endif
     67             .ifdef TEST_IDLE2
     68 idle2_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
     82 ldp_Z:      ldp     start
     83             .endif
     84             B_CLASS(  ldm,          TEST_C3X )
     85             .ifdef TEST_LPWR
     86 lopower_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
     92 maxspeed_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
    121 reti_Z:     retiC
    122             reti
    123 rets_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
    132 rptb_I2:    rptb    start
    133             .endif
    134             A3_CLASS(  rpts,        TEST_C3X )
    135             .ifdef TEST_C3X
    136 sigi_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
    157 swi_Z:      swi
    158 trap_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
    176 laj_I:      laj     start
    177 laj_JS:     lajc    R0
    178             lajc    start
    179 lat_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
    191 ldep_Z:     ldep    IVTP, AR0
    192 ldhi_Z:     ldhi    35, R0
    193             ldhi    start, R0
    194 ldpe_Z:     ldpe    AR0, IVTP
    195 ldpk_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
    223 retid_Z:    retiCd
    224             retid
    225 rptb2_I2:   rptb    AR0
    226 rptbd_I2:   rptbd  start
    227             rptbd   AR0
    228             .endif
    229             B_CLASS(   rsqrf,       TEST_C4X )
    230             A6_CLASS(  sigi,        TEST_C4X )
    231             .ifdef TEST_C4X
    232 sti2_A7:    sti     -5, @start
    233             sti     -5, *+AR0(5)
    234 stik_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