target/mips: Bunch of opcodes

Globs a bunch of MIPS commits together from qemu.
This commit is contained in:
Fredrik Noring 2018-11-10 11:38:34 -05:00 committed by Lioncash
parent 5a6b86a346
commit 32a644a4a1
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7

View File

@ -2124,6 +2124,240 @@ enum {
TX79_SQ = 0x1F << 26, /* Same as OPC_SPECIAL3 */
};
/*
* TX79 Multimedia Instructions with opcode field = MMI:
*
* 31 26 5 0
* +--------+-------------------------------+--------+
* | MMI | |function|
* +--------+-------------------------------+--------+
*
* function bits 2..0
* bits | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
* 5..3 | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111
* -------+-------+-------+-------+-------+-------+-------+-------+-------
* 0 000 | MADD | MADDU | * | * | PLZCW | * | * | *
* 1 001 | MMI0% | MMI2% | * | * | * | * | * | *
* 2 010 | MFHI1 | MTHI1 | MFLO1 | MTLO1 | * | * | * | *
* 3 011 | MULT1 | MULTU1| DIV1 | DIVU1 | * | * | * | *
* 4 100 | MADD1 | MADDU1| * | * | * | * | * | *
* 5 101 | MMI1% | MMI3% | * | * | * | * | * | *
* 6 110 | PMFHL | PMTHL | * | * | PSLLH | * | PSRLH | PSRAH
* 7 111 | * | * | * | * | PSLLW | * | PSRLW | PSRAW
*/
#define MASK_TX79_MMI(op) (MASK_OP_MAJOR(op) | ((op) & 0x3F))
enum {
TX79_MMI_MADD = 0x00 | TX79_CLASS_MMI, /* Same as OPC_MADD */
TX79_MMI_MADDU = 0x01 | TX79_CLASS_MMI, /* Same as OPC_MADDU */
TX79_MMI_PLZCW = 0x04 | TX79_CLASS_MMI,
TX79_MMI_CLASS_MMI0 = 0x08 | TX79_CLASS_MMI,
TX79_MMI_CLASS_MMI2 = 0x09 | TX79_CLASS_MMI,
TX79_MMI_MFHI1 = 0x10 | TX79_CLASS_MMI, /* Same minor as OPC_MFHI */
TX79_MMI_MTHI1 = 0x11 | TX79_CLASS_MMI, /* Same minor as OPC_MTHI */
TX79_MMI_MFLO1 = 0x12 | TX79_CLASS_MMI, /* Same minor as OPC_MFLO */
TX79_MMI_MTLO1 = 0x13 | TX79_CLASS_MMI, /* Same minor as OPC_MTLO */
TX79_MMI_MULT1 = 0x18 | TX79_CLASS_MMI, /* Same minor as OPC_MULT */
TX79_MMI_MULTU1 = 0x19 | TX79_CLASS_MMI, /* Same minor as OPC_MULTU */
TX79_MMI_DIV1 = 0x1A | TX79_CLASS_MMI, /* Same minor as OPC_DIV */
TX79_MMI_DIVU1 = 0x1B | TX79_CLASS_MMI, /* Same minor as OPC_DIVU */
TX79_MMI_MADD1 = 0x20 | TX79_CLASS_MMI,
TX79_MMI_MADDU1 = 0x21 | TX79_CLASS_MMI,
TX79_MMI_CLASS_MMI1 = 0x28 | TX79_CLASS_MMI,
TX79_MMI_CLASS_MMI3 = 0x29 | TX79_CLASS_MMI,
TX79_MMI_PMFHL = 0x30 | TX79_CLASS_MMI,
TX79_MMI_PMTHL = 0x31 | TX79_CLASS_MMI,
TX79_MMI_PSLLH = 0x34 | TX79_CLASS_MMI,
TX79_MMI_PSRLH = 0x36 | TX79_CLASS_MMI,
TX79_MMI_PSRAH = 0x37 | TX79_CLASS_MMI,
TX79_MMI_PSLLW = 0x3C | TX79_CLASS_MMI,
TX79_MMI_PSRLW = 0x3E | TX79_CLASS_MMI,
TX79_MMI_PSRAW = 0x3F | TX79_CLASS_MMI,
};
/*
* TX79 Multimedia Instructions with opcode field = MMI and bits 5..0 = MMI0:
*
* 31 26 10 6 5 0
* +--------+----------------------+--------+--------+
* | MMI | |function| MMI0 |
* +--------+----------------------+--------+--------+
*
* function bits 7..6
* bits | 0 | 1 | 2 | 3
* 10..8 | 00 | 01 | 10 | 11
* -------+-------+-------+-------+-------
* 0 000 | PADDW | PSUBW | PCGTW | PMAXW
* 1 001 | PADDH | PSUBH | PCGTH | PMAXH
* 2 010 | PADDB | PSUBB | PCGTB | *
* 3 011 | * | * | * | *
* 4 100 | PADDSW| PSUBSW| PEXTLW| PPACW
* 5 101 | PADDSH| PSUBSH| PEXTLH| PPACH
* 6 110 | PADDSB| PSUBSB| PEXTLB| PPACB
* 7 111 | * | * | PEXT5 | PPAC5
*/
#define MASK_TX79_MMI0(op) (MASK_OP_MAJOR(op) | ((op) & 0x7FF))
enum {
TX79_MMI0_PADDW = (0x00 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PSUBW = (0x01 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PCGTW = (0x02 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PMAXW = (0x03 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PADDH = (0x04 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PSUBH = (0x05 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PCGTH = (0x06 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PMAXH = (0x07 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PADDB = (0x08 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PSUBB = (0x09 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PCGTB = (0x0A << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PADDSW = (0x10 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PSUBSW = (0x11 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PEXTLW = (0x12 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PPACW = (0x13 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PADDSH = (0x14 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PSUBSH = (0x15 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PEXTLH = (0x16 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PPACH = (0x17 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PADDSB = (0x18 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PSUBSB = (0x19 << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PEXTLB = (0x1A << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PPACB = (0x1B << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PEXT5 = (0x1E << 6) | TX79_MMI_CLASS_MMI0,
TX79_MMI0_PPAC5 = (0x1F << 6) | TX79_MMI_CLASS_MMI0,
};
/*
* TX79 Multimedia Instructions with opcode field = MMI and bits 5..0 = MMI1:
*
* 31 26 10 6 5 0
* +--------+----------------------+--------+--------+
* | MMI | |function| MMI1 |
* +--------+----------------------+--------+--------+
*
* function bits 7..6
* bits | 0 | 1 | 2 | 3
* 10..8 | 00 | 01 | 10 | 11
* -------+-------+-------+-------+-------
* 0 000 | * | PABSW | PCEQW | PMINW
* 1 001 | PADSBH| PABSH | PCEQH | PMINH
* 2 010 | * | * | PCEQB | *
* 3 011 | * | * | * | *
* 4 100 | PADDUW| PSUBUW| PEXTUW| *
* 5 101 | PADDUH| PSUBUH| PEXTUH| *
* 6 110 | PADDUB| PSUBUB| PEXTUB| QFSRV
* 7 111 | * | * | * | *
*/
#define MASK_TX79_MMI1(op) (MASK_OP_MAJOR(op) | ((op) & 0x7FF))
enum {
TX79_MMI1_PABSW = (0x01 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PCEQW = (0x02 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PMINW = (0x03 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PADSBH = (0x04 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PABSH = (0x05 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PCEQH = (0x06 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PMINH = (0x07 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PCEQB = (0x0A << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PADDUW = (0x10 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PSUBUW = (0x11 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PEXTUW = (0x12 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PADDUH = (0x14 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PSUBUH = (0x15 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PEXTUH = (0x16 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PADDUB = (0x18 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PSUBUB = (0x19 << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_PEXTUB = (0x1A << 6) | TX79_MMI_CLASS_MMI1,
TX79_MMI1_QFSRV = (0x1B << 6) | TX79_MMI_CLASS_MMI1,
};
/*
* TX79 Multimedia Instructions with opcode field = MMI and bits 5..0 = MMI2:
*
* 31 26 10 6 5 0
* +--------+----------------------+--------+--------+
* | MMI | |function| MMI2 |
* +--------+----------------------+--------+--------+
*
* function bits 7..6
* bits | 0 | 1 | 2 | 3
* 10..8 | 00 | 01 | 10 | 11
* -------+-------+-------+-------+-------
* 0 000 | PMADDW| * | PSLLVW| PSRLVW
* 1 001 | PMSUBW| * | * | *
* 2 010 | PMFHI | PMFLO | PINTH | *
* 3 011 | PMULTW| PDIVW | PCPYLD| *
* 4 100 | PMADDH| PHMADH| PAND | PXOR
* 5 101 | PMSUBH| PHMSBH| * | *
* 6 110 | * | * | PEXEH | PREVH
* 7 111 | PMULTH| PDIVBW| PEXEW | PROT3W
*/
#define MASK_TX79_MMI2(op) (MASK_OP_MAJOR(op) | ((op) & 0x7FF))
enum {
TX79_MMI2_PMADDW = (0x00 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PSLLVW = (0x02 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PSRLVW = (0x03 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PMSUBW = (0x04 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PMFHI = (0x08 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PMFLO = (0x09 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PINTH = (0x0A << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PMULTW = (0x0C << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PDIVW = (0x0D << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PCPYLD = (0x0E << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PMADDH = (0x10 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PHMADH = (0x11 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PAND = (0x12 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PXOR = (0x13 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PMSUBH = (0x14 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PHMSBH = (0x15 << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PEXEH = (0x1A << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PREVH = (0x1B << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PMULTH = (0x1C << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PDIVBW = (0x1D << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PEXEW = (0x1E << 6) | TX79_MMI_CLASS_MMI2,
TX79_MMI2_PROT3W = (0x1F << 6) | TX79_MMI_CLASS_MMI2,
};
/*
* TX79 Multimedia Instructions with opcode field = MMI and bits 5..0 = MMI3:
*
* 31 26 10 6 5 0
* +--------+----------------------+--------+--------+
* | MMI | |function| MMI3 |
* +--------+----------------------+--------+--------+
*
* function bits 7..6
* bits | 0 | 1 | 2 | 3
* 10..8 | 00 | 01 | 10 | 11
* -------+-------+-------+-------+-------
* 0 000 |PMADDUW| * | * | PSRAVW
* 1 001 | * | * | * | *
* 2 010 | PMTHI | PMTLO | PINTEH| *
* 3 011 |PMULTUW| PDIVUW| PCPYUD| *
* 4 100 | * | * | POR | PNOR
* 5 101 | * | * | * | *
* 6 110 | * | * | PEXCH | PCPYH
* 7 111 | * | * | PEXCW | *
*/
#define MASK_TX79_MMI3(op) (MASK_OP_MAJOR(op) | ((op) & 0x7FF))
enum {
TX79_MMI3_PMADDUW = (0x00 << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PSRAVW = (0x03 << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PMTHI = (0x08 << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PMTLO = (0x09 << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PINTEH = (0x0A << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PMULTUW = (0x0C << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PDIVUW = (0x0D << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PCPYUD = (0x0E << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_POR = (0x12 << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PNOR = (0x13 << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PEXCH = (0x1A << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PCPYH = (0x1B << 6) | TX79_MMI_CLASS_MMI3,
TX79_MMI3_PEXCW = (0x1E << 6) | TX79_MMI_CLASS_MMI3,
};
#define gen_helper_0e0i(tcg_ctx, name, arg) do { \
TCGv_i32 helper_tmp = tcg_const_i32(tcg_ctx, arg); \
gen_helper_##name(tcg_ctx, tcg_ctx->cpu_env, helper_tmp); \