mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
target/mips: Avoid case statements formulated by ranges - part 2
Remove "range style" case statements to make code analysis easier. This patch handles cases when the values in the range in question were not properly defined. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Aleksandar Markovic <amarkovic@wavecomp.com> Signed-off-by: Aleksandar Markovic <amarkovic@wavecomp.com> Signed-off-by: Stefan Markovic <amarkovic@wavecomp.com>
This commit is contained in:
parent
c2e19f3c2b
commit
c38a1d5223
1 changed files with 71 additions and 7 deletions
|
@ -902,8 +902,21 @@ enum {
|
||||||
OPC_MTTR = (0x0C << 21) | OPC_CP0,
|
OPC_MTTR = (0x0C << 21) | OPC_CP0,
|
||||||
OPC_WRPGPR = (0x0E << 21) | OPC_CP0,
|
OPC_WRPGPR = (0x0E << 21) | OPC_CP0,
|
||||||
OPC_C0 = (0x10 << 21) | OPC_CP0,
|
OPC_C0 = (0x10 << 21) | OPC_CP0,
|
||||||
OPC_C0_FIRST = (0x10 << 21) | OPC_CP0,
|
OPC_C0_1 = (0x11 << 21) | OPC_CP0,
|
||||||
OPC_C0_LAST = (0x1F << 21) | OPC_CP0,
|
OPC_C0_2 = (0x12 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_3 = (0x13 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_4 = (0x14 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_5 = (0x15 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_6 = (0x16 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_7 = (0x17 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_8 = (0x18 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_9 = (0x19 << 21) | OPC_CP0,
|
||||||
|
OPC_C0_A = (0x1A << 21) | OPC_CP0,
|
||||||
|
OPC_C0_B = (0x1B << 21) | OPC_CP0,
|
||||||
|
OPC_C0_C = (0x1C << 21) | OPC_CP0,
|
||||||
|
OPC_C0_D = (0x1D << 21) | OPC_CP0,
|
||||||
|
OPC_C0_E = (0x1E << 21) | OPC_CP0,
|
||||||
|
OPC_C0_F = (0x1F << 21) | OPC_CP0,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* MFMC0 opcodes */
|
/* MFMC0 opcodes */
|
||||||
|
@ -12490,10 +12503,22 @@ enum {
|
||||||
/* PCREL Instructions perform PC-Relative address calculation. bits 20..16 */
|
/* PCREL Instructions perform PC-Relative address calculation. bits 20..16 */
|
||||||
enum {
|
enum {
|
||||||
ADDIUPC_00 = 0x00,
|
ADDIUPC_00 = 0x00,
|
||||||
|
ADDIUPC_01 = 0x01,
|
||||||
|
ADDIUPC_02 = 0x02,
|
||||||
|
ADDIUPC_03 = 0x03,
|
||||||
|
ADDIUPC_04 = 0x04,
|
||||||
|
ADDIUPC_05 = 0x05,
|
||||||
|
ADDIUPC_06 = 0x06,
|
||||||
ADDIUPC_07 = 0x07,
|
ADDIUPC_07 = 0x07,
|
||||||
AUIPC = 0x1e,
|
AUIPC = 0x1e,
|
||||||
ALUIPC = 0x1f,
|
ALUIPC = 0x1f,
|
||||||
LWPC_08 = 0x08,
|
LWPC_08 = 0x08,
|
||||||
|
LWPC_09 = 0x09,
|
||||||
|
LWPC_0A = 0x0A,
|
||||||
|
LWPC_0B = 0x0B,
|
||||||
|
LWPC_0C = 0x0C,
|
||||||
|
LWPC_0D = 0x0D,
|
||||||
|
LWPC_0E = 0x0E,
|
||||||
LWPC_0F = 0x0F,
|
LWPC_0F = 0x0F,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -12928,12 +12953,16 @@ enum {
|
||||||
R6_LWM16 = 0x02,
|
R6_LWM16 = 0x02,
|
||||||
R6_JRC16 = 0x03,
|
R6_JRC16 = 0x03,
|
||||||
MOVEP = 0x04,
|
MOVEP = 0x04,
|
||||||
|
MOVEP_05 = 0x05,
|
||||||
|
MOVEP_06 = 0x06,
|
||||||
MOVEP_07 = 0x07,
|
MOVEP_07 = 0x07,
|
||||||
R6_XOR16 = 0x08,
|
R6_XOR16 = 0x08,
|
||||||
R6_OR16 = 0x09,
|
R6_OR16 = 0x09,
|
||||||
R6_SWM16 = 0x0a,
|
R6_SWM16 = 0x0a,
|
||||||
JALRC16 = 0x0b,
|
JALRC16 = 0x0b,
|
||||||
MOVEP_0C = 0x0c,
|
MOVEP_0C = 0x0c,
|
||||||
|
MOVEP_0D = 0x0d,
|
||||||
|
MOVEP_0E = 0x0e,
|
||||||
MOVEP_0F = 0x0f,
|
MOVEP_0F = 0x0f,
|
||||||
JRCADDIUSP = 0x13,
|
JRCADDIUSP = 0x13,
|
||||||
R6_BREAK16 = 0x1b,
|
R6_BREAK16 = 0x1b,
|
||||||
|
@ -13251,8 +13280,14 @@ static void gen_pool16c_r6_insn(DisasContext *ctx)
|
||||||
gen_compute_branch(ctx, OPC_JR, 2, rs, 0, 0, 0);
|
gen_compute_branch(ctx, OPC_JR, 2, rs, 0, 0, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MOVEP ... MOVEP_07:
|
case MOVEP:
|
||||||
case MOVEP_0C ... MOVEP_0F:
|
case MOVEP_05:
|
||||||
|
case MOVEP_06:
|
||||||
|
case MOVEP_07:
|
||||||
|
case MOVEP_0C:
|
||||||
|
case MOVEP_0D:
|
||||||
|
case MOVEP_0E:
|
||||||
|
case MOVEP_0F:
|
||||||
{
|
{
|
||||||
int enc_dest = uMIPS_RD(ctx->opcode);
|
int enc_dest = uMIPS_RD(ctx->opcode);
|
||||||
int enc_rt = uMIPS_RS2(ctx->opcode);
|
int enc_rt = uMIPS_RS2(ctx->opcode);
|
||||||
|
@ -15230,7 +15265,14 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
if (ctx->insn_flags & ISA_MIPS32R6) {
|
if (ctx->insn_flags & ISA_MIPS32R6) {
|
||||||
/* PCREL: ADDIUPC, AUIPC, ALUIPC, LWPC */
|
/* PCREL: ADDIUPC, AUIPC, ALUIPC, LWPC */
|
||||||
switch ((ctx->opcode >> 16) & 0x1f) {
|
switch ((ctx->opcode >> 16) & 0x1f) {
|
||||||
case ADDIUPC_00 ... ADDIUPC_07:
|
case ADDIUPC_00:
|
||||||
|
case ADDIUPC_01:
|
||||||
|
case ADDIUPC_02:
|
||||||
|
case ADDIUPC_03:
|
||||||
|
case ADDIUPC_04:
|
||||||
|
case ADDIUPC_05:
|
||||||
|
case ADDIUPC_06:
|
||||||
|
case ADDIUPC_07:
|
||||||
gen_pcrel(ctx, OPC_ADDIUPC, ctx->base.pc_next & ~0x3, rt);
|
gen_pcrel(ctx, OPC_ADDIUPC, ctx->base.pc_next & ~0x3, rt);
|
||||||
break;
|
break;
|
||||||
case AUIPC:
|
case AUIPC:
|
||||||
|
@ -15239,7 +15281,14 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
case ALUIPC:
|
case ALUIPC:
|
||||||
gen_pcrel(ctx, OPC_ALUIPC, ctx->base.pc_next, rt);
|
gen_pcrel(ctx, OPC_ALUIPC, ctx->base.pc_next, rt);
|
||||||
break;
|
break;
|
||||||
case LWPC_08 ... LWPC_0F:
|
case LWPC_08:
|
||||||
|
case LWPC_09:
|
||||||
|
case LWPC_0A:
|
||||||
|
case LWPC_0B:
|
||||||
|
case LWPC_0C:
|
||||||
|
case LWPC_0D:
|
||||||
|
case LWPC_0E:
|
||||||
|
case LWPC_0F:
|
||||||
gen_pcrel(ctx, R6_OPC_LWPC, ctx->base.pc_next & ~0x3, rt);
|
gen_pcrel(ctx, R6_OPC_LWPC, ctx->base.pc_next & ~0x3, rt);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -19790,7 +19839,22 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
gen_cp0(env, ctx, op1, rt, rd);
|
gen_cp0(env, ctx, op1, rt, rd);
|
||||||
#endif /* !CONFIG_USER_ONLY */
|
#endif /* !CONFIG_USER_ONLY */
|
||||||
break;
|
break;
|
||||||
case OPC_C0_FIRST ... OPC_C0_LAST:
|
case OPC_C0:
|
||||||
|
case OPC_C0_1:
|
||||||
|
case OPC_C0_2:
|
||||||
|
case OPC_C0_3:
|
||||||
|
case OPC_C0_4:
|
||||||
|
case OPC_C0_5:
|
||||||
|
case OPC_C0_6:
|
||||||
|
case OPC_C0_7:
|
||||||
|
case OPC_C0_8:
|
||||||
|
case OPC_C0_9:
|
||||||
|
case OPC_C0_A:
|
||||||
|
case OPC_C0_B:
|
||||||
|
case OPC_C0_C:
|
||||||
|
case OPC_C0_D:
|
||||||
|
case OPC_C0_E:
|
||||||
|
case OPC_C0_F:
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
gen_cp0(env, ctx, MASK_C0(ctx->opcode), rt, rd);
|
gen_cp0(env, ctx, MASK_C0(ctx->opcode), rt, rd);
|
||||||
#endif /* !CONFIG_USER_ONLY */
|
#endif /* !CONFIG_USER_ONLY */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue