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:
Aleksandar Markovic 2018-11-11 05:58:11 -05:00 committed by Lioncash
parent 8429d98b40
commit ed037799c7
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -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,