mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2024-12-23 18:15:30 +00:00
target/mips: Amend MXU instruction opcodes
Amend MXU instruction opcodes. Pool04 is actually only instruction OPC_MXU_S16MAD. Two cases within S16MAD are recognized by 1-bit subfield 'aptn1'. Backports commit eab0bdb07cbed1131be2d1f541059c7b96b05e32 from qemu
This commit is contained in:
parent
8429d98b40
commit
ed037799c7
|
@ -1481,7 +1481,7 @@ enum {
|
|||
* S32OR XRa, XRb, XRc D32SARW XRa, XRb, XRc, Rb
|
||||
* Q16SLL XRa, XRb, XRc, XRd, sft4
|
||||
* Q16SLR XRa, XRb, XRc, XRd, sft4
|
||||
* Miscelaneous instructions Q16SAR XRa, XRb, XRc, XRd, sft4
|
||||
* Miscellaneous instructions Q16SAR XRa, XRb, XRc, XRd, sft4
|
||||
* ------------------------- Q16SLLV XRa, XRb, Rb
|
||||
* Q16SLRV XRa, XRb, Rb
|
||||
* S32SFL XRa, XRb, XRc, XRd, optn2 Q16SARV XRa, XRb, Rb
|
||||
|
@ -1499,7 +1499,7 @@ enum {
|
|||
*
|
||||
* ┌─ 000000 ─ OPC_MXU_S32MADD
|
||||
* ├─ 000001 ─ OPC_MXU_S32MADDU
|
||||
* ├─ 000010 ─ <not assigned>
|
||||
* ├─ 000010 ─ <not assigned> (non-MXU OPC_MUL)
|
||||
* │ 20..18
|
||||
* ├─ 000011 ─ OPC_MXU__POOL00 ─┬─ 000 ─ OPC_MXU_S32MAX
|
||||
* │ ├─ 001 ─ OPC_MXU_S32MIN
|
||||
|
@ -1531,73 +1531,67 @@ enum {
|
|||
* ├─ 001010 ─ OPC_MXU_D16MAC
|
||||
* ├─ 001011 ─ OPC_MXU_D16MACF
|
||||
* ├─ 001100 ─ OPC_MXU_D16MADL
|
||||
* │ 25..24
|
||||
* ├─ 001101 ─ OPC_MXU__POOL04 ─┬─ 00 ─ OPC_MXU_S16MAD
|
||||
* │ └─ 01 ─ OPC_MXU_S16MAD_1
|
||||
* ├─ 001101 ─ OPC_MXU_S16MAD
|
||||
* ├─ 001110 ─ OPC_MXU_Q16ADD
|
||||
* ├─ 001111 ─ OPC_MXU_D16MACE
|
||||
* │ 23
|
||||
* ├─ 010000 ─ OPC_MXU__POOL05 ─┬─ 0 ─ OPC_MXU_S32LDD
|
||||
* │ └─ 1 ─ OPC_MXU_S32LDDR
|
||||
* ├─ 001111 ─ OPC_MXU_D16MACE 23
|
||||
* │ ┌─ 0 ─ OPC_MXU_S32LDD
|
||||
* ├─ 010000 ─ OPC_MXU__POOL04 ─┴─ 1 ─ OPC_MXU_S32LDDR
|
||||
* │
|
||||
* │ 23
|
||||
* ├─ 010001 ─ OPC_MXU__POOL06 ─┬─ 0 ─ OPC_MXU_S32STD
|
||||
* ├─ 010001 ─ OPC_MXU__POOL05 ─┬─ 0 ─ OPC_MXU_S32STD
|
||||
* │ └─ 1 ─ OPC_MXU_S32STDR
|
||||
* │
|
||||
* │ 13..10
|
||||
* ├─ 010010 ─ OPC_MXU__POOL07 ─┬─ 0000 ─ OPC_MXU_S32LDDV
|
||||
* ├─ 010010 ─ OPC_MXU__POOL06 ─┬─ 0000 ─ OPC_MXU_S32LDDV
|
||||
* │ └─ 0001 ─ OPC_MXU_S32LDDVR
|
||||
* │
|
||||
* │ 13..10
|
||||
* ├─ 010011 ─ OPC_MXU__POOL08 ─┬─ 0000 ─ OPC_MXU_S32STDV
|
||||
* ├─ 010011 ─ OPC_MXU__POOL07 ─┬─ 0000 ─ OPC_MXU_S32STDV
|
||||
* │ └─ 0001 ─ OPC_MXU_S32STDVR
|
||||
* │
|
||||
* │ 23
|
||||
* ├─ 010100 ─ OPC_MXU__POOL09 ─┬─ 0 ─ OPC_MXU_S32LDI
|
||||
* ├─ 010100 ─ OPC_MXU__POOL08 ─┬─ 0 ─ OPC_MXU_S32LDI
|
||||
* │ └─ 1 ─ OPC_MXU_S32LDIR
|
||||
* │
|
||||
* │ 23
|
||||
* ├─ 010101 ─ OPC_MXU__POOL10 ─┬─ 0 ─ OPC_MXU_S32SDI
|
||||
* ├─ 010101 ─ OPC_MXU__POOL09 ─┬─ 0 ─ OPC_MXU_S32SDI
|
||||
* │ └─ 1 ─ OPC_MXU_S32SDIR
|
||||
* │
|
||||
* │ 13..10
|
||||
* ├─ 010110 ─ OPC_MXU__POOL11 ─┬─ 0000 ─ OPC_MXU_S32LDIV
|
||||
* ├─ 010110 ─ OPC_MXU__POOL10 ─┬─ 0000 ─ OPC_MXU_S32LDIV
|
||||
* │ └─ 0001 ─ OPC_MXU_S32LDIVR
|
||||
* │
|
||||
* │ 13..10
|
||||
* ├─ 010111 ─ OPC_MXU__POOL12 ─┬─ 0000 ─ OPC_MXU_S32SDIV
|
||||
* ├─ 010111 ─ OPC_MXU__POOL11 ─┬─ 0000 ─ OPC_MXU_S32SDIV
|
||||
* │ └─ 0001 ─ OPC_MXU_S32SDIVR
|
||||
* ├─ 011000 ─ OPC_MXU_D32ADD
|
||||
* │ 23..22
|
||||
* MXU ├─ 011001 ─ OPC_MXU__POOL13 ─┬─ 00 ─ OPC_MXU_D32ACC
|
||||
* MXU ├─ 011001 ─ OPC_MXU__POOL12 ─┬─ 00 ─ OPC_MXU_D32ACC
|
||||
* opcodes ─┤ ├─ 01 ─ OPC_MXU_D32ACCM
|
||||
* │ └─ 10 ─ OPC_MXU_D32ASUM
|
||||
* ├─ 011010 ─ <not assigned>
|
||||
* │ 23..22
|
||||
* ├─ 011011 ─ OPC_MXU__POOL14 ─┬─ 00 ─ OPC_MXU_Q16ACC
|
||||
* ├─ 011011 ─ OPC_MXU__POOL13 ─┬─ 00 ─ OPC_MXU_Q16ACC
|
||||
* │ ├─ 01 ─ OPC_MXU_Q16ACCM
|
||||
* │ └─ 10 ─ OPC_MXU_Q16ASUM
|
||||
* │
|
||||
* │ 23..22
|
||||
* ├─ 011100 ─ OPC_MXU__POOL15 ─┬─ 00 ─ OPC_MXU_Q8ADDE
|
||||
* ├─ 011100 ─ OPC_MXU__POOL14 ─┬─ 00 ─ OPC_MXU_Q8ADDE
|
||||
* │ ├─ 01 ─ OPC_MXU_D8SUM
|
||||
* ├─ 011101 ─ OPC_MXU_Q8ACCE └─ 10 ─ OPC_MXU_D8SUMC
|
||||
* ├─ 011110 ─ <not assigned>
|
||||
* ├─ 011111 ─ <not assigned>
|
||||
* ├─ 100000 ─ <not assigned>
|
||||
* ├─ 100001 ─ <not assigned>
|
||||
* ├─ 100000 ─ <not assigned> (overlaps with CLZ)
|
||||
* ├─ 100001 ─ <not assigned> (overlaps with CLO)
|
||||
* ├─ 100010 ─ OPC_MXU_S8LDD
|
||||
* ├─ 100011 ─ OPC_MXU_S8STD
|
||||
* ├─ 100100 ─ OPC_MXU_S8LDI
|
||||
* ├─ 100101 ─ OPC_MXU_S8SDI
|
||||
* │ 15..14
|
||||
* ├─ 100110 ─ OPC_MXU__POOL16 ─┬─ 00 ─ OPC_MXU_S32MUL
|
||||
* │ ├─ 00 ─ OPC_MXU_S32MULU
|
||||
* ├─ 100011 ─ OPC_MXU_S8STD 15..14
|
||||
* ├─ 100100 ─ OPC_MXU_S8LDI ┌─ 00 ─ OPC_MXU_S32MUL
|
||||
* ├─ 100101 ─ OPC_MXU_S8SDI ├─ 00 ─ OPC_MXU_S32MULU
|
||||
* │ ├─ 00 ─ OPC_MXU_S32EXTR
|
||||
* │ └─ 00 ─ OPC_MXU_S32EXTRV
|
||||
* ├─ 100110 ─ OPC_MXU__POOL15 ─┴─ 00 ─ OPC_MXU_S32EXTRV
|
||||
* │
|
||||
* │ 20..18
|
||||
* ├─ 100111 ─ OPC_MXU__POOL17 ─┬─ 000 ─ OPC_MXU_D32SARW
|
||||
* ├─ 100111 ─ OPC_MXU__POOL16 ─┬─ 000 ─ OPC_MXU_D32SARW
|
||||
* │ ├─ 001 ─ OPC_MXU_S32ALN
|
||||
* ├─ 101000 ─ OPC_MXU_LXB ├─ 010 ─ OPC_MXU_S32ALNI
|
||||
* ├─ 101001 ─ <not assigned> ├─ 011 ─ OPC_MXU_S32NOR
|
||||
|
@ -1605,33 +1599,24 @@ enum {
|
|||
* ├─ 101011 ─ OPC_MXU_S16STD ├─ 101 ─ OPC_MXU_S32OR
|
||||
* ├─ 101100 ─ OPC_MXU_S16LDI ├─ 110 ─ OPC_MXU_S32XOR
|
||||
* ├─ 101101 ─ OPC_MXU_S16SDI └─ 111 ─ OPC_MXU_S32LUI
|
||||
* ├─ 101000 ─ <not assigned>
|
||||
* ├─ 101001 ─ <not assigned>
|
||||
* ├─ 101010 ─ <not assigned>
|
||||
* ├─ 101011 ─ <not assigned>
|
||||
* ├─ 101100 ─ <not assigned>
|
||||
* ├─ 101101 ─ <not assigned>
|
||||
* ├─ 101110 ─ OPC_MXU_S32M2I
|
||||
* ├─ 101111 ─ OPC_MXU_S32I2M
|
||||
* ├─ 110000 ─ OPC_MXU_D32SLL
|
||||
* ├─ 110001 ─ OPC_MXU_D32SLR
|
||||
* ├─ 110010 ─ OPC_MXU_D32SARL
|
||||
* ├─ 110011 ─ OPC_MXU_D32SAR
|
||||
* ├─ 110100 ─ OPC_MXU_Q16SLL
|
||||
* ├─ 110101 ─ OPC_MXU_Q16SLR 20..18
|
||||
* ├─ 110110 ─ OPC_MXU__POOL18 ─┬─ 000 ─ OPC_MXU_D32SLLV
|
||||
* │ ├─ 001 ─ OPC_MXU_D32SLRV
|
||||
* │ ├─ 010 ─ OPC_MXU_D32SARV
|
||||
* │ ├─ 011 ─ OPC_MXU_Q16SLLV
|
||||
* ├─ 110001 ─ OPC_MXU_D32SLR 20..18
|
||||
* ├─ 110010 ─ OPC_MXU_D32SARL ┌─ 000 ─ OPC_MXU_D32SLLV
|
||||
* ├─ 110011 ─ OPC_MXU_D32SAR ├─ 001 ─ OPC_MXU_D32SLRV
|
||||
* ├─ 110100 ─ OPC_MXU_Q16SLL ├─ 010 ─ OPC_MXU_D32SARV
|
||||
* ├─ 110101 ─ OPC_MXU_Q16SLR ├─ 011 ─ OPC_MXU_Q16SLLV
|
||||
* │ ├─ 100 ─ OPC_MXU_Q16SLRV
|
||||
* │ └─ 101 ─ OPC_MXU_Q16SARV
|
||||
* ├─ 110110 ─ OPC_MXU__POOL17 ─┴─ 101 ─ OPC_MXU_Q16SARV
|
||||
* │
|
||||
* ├─ 110111 ─ OPC_MXU_Q16SAR
|
||||
* │ 23..22
|
||||
* ├─ 111000 ─ OPC_MXU__POOL19 ─┬─ 00 ─ OPC_MXU_Q8MUL
|
||||
* ├─ 111000 ─ OPC_MXU__POOL18 ─┬─ 00 ─ OPC_MXU_Q8MUL
|
||||
* │ └─ 01 ─ OPC_MXU_Q8MULSU
|
||||
* │
|
||||
* │ 20..18
|
||||
* ├─ 111001 ─ OPC_MXU__POOL20 ─┬─ 000 ─ OPC_MXU_Q8MOVZ
|
||||
* ├─ 111001 ─ OPC_MXU__POOL19 ─┬─ 000 ─ OPC_MXU_Q8MOVZ
|
||||
* │ ├─ 001 ─ OPC_MXU_Q8MOVN
|
||||
* │ ├─ 010 ─ OPC_MXU_D16MOVZ
|
||||
* │ ├─ 011 ─ OPC_MXU_D16MOVN
|
||||
|
@ -1639,13 +1624,13 @@ enum {
|
|||
* │ └─ 101 ─ OPC_MXU_S32MOV
|
||||
* │
|
||||
* │ 23..22
|
||||
* ├─ 111010 ─ OPC_MXU__POOL21 ─┬─ 00 ─ OPC_MXU_Q8MAC
|
||||
* ├─ 111010 ─ OPC_MXU__POOL20 ─┬─ 00 ─ OPC_MXU_Q8MAC
|
||||
* │ └─ 10 ─ OPC_MXU_Q8MACSU
|
||||
* ├─ 111011 ─ OPC_MXU_Q16SCOP
|
||||
* ├─ 111100 ─ OPC_MXU_Q8MADL
|
||||
* ├─ 111101 ─ OPC_MXU_S32SFL
|
||||
* ├─ 111110 ─ OPC_MXU_Q8SAD
|
||||
* └─ 111111 ─ <not assigned>
|
||||
* └─ 111111 ─ <not assigned> (overlaps with SDBBP)
|
||||
*
|
||||
*
|
||||
* Compiled after:
|
||||
|
@ -1668,22 +1653,22 @@ enum {
|
|||
OPC_MXU_D16MAC = 0x0A,
|
||||
OPC_MXU_D16MACF = 0x0B,
|
||||
OPC_MXU_D16MADL = 0x0C,
|
||||
OPC_MXU__POOL04 = 0x0D,
|
||||
OPC_MXU_S16MAD = 0x0D,
|
||||
OPC_MXU_Q16ADD = 0x0E,
|
||||
OPC_MXU_D16MACE = 0x0F,
|
||||
OPC_MXU__POOL05 = 0x10,
|
||||
OPC_MXU__POOL06 = 0x11,
|
||||
OPC_MXU__POOL07 = 0x12,
|
||||
OPC_MXU__POOL08 = 0x13,
|
||||
OPC_MXU__POOL09 = 0x14,
|
||||
OPC_MXU__POOL10 = 0x15,
|
||||
OPC_MXU__POOL11 = 0x16,
|
||||
OPC_MXU__POOL12 = 0x17,
|
||||
OPC_MXU__POOL04 = 0x10,
|
||||
OPC_MXU__POOL05 = 0x11,
|
||||
OPC_MXU__POOL06 = 0x12,
|
||||
OPC_MXU__POOL07 = 0x13,
|
||||
OPC_MXU__POOL08 = 0x14,
|
||||
OPC_MXU__POOL09 = 0x15,
|
||||
OPC_MXU__POOL10 = 0x16,
|
||||
OPC_MXU__POOL11 = 0x17,
|
||||
OPC_MXU_D32ADD = 0x18,
|
||||
OPC_MXU__POOL13 = 0x19,
|
||||
OPC_MXU__POOL12 = 0x19,
|
||||
/* not assigned 0x1A */
|
||||
OPC_MXU__POOL14 = 0x1B,
|
||||
OPC_MXU__POOL15 = 0x1C,
|
||||
OPC_MXU__POOL13 = 0x1B,
|
||||
OPC_MXU__POOL14 = 0x1C,
|
||||
OPC_MXU_Q8ACCE = 0x1D,
|
||||
/* not assigned 0x1E */
|
||||
/* not assigned 0x1F */
|
||||
|
@ -1693,8 +1678,8 @@ enum {
|
|||
OPC_MXU_S8STD = 0x23,
|
||||
OPC_MXU_S8LDI = 0x24,
|
||||
OPC_MXU_S8SDI = 0x25,
|
||||
OPC_MXU__POOL16 = 0x26,
|
||||
OPC_MXU__POOL17 = 0x27,
|
||||
OPC_MXU__POOL15 = 0x26,
|
||||
OPC_MXU__POOL16 = 0x27,
|
||||
OPC_MXU_LXB = 0x28,
|
||||
/* not assigned 0x29 */
|
||||
OPC_MXU_S16LDD = 0x2A,
|
||||
|
@ -1709,11 +1694,11 @@ enum {
|
|||
OPC_MXU_D32SAR = 0x33,
|
||||
OPC_MXU_Q16SLL = 0x34,
|
||||
OPC_MXU_Q16SLR = 0x35,
|
||||
OPC_MXU__POOL18 = 0x36,
|
||||
OPC_MXU__POOL17 = 0x36,
|
||||
OPC_MXU_Q16SAR = 0x37,
|
||||
OPC_MXU__POOL19 = 0x38,
|
||||
OPC_MXU__POOL20 = 0x39,
|
||||
OPC_MXU__POOL21 = 0x3A,
|
||||
OPC_MXU__POOL18 = 0x38,
|
||||
OPC_MXU__POOL19 = 0x39,
|
||||
OPC_MXU__POOL20 = 0x3A,
|
||||
OPC_MXU_Q16SCOP = 0x3B,
|
||||
OPC_MXU_Q8MADL = 0x3C,
|
||||
OPC_MXU_S32SFL = 0x3D,
|
||||
|
@ -1770,21 +1755,13 @@ enum {
|
|||
/*
|
||||
* MXU pool 04
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S16MAD = 0x00,
|
||||
OPC_MXU_S16MAD_1 = 0x01,
|
||||
};
|
||||
|
||||
/*
|
||||
* MXU pool 05
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32LDD = 0x00,
|
||||
OPC_MXU_S32LDDR = 0x01,
|
||||
};
|
||||
|
||||
/*
|
||||
* MXU pool 06
|
||||
* MXU pool 05
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32STD = 0x00,
|
||||
|
@ -1792,7 +1769,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 07
|
||||
* MXU pool 06
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32LDDV = 0x00,
|
||||
|
@ -1800,7 +1777,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 08
|
||||
* MXU pool 07
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32STDV = 0x00,
|
||||
|
@ -1808,7 +1785,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 09
|
||||
* MXU pool 08
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32LDI = 0x00,
|
||||
|
@ -1816,7 +1793,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 10
|
||||
* MXU pool 09
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32SDI = 0x00,
|
||||
|
@ -1824,7 +1801,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 11
|
||||
* MXU pool 10
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32LDIV = 0x00,
|
||||
|
@ -1832,7 +1809,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 12
|
||||
* MXU pool 11
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32SDIV = 0x00,
|
||||
|
@ -1840,7 +1817,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 13
|
||||
* MXU pool 12
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_D32ACC = 0x00,
|
||||
|
@ -1849,7 +1826,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 14
|
||||
* MXU pool 13
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_Q16ACC = 0x00,
|
||||
|
@ -1858,7 +1835,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 15
|
||||
* MXU pool 14
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_Q8ADDE = 0x00,
|
||||
|
@ -1867,7 +1844,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 16
|
||||
* MXU pool 15
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_S32MUL = 0x00,
|
||||
|
@ -1877,7 +1854,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 17
|
||||
* MXU pool 16
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_D32SARW = 0x00,
|
||||
|
@ -1891,7 +1868,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 18
|
||||
* MXU pool 17
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_D32SLLV = 0x00,
|
||||
|
@ -1903,7 +1880,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 19
|
||||
* MXU pool 18
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_Q8MUL = 0x00,
|
||||
|
@ -1911,7 +1888,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 20
|
||||
* MXU pool 19
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_Q8MOVZ = 0x00,
|
||||
|
@ -1923,7 +1900,7 @@ enum {
|
|||
};
|
||||
|
||||
/*
|
||||
* MXU pool 21
|
||||
* MXU pool 20
|
||||
*/
|
||||
enum {
|
||||
OPC_MXU_Q8MAC = 0x00,
|
||||
|
|
Loading…
Reference in a new issue