Commit 8bacd1ff authored by Aleksandar Markovic's avatar Aleksandar Markovic
Browse files

target/mips: Add opcode values of MXU ASE



Add opcode values for all instructions in MXU ASE.

Reviewed-by: default avatarStefan Markovic <smarkovic@wavecomp.com>
Signed-off-by: default avatarAleksandar Markovic <amarkovic@wavecomp.com>
parent 9ef5bff9
Loading
Loading
Loading
Loading
+276 −0
Original line number Diff line number Diff line
@@ -1651,6 +1651,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_S32STDV  = 0x00,
    OPC_MXU_S32STDVR = 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;