//
// Decoder table for 32 bit instructions
//
vmidDecodeTableP microblazeCreateDecodeTable32(void) {
    vmidDecodeTableP table = vmidNewDecodeTable(32, MICROBLAZE_IT_LAST);
    // format                  TypeA1   |opcode|   rD|   rA|   rB|     subop1|     // 32 bits
    DECODE_ENTRY(17,       ADD_TYPEA1, "|000000|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,      ADDC_TYPEA1, "|000010|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,      ADDK_TYPEA1, "|000100|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,     ADDKC_TYPEA1, "|000110|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,       AND_TYPEA1, "|100001|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,      ANDN_TYPEA1, "|100011|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,      FADD_TYPEA1, "|010110|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,    FCMPEQ_TYPEA1, "|010110|.....|.....|.....|01000100000|");
    DECODE_ENTRY(17,    FCMPGE_TYPEA1, "|010110|.....|.....|.....|01001100000|");
    DECODE_ENTRY(17,    FCMPGT_TYPEA1, "|010110|.....|.....|.....|01001000000|");
    DECODE_ENTRY(17,    FCMPLE_TYPEA1, "|010110|.....|.....|.....|01000110000|");
    DECODE_ENTRY(17,    FCMPLT_TYPEA1, "|010110|.....|.....|.....|01000010000|");
    DECODE_ENTRY(17,    FCMPNE_TYPEA1, "|010110|.....|.....|.....|01001010000|");
    DECODE_ENTRY(17,    FCMPUN_TYPEA1, "|010110|.....|.....|.....|01000000000|");
    DECODE_ENTRY(17,      FDIV_TYPEA1, "|010110|.....|.....|.....|00110000000|");
    DECODE_ENTRY(17,      FMUL_TYPEA1, "|010110|.....|.....|.....|00100000000|");
    DECODE_ENTRY(17,     FRSUB_TYPEA1, "|010110|.....|.....|.....|00010000000|");
    DECODE_ENTRY(17,       LWX_TYPEA1, "|110010|.....|.....|.....|10000000000|");
    DECODE_ENTRY(17,       MUL_TYPEA1, "|010000|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,      MULH_TYPEA1, "|010000|.....|.....|.....|00000000001|");
    DECODE_ENTRY(17,    MULHSU_TYPEA1, "|010000|.....|.....|.....|00000000010|");
    DECODE_ENTRY(17,     MULHU_TYPEA1, "|010000|.....|.....|.....|00000000011|");
    DECODE_ENTRY(17,        OR_TYPEA1, "|100000|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,    PCMPBF_TYPEA1, "|100000|.....|.....|.....|10000000000|");
    DECODE_ENTRY(17,    PCMPEQ_TYPEA1, "|100010|.....|.....|.....|10000000000|");
    DECODE_ENTRY(17,    PCMPNE_TYPEA1, "|100011|.....|.....|.....|10000000000|");
    DECODE_ENTRY(17,      RSUB_TYPEA1, "|000001|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,     RSUBC_TYPEA1, "|000011|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,     RSUBK_TYPEA1, "|000101|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,    RSUBKC_TYPEA1, "|000111|.....|.....|.....|00000000000|");
    DECODE_ENTRY(17,       SWX_TYPEA1, "|110110|.....|.....|.....|10000000000|");
    DECODE_ENTRY(17,       XOR_TYPEA1, "|100010|.....|.....|.....|00000000000|");

    // format                  TypeA2   |opcode|D|opco|   rA|   rB|     subop1|     // 32 bits
    DECODE_ENTRY(22,       BEQ_TYPEA2, "|100111|0|0000|.....|.....|00000000000|");
    DECODE_ENTRY(22,      BEQD_TYPEA2, "|100111|1|0000|.....|.....|00000000000|");
    DECODE_ENTRY(22,       BGE_TYPEA2, "|100111|0|0101|.....|.....|00000000000|");
    DECODE_ENTRY(22,      BGED_TYPEA2, "|100111|1|0101|.....|.....|00000000000|");
    DECODE_ENTRY(22,       BGT_TYPEA2, "|100111|0|0100|.....|.....|00000000000|");
    DECODE_ENTRY(22,      BGTD_TYPEA2, "|100111|1|0100|.....|.....|00000000000|");
    DECODE_ENTRY(22,       BLE_TYPEA2, "|100111|0|0011|.....|.....|00000000000|");
    DECODE_ENTRY(22,      BLED_TYPEA2, "|100111|1|0011|.....|.....|00000000000|");
    DECODE_ENTRY(22,       BLT_TYPEA2, "|100111|0|0010|.....|.....|00000000000|");
    DECODE_ENTRY(22,      BLTD_TYPEA2, "|100111|1|0010|.....|.....|00000000000|");
    DECODE_ENTRY(22,       BNE_TYPEA2, "|100111|0|0001|.....|.....|00000000000|");
    DECODE_ENTRY(22,      BNED_TYPEA2, "|100111|1|0001|.....|.....|00000000000|");

    // format                  TypeA3   |opcode|   rD|D|A| c2|   rB|     subop1|     // 32 bits
    DECODE_ENTRY(22,        BR_TYPEA3, "|100110|.....|0|0|000|.....|00000000000|");
    DECODE_ENTRY(22,       BRA_TYPEA3, "|100110|.....|0|1|000|.....|00000000000|");
    DECODE_ENTRY(22,      BRAD_TYPEA3, "|100110|.....|1|1|000|.....|00000000000|");
    DECODE_ENTRY(22,       BRD_TYPEA3, "|100110|.....|1|0|000|.....|00000000000|");

    // format                  TypeA4   |opcode|   rD|D|A| c2|   rB|     subop1|     // 32 bits
    DECODE_ENTRY(22,     BRALD_TYPEA4, "|100110|.....|1|1|100|.....|00000000000|");
    DECODE_ENTRY(22,      BRLD_TYPEA4, "|100110|.....|1|0|100|.....|00000000000|");

    // format                  TypeA5   |opcode|   rD|opcod|   rB|     subop1|     // 32 bits
    DECODE_ENTRY(22,       BRK_TYPEA5, "|100110|.....|01100|.....|00000000000|");

    // format                  TypeA6   |opcode|   rD|   rA|   rB|ST|   subop1|     // 32 bits
    DECODE_ENTRY(17,      BSLL_TYPEA6, "|010001|.....|.....|.....|10|000000000|");
    DECODE_ENTRY(17,      BSRA_TYPEA6, "|010001|.....|.....|.....|01|000000000|");
    DECODE_ENTRY(17,      BSRL_TYPEA6, "|010001|.....|.....|.....|00|000000000|");

    // format                  TypeA7   |opcode|   rD|   rA|   rB|   opcode|U|o|     // 32 bits
    DECODE_ENTRY(17,       CMP_TYPEA7, "|000101|.....|.....|.....|000000000|0|1|");
    DECODE_ENTRY(17,      CMPU_TYPEA7, "|000101|.....|.....|.....|000000000|1|1|");
    DECODE_ENTRY(17,      IDIV_TYPEA7, "|010010|.....|.....|.....|000000000|0|0|");
    DECODE_ENTRY(17,     IDIVU_TYPEA7, "|010010|.....|.....|.....|000000000|1|0|");

    // format                  TypeA8   |opcode|   rD|   rA|   rB|z|R|    zero1|     // 32 bits
    DECODE_ENTRY(17,       LBU_TYPEA8, "|110000|.....|.....|.....|0|0|000000000|");
    DECODE_ENTRY(17,      LBUR_TYPEA8, "|110000|.....|.....|.....|0|1|000000000|");
    DECODE_ENTRY(17,       LHU_TYPEA8, "|110001|.....|.....|.....|0|0|000000000|");
    DECODE_ENTRY(17,      LHUR_TYPEA8, "|110001|.....|.....|.....|0|1|000000000|");
    DECODE_ENTRY(17,        LW_TYPEA8, "|110010|.....|.....|.....|0|0|000000000|");
    DECODE_ENTRY(17,       LWR_TYPEA8, "|110010|.....|.....|.....|0|1|000000000|");
    DECODE_ENTRY(17,        SB_TYPEA8, "|110100|.....|.....|.....|0|0|000000000|");
    DECODE_ENTRY(17,       SBR_TYPEA8, "|110100|.....|.....|.....|0|1|000000000|");
    DECODE_ENTRY(17,        SH_TYPEA8, "|110101|.....|.....|.....|0|0|000000000|");
    DECODE_ENTRY(17,       SHR_TYPEA8, "|110101|.....|.....|.....|0|1|000000000|");
    DECODE_ENTRY(17,        SW_TYPEA8, "|110110|.....|.....|.....|0|0|000000000|");
    DECODE_ENTRY(17,       SWR_TYPEA8, "|110110|.....|.....|.....|0|1|000000000|");

    // format                  TypeA9   |opcode|   rD|zero1|su|            rS|     // 32 bits
    DECODE_ENTRY(13,       MFS_TYPEA9, "|100101|.....|00000|10|..............|");

    // format                  TypeAa   |opcode|zero1|   rA|su|            rS|     // 32 bits
    DECODE_ENTRY(13,       MTS_TYPEAA, "|100101|00000|.....|11|..............|");

    // format                  TypeAb   |opcode|   rD|   rA|          subop1|     // 32 bits
    DECODE_ENTRY(22,       CLZ_TYPEAB, "|100100|.....|.....|0000000011100000|");
    DECODE_ENTRY(22,      FINT_TYPEAB, "|010110|.....|.....|0000001100000000|");
    DECODE_ENTRY(22,       FLT_TYPEAB, "|010110|.....|.....|0000001010000000|");
    DECODE_ENTRY(22,     FSQRT_TYPEAB, "|010110|.....|.....|0000001110000000|");
    DECODE_ENTRY(22,    SEXT16_TYPEAB, "|100100|.....|.....|0000000001100001|");
    DECODE_ENTRY(22,     SEXT8_TYPEAB, "|100100|.....|.....|0000000001100000|");
    DECODE_ENTRY(22,       SRA_TYPEAB, "|100100|.....|.....|0000000000000001|");
    DECODE_ENTRY(22,       SRC_TYPEAB, "|100100|.....|.....|0000000000100001|");
    DECODE_ENTRY(22,       SRL_TYPEAB, "|100100|.....|.....|0000000001000001|");

    // format                  TypeAc   |opcode|zero1|   rA|   rB|     subop1|     // 32 bits
    DECODE_ENTRY(22,       WDC_TYPEAC, "|100100|00000|.....|.....|00001100100|");
    DECODE_ENTRY(22,    WDCCLR_TYPEAC, "|100100|00000|.....|.....|00001100110|");
    DECODE_ENTRY(22,     WDCFL_TYPEAC, "|100100|00000|.....|.....|00001110100|");
    DECODE_ENTRY(22,       WIC_TYPEAC, "|100100|00000|.....|.....|00001101000|");

    // format                  TypeB1   |opcode|   rD|   rA|            simm|     // 32 bits
    DECODE_ENTRY( 6,      ADDI_TYPEB1, "|001000|.....|.....|................|");
    DECODE_ENTRY( 6,     ADDIC_TYPEB1, "|001010|.....|.....|................|");
    DECODE_ENTRY( 6,     ADDIK_TYPEB1, "|001100|.....|.....|................|");
    DECODE_ENTRY( 6,    ADDIKC_TYPEB1, "|001110|.....|.....|................|");
    DECODE_ENTRY( 6,      ANDI_TYPEB1, "|101001|.....|.....|................|");
    DECODE_ENTRY( 6,     ANDNI_TYPEB1, "|101011|.....|.....|................|");
    DECODE_ENTRY( 6,      LBUI_TYPEB1, "|111000|.....|.....|................|");
    DECODE_ENTRY( 6,      LHUI_TYPEB1, "|111001|.....|.....|................|");
    DECODE_ENTRY( 6,       LWI_TYPEB1, "|111010|.....|.....|................|");
    DECODE_ENTRY( 6,      MULI_TYPEB1, "|011000|.....|.....|................|");
    DECODE_ENTRY( 6,       ORI_TYPEB1, "|101000|.....|.....|................|");
    DECODE_ENTRY( 6,     RSUBI_TYPEB1, "|001001|.....|.....|................|");
    DECODE_ENTRY( 6,    RSUBIC_TYPEB1, "|001011|.....|.....|................|");
    DECODE_ENTRY( 6,    RSUBIK_TYPEB1, "|001101|.....|.....|................|");
    DECODE_ENTRY( 6,   RSUBIKC_TYPEB1, "|001111|.....|.....|................|");
    DECODE_ENTRY( 6,       SBI_TYPEB1, "|111100|.....|.....|................|");
    DECODE_ENTRY( 6,       SHI_TYPEB1, "|111101|.....|.....|................|");
    DECODE_ENTRY( 6,       SWI_TYPEB1, "|111110|.....|.....|................|");
    DECODE_ENTRY( 6,      XORI_TYPEB1, "|101010|.....|.....|................|");

    // format                  TypeB2   |opcode|D|opco|   rA|            simm|     // 32 bits
    DECODE_ENTRY(11,      BEQI_TYPEB2, "|101111|0|0000|.....|................|");
    DECODE_ENTRY(11,     BEQID_TYPEB2, "|101111|1|0000|.....|................|");
    DECODE_ENTRY(11,      BGEI_TYPEB2, "|101111|0|0101|.....|................|");
    DECODE_ENTRY(11,     BGEID_TYPEB2, "|101111|1|0101|.....|................|");
    DECODE_ENTRY(11,      BGTI_TYPEB2, "|101111|0|0100|.....|................|");
    DECODE_ENTRY(11,     BGTID_TYPEB2, "|101111|1|0100|.....|................|");
    DECODE_ENTRY(11,      BLEI_TYPEB2, "|101111|0|0011|.....|................|");
    DECODE_ENTRY(11,     BLEID_TYPEB2, "|101111|1|0011|.....|................|");
    DECODE_ENTRY(11,      BLTI_TYPEB2, "|101111|0|0010|.....|................|");
    DECODE_ENTRY(11,     BLTID_TYPEB2, "|101111|1|0010|.....|................|");
    DECODE_ENTRY(11,      BNEI_TYPEB2, "|101111|0|0001|.....|................|");
    DECODE_ENTRY(11,     BNEID_TYPEB2, "|101111|1|0001|.....|................|");

    // format                  TypeB3   |opcode|   rD|D|A| c2|            simm|     // 32 bits
    DECODE_ENTRY(11,      BRAI_TYPEB3, "|101110|.....|0|1|000|................|");
    DECODE_ENTRY(11,     BRAID_TYPEB3, "|101110|.....|1|1|000|................|");
    DECODE_ENTRY(11,       BRI_TYPEB3, "|101110|.....|0|0|000|................|");
    DECODE_ENTRY(11,      BRID_TYPEB3, "|101110|.....|1|0|000|................|");

    // format                  TypeB4   |opcode|   rD|D|A| c2|            simm|     // 32 bits
    DECODE_ENTRY(11,    BRALID_TYPEB4, "|101110|.....|1|1|100|................|");
    DECODE_ENTRY(11,     BRLID_TYPEB4, "|101110|.....|1|0|100|................|");

    // format                  TypeB5   |opcode|   rD|opcod|            simm|     // 32 bits
    DECODE_ENTRY(11,      BRKI_TYPEB5, "|101110|.....|01100|................|");

    // format                  TypeB6   |opcode|   rD|   rA|   c2|ST|subo| uimm|     // 32 bits
    DECODE_ENTRY(17,     BSLLI_TYPEB6, "|011001|.....|.....|00000|10|0000|.....|");
    DECODE_ENTRY(17,     BSRAI_TYPEB6, "|011001|.....|.....|00000|01|0000|.....|");
    DECODE_ENTRY(17,     BSRLI_TYPEB6, "|011001|.....|.....|00000|00|0000|.....|");

    // format                  TypeB8   |opcode| simm|subop|          subop1|     // 32 bits
    DECODE_ENTRY(27,      MBAR_TYPEB8, "|101110|.....|00010|0000000000000100|");

    // format                  TypeB9   |opcode|   rD|subop1|           uimm|     // 32 bits
    DECODE_ENTRY(12,    MSRCLR_TYPEB9, "|100101|.....|100010|...............|");
    DECODE_ENTRY(12,    MSRSET_TYPEB9, "|100101|.....|100000|...............|");

    // format                  TypeBa   |opcode|subop|   rA|            simm|     // 32 bits
    DECODE_ENTRY(11,      RTBD_TYPEBA, "|101101|10010|.....|................|");
    DECODE_ENTRY(11,      RTED_TYPEBA, "|101101|10100|.....|................|");
    DECODE_ENTRY(11,      RTID_TYPEBA, "|101101|10001|.....|................|");
    DECODE_ENTRY(11,      RTSD_TYPEBA, "|101101|10000|.....|................|");

    // format                  TypeC1   |opcode|   rD| zero1|nctae| zero1|FSLx|     // 32 bits
    DECODE_ENTRY(23,      AGET_TYPEC1, "|011011|.....|000000|00010|000000|....|");
    DECODE_ENTRY(23,     CAGET_TYPEC1, "|011011|.....|000000|01010|000000|....|");
    DECODE_ENTRY(23,      CGET_TYPEC1, "|011011|.....|000000|01000|000000|....|");
    DECODE_ENTRY(23,     EAGET_TYPEC1, "|011011|.....|000000|00011|000000|....|");
    DECODE_ENTRY(23,    ECAGET_TYPEC1, "|011011|.....|000000|01011|000000|....|");
    DECODE_ENTRY(23,     ECGET_TYPEC1, "|011011|.....|000000|01001|000000|....|");
    DECODE_ENTRY(23,      EGET_TYPEC1, "|011011|.....|000000|00001|000000|....|");
    DECODE_ENTRY(23,       GET_TYPEC1, "|011011|.....|000000|00000|000000|....|");
    DECODE_ENTRY(23,     NAGET_TYPEC1, "|011011|.....|000000|10010|000000|....|");
    DECODE_ENTRY(23,    NCAGET_TYPEC1, "|011011|.....|000000|11010|000000|....|");
    DECODE_ENTRY(23,     NCGET_TYPEC1, "|011011|.....|000000|11000|000000|....|");
    DECODE_ENTRY(23,    NEAGET_TYPEC1, "|011011|.....|000000|10011|000000|....|");
    DECODE_ENTRY(23,   NECAGET_TYPEC1, "|011011|.....|000000|11011|000000|....|");
    DECODE_ENTRY(23,    NECGET_TYPEC1, "|011011|.....|000000|11001|000000|....|");
    DECODE_ENTRY(23,     NEGET_TYPEC1, "|011011|.....|000000|10001|000000|....|");
    DECODE_ENTRY(23,      NGET_TYPEC1, "|011011|.....|000000|10000|000000|....|");
    DECODE_ENTRY(23,     TAGET_TYPEC1, "|011011|.....|000000|00110|000000|....|");
    DECODE_ENTRY(23,    TCAGET_TYPEC1, "|011011|.....|000000|01110|000000|....|");
    DECODE_ENTRY(23,     TCGET_TYPEC1, "|011011|.....|000000|01100|000000|....|");
    DECODE_ENTRY(23,    TEAGET_TYPEC1, "|011011|.....|000000|00111|000000|....|");
    DECODE_ENTRY(23,   TECAGET_TYPEC1, "|011011|.....|000000|01111|000000|....|");
    DECODE_ENTRY(23,    TECGET_TYPEC1, "|011011|.....|000000|01101|000000|....|");
    DECODE_ENTRY(23,     TEGET_TYPEC1, "|011011|.....|000000|00101|000000|....|");
    DECODE_ENTRY(23,      TGET_TYPEC1, "|011011|.....|000000|00100|000000|....|");
    DECODE_ENTRY(23,    TNAGET_TYPEC1, "|011011|.....|000000|10110|000000|....|");
    DECODE_ENTRY(23,   TNCAGET_TYPEC1, "|011011|.....|000000|11110|000000|....|");
    DECODE_ENTRY(23,    TNCGET_TYPEC1, "|011011|.....|000000|11100|000000|....|");
    DECODE_ENTRY(23,   TNEAGET_TYPEC1, "|011011|.....|000000|10111|000000|....|");
    DECODE_ENTRY(23,  TNECAGET_TYPEC1, "|011011|.....|000000|11111|000000|....|");
    DECODE_ENTRY(23,   TNECGET_TYPEC1, "|011011|.....|000000|11101|000000|....|");
    DECODE_ENTRY(23,    TNEGET_TYPEC1, "|011011|.....|000000|10101|000000|....|");
    DECODE_ENTRY(23,     TNGET_TYPEC1, "|011011|.....|000000|10100|000000|....|");

    // format                  TypeC2   |opcode|   rD|zero1|   rB|z|nctae|zero1|     // 32 bits
    DECODE_ENTRY(22,     AGETD_TYPEC2, "|010011|.....|00000|.....|0|00010|00000|");
    DECODE_ENTRY(22,    CAGETD_TYPEC2, "|010011|.....|00000|.....|0|01010|00000|");
    DECODE_ENTRY(22,     CGETD_TYPEC2, "|010011|.....|00000|.....|0|01000|00000|");
    DECODE_ENTRY(22,    EAGETD_TYPEC2, "|010011|.....|00000|.....|0|00011|00000|");
    DECODE_ENTRY(22,   ECAGETD_TYPEC2, "|010011|.....|00000|.....|0|01011|00000|");
    DECODE_ENTRY(22,    ECGETD_TYPEC2, "|010011|.....|00000|.....|0|01001|00000|");
    DECODE_ENTRY(22,     EGETD_TYPEC2, "|010011|.....|00000|.....|0|00001|00000|");
    DECODE_ENTRY(22,      GETD_TYPEC2, "|010011|.....|00000|.....|0|00000|00000|");
    DECODE_ENTRY(22,    NAGETD_TYPEC2, "|010011|.....|00000|.....|0|10010|00000|");
    DECODE_ENTRY(22,   NCAGETD_TYPEC2, "|010011|.....|00000|.....|0|11010|00000|");
    DECODE_ENTRY(22,    NCGETD_TYPEC2, "|010011|.....|00000|.....|0|11000|00000|");
    DECODE_ENTRY(22,   NEAGETD_TYPEC2, "|010011|.....|00000|.....|0|10011|00000|");
    DECODE_ENTRY(22,  NECAGETD_TYPEC2, "|010011|.....|00000|.....|0|11011|00000|");
    DECODE_ENTRY(22,   NECGETD_TYPEC2, "|010011|.....|00000|.....|0|11001|00000|");
    DECODE_ENTRY(22,    NEGETD_TYPEC2, "|010011|.....|00000|.....|0|10001|00000|");
    DECODE_ENTRY(22,     NGETD_TYPEC2, "|010011|.....|00000|.....|0|10000|00000|");
    DECODE_ENTRY(22,    TAGETD_TYPEC2, "|010011|.....|00000|.....|0|00110|00000|");
    DECODE_ENTRY(22,   TCAGETD_TYPEC2, "|010011|.....|00000|.....|0|01110|00000|");
    DECODE_ENTRY(22,    TCGETD_TYPEC2, "|010011|.....|00000|.....|0|01100|00000|");
    DECODE_ENTRY(22,   TEAGETD_TYPEC2, "|010011|.....|00000|.....|0|00111|00000|");
    DECODE_ENTRY(22,  TECAGETD_TYPEC2, "|010011|.....|00000|.....|0|01111|00000|");
    DECODE_ENTRY(22,   TECGETD_TYPEC2, "|010011|.....|00000|.....|0|01101|00000|");
    DECODE_ENTRY(22,    TEGETD_TYPEC2, "|010011|.....|00000|.....|0|00101|00000|");
    DECODE_ENTRY(22,     TGETD_TYPEC2, "|010011|.....|00000|.....|0|00100|00000|");
    DECODE_ENTRY(22,   TNAGETD_TYPEC2, "|010011|.....|00000|.....|0|10110|00000|");
    DECODE_ENTRY(22,  TNCAGETD_TYPEC2, "|010011|.....|00000|.....|0|11110|00000|");
    DECODE_ENTRY(22,   TNCGETD_TYPEC2, "|010011|.....|00000|.....|0|11100|00000|");
    DECODE_ENTRY(22,  TNEAGETD_TYPEC2, "|010011|.....|00000|.....|0|10111|00000|");
    DECODE_ENTRY(22, TNECAGETD_TYPEC2, "|010011|.....|00000|.....|0|11111|00000|");
    DECODE_ENTRY(22,  TNECGETD_TYPEC2, "|010011|.....|00000|.....|0|11101|00000|");
    DECODE_ENTRY(22,   TNEGETD_TYPEC2, "|010011|.....|00000|.....|0|10101|00000|");
    DECODE_ENTRY(22,    TNGETD_TYPEC2, "|010011|.....|00000|.....|0|10100|00000|");

    // format                  TypeC3   |opcode|init1|   rA|i|ncta|  init1|FSLx|     // 32 bits
    DECODE_ENTRY(23,      APUT_TYPEC3, "|011011|00000|.....|1|0001|0000000|....|");
    DECODE_ENTRY(23,     CAPUT_TYPEC3, "|011011|00000|.....|1|0101|0000000|....|");
    DECODE_ENTRY(23,      CPUT_TYPEC3, "|011011|00000|.....|1|0100|0000000|....|");
    DECODE_ENTRY(23,     NAPUT_TYPEC3, "|011011|00000|.....|1|1001|0000000|....|");
    DECODE_ENTRY(23,    NCAPUT_TYPEC3, "|011011|00000|.....|1|1101|0000000|....|");
    DECODE_ENTRY(23,     NCPUT_TYPEC3, "|011011|00000|.....|1|1100|0000000|....|");
    DECODE_ENTRY(23,      NPUT_TYPEC3, "|011011|00000|.....|1|1000|0000000|....|");
    DECODE_ENTRY(23,       PUT_TYPEC3, "|011011|00000|.....|1|0000|0000000|....|");

    // format                 TypeC3d   |opcode|zero1|   rA|   rB|z|ncta| zero1|     // 32 bits
    DECODE_ENTRY(22,    APUTD_TYPEC3D, "|010011|00000|.....|.....|1|0001|000000|");
    DECODE_ENTRY(22,   CAPUTD_TYPEC3D, "|010011|00000|.....|.....|1|0101|000000|");
    DECODE_ENTRY(22,    CPUTD_TYPEC3D, "|010011|00000|.....|.....|1|0100|000000|");
    DECODE_ENTRY(22,   NAPUTD_TYPEC3D, "|010011|00000|.....|.....|1|1001|000000|");
    DECODE_ENTRY(22,  NCAPUTD_TYPEC3D, "|010011|00000|.....|.....|1|1101|000000|");
    DECODE_ENTRY(22,   NCPUTD_TYPEC3D, "|010011|00000|.....|.....|1|1100|000000|");
    DECODE_ENTRY(22,    NPUTD_TYPEC3D, "|010011|00000|.....|.....|1|1000|000000|");
    DECODE_ENTRY(22,     PUTD_TYPEC3D, "|010011|00000|.....|.....|1|0000|000000|");

    // format                  TypeC4   |opcode|init1|   rA|i|ncta|  init1|FSLx|     // 32 bits
    DECODE_ENTRY(23,     TAPUT_TYPEC4, "|011011|00000|.....|1|0011|0000000|....|");
    DECODE_ENTRY(23,    TCAPUT_TYPEC4, "|011011|00000|.....|1|0111|0000000|....|");
    DECODE_ENTRY(23,     TCPUT_TYPEC4, "|011011|00000|.....|1|0110|0000000|....|");
    DECODE_ENTRY(23,    TNAPUT_TYPEC4, "|011011|00000|.....|1|1011|0000000|....|");
    DECODE_ENTRY(23,   TNCAPUT_TYPEC4, "|011011|00000|.....|1|1111|0000000|....|");
    DECODE_ENTRY(23,    TNCPUT_TYPEC4, "|011011|00000|.....|1|1110|0000000|....|");
    DECODE_ENTRY(23,     TNPUT_TYPEC4, "|011011|00000|.....|1|1010|0000000|....|");
    DECODE_ENTRY(23,      TPUT_TYPEC4, "|011011|00000|.....|1|0010|0000000|....|");

    // format                 TypeC4d   |opcode|zero1|   rA|   rB|z|ncta| zero1|     // 32 bits
    DECODE_ENTRY(22,   TAPUTD_TYPEC4D, "|010011|00000|.....|.....|1|0011|000000|");
    DECODE_ENTRY(22,  TCAPUTD_TYPEC4D, "|010011|00000|.....|.....|1|0111|000000|");
    DECODE_ENTRY(22,   TCPUTD_TYPEC4D, "|010011|00000|.....|.....|1|0110|000000|");
    DECODE_ENTRY(22,  TNAPUTD_TYPEC4D, "|010011|00000|.....|.....|1|1011|000000|");
    DECODE_ENTRY(22, TNCAPUTD_TYPEC4D, "|010011|00000|.....|.....|1|1111|000000|");
    DECODE_ENTRY(22,  TNCPUTD_TYPEC4D, "|010011|00000|.....|.....|1|1110|000000|");
    DECODE_ENTRY(22,   TNPUTD_TYPEC4D, "|010011|00000|.....|.....|1|1010|000000|");
    DECODE_ENTRY(22,    TPUTD_TYPEC4D, "|010011|00000|.....|.....|1|0010|000000|");

    // format                  TypeI1   |opcode|     zero1|          simmhi|     // 32 bits
    DECODE_ENTRY(16,       IMM_TYPEI1, "|101100|0000000000|................|");

    // format                   TypeX   |                          opcode|     // 32 bits
    DECODE_ENTRY(32,        NOP_TYPEX, "|10000000000000000000000000000000|");

    //
    // Drop through section to next table
    //
    return table;
}
//
// Create the OR1K decode table
//
static vmidDecodeTableP createDecodeTable(void) {
    
    vmidDecodeTableP table = vmidNewDecodeTable(OR1K_BITS, OR1K_IT_LAST);

    // handle movhi instruction
    DECODE_ENTRY(0, MOVHI, "|000110.........0................|");

    // handle arithmetic instructions (second argument constant)
    DECODE_ENTRY(0, ADDI,  "|100111..........................|");
    DECODE_ENTRY(0, ADDIC, "|101000..........................|");
    DECODE_ENTRY(0, ANDI,  "|101001..........................|");
    DECODE_ENTRY(0, ORI,   "|101010..........................|");
    DECODE_ENTRY(0, XORI,  "|101011..........................|");
    DECODE_ENTRY(0, MULI,  "|101100..........................|");

    // handle arithmetic instructions (second argument register)
    DECODE_ENTRY(0, ADD,   "|111000................00....0000|");
    DECODE_ENTRY(0, ADDC,  "|111000................00....0001|");
    DECODE_ENTRY(0, SUB,   "|111000................00....0010|");
    DECODE_ENTRY(0, AND,   "|111000................00....0011|");
    DECODE_ENTRY(0, OR,    "|111000................00....0100|");
    DECODE_ENTRY(0, XOR,   "|111000................00....0101|");
    DECODE_ENTRY(0, MUL,   "|111000................11....0110|");
    DECODE_ENTRY(0, DIV,   "|111000................11....1001|");
    DECODE_ENTRY(0, DIVU,  "|111000................11....1010|");

    // handle shift/rotate instructions (second argument constant)
    DECODE_ENTRY(0, SLLI,  "|101110..................00......|");
    DECODE_ENTRY(0, SRLI,  "|101110..................01......|");
    DECODE_ENTRY(0, SRAI,  "|101110..................10......|");
    DECODE_ENTRY(0, RORI,  "|101110..................11......|");

    // handle shift/rotate instructions (second argument register)
    DECODE_ENTRY(0, SLL,   "|111000................0000..1000|");
    DECODE_ENTRY(0, SRL,   "|111000................0001..1000|");
    DECODE_ENTRY(0, SRA,   "|111000................0010..1000|");
    DECODE_ENTRY(0, ROR,   "|111000................0011..1000|");

    // handle branch instructions
    DECODE_ENTRY(0, BF,    "|000100..........................|");
    DECODE_ENTRY(0, BNF,   "|000011..........................|");
    DECODE_ENTRY(0, J,     "|000000..........................|");
    DECODE_ENTRY(0, JR,    "|010001..........................|");
    DECODE_ENTRY(0, JAL,   "|000001..........................|");
    DECODE_ENTRY(0, JALR,  "|010010..........................|");

    // handle sys and rfe instructions
    DECODE_ENTRY(0, SYS,   "|0010000000000000................|");
    DECODE_ENTRY(0, RFE,   "|001001..........................|");

    // handle load instructions
    DECODE_ENTRY(0, LWZ,   "|100001..........................|");
    DECODE_ENTRY(0, LWS,   "|100010..........................|");
    DECODE_ENTRY(0, LBZ,   "|100011..........................|");
    DECODE_ENTRY(0, LBS,   "|100100..........................|");
    DECODE_ENTRY(0, LHZ,   "|100101..........................|");
    DECODE_ENTRY(0, LHS,   "|100110..........................|");

    // handle store instructions
    DECODE_ENTRY(0, SW,    "|110101..........................|");
    DECODE_ENTRY(0, SB,    "|110110..........................|");
    DECODE_ENTRY(0, SH,    "|110111..........................|");

    // handle comparison instructions
    DECODE_ENTRY(0, SF,    "|1110010.........................|");
    DECODE_ENTRY(0, SFI,   "|1011110.........................|");

    // handle nop instruction
    DECODE_ENTRY(0, NOP,   "|00010101........................|");

    return table;
}