qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/4] target/mips: Add Ingenic's MXU ASE opcodes
@ 2018-10-16 12:14 Aleksandar Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 1/4] target/mips: Add basic description of MXU ASE Aleksandar Markovic
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Aleksandar Markovic @ 2018-10-16 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: aurelien, jancraig, amarkovic, smarkovic, pjovanovic

From: Aleksandar Markovic <amarkovic@wavecomp.com>

This series adds opcodes and accompanying comments for Ingenic's
MXU ASE.

Aleksandar Markovic (4):
  target/mips: Add basic description of MXU ASE
  target/mips: Add assembler mnemonics list for MXU ASE
  target/mips: Add organizational chart of MXU ASE
  target/mips: Add opcode values of MXU ASE

 target/mips/translate.c | 540 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 540 insertions(+)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 1/4] target/mips: Add basic description of MXU ASE
  2018-10-16 12:14 [Qemu-devel] [PATCH 0/4] target/mips: Add Ingenic's MXU ASE opcodes Aleksandar Markovic
@ 2018-10-16 12:14 ` Aleksandar Markovic
  2018-10-16 13:27   ` Stefan Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 2/4] target/mips: Add assembler mnemonics list for " Aleksandar Markovic
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Aleksandar Markovic @ 2018-10-16 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: aurelien, jancraig, amarkovic, smarkovic, pjovanovic

From: Aleksandar Markovic <amarkovic@wavecomp.com>

Add a comment that contains a basic description of MXU ASE.

Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
---
 target/mips/translate.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/target/mips/translate.c b/target/mips/translate.c
index ab16cdb..23e21c5 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -1389,6 +1389,26 @@ enum {
     OPC_BINSRI_df   = (0x7 << 23) | OPC_MSA_BIT_09,
 };
 
+
+/*
+ *    AN OVERVIEW OF MXU EXTENSTION INSTRUCTION SET
+ *    =============================================
+ *
+ * MXU (full name: MIPS eXtension/enhanced Unit) is an SIMD extension of MIPS32
+ * instructions set. It is designed to fit the needs of signal, graphical and
+ * video processing applications. MXU instruction set is used in Xburst family
+ * of microprocessors by Ingenic.
+ *
+ * MXU unit contains 17 registers called X0-X16. X0 is always zero, and X16 is
+ * the control register.
+ *
+ *   Compiled after:
+ *
+ *   "XBurst® Instruction Set Architecture MIPS eXtension/enhanced Unit
+ *   Programming Manual", Ingenic Semiconductor Co, Ltd., 2017
+ */
+
+
 /* global register indices */
 static TCGv cpu_gpr[32], cpu_PC;
 static TCGv cpu_HI[MIPS_DSP_ACC], cpu_LO[MIPS_DSP_ACC];
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 2/4] target/mips: Add assembler mnemonics list for MXU ASE
  2018-10-16 12:14 [Qemu-devel] [PATCH 0/4] target/mips: Add Ingenic's MXU ASE opcodes Aleksandar Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 1/4] target/mips: Add basic description of MXU ASE Aleksandar Markovic
@ 2018-10-16 12:14 ` Aleksandar Markovic
  2018-10-16 13:33   ` Stefan Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 3/4] target/mips: Add organizational chart of " Aleksandar Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 4/4] target/mips: Add opcode values " Aleksandar Markovic
  3 siblings, 1 reply; 9+ messages in thread
From: Aleksandar Markovic @ 2018-10-16 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: aurelien, jancraig, amarkovic, smarkovic, pjovanovic

From: Aleksandar Markovic <amarkovic@wavecomp.com>

Add a comment that contains a list all MXU instructions,
expressed in assembler mnemonics.

Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
---
 target/mips/translate.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/target/mips/translate.c b/target/mips/translate.c
index 23e21c5..73d971e 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -1402,6 +1402,94 @@ enum {
  * MXU unit contains 17 registers called X0-X16. X0 is always zero, and X16 is
  * the control register.
  *
+ * The notation used in MXU assembler mnemonics:
+ *
+ *   XRa, XRb, XRa, XRb - MXU registers
+ *   Rb, Rc, Rd, Rs, Rt - general purpose MIPS registers
+ *   s12                - a subfield of an instruction code
+ *   strd2              - a subfield of an instruction code
+ *   eptn2              - a subfield of an instruction code
+ *   eptn3              - a subfield of an instruction code
+ *   optn2              - a subfield of an instruction code
+ *   optn3              - a subfield of an instruction code
+ *   sft4               - a subfield of an instruction code
+ *
+ * Load/Store instructions           Multiplication instructions
+ * -----------------------           ---------------------------
+ *
+ *  S32LDD XRa, Rb, s12               S32MADD XRa, XRd, Rs, Rt
+ *  S32STD XRa, Rb, s12               S32MADDU XRa, XRd, Rs, Rt
+ *  S32LDDV XRa, Rb, rc, strd2        S32SUB XRa, XRd, Rs, Rt
+ *  S32STDV XRa, Rb, rc, strd2        S32SUBU XRa, XRd, Rs, Rt
+ *  S32LDI XRa, Rb, s12               S32MUL XRa, XRd, Rs, Rt
+ *  S32SDI XRa, Rb, s12               S32MULU XRa, XRd, Rs, Rt
+ *  S32LDIV XRa, Rb, rc, strd2        D16MUL XRa, XRb, XRc, XRd, optn2
+ *  S32SDIV XRa, Rb, rc, strd2        D16MULE XRa, XRb, XRc, optn2
+ *  S32LDDR XRa, Rb, s12              D16MULF XRa, XRb, XRc, optn2
+ *  S32STDR XRa, Rb, s12              D16MAC XRa, XRb, XRc, XRd, aptn2, optn2
+ *  S32LDDVR XRa, Rb, rc, strd2       D16MACE XRa, XRb, XRc, XRd, aptn2, optn2
+ *  S32STDVR XRa, Rb, rc, strd2       D16MACF XRa, XRb, XRc, XRd, aptn2, optn2
+ *  S32LDIR XRa, Rb, s12              D16MADL XRa, XRb, XRc, XRd, aptn2, optn2
+ *  S32SDIR XRa, Rb, s12              S16MAD XRa, XRb, XRc, XRd, aptn1, optn2
+ *  S32LDIVR XRa, Rb, rc, strd2       Q8MUL XRa, XRb, XRc, XRd
+ *  S32SDIVR XRa, Rb, rc, strd2       Q8MULSU XRa, XRb, XRc, XRd
+ *  S16LDD XRa, Rb, s10, eptn2        Q8MAC XRa, XRb, XRc, XRd, aptn2
+ *  S16STD XRa, Rb, s10, eptn2        Q8MACSU XRa, XRb, XRc, XRd, aptn2
+ *  S16LDI XRa, Rb, s10, eptn2        Q8MADL XRa, XRb, XRc, XRd, aptn2
+ *  S16SDI XRa, Rb, s10, eptn2
+ *  S8LDD XRa, Rb, s8, eptn3
+ *  S8STD XRa, Rb, s8, eptn3         Addition and subtraction instructions
+ *  S8LDI XRa, Rb, s8, eptn3         -------------------------------------
+ *  S8SDI XRa, Rb, s8, eptn3
+ *  LXW Rd, Rs, Rt, strd2             D32ADD XRa, XRb, XRc, XRd, eptn2
+ *  LXH Rd, Rs, Rt, strd2             D32ADDC XRa, XRb, XRc, XRd
+ *  LXHU Rd, Rs, Rt, strd2            D32ACC XRa, XRb, XRc, XRd, eptn2
+ *  LXB Rd, Rs, Rt, strd2             D32ACCM XRa, XRb, XRc, XRd, eptn2
+ *  LXBU Rd, Rs, Rt, strd2            D32ASUM XRa, XRb, XRc, XRd, eptn2
+ *                                    S32CPS XRa, XRb, XRc
+ *                                    Q16ADD XRa, XRb, XRc, XRd, eptn2, optn2
+ * Comparison instructions            Q16ACC XRa, XRb, XRc, XRd, eptn2
+ * -----------------------            Q16ACCM XRa, XRb, XRc, XRd, eptn2
+ *                                    D16ASUM XRa, XRb, XRc, XRd, eptn2
+ *  S32MAX XRa, XRb, XRc              D16CPS XRa, XRb,
+ *  S32MIN XRa, XRb, XRc              D16AVG XRa, XRb, XRc
+ *  S32SLT XRa, XRb, XRc              D16AVGR XRa, XRb, XRc
+ *  S32MOVZ XRa, XRb, XRc             Q8ADD XRa, XRb, XRc, eptn2
+ *  S32MOVN XRa, XRb, XRc             Q8ADDE XRa, XRb, XRc, XRd, eptn2
+ *  D16MAX XRa, XRb, XRc              Q8ACCE XRa, XRb, XRc, XRd, eptn2
+ *  D16MIN XRa, XRb, XRc              Q8ABD XRa, XRb, XRc
+ *  D16SLT XRa, XRb, XRc              Q8SAD XRa, XRb, XRc, XRd
+ *  D16MOVZ XRa, XRb, XRc             Q8AVG XRa, XRb, XRc
+ *  D16MOVN XRa, XRb, XRc             Q8AVGR XRa, XRb, XRc
+ *  Q8MAX XRa, XRb, XRc               D8SUM XRa, XRb, XRc, XRd
+ *  Q8MIN XRa, XRb, XRc               D8SUMC XRa, XRb, XRc, XRd
+ *  Q8SLT XRa, XRb, XRc
+ *  Q8SLTU XRa, XRb, XRc
+ *  Q8MOVZ XRa, XRb, XRc             Shift instructions
+ *  Q8MOVN XRa, XRb, XRc             ------------------
+ *
+ *                                    D32SLL XRa, XRb, XRc, XRd, sft4
+ * Bitwise instructions               D32SLR XRa, XRb, XRc, XRd, sft4
+ * --------------------               D32SAR XRa, XRb, XRc, XRd, sft4
+ *                                    D32SARL XRa, XRb, XRc, sft4
+ *  S32NOR XRa, XRb, XRc              D32SLLV XRa, XRb, Rb
+ *  S32AND XRa, XRb, XRc              D32SLRV XRa, XRb, Rb
+ *  S32XOR XRa, XRb, XRc              D32SARV XRa, XRb, Rb
+ *  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
+ * -------------------------          Q16SLLV XRa, XRb, Rb
+ *                                    Q16SLRV XRa, XRb, Rb
+ *  S32SFL XRa, XRb, XRc, XRd, optn2  Q16SARV XRa, XRb, Rb
+ *  S32ALN XRa, XRb, XRc, Rb
+ *  S32ALNI XRa, XRb, XRc, s3
+ *  S32LUI XRa, s8, optn3            Move instructions
+ *  S32EXTR XRa, XRb, Rb, bits5      -----------------
+ *  S32EXTRV XRa, XRb, Rs, Rt
+ *  Q16SCOP XRa, XRb, XRc, XRd        S32M2I XRa, Rb
+ *  Q16SAT XRa, XRb, XRc              S32I2M XRa, Rb
+ *
  *   Compiled after:
  *
  *   "XBurst® Instruction Set Architecture MIPS eXtension/enhanced Unit
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 3/4] target/mips: Add organizational chart of MXU ASE
  2018-10-16 12:14 [Qemu-devel] [PATCH 0/4] target/mips: Add Ingenic's MXU ASE opcodes Aleksandar Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 1/4] target/mips: Add basic description of MXU ASE Aleksandar Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 2/4] target/mips: Add assembler mnemonics list for " Aleksandar Markovic
@ 2018-10-16 12:14 ` Aleksandar Markovic
  2018-10-16 13:34   ` Stefan Markovic
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 4/4] target/mips: Add opcode values " Aleksandar Markovic
  3 siblings, 1 reply; 9+ messages in thread
From: Aleksandar Markovic @ 2018-10-16 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: aurelien, jancraig, amarkovic, smarkovic, pjovanovic

From: Aleksandar Markovic <amarkovic@wavecomp.com>

Add a comment that contains an organizational chart of MXU ASE
instructions.

Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
---
 target/mips/translate.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 156 insertions(+)

diff --git a/target/mips/translate.c b/target/mips/translate.c
index 73d971e..4dfc360 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -1490,6 +1490,162 @@ enum {
  *  Q16SCOP XRa, XRb, XRc, XRd        S32M2I XRa, Rb
  *  Q16SAT XRa, XRb, XRc              S32I2M XRa, Rb
  *
+ *
+ *              bits
+ *             05..00
+ *
+ *          ┌─ 000000 ─ OPC_MXU_S32MADD
+ *          ├─ 000001 ─ OPC_MXU_S32MADDU
+ *          ├─ 000010 ─ <not assigned>
+ *          │                               20..18  (25..21 must be 0)
+ *          ├─ 000011 ─ OPC_MXU__POOL00 ─┬─ 000 ─ OPC_MXU_S32MAX
+ *          │                            ├─ 001 ─ OPC_MXU_S32MIN
+ *          │                            ├─ 010 ─ OPC_MXU_D16MAX
+ *          │                            ├─ 011 ─ OPC_MXU_D16MIN
+ *          │                            ├─ 100 ─ OPC_MXU_Q8MAX
+ *          │                            ├─ 101 ─ OPC_MXU_Q8MIN
+ *          │                            ├─ 110 ─ OPC_MXU_Q8SLT
+ *          │                            └─ 111 ─ OPC_MXU_Q8SLTU
+ *          ├─ 000100 ─ OPC_MXU_S32MSUB
+ *          ├─ 000101 ─ OPC_MXU_S32MSUBU    20..18  (25..21 must be 0,
+ *          │                                         except for Q8ADD)
+ *          ├─ 000110 ─ OPC_MXU__POOL01 ─┬─ 000 ─ OPC_MXU_S32SLT
+ *          │                            ├─ 001 ─ OPC_MXU_D16SLT
+ *          │                            ├─ 010 ─ OPC_MXU_D16AVG
+ *          │                            ├─ 011 ─ OPC_MXU_D16AVGR
+ *          │                            ├─ 100 ─ OPC_MXU_Q8AVG
+ *          │                            ├─ 101 ─ OPC_MXU_Q8AVGR
+ *          │                            └─ 111 ─ OPC_MXU_Q8ADD
+ *          │
+ *          │                               20..18  (25..21 must be 0)
+ *          ├─ 000111 ─ OPC_MXU__POOL02 ─┬─ 000 ─ OPC_MXU_S32CPS
+ *          │                            ├─ 010 ─ OPC_MXU_D16CPS
+ *          │                            ├─ 100 ─ OPC_MXU_Q8ABD
+ *          │                            └─ 110 ─ OPC_MXU_Q16SAT
+ *          ├─ 001000 ─ OPC_MXU_D16MUL
+ *          │                               25..24
+ *          ├─ 001001 ─ OPC_MXU__POOL03 ─┬─ 00 ─ OPC_MXU_D16MULF
+ *          │                            └─ 01 ─ OPC_MXU_D16MULE
+ *          ├─ 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
+ *          ├─ 001110 ─ OPC_MXU_Q16ADD
+ *          ├─ 001111 ─ OPC_MXU_D16MACE
+ *          │                               23
+ *          ├─ 010000 ─ OPC_MXU__POOL05 ─┬─ 0 ─ OPC_MXU_S32LDD
+ *          │                            └─ 1 ─ OPC_MXU_S32LDDR
+ *          │
+ *          │                               23
+ *          ├─ 010001 ─ OPC_MXU__POOL06 ─┬─ 0 ─ OPC_MXU_S32STD
+ *          │                            └─ 1 ─ OPC_MXU_S32STDR
+ *          │
+ *          │                               13..10
+ *          ├─ 010010 ─ OPC_MXU__POOL07 ─┬─ 0000 ─ OPC_MXU_S32LDDV
+ *          │                            └─ 0001 ─ OPC_MXU_S32LDDVR
+ *          │
+ *          │                               13..10
+ *          ├─ 010011 ─ OPC_MXU__POOL08 ─┬─ 0000 ─ OPC_MXU_S32TDV
+ *          │                            └─ 0001 ─ OPC_MXU_S32TDVR
+ *          │
+ *          │                               23
+ *          ├─ 010100 ─ OPC_MXU__POOL09 ─┬─ 0 ─ OPC_MXU_S32LDI
+ *          │                            └─ 1 ─ OPC_MXU_S32LDIR
+ *          │
+ *          │                               23
+ *          ├─ 010101 ─ OPC_MXU__POOL10 ─┬─ 0 ─ OPC_MXU_S32SDI
+ *          │                            └─ 1 ─ OPC_MXU_S32SDIR
+ *          │
+ *          │                               13..10
+ *          ├─ 010110 ─ OPC_MXU__POOL11 ─┬─ 0000 ─ OPC_MXU_S32LDIV
+ *          │                            └─ 0001 ─ OPC_MXU_S32LDIVR
+ *          │
+ *          │                               13..10
+ *          ├─ 010111 ─ OPC_MXU__POOL12 ─┬─ 0000 ─ OPC_MXU_S32SDIV
+ *          │                            └─ 0001 ─ OPC_MXU_S32SDIVR
+ *          ├─ 011000 ─ OPC_MXU_D32ADD
+ *          │
+ *   MXU    ├─ 011001 ─ OPC_MXU__POOL13 ─┬─ 00 ─ OPC_MXU_D32ACC
+ * opcodes ─┤                            ├─ 01 ─ OPC_MXU_D32ACCM
+ *          │                            └─ 10 ─ OPC_MXU_D32ASUM
+ *          ├─ 011010 ─ <not assigned>
+ *          │
+ *          ├─ 011011 ─ OPC_MXU__POOL14 ─┬─ 00 ─ OPC_MXU_Q16ACC
+ *          │                            ├─ 01 ─ OPC_MXU_Q16ACCM
+ *          │                            └─ 10 ─ OPC_MXU_Q16ASUM
+ *          │
+ *          │
+ *          ├─ 011100 ─ OPC_MXU__POOL15 ─┬─ 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>
+ *          ├─ 100010 ─ OPC_MXU_S8LDD
+ *          ├─ 100011 ─ OPC_MXU_S8STD
+ *          ├─ 100100 ─ OPC_MXU_S8LDI
+ *          ├─ 100101 ─ OPC_MXU_S8SDI
+ *          │
+ *          ├─ 100110 ─ OPC_MXU__POOL16 ─┬─ 00 ─ OPC_MXU_S32MUL
+ *          │                            ├─ 00 ─ OPC_MXU_S32MULU
+ *          │                            ├─ 00 ─ OPC_MXU_S32EXTR
+ *          │                            └─ 00 ─ OPC_MXU_S32EXTRV
+ *          │
+ *          │
+ *          ├─ 100111 ─ OPC_MXU__POOL17 ─┬─ 000 ─ OPC_MXU_D32SARW
+ *          │                            ├─ 001 ─ OPC_MXU_S32ALN
+ *          ├─ 101000 ─ OPC_MXU_LXB      ├─ 010 ─ OPC_MXU_S32ALNI
+ *          ├─ 101001 ─ <not assigned>   ├─ 011 ─ OPC_MXU_S32NOR
+ *          ├─ 101010 ─ OPC_MXU_S16LDD   ├─ 100 ─ OPC_MXU_S32AND
+ *          ├─ 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
+ *          ├─ 110110 ─ OPC_MXU__POOL18 ─┬─ 000 ─ OPC_MXU_D32SLLV
+ *          │                            ├─ 001 ─ OPC_MXU_D32SLRV
+ *          │                            ├─ 010 ─ OPC_MXU_D32SARV
+ *          │                            ├─ 011 ─ OPC_MXU_Q16SLLV
+ *          │                            ├─ 100 ─ OPC_MXU_Q16SLRV
+ *          │                            └─ 101 ─ OPC_MXU_Q16SARV
+ *          ├─ 110111 ─ OPC_MXU_Q16SAR
+ *          │
+ *          ├─ 111000 ─ OPC_MXU__POOL19 ─┬─ 00 ─ OPC_MXU_Q8MUL
+ *          │                            └─ 01 ─ OPC_MXU_Q8MULSU
+ *          │
+ *          │
+ *          ├─ 111001 ─ OPC_MXU__POOL20 ─┬─ 000 ─ OPC_MXU_Q8MOVZ
+ *          │                            ├─ 001 ─ OPC_MXU_Q8MOVN
+ *          │                            ├─ 010 ─ OPC_MXU_D16MOVZ
+ *          │                            ├─ 011 ─ OPC_MXU_D16MOVN
+ *          │                            ├─ 100 ─ OPC_MXU_S32MOVZ
+ *          │                            └─ 101 ─ OPC_MXU_S32MOV
+ *          │
+ *          │
+ *          ├─ 111010 ─ OPC_MXU__POOL21 ─┬─ 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>
+ *
+ *
  *   Compiled after:
  *
  *   "XBurst® Instruction Set Architecture MIPS eXtension/enhanced Unit
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 4/4] target/mips: Add opcode values of MXU ASE
  2018-10-16 12:14 [Qemu-devel] [PATCH 0/4] target/mips: Add Ingenic's MXU ASE opcodes Aleksandar Markovic
                   ` (2 preceding siblings ...)
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 3/4] target/mips: Add organizational chart of " Aleksandar Markovic
@ 2018-10-16 12:14 ` Aleksandar Markovic
  2018-10-16 13:40   ` Stefan Markovic
  3 siblings, 1 reply; 9+ messages in thread
From: Aleksandar Markovic @ 2018-10-16 12:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: aurelien, jancraig, amarkovic, smarkovic, pjovanovic

From: Aleksandar Markovic <amarkovic@wavecomp.com>

Add opcode values for all instructions in MXU ASE.

Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
---
 target/mips/translate.c | 276 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 276 insertions(+)

diff --git a/target/mips/translate.c b/target/mips/translate.c
index 4dfc360..941b546 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -1652,6 +1652,282 @@ enum {
  *   Programming Manual", Ingenic Semiconductor Co, Ltd., 2017
  */
 
+enum {
+    OPC_MXU_S32MADD  = 0x00,
+    OPC_MXU_S32MADDU = 0x01,
+    /* not assigned 0x02 */
+    OPC_MXU__POOL00  = 0x03,
+    OPC_MXU_S32MSUB  = 0x04,
+    OPC_MXU_S32MSUBU = 0x05,
+    OPC_MXU__POOL01  = 0x06,
+    OPC_MXU__POOL02  = 0x07,
+    OPC_MXU_D16MUL   = 0x08,
+    OPC_MXU__POOL03  = 0x09,
+    OPC_MXU_D16MAC   = 0x0A,
+    OPC_MXU_D16MACF  = 0x0B,
+    OPC_MXU_D16MADL  = 0x0C,
+    OPC_MXU__POOL04  = 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_D32ADD   = 0x18,
+    OPC_MXU__POOL13  = 0x19,
+    /* not assigned 0x1A */
+    OPC_MXU__POOL14  = 0x1B,
+    OPC_MXU__POOL15  = 0x1C,
+    OPC_MXU_Q8ACCE   = 0x1D,
+    /* not assigned 0x1E */
+    /* not assigned 0x1F */
+    /* not assigned 0x20 */
+    /* not assigned 0x21 */
+    OPC_MXU_S8LDD    = 0x22,
+    OPC_MXU_S8STD    = 0x23,
+    OPC_MXU_S8LDI    = 0x24,
+    OPC_MXU_S8SDI    = 0x25,
+    OPC_MXU__POOL16  = 0x26,
+    OPC_MXU__POOL17  = 0x27,
+    OPC_MXU_LXB      = 0x28,
+    /* not assigned 0x29 */
+    OPC_MXU_S16LDD   = 0x2A,
+    OPC_MXU_S16STD   = 0x2B,
+    OPC_MXU_S16LDI   = 0x2C,
+    OPC_MXU_S16SDI   = 0x2D,
+    OPC_MXU_S32M2I   = 0x2E,
+    OPC_MXU_S32I2M   = 0x2F,
+    OPC_MXU_D32SLL   = 0x30,
+    OPC_MXU_D32SLR   = 0x31,
+    OPC_MXU_D32SARL  = 0x32,
+    OPC_MXU_D32SAR   = 0x33,
+    OPC_MXU_Q16SLL   = 0x34,
+    OPC_MXU_Q16SLR   = 0x35,
+    OPC_MXU__POOL18  = 0x36,
+    OPC_MXU_Q16SAR   = 0x37,
+    OPC_MXU__POOL19  = 0x38,
+    OPC_MXU__POOL20  = 0x39,
+    OPC_MXU__POOL21  = 0x3A,
+    OPC_MXU_Q16SCOP  = 0x3B,
+    OPC_MXU_Q8MADL   = 0x3C,
+    OPC_MXU_S32SFL   = 0x3D,
+    OPC_MXU_Q8SAD    = 0x3E,
+    /* not assigned 0x3F */
+};
+
+
+/*
+ * MXU pool 00
+ */
+enum {
+    OPC_MXU_S32MAX   = 0x00,
+    OPC_MXU_S32MIN   = 0x01,
+    OPC_MXU_D16MAX   = 0x02,
+    OPC_MXU_D16MIN   = 0x03,
+    OPC_MXU_Q8MAX    = 0x04,
+    OPC_MXU_Q8MIN    = 0x05,
+    OPC_MXU_Q8SLT    = 0x06,
+    OPC_MXU_Q8SLTU   = 0x07,
+};
+
+/*
+ * MXU pool 01
+ */
+enum {
+    OPC_MXU_S32SLT   = 0x00,
+    OPC_MXU_D16SLT   = 0x01,
+    OPC_MXU_D16AVG   = 0x02,
+    OPC_MXU_D16AVGR  = 0x03,
+    OPC_MXU_Q8AVG    = 0x04,
+    OPC_MXU_Q8AVGR   = 0x05,
+    OPC_MXU_Q8ADD    = 0x07,
+};
+
+/*
+ * MXU pool 02
+ */
+enum {
+    OPC_MXU_S32CPS   = 0x00,
+    OPC_MXU_D16CPS   = 0x02,
+    OPC_MXU_Q8ABD    = 0x04,
+    OPC_MXU_Q16SAT   = 0x06,
+};
+
+/*
+ * MXU pool 03
+ */
+enum {
+    OPC_MXU_D16MULF  = 0x00,
+    OPC_MXU_D16MULE  = 0x01,
+};
+
+/*
+ * 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
+ */
+enum {
+    OPC_MXU_S32STD   = 0x00,
+    OPC_MXU_S32STDR  = 0x01,
+};
+
+/*
+ * MXU pool 07
+ */
+enum {
+    OPC_MXU_S32LDDV  = 0x00,
+    OPC_MXU_S32LDDVR = 0x01,
+};
+
+/*
+ * MXU pool 08
+ */
+enum {
+    OPC_MXU_S32TDV   = 0x00,
+    OPC_MXU_S32TDVR  = 0x01,
+};
+
+/*
+ * MXU pool 09
+ */
+enum {
+    OPC_MXU_S32LDI   = 0x00,
+    OPC_MXU_S32LDIR  = 0x01,
+};
+
+/*
+ * MXU pool 10
+ */
+enum {
+    OPC_MXU_S32SDI   = 0x00,
+    OPC_MXU_S32SDIR  = 0x01,
+};
+
+/*
+ * MXU pool 11
+ */
+enum {
+    OPC_MXU_S32LDIV  = 0x00,
+    OPC_MXU_S32LDIVR = 0x01,
+};
+
+/*
+ * MXU pool 12
+ */
+enum {
+    OPC_MXU_S32SDIV  = 0x00,
+    OPC_MXU_S32SDIVR = 0x01,
+};
+
+/*
+ * MXU pool 13
+ */
+enum {
+    OPC_MXU_D32ACC   = 0x00,
+    OPC_MXU_D32ACCM  = 0x01,
+    OPC_MXU_D32ASUM  = 0x02,
+};
+
+/*
+ * MXU pool 14
+ */
+enum {
+    OPC_MXU_Q16ACC   = 0x00,
+    OPC_MXU_Q16ACCM  = 0x01,
+    OPC_MXU_Q16ASUM  = 0x02,
+};
+
+/*
+ * MXU pool 15
+ */
+enum {
+    OPC_MXU_Q8ADDE   = 0x00,
+    OPC_MXU_D8SUM    = 0x01,
+    OPC_MXU_D8SUMC   = 0x02,
+};
+
+/*
+ * MXU pool 16
+ */
+enum {
+    OPC_MXU_S32MUL   = 0x00,
+    OPC_MXU_S32MULU  = 0x01,
+    OPC_MXU_S32EXTR  = 0x02,
+    OPC_MXU_S32EXTRV = 0x03,
+};
+
+/*
+ * MXU pool 17
+ */
+enum {
+    OPC_MXU_D32SARW  = 0x00,
+    OPC_MXU_S32ALN   = 0x01,
+    OPC_MXU_S32ALNI  = 0x02,
+    OPC_MXU_S32NOR   = 0x03,
+    OPC_MXU_S32AND   = 0x04,
+    OPC_MXU_S32OR    = 0x05,
+    OPC_MXU_S32XOR   = 0x06,
+    OPC_MXU_S32LUI   = 0x07,
+};
+
+/*
+ * MXU pool 18
+ */
+enum {
+    OPC_MXU_D32SLLV  = 0x00,
+    OPC_MXU_D32SLRV  = 0x01,
+    OPC_MXU_D32SARV  = 0x03,
+    OPC_MXU_Q16SLLV  = 0x04,
+    OPC_MXU_Q16SLRV  = 0x05,
+    OPC_MXU_Q16SARV  = 0x07,
+};
+
+/*
+ * MXU pool 19
+ */
+enum {
+    OPC_MXU_Q8MUL    = 0x00,
+    OPC_MXU_Q8MULSU  = 0x01,
+};
+
+/*
+ * MXU pool 20
+ */
+enum {
+    OPC_MXU_Q8MOVZ   = 0x00,
+    OPC_MXU_Q8MOVN   = 0x01,
+    OPC_MXU_D16MOVZ  = 0x02,
+    OPC_MXU_D16MOVN  = 0x03,
+    OPC_MXU_S32MOVZ  = 0x04,
+    OPC_MXU_S32MOVN  = 0x05,
+};
+
+/*
+ * MXU pool 21
+ */
+enum {
+    OPC_MXU_Q8MAC    = 0x00,
+    OPC_MXU_Q8MACSU  = 0x01,
+};
+
 
 /* global register indices */
 static TCGv cpu_gpr[32], cpu_PC;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 1/4] target/mips: Add basic description of MXU ASE
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 1/4] target/mips: Add basic description of MXU ASE Aleksandar Markovic
@ 2018-10-16 13:27   ` Stefan Markovic
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Markovic @ 2018-10-16 13:27 UTC (permalink / raw)
  To: Aleksandar Markovic, qemu-devel; +Cc: aurelien, jancraig, amarkovic, pjovanovic


On 16.10.18. 14:14, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <amarkovic@wavecomp.com>
>
> Add a comment that contains a basic description of MXU ASE.
>
> Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
> ---
>   target/mips/translate.c | 20 ++++++++++++++++++++
>   1 file changed, 20 insertions(+)
>
> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index ab16cdb..23e21c5 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -1389,6 +1389,26 @@ enum {
>       OPC_BINSRI_df   = (0x7 << 23) | OPC_MSA_BIT_09,
>   };
>   
> +
> +/*
> + *    AN OVERVIEW OF MXU EXTENSTION INSTRUCTION SET
> + *    =============================================

Misspelled EXTENSION. Otherwise:

Reviewed-by: Stefan Markovic <smarkovic@wavecomp.com>


> + *
> + * MXU (full name: MIPS eXtension/enhanced Unit) is an SIMD extension of MIPS32
> + * instructions set. It is designed to fit the needs of signal, graphical and
> + * video processing applications. MXU instruction set is used in Xburst family
> + * of microprocessors by Ingenic.
> + *
> + * MXU unit contains 17 registers called X0-X16. X0 is always zero, and X16 is
> + * the control register.
> + *
> + *   Compiled after:
> + *
> + *   "XBurst® Instruction Set Architecture MIPS eXtension/enhanced Unit
> + *   Programming Manual", Ingenic Semiconductor Co, Ltd., 2017
> + */
> +
> +
>   /* global register indices */
>   static TCGv cpu_gpr[32], cpu_PC;
>   static TCGv cpu_HI[MIPS_DSP_ACC], cpu_LO[MIPS_DSP_ACC];

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 2/4] target/mips: Add assembler mnemonics list for MXU ASE
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 2/4] target/mips: Add assembler mnemonics list for " Aleksandar Markovic
@ 2018-10-16 13:33   ` Stefan Markovic
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Markovic @ 2018-10-16 13:33 UTC (permalink / raw)
  To: Aleksandar Markovic, qemu-devel; +Cc: aurelien, jancraig, amarkovic, pjovanovic


On 16.10.18. 14:14, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <amarkovic@wavecomp.com>
>
> Add a comment that contains a list all MXU instructions,
> expressed in assembler mnemonics.
>
> Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
> ---
>   target/mips/translate.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 88 insertions(+)
>
> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index 23e21c5..73d971e 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -1402,6 +1402,94 @@ enum {
>    * MXU unit contains 17 registers called X0-X16. X0 is always zero, and X16 is
>    * the control register.
>    *
> + * The notation used in MXU assembler mnemonics:
> + *
> + *   XRa, XRb, XRa, XRb - MXU registers


XRa and XRb duplicated. Did You mean XRc and XRd instead? Otherwise:

Reviewed-by: Stefan Markovic <smarkovic@wavecomp.com>


> + *   Rb, Rc, Rd, Rs, Rt - general purpose MIPS registers
> + *   s12                - a subfield of an instruction code
> + *   strd2              - a subfield of an instruction code
> + *   eptn2              - a subfield of an instruction code
> + *   eptn3              - a subfield of an instruction code
> + *   optn2              - a subfield of an instruction code
> + *   optn3              - a subfield of an instruction code
> + *   sft4               - a subfield of an instruction code
> + *
> + * Load/Store instructions           Multiplication instructions
> + * -----------------------           ---------------------------
> + *
> + *  S32LDD XRa, Rb, s12               S32MADD XRa, XRd, Rs, Rt
> + *  S32STD XRa, Rb, s12               S32MADDU XRa, XRd, Rs, Rt
> + *  S32LDDV XRa, Rb, rc, strd2        S32SUB XRa, XRd, Rs, Rt
> + *  S32STDV XRa, Rb, rc, strd2        S32SUBU XRa, XRd, Rs, Rt
> + *  S32LDI XRa, Rb, s12               S32MUL XRa, XRd, Rs, Rt
> + *  S32SDI XRa, Rb, s12               S32MULU XRa, XRd, Rs, Rt
> + *  S32LDIV XRa, Rb, rc, strd2        D16MUL XRa, XRb, XRc, XRd, optn2
> + *  S32SDIV XRa, Rb, rc, strd2        D16MULE XRa, XRb, XRc, optn2
> + *  S32LDDR XRa, Rb, s12              D16MULF XRa, XRb, XRc, optn2
> + *  S32STDR XRa, Rb, s12              D16MAC XRa, XRb, XRc, XRd, aptn2, optn2
> + *  S32LDDVR XRa, Rb, rc, strd2       D16MACE XRa, XRb, XRc, XRd, aptn2, optn2
> + *  S32STDVR XRa, Rb, rc, strd2       D16MACF XRa, XRb, XRc, XRd, aptn2, optn2
> + *  S32LDIR XRa, Rb, s12              D16MADL XRa, XRb, XRc, XRd, aptn2, optn2
> + *  S32SDIR XRa, Rb, s12              S16MAD XRa, XRb, XRc, XRd, aptn1, optn2
> + *  S32LDIVR XRa, Rb, rc, strd2       Q8MUL XRa, XRb, XRc, XRd
> + *  S32SDIVR XRa, Rb, rc, strd2       Q8MULSU XRa, XRb, XRc, XRd
> + *  S16LDD XRa, Rb, s10, eptn2        Q8MAC XRa, XRb, XRc, XRd, aptn2
> + *  S16STD XRa, Rb, s10, eptn2        Q8MACSU XRa, XRb, XRc, XRd, aptn2
> + *  S16LDI XRa, Rb, s10, eptn2        Q8MADL XRa, XRb, XRc, XRd, aptn2
> + *  S16SDI XRa, Rb, s10, eptn2
> + *  S8LDD XRa, Rb, s8, eptn3
> + *  S8STD XRa, Rb, s8, eptn3         Addition and subtraction instructions
> + *  S8LDI XRa, Rb, s8, eptn3         -------------------------------------
> + *  S8SDI XRa, Rb, s8, eptn3
> + *  LXW Rd, Rs, Rt, strd2             D32ADD XRa, XRb, XRc, XRd, eptn2
> + *  LXH Rd, Rs, Rt, strd2             D32ADDC XRa, XRb, XRc, XRd
> + *  LXHU Rd, Rs, Rt, strd2            D32ACC XRa, XRb, XRc, XRd, eptn2
> + *  LXB Rd, Rs, Rt, strd2             D32ACCM XRa, XRb, XRc, XRd, eptn2
> + *  LXBU Rd, Rs, Rt, strd2            D32ASUM XRa, XRb, XRc, XRd, eptn2
> + *                                    S32CPS XRa, XRb, XRc
> + *                                    Q16ADD XRa, XRb, XRc, XRd, eptn2, optn2
> + * Comparison instructions            Q16ACC XRa, XRb, XRc, XRd, eptn2
> + * -----------------------            Q16ACCM XRa, XRb, XRc, XRd, eptn2
> + *                                    D16ASUM XRa, XRb, XRc, XRd, eptn2
> + *  S32MAX XRa, XRb, XRc              D16CPS XRa, XRb,
> + *  S32MIN XRa, XRb, XRc              D16AVG XRa, XRb, XRc
> + *  S32SLT XRa, XRb, XRc              D16AVGR XRa, XRb, XRc
> + *  S32MOVZ XRa, XRb, XRc             Q8ADD XRa, XRb, XRc, eptn2
> + *  S32MOVN XRa, XRb, XRc             Q8ADDE XRa, XRb, XRc, XRd, eptn2
> + *  D16MAX XRa, XRb, XRc              Q8ACCE XRa, XRb, XRc, XRd, eptn2
> + *  D16MIN XRa, XRb, XRc              Q8ABD XRa, XRb, XRc
> + *  D16SLT XRa, XRb, XRc              Q8SAD XRa, XRb, XRc, XRd
> + *  D16MOVZ XRa, XRb, XRc             Q8AVG XRa, XRb, XRc
> + *  D16MOVN XRa, XRb, XRc             Q8AVGR XRa, XRb, XRc
> + *  Q8MAX XRa, XRb, XRc               D8SUM XRa, XRb, XRc, XRd
> + *  Q8MIN XRa, XRb, XRc               D8SUMC XRa, XRb, XRc, XRd
> + *  Q8SLT XRa, XRb, XRc
> + *  Q8SLTU XRa, XRb, XRc
> + *  Q8MOVZ XRa, XRb, XRc             Shift instructions
> + *  Q8MOVN XRa, XRb, XRc             ------------------
> + *
> + *                                    D32SLL XRa, XRb, XRc, XRd, sft4
> + * Bitwise instructions               D32SLR XRa, XRb, XRc, XRd, sft4
> + * --------------------               D32SAR XRa, XRb, XRc, XRd, sft4
> + *                                    D32SARL XRa, XRb, XRc, sft4
> + *  S32NOR XRa, XRb, XRc              D32SLLV XRa, XRb, Rb
> + *  S32AND XRa, XRb, XRc              D32SLRV XRa, XRb, Rb
> + *  S32XOR XRa, XRb, XRc              D32SARV XRa, XRb, Rb
> + *  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
> + * -------------------------          Q16SLLV XRa, XRb, Rb
> + *                                    Q16SLRV XRa, XRb, Rb
> + *  S32SFL XRa, XRb, XRc, XRd, optn2  Q16SARV XRa, XRb, Rb
> + *  S32ALN XRa, XRb, XRc, Rb
> + *  S32ALNI XRa, XRb, XRc, s3
> + *  S32LUI XRa, s8, optn3            Move instructions
> + *  S32EXTR XRa, XRb, Rb, bits5      -----------------
> + *  S32EXTRV XRa, XRb, Rs, Rt
> + *  Q16SCOP XRa, XRb, XRc, XRd        S32M2I XRa, Rb
> + *  Q16SAT XRa, XRb, XRc              S32I2M XRa, Rb
> + *
>    *   Compiled after:
>    *
>    *   "XBurst® Instruction Set Architecture MIPS eXtension/enhanced Unit

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 3/4] target/mips: Add organizational chart of MXU ASE
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 3/4] target/mips: Add organizational chart of " Aleksandar Markovic
@ 2018-10-16 13:34   ` Stefan Markovic
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Markovic @ 2018-10-16 13:34 UTC (permalink / raw)
  To: Aleksandar Markovic, qemu-devel; +Cc: aurelien, jancraig, amarkovic, pjovanovic


On 16.10.18. 14:14, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <amarkovic@wavecomp.com>
>
> Add a comment that contains an organizational chart of MXU ASE
> instructions.
>
> Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
> ---
>   target/mips/translate.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 156 insertions(+)


Reviewed-by: Stefan Markovic <smarkovic@wavecomp.com>


>
> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index 73d971e..4dfc360 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -1490,6 +1490,162 @@ enum {
>    *  Q16SCOP XRa, XRb, XRc, XRd        S32M2I XRa, Rb
>    *  Q16SAT XRa, XRb, XRc              S32I2M XRa, Rb
>    *
> + *
> + *              bits
> + *             05..00
> + *
> + *          ┌─ 000000 ─ OPC_MXU_S32MADD
> + *          ├─ 000001 ─ OPC_MXU_S32MADDU
> + *          ├─ 000010 ─ <not assigned>
> + *          │                               20..18  (25..21 must be 0)
> + *          ├─ 000011 ─ OPC_MXU__POOL00 ─┬─ 000 ─ OPC_MXU_S32MAX
> + *          │                            ├─ 001 ─ OPC_MXU_S32MIN
> + *          │                            ├─ 010 ─ OPC_MXU_D16MAX
> + *          │                            ├─ 011 ─ OPC_MXU_D16MIN
> + *          │                            ├─ 100 ─ OPC_MXU_Q8MAX
> + *          │                            ├─ 101 ─ OPC_MXU_Q8MIN
> + *          │                            ├─ 110 ─ OPC_MXU_Q8SLT
> + *          │                            └─ 111 ─ OPC_MXU_Q8SLTU
> + *          ├─ 000100 ─ OPC_MXU_S32MSUB
> + *          ├─ 000101 ─ OPC_MXU_S32MSUBU    20..18  (25..21 must be 0,
> + *          │                                         except for Q8ADD)
> + *          ├─ 000110 ─ OPC_MXU__POOL01 ─┬─ 000 ─ OPC_MXU_S32SLT
> + *          │                            ├─ 001 ─ OPC_MXU_D16SLT
> + *          │                            ├─ 010 ─ OPC_MXU_D16AVG
> + *          │                            ├─ 011 ─ OPC_MXU_D16AVGR
> + *          │                            ├─ 100 ─ OPC_MXU_Q8AVG
> + *          │                            ├─ 101 ─ OPC_MXU_Q8AVGR
> + *          │                            └─ 111 ─ OPC_MXU_Q8ADD
> + *          │
> + *          │                               20..18  (25..21 must be 0)
> + *          ├─ 000111 ─ OPC_MXU__POOL02 ─┬─ 000 ─ OPC_MXU_S32CPS
> + *          │                            ├─ 010 ─ OPC_MXU_D16CPS
> + *          │                            ├─ 100 ─ OPC_MXU_Q8ABD
> + *          │                            └─ 110 ─ OPC_MXU_Q16SAT
> + *          ├─ 001000 ─ OPC_MXU_D16MUL
> + *          │                               25..24
> + *          ├─ 001001 ─ OPC_MXU__POOL03 ─┬─ 00 ─ OPC_MXU_D16MULF
> + *          │                            └─ 01 ─ OPC_MXU_D16MULE
> + *          ├─ 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
> + *          ├─ 001110 ─ OPC_MXU_Q16ADD
> + *          ├─ 001111 ─ OPC_MXU_D16MACE
> + *          │                               23
> + *          ├─ 010000 ─ OPC_MXU__POOL05 ─┬─ 0 ─ OPC_MXU_S32LDD
> + *          │                            └─ 1 ─ OPC_MXU_S32LDDR
> + *          │
> + *          │                               23
> + *          ├─ 010001 ─ OPC_MXU__POOL06 ─┬─ 0 ─ OPC_MXU_S32STD
> + *          │                            └─ 1 ─ OPC_MXU_S32STDR
> + *          │
> + *          │                               13..10
> + *          ├─ 010010 ─ OPC_MXU__POOL07 ─┬─ 0000 ─ OPC_MXU_S32LDDV
> + *          │                            └─ 0001 ─ OPC_MXU_S32LDDVR
> + *          │
> + *          │                               13..10
> + *          ├─ 010011 ─ OPC_MXU__POOL08 ─┬─ 0000 ─ OPC_MXU_S32TDV
> + *          │                            └─ 0001 ─ OPC_MXU_S32TDVR
> + *          │
> + *          │                               23
> + *          ├─ 010100 ─ OPC_MXU__POOL09 ─┬─ 0 ─ OPC_MXU_S32LDI
> + *          │                            └─ 1 ─ OPC_MXU_S32LDIR
> + *          │
> + *          │                               23
> + *          ├─ 010101 ─ OPC_MXU__POOL10 ─┬─ 0 ─ OPC_MXU_S32SDI
> + *          │                            └─ 1 ─ OPC_MXU_S32SDIR
> + *          │
> + *          │                               13..10
> + *          ├─ 010110 ─ OPC_MXU__POOL11 ─┬─ 0000 ─ OPC_MXU_S32LDIV
> + *          │                            └─ 0001 ─ OPC_MXU_S32LDIVR
> + *          │
> + *          │                               13..10
> + *          ├─ 010111 ─ OPC_MXU__POOL12 ─┬─ 0000 ─ OPC_MXU_S32SDIV
> + *          │                            └─ 0001 ─ OPC_MXU_S32SDIVR
> + *          ├─ 011000 ─ OPC_MXU_D32ADD
> + *          │
> + *   MXU    ├─ 011001 ─ OPC_MXU__POOL13 ─┬─ 00 ─ OPC_MXU_D32ACC
> + * opcodes ─┤                            ├─ 01 ─ OPC_MXU_D32ACCM
> + *          │                            └─ 10 ─ OPC_MXU_D32ASUM
> + *          ├─ 011010 ─ <not assigned>
> + *          │
> + *          ├─ 011011 ─ OPC_MXU__POOL14 ─┬─ 00 ─ OPC_MXU_Q16ACC
> + *          │                            ├─ 01 ─ OPC_MXU_Q16ACCM
> + *          │                            └─ 10 ─ OPC_MXU_Q16ASUM
> + *          │
> + *          │
> + *          ├─ 011100 ─ OPC_MXU__POOL15 ─┬─ 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>
> + *          ├─ 100010 ─ OPC_MXU_S8LDD
> + *          ├─ 100011 ─ OPC_MXU_S8STD
> + *          ├─ 100100 ─ OPC_MXU_S8LDI
> + *          ├─ 100101 ─ OPC_MXU_S8SDI
> + *          │
> + *          ├─ 100110 ─ OPC_MXU__POOL16 ─┬─ 00 ─ OPC_MXU_S32MUL
> + *          │                            ├─ 00 ─ OPC_MXU_S32MULU
> + *          │                            ├─ 00 ─ OPC_MXU_S32EXTR
> + *          │                            └─ 00 ─ OPC_MXU_S32EXTRV
> + *          │
> + *          │
> + *          ├─ 100111 ─ OPC_MXU__POOL17 ─┬─ 000 ─ OPC_MXU_D32SARW
> + *          │                            ├─ 001 ─ OPC_MXU_S32ALN
> + *          ├─ 101000 ─ OPC_MXU_LXB      ├─ 010 ─ OPC_MXU_S32ALNI
> + *          ├─ 101001 ─ <not assigned>   ├─ 011 ─ OPC_MXU_S32NOR
> + *          ├─ 101010 ─ OPC_MXU_S16LDD   ├─ 100 ─ OPC_MXU_S32AND
> + *          ├─ 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
> + *          ├─ 110110 ─ OPC_MXU__POOL18 ─┬─ 000 ─ OPC_MXU_D32SLLV
> + *          │                            ├─ 001 ─ OPC_MXU_D32SLRV
> + *          │                            ├─ 010 ─ OPC_MXU_D32SARV
> + *          │                            ├─ 011 ─ OPC_MXU_Q16SLLV
> + *          │                            ├─ 100 ─ OPC_MXU_Q16SLRV
> + *          │                            └─ 101 ─ OPC_MXU_Q16SARV
> + *          ├─ 110111 ─ OPC_MXU_Q16SAR
> + *          │
> + *          ├─ 111000 ─ OPC_MXU__POOL19 ─┬─ 00 ─ OPC_MXU_Q8MUL
> + *          │                            └─ 01 ─ OPC_MXU_Q8MULSU
> + *          │
> + *          │
> + *          ├─ 111001 ─ OPC_MXU__POOL20 ─┬─ 000 ─ OPC_MXU_Q8MOVZ
> + *          │                            ├─ 001 ─ OPC_MXU_Q8MOVN
> + *          │                            ├─ 010 ─ OPC_MXU_D16MOVZ
> + *          │                            ├─ 011 ─ OPC_MXU_D16MOVN
> + *          │                            ├─ 100 ─ OPC_MXU_S32MOVZ
> + *          │                            └─ 101 ─ OPC_MXU_S32MOV
> + *          │
> + *          │
> + *          ├─ 111010 ─ OPC_MXU__POOL21 ─┬─ 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>
> + *
> + *
>    *   Compiled after:
>    *
>    *   "XBurst® Instruction Set Architecture MIPS eXtension/enhanced Unit

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 4/4] target/mips: Add opcode values of MXU ASE
  2018-10-16 12:14 ` [Qemu-devel] [PATCH 4/4] target/mips: Add opcode values " Aleksandar Markovic
@ 2018-10-16 13:40   ` Stefan Markovic
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Markovic @ 2018-10-16 13:40 UTC (permalink / raw)
  To: Aleksandar Markovic, qemu-devel; +Cc: aurelien, jancraig, amarkovic, pjovanovic


On 16.10.18. 14:14, Aleksandar Markovic wrote:
> From: Aleksandar Markovic <amarkovic@wavecomp.com>
>
> Add opcode values for all instructions in MXU ASE.
>
> Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com>
> ---
>   target/mips/translate.c | 276 ++++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 276 insertions(+)


Reviewed-by: Stefan Markovic <smarkovic@wavecomp.com>


> diff --git a/target/mips/translate.c b/target/mips/translate.c
> index 4dfc360..941b546 100644
> --- a/target/mips/translate.c
> +++ b/target/mips/translate.c
> @@ -1652,6 +1652,282 @@ enum {
>    *   Programming Manual", Ingenic Semiconductor Co, Ltd., 2017
>    */
>   
> +enum {
> +    OPC_MXU_S32MADD  = 0x00,
> +    OPC_MXU_S32MADDU = 0x01,
> +    /* not assigned 0x02 */
> +    OPC_MXU__POOL00  = 0x03,
> +    OPC_MXU_S32MSUB  = 0x04,
> +    OPC_MXU_S32MSUBU = 0x05,
> +    OPC_MXU__POOL01  = 0x06,
> +    OPC_MXU__POOL02  = 0x07,
> +    OPC_MXU_D16MUL   = 0x08,
> +    OPC_MXU__POOL03  = 0x09,
> +    OPC_MXU_D16MAC   = 0x0A,
> +    OPC_MXU_D16MACF  = 0x0B,
> +    OPC_MXU_D16MADL  = 0x0C,
> +    OPC_MXU__POOL04  = 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_D32ADD   = 0x18,
> +    OPC_MXU__POOL13  = 0x19,
> +    /* not assigned 0x1A */
> +    OPC_MXU__POOL14  = 0x1B,
> +    OPC_MXU__POOL15  = 0x1C,
> +    OPC_MXU_Q8ACCE   = 0x1D,
> +    /* not assigned 0x1E */
> +    /* not assigned 0x1F */
> +    /* not assigned 0x20 */
> +    /* not assigned 0x21 */
> +    OPC_MXU_S8LDD    = 0x22,
> +    OPC_MXU_S8STD    = 0x23,
> +    OPC_MXU_S8LDI    = 0x24,
> +    OPC_MXU_S8SDI    = 0x25,
> +    OPC_MXU__POOL16  = 0x26,
> +    OPC_MXU__POOL17  = 0x27,
> +    OPC_MXU_LXB      = 0x28,
> +    /* not assigned 0x29 */
> +    OPC_MXU_S16LDD   = 0x2A,
> +    OPC_MXU_S16STD   = 0x2B,
> +    OPC_MXU_S16LDI   = 0x2C,
> +    OPC_MXU_S16SDI   = 0x2D,
> +    OPC_MXU_S32M2I   = 0x2E,
> +    OPC_MXU_S32I2M   = 0x2F,
> +    OPC_MXU_D32SLL   = 0x30,
> +    OPC_MXU_D32SLR   = 0x31,
> +    OPC_MXU_D32SARL  = 0x32,
> +    OPC_MXU_D32SAR   = 0x33,
> +    OPC_MXU_Q16SLL   = 0x34,
> +    OPC_MXU_Q16SLR   = 0x35,
> +    OPC_MXU__POOL18  = 0x36,
> +    OPC_MXU_Q16SAR   = 0x37,
> +    OPC_MXU__POOL19  = 0x38,
> +    OPC_MXU__POOL20  = 0x39,
> +    OPC_MXU__POOL21  = 0x3A,
> +    OPC_MXU_Q16SCOP  = 0x3B,
> +    OPC_MXU_Q8MADL   = 0x3C,
> +    OPC_MXU_S32SFL   = 0x3D,
> +    OPC_MXU_Q8SAD    = 0x3E,
> +    /* not assigned 0x3F */
> +};
> +
> +
> +/*
> + * MXU pool 00
> + */
> +enum {
> +    OPC_MXU_S32MAX   = 0x00,
> +    OPC_MXU_S32MIN   = 0x01,
> +    OPC_MXU_D16MAX   = 0x02,
> +    OPC_MXU_D16MIN   = 0x03,
> +    OPC_MXU_Q8MAX    = 0x04,
> +    OPC_MXU_Q8MIN    = 0x05,
> +    OPC_MXU_Q8SLT    = 0x06,
> +    OPC_MXU_Q8SLTU   = 0x07,
> +};
> +
> +/*
> + * MXU pool 01
> + */
> +enum {
> +    OPC_MXU_S32SLT   = 0x00,
> +    OPC_MXU_D16SLT   = 0x01,
> +    OPC_MXU_D16AVG   = 0x02,
> +    OPC_MXU_D16AVGR  = 0x03,
> +    OPC_MXU_Q8AVG    = 0x04,
> +    OPC_MXU_Q8AVGR   = 0x05,
> +    OPC_MXU_Q8ADD    = 0x07,
> +};
> +
> +/*
> + * MXU pool 02
> + */
> +enum {
> +    OPC_MXU_S32CPS   = 0x00,
> +    OPC_MXU_D16CPS   = 0x02,
> +    OPC_MXU_Q8ABD    = 0x04,
> +    OPC_MXU_Q16SAT   = 0x06,
> +};
> +
> +/*
> + * MXU pool 03
> + */
> +enum {
> +    OPC_MXU_D16MULF  = 0x00,
> +    OPC_MXU_D16MULE  = 0x01,
> +};
> +
> +/*
> + * 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
> + */
> +enum {
> +    OPC_MXU_S32STD   = 0x00,
> +    OPC_MXU_S32STDR  = 0x01,
> +};
> +
> +/*
> + * MXU pool 07
> + */
> +enum {
> +    OPC_MXU_S32LDDV  = 0x00,
> +    OPC_MXU_S32LDDVR = 0x01,
> +};
> +
> +/*
> + * MXU pool 08
> + */
> +enum {
> +    OPC_MXU_S32TDV   = 0x00,
> +    OPC_MXU_S32TDVR  = 0x01,
> +};
> +
> +/*
> + * MXU pool 09
> + */
> +enum {
> +    OPC_MXU_S32LDI   = 0x00,
> +    OPC_MXU_S32LDIR  = 0x01,
> +};
> +
> +/*
> + * MXU pool 10
> + */
> +enum {
> +    OPC_MXU_S32SDI   = 0x00,
> +    OPC_MXU_S32SDIR  = 0x01,
> +};
> +
> +/*
> + * MXU pool 11
> + */
> +enum {
> +    OPC_MXU_S32LDIV  = 0x00,
> +    OPC_MXU_S32LDIVR = 0x01,
> +};
> +
> +/*
> + * MXU pool 12
> + */
> +enum {
> +    OPC_MXU_S32SDIV  = 0x00,
> +    OPC_MXU_S32SDIVR = 0x01,
> +};
> +
> +/*
> + * MXU pool 13
> + */
> +enum {
> +    OPC_MXU_D32ACC   = 0x00,
> +    OPC_MXU_D32ACCM  = 0x01,
> +    OPC_MXU_D32ASUM  = 0x02,
> +};
> +
> +/*
> + * MXU pool 14
> + */
> +enum {
> +    OPC_MXU_Q16ACC   = 0x00,
> +    OPC_MXU_Q16ACCM  = 0x01,
> +    OPC_MXU_Q16ASUM  = 0x02,
> +};
> +
> +/*
> + * MXU pool 15
> + */
> +enum {
> +    OPC_MXU_Q8ADDE   = 0x00,
> +    OPC_MXU_D8SUM    = 0x01,
> +    OPC_MXU_D8SUMC   = 0x02,
> +};
> +
> +/*
> + * MXU pool 16
> + */
> +enum {
> +    OPC_MXU_S32MUL   = 0x00,
> +    OPC_MXU_S32MULU  = 0x01,
> +    OPC_MXU_S32EXTR  = 0x02,
> +    OPC_MXU_S32EXTRV = 0x03,
> +};
> +
> +/*
> + * MXU pool 17
> + */
> +enum {
> +    OPC_MXU_D32SARW  = 0x00,
> +    OPC_MXU_S32ALN   = 0x01,
> +    OPC_MXU_S32ALNI  = 0x02,
> +    OPC_MXU_S32NOR   = 0x03,
> +    OPC_MXU_S32AND   = 0x04,
> +    OPC_MXU_S32OR    = 0x05,
> +    OPC_MXU_S32XOR   = 0x06,
> +    OPC_MXU_S32LUI   = 0x07,
> +};
> +
> +/*
> + * MXU pool 18
> + */
> +enum {
> +    OPC_MXU_D32SLLV  = 0x00,
> +    OPC_MXU_D32SLRV  = 0x01,
> +    OPC_MXU_D32SARV  = 0x03,
> +    OPC_MXU_Q16SLLV  = 0x04,
> +    OPC_MXU_Q16SLRV  = 0x05,
> +    OPC_MXU_Q16SARV  = 0x07,
> +};
> +
> +/*
> + * MXU pool 19
> + */
> +enum {
> +    OPC_MXU_Q8MUL    = 0x00,
> +    OPC_MXU_Q8MULSU  = 0x01,
> +};
> +
> +/*
> + * MXU pool 20
> + */
> +enum {
> +    OPC_MXU_Q8MOVZ   = 0x00,
> +    OPC_MXU_Q8MOVN   = 0x01,
> +    OPC_MXU_D16MOVZ  = 0x02,
> +    OPC_MXU_D16MOVN  = 0x03,
> +    OPC_MXU_S32MOVZ  = 0x04,
> +    OPC_MXU_S32MOVN  = 0x05,
> +};
> +
> +/*
> + * MXU pool 21
> + */
> +enum {
> +    OPC_MXU_Q8MAC    = 0x00,
> +    OPC_MXU_Q8MACSU  = 0x01,
> +};
> +
>   
>   /* global register indices */
>   static TCGv cpu_gpr[32], cpu_PC;

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-10-16 13:40 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-16 12:14 [Qemu-devel] [PATCH 0/4] target/mips: Add Ingenic's MXU ASE opcodes Aleksandar Markovic
2018-10-16 12:14 ` [Qemu-devel] [PATCH 1/4] target/mips: Add basic description of MXU ASE Aleksandar Markovic
2018-10-16 13:27   ` Stefan Markovic
2018-10-16 12:14 ` [Qemu-devel] [PATCH 2/4] target/mips: Add assembler mnemonics list for " Aleksandar Markovic
2018-10-16 13:33   ` Stefan Markovic
2018-10-16 12:14 ` [Qemu-devel] [PATCH 3/4] target/mips: Add organizational chart of " Aleksandar Markovic
2018-10-16 13:34   ` Stefan Markovic
2018-10-16 12:14 ` [Qemu-devel] [PATCH 4/4] target/mips: Add opcode values " Aleksandar Markovic
2018-10-16 13:40   ` Stefan Markovic

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).