// // 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; }