[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v7 03/20] target/mips: Amend MXU instruction opc
From: |
Stefan Markovic |
Subject: |
Re: [Qemu-devel] [PATCH v7 03/20] target/mips: Amend MXU instruction opcodes |
Date: |
Thu, 25 Oct 2018 08:31:36 +0000 |
On 24.10.18. 14:18, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <address@hidden>
>
> Amend MXU instruction opcodes. Pool04 is actually only instruction
> OPC_MXU_S16MAD. Two cases within S16MAD are recognized by 1-bit
> subfield 'aptn1'.
>
> Signed-off-by: Aleksandar Markovic <address@hidden>
> ---
> target/mips/translate.c | 142
> +++++++++++++++++++++---------------------------
> 1 file changed, 63 insertions(+), 79 deletions(-)
>
> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index c1f692c..fefe9ac 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -1486,7 +1486,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
> @@ -1504,7 +1504,7 @@ enum {
> *
> * ┌─ 000000 ─ OPC_MXU_S32MADD
> * ├─ 000001 ─ OPC_MXU_S32MADDU
> - * ├─ 000010 ─ <not assigned>
> + * ├─ 000010 ─ <not assigned> (non-MXU OPC_MULL)
OPC_MUL instead of OPC_MULL.
Otherwise:
Reviewed-by: Stefan Markovic <address@hidden>
> * │ 20..18
> * ├─ 000011 ─ OPC_MXU__POOL00 ─┬─ 000 ─ OPC_MXU_S32MAX
> * │ ├─ 001 ─ OPC_MXU_S32MIN
> @@ -1536,55 +1536,53 @@ 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
> + * ├─ 010000 ─ OPC_MXU__POOL04 ─┬─ 0 ─ OPC_MXU_S32LDD
> * │ └─ 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>
> @@ -1592,17 +1590,14 @@ enum {
> * ├─ 100000 ─ <not assigned>
> * ├─ 100001 ─ <not assigned>
> * ├─ 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
> @@ -1619,24 +1614,21 @@ enum {
> * ├─ 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
> @@ -1644,7 +1636,7 @@ 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
> @@ -1673,22 +1665,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 */
> @@ -1698,8 +1690,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,
> @@ -1714,11 +1706,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,
> @@ -1776,20 +1768,12 @@ 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,
> @@ -1797,7 +1781,7 @@ enum {
> };
>
> /*
> - * MXU pool 07
> + * MXU pool 06
> */
> enum {
> OPC_MXU_S32LDDV = 0x00,
> @@ -1805,7 +1789,7 @@ enum {
> };
>
> /*
> - * MXU pool 08
> + * MXU pool 07
> */
> enum {
> OPC_MXU_S32STDV = 0x00,
> @@ -1813,7 +1797,7 @@ enum {
> };
>
> /*
> - * MXU pool 09
> + * MXU pool 08
> */
> enum {
> OPC_MXU_S32LDI = 0x00,
> @@ -1821,7 +1805,7 @@ enum {
> };
>
> /*
> - * MXU pool 10
> + * MXU pool 09
> */
> enum {
> OPC_MXU_S32SDI = 0x00,
> @@ -1829,7 +1813,7 @@ enum {
> };
>
> /*
> - * MXU pool 11
> + * MXU pool 10
> */
> enum {
> OPC_MXU_S32LDIV = 0x00,
> @@ -1837,7 +1821,7 @@ enum {
> };
>
> /*
> - * MXU pool 12
> + * MXU pool 11
> */
> enum {
> OPC_MXU_S32SDIV = 0x00,
> @@ -1845,7 +1829,7 @@ enum {
> };
>
> /*
> - * MXU pool 13
> + * MXU pool 12
> */
> enum {
> OPC_MXU_D32ACC = 0x00,
> @@ -1854,7 +1838,7 @@ enum {
> };
>
> /*
> - * MXU pool 14
> + * MXU pool 13
> */
> enum {
> OPC_MXU_Q16ACC = 0x00,
> @@ -1863,7 +1847,7 @@ enum {
> };
>
> /*
> - * MXU pool 15
> + * MXU pool 14
> */
> enum {
> OPC_MXU_Q8ADDE = 0x00,
> @@ -1872,7 +1856,7 @@ enum {
> };
>
> /*
> - * MXU pool 16
> + * MXU pool 15
> */
> enum {
> OPC_MXU_S32MUL = 0x00,
> @@ -1882,7 +1866,7 @@ enum {
> };
>
> /*
> - * MXU pool 17
> + * MXU pool 16
> */
> enum {
> OPC_MXU_D32SARW = 0x00,
> @@ -1896,7 +1880,7 @@ enum {
> };
>
> /*
> - * MXU pool 18
> + * MXU pool 17
> */
> enum {
> OPC_MXU_D32SLLV = 0x00,
> @@ -1908,7 +1892,7 @@ enum {
> };
>
> /*
> - * MXU pool 19
> + * MXU pool 18
> */
> enum {
> OPC_MXU_Q8MUL = 0x00,
> @@ -1916,7 +1900,7 @@ enum {
> };
>
> /*
> - * MXU pool 20
> + * MXU pool 19
> */
> enum {
> OPC_MXU_Q8MOVZ = 0x00,
> @@ -1928,7 +1912,7 @@ enum {
> };
>
> /*
> - * MXU pool 21
> + * MXU pool 20
> */
> enum {
> OPC_MXU_Q8MAC = 0x00,
[Qemu-devel] [PATCH v7 05/20] target/mips: Add MXU decoding engine, Aleksandar Markovic, 2018/10/24
[Qemu-devel] [PATCH v7 06/20] target/mips: Add bit encoding for MXU accumulate add/sub 1-bit pattern 'aptn1', Aleksandar Markovic, 2018/10/24
[Qemu-devel] [PATCH v7 08/20] target/mips: Add bit encoding for MXU execute add/sub pattern 'eptn2', Aleksandar Markovic, 2018/10/24