qemu-devel
[Top][All Lists]
Advanced

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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]