target/mips: Guard check_insn_opc_user_only with INSN_R5900 check

Avoid using check_opc_user_only() as a decision making code wrt
various architectures. Use ctx->insn_flags checks instead.

Backports commit 55fc7a69aa38f5ec726e862caf4e4394caca04a8 from qemu
This commit is contained in:
Fredrik Noring 2018-11-23 18:38:06 -05:00 committed by Lioncash
parent b671293fe0
commit a79d4b6fe7
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -28507,7 +28507,9 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx, bool *insn_need_pat
break; break;
case OPC_LL: /* Load and stores */ case OPC_LL: /* Load and stores */
check_insn(ctx, ISA_MIPS2); check_insn(ctx, ISA_MIPS2);
check_insn_opc_user_only(ctx, INSN_R5900); if (ctx->insn_flags & INSN_R5900) {
check_insn_opc_user_only(ctx, INSN_R5900);
}
/* Fallthrough */ /* Fallthrough */
case OPC_LWL: case OPC_LWL:
case OPC_LWR: case OPC_LWR:
@ -28532,7 +28534,9 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx, bool *insn_need_pat
case OPC_SC: case OPC_SC:
check_insn(ctx, ISA_MIPS2); check_insn(ctx, ISA_MIPS2);
check_insn_opc_removed(ctx, ISA_MIPS32R6); check_insn_opc_removed(ctx, ISA_MIPS32R6);
check_insn_opc_user_only(ctx, INSN_R5900); if (ctx->insn_flags & INSN_R5900) {
check_insn_opc_user_only(ctx, INSN_R5900);
}
gen_st_cond(ctx, op, rt, rs, imm); gen_st_cond(ctx, op, rt, rs, imm);
break; break;
case OPC_CACHE: case OPC_CACHE:
@ -28800,7 +28804,9 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx, bool *insn_need_pat
#if defined(TARGET_MIPS64) #if defined(TARGET_MIPS64)
/* MIPS64 opcodes */ /* MIPS64 opcodes */
case OPC_LLD: case OPC_LLD:
check_insn_opc_user_only(ctx, INSN_R5900); if (ctx->insn_flags & INSN_R5900) {
check_insn_opc_user_only(ctx, INSN_R5900);
}
/* fall through */ /* fall through */
case OPC_LDL: case OPC_LDL:
case OPC_LDR: case OPC_LDR:
@ -28824,7 +28830,9 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx, bool *insn_need_pat
case OPC_SCD: case OPC_SCD:
check_insn_opc_removed(ctx, ISA_MIPS32R6); check_insn_opc_removed(ctx, ISA_MIPS32R6);
check_insn(ctx, ISA_MIPS3); check_insn(ctx, ISA_MIPS3);
check_insn_opc_user_only(ctx, INSN_R5900); if (ctx->insn_flags & INSN_R5900) {
check_insn_opc_user_only(ctx, INSN_R5900);
}
check_mips_64(ctx); check_mips_64(ctx);
gen_st_cond(ctx, op, rt, rs, imm); gen_st_cond(ctx, op, rt, rs, imm);
break; break;