target-mips: add microMIPS32 R6 opcode enum

Add microMIPS32 Release 6 opcode enum.
Remove RI checking for pre-R6 reserved opcode.

Signed-off-by: Yongbok Kim <yongbok.kim@imgtec.com>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
This commit is contained in:
Yongbok Kim 2015-06-25 00:24:20 +01:00 committed by Leon Alrae
parent 9e8f441a7e
commit 3a1f426828

View File

@ -12378,6 +12378,8 @@ enum {
LBU16 = 0x02,
MOVE16 = 0x03,
ADDI32 = 0x04,
R6_LUI = 0x04,
AUI = 0x04,
LBU32 = 0x05,
SB32 = 0x06,
LB32 = 0x07,
@ -12400,56 +12402,88 @@ enum {
POOL32S = 0x16, /* MIPS64 */
DADDIU32 = 0x17, /* MIPS64 */
/* 0x1f is reserved */
POOL32C = 0x18,
LWGP16 = 0x19,
LW16 = 0x1a,
POOL16E = 0x1b,
XORI32 = 0x1c,
JALS32 = 0x1d,
BOVC = 0x1d,
BEQC = 0x1d,
BEQZALC = 0x1d,
ADDIUPC = 0x1e,
PCREL = 0x1e,
BNVC = 0x1f,
BNEC = 0x1f,
BNEZALC = 0x1f,
/* 0x20 is reserved */
RES_20 = 0x20,
R6_BEQZC = 0x20,
JIC = 0x20,
POOL16F = 0x21,
SB16 = 0x22,
BEQZ16 = 0x23,
BEQZC16 = 0x23,
SLTI32 = 0x24,
BEQ32 = 0x25,
BC = 0x25,
SWC132 = 0x26,
LWC132 = 0x27,
/* 0x28 and 0x29 are reserved */
RES_28 = 0x28,
/* 0x29 is reserved */
RES_29 = 0x29,
R6_BNEZC = 0x28,
JIALC = 0x28,
SH16 = 0x2a,
BNEZ16 = 0x2b,
BNEZC16 = 0x2b,
SLTIU32 = 0x2c,
BNE32 = 0x2d,
BALC = 0x2d,
SDC132 = 0x2e,
LDC132 = 0x2f,
/* 0x30 and 0x31 are reserved */
RES_30 = 0x30,
/* 0x31 is reserved */
RES_31 = 0x31,
BLEZALC = 0x30,
BGEZALC = 0x30,
BGEUC = 0x30,
SWSP16 = 0x32,
B16 = 0x33,
BC16 = 0x33,
ANDI32 = 0x34,
J32 = 0x35,
BGTZC = 0x35,
BLTZC = 0x35,
BLTC = 0x35,
SD32 = 0x36, /* MIPS64 */
LD32 = 0x37, /* MIPS64 */
/* 0x38 and 0x39 are reserved */
RES_38 = 0x38,
/* 0x39 is reserved */
RES_39 = 0x39,
BGTZALC = 0x38,
BLTZALC = 0x38,
BLTUC = 0x38,
SW16 = 0x3a,
LI16 = 0x3b,
JALX32 = 0x3c,
JAL32 = 0x3d,
BLEZC = 0x3d,
BGEZC = 0x3d,
BGEC = 0x3d,
SW32 = 0x3e,
LW32 = 0x3f
};
/* PCREL Instructions perform PC-Relative address calculation. bits 20..16 */
enum {
ADDIUPC_00 = 0x00,
ADDIUPC_07 = 0x07,
AUIPC = 0x1e,
ALUIPC = 0x1f,
LWPC_08 = 0x08,
LWPC_0F = 0x0F,
};
/* POOL32A encoding of minor opcode field */
enum {
@ -12459,6 +12493,8 @@ enum {
SRL32 = 0x1,
SRA = 0x2,
ROTR = 0x3,
SELEQZ = 0x5,
SELNEZ = 0x6,
SLLV = 0x0,
SRLV = 0x1,
@ -12477,11 +12513,21 @@ enum {
SLTU = 0xe,
MOVN = 0x0,
R6_MUL = 0x0,
MOVZ = 0x1,
MUH = 0x1,
MULU = 0x2,
MUHU = 0x3,
LWXS = 0x4,
R6_DIV = 0x4,
MOD = 0x5,
R6_DIVU = 0x6,
MODU = 0x7,
/* The following can be distinguished by their lower 6 bits. */
INS = 0x0c,
LSA = 0x0f,
ALIGN = 0x1f,
EXT = 0x2c,
POOL32AXF = 0x3c
};
@ -12534,6 +12580,7 @@ enum {
/* end of microMIPS32 DSP */
/* bits 15..12 for 0x2c */
BITSWAP = 0x0,
SEB = 0x2,
SEH = 0x3,
CLO = 0x4,
@ -12560,7 +12607,10 @@ enum {
/* bits 15..12 for 0x3c */
JALR = 0x0,
JR = 0x0, /* alias */
JALRC = 0x0,
JRC = 0x0,
JALR_HB = 0x1,
JALRC_HB = 0x1,
JALRS = 0x4,
JALRS_HB = 0x5,
@ -12644,32 +12694,39 @@ enum {
enum {
/* These are the bit 7..6 values */
ADD_FMT = 0x0,
MOVN_FMT = 0x0,
SUB_FMT = 0x1,
MOVZ_FMT = 0x1,
MUL_FMT = 0x2,
DIV_FMT = 0x3,
/* These are the bit 8..6 values */
MOVN_FMT = 0x0,
RSQRT2_FMT = 0x0,
MOVF_FMT = 0x0,
RINT_FMT = 0x0,
SELNEZ_FMT = 0x0,
MOVZ_FMT = 0x1,
LWXC1 = 0x1,
MOVT_FMT = 0x1,
CLASS_FMT = 0x1,
SELEQZ_FMT = 0x1,
PLL_PS = 0x2,
SWXC1 = 0x2,
SEL_FMT = 0x2,
PLU_PS = 0x3,
LDXC1 = 0x3,
MOVN_FMT_04 = 0x4,
PUL_PS = 0x4,
SDXC1 = 0x4,
RECIP2_FMT = 0x4,
MOVZ_FMT_05 = 0x05,
PUU_PS = 0x5,
LUXC1 = 0x5,
@ -12677,8 +12734,10 @@ enum {
SUXC1 = 0x6,
ADDR_PS = 0x6,
PREFX = 0x6,
MADDF_FMT = 0x6,
MULR_PS = 0x7,
MSUBF_FMT = 0x7,
MADD_S = 0x01,
MADD_D = 0x09,
@ -12695,10 +12754,17 @@ enum {
NMSUB_D = 0x2a,
NMSUB_PS = 0x32,
MIN_FMT = 0x3,
MAX_FMT = 0xb,
MINA_FMT = 0x23,
MAXA_FMT = 0x2b,
POOL32FXF = 0x3b,
CABS_COND_FMT = 0x1c, /* MIPS3D */
C_COND_FMT = 0x3c
C_COND_FMT = 0x3c,
CMP_CONDN_S = 0x5,
CMP_CONDN_D = 0x15
};
/* POOL32Fxf encoding of minor opcode extension field */
@ -12751,10 +12817,15 @@ enum {
BGTZ = 0x06,
BEQZC = 0x07,
TLTI = 0x08,
BC1EQZC = 0x08,
TGEI = 0x09,
BC1NEZC = 0x09,
TLTIU = 0x0a,
BC2EQZC = 0x0a,
TGEIU = 0x0b,
BC2NEZC = 0x0a,
TNEI = 0x0c,
R6_SYNCI = 0x0c,
LUI = 0x0d,
TEQI = 0x0e,
SYNCI = 0x10,
@ -12807,6 +12878,26 @@ enum {
JRADDIUSP = 0x30
};
/* R6 POOL16C encoding of minor opcode field (bits 0..5) */
enum {
R6_NOT16 = 0x00,
R6_AND16 = 0x01,
R6_LWM16 = 0x02,
R6_JRC16 = 0x03,
MOVEP = 0x04,
MOVEP_07 = 0x07,
R6_XOR16 = 0x08,
R6_OR16 = 0x09,
R6_SWM16 = 0x0a,
JALRC16 = 0x0b,
MOVEP_0C = 0x0c,
MOVEP_0F = 0x0f,
JRCADDIUSP = 0x13,
R6_BREAK16 = 0x1b,
R6_SDBBP16 = 0x3b
};
/* POOL16D encoding of minor opcode field */
enum {
@ -14848,12 +14939,8 @@ static int decode_micromips_opc (CPUMIPSState *env, DisasContext *ctx)
tcg_gen_movi_tl(cpu_gpr[reg], imm);
}
break;
case RES_20:
case RES_28:
case RES_29:
case RES_30:
case RES_31:
case RES_38:
case RES_39:
generate_exception(ctx, EXCP_RI);
break;