target/mips: fetch code with translator_ld
Similarly to commits ae82adc8e29..7f93879e444, use the
translator_ld*() API introduced in commit 409c1a0bf0
to fetch the code on the MIPS target.
Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210125105818.2707067-1-f4bug@amsat.org>
This commit is contained in:
parent
c0928e6ddc
commit
0ab8e33a48
|
@ -26,7 +26,7 @@
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
#include "tcg/tcg-op.h"
|
#include "tcg/tcg-op.h"
|
||||||
#include "exec/cpu_ldst.h"
|
#include "exec/translator.h"
|
||||||
#include "exec/helper-proto.h"
|
#include "exec/helper-proto.h"
|
||||||
#include "exec/helper-gen.h"
|
#include "exec/helper-gen.h"
|
||||||
#include "hw/semihosting/semihost.h"
|
#include "hw/semihosting/semihost.h"
|
||||||
|
@ -13911,7 +13911,7 @@ static void decode_i64_mips16(DisasContext *ctx,
|
||||||
|
|
||||||
static int decode_extended_mips16_opc(CPUMIPSState *env, DisasContext *ctx)
|
static int decode_extended_mips16_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
{
|
{
|
||||||
int extend = cpu_lduw_code(env, ctx->base.pc_next + 2);
|
int extend = translator_lduw(env, ctx->base.pc_next + 2);
|
||||||
int op, rx, ry, funct, sa;
|
int op, rx, ry, funct, sa;
|
||||||
int16_t imm, offset;
|
int16_t imm, offset;
|
||||||
|
|
||||||
|
@ -14161,7 +14161,7 @@ static int decode_mips16_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
/* No delay slot, so just process as a normal instruction */
|
/* No delay slot, so just process as a normal instruction */
|
||||||
break;
|
break;
|
||||||
case M16_OPC_JAL:
|
case M16_OPC_JAL:
|
||||||
offset = cpu_lduw_code(env, ctx->base.pc_next + 2);
|
offset = translator_lduw(env, ctx->base.pc_next + 2);
|
||||||
offset = (((ctx->opcode & 0x1f) << 21)
|
offset = (((ctx->opcode & 0x1f) << 21)
|
||||||
| ((ctx->opcode >> 5) & 0x1f) << 16
|
| ((ctx->opcode >> 5) & 0x1f) << 16
|
||||||
| offset) << 2;
|
| offset) << 2;
|
||||||
|
@ -16295,7 +16295,7 @@ static void decode_micromips32_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
uint32_t op, minor, minor2, mips32_op;
|
uint32_t op, minor, minor2, mips32_op;
|
||||||
uint32_t cond, fmt, cc;
|
uint32_t cond, fmt, cc;
|
||||||
|
|
||||||
insn = cpu_lduw_code(env, ctx->base.pc_next + 2);
|
insn = translator_lduw(env, ctx->base.pc_next + 2);
|
||||||
ctx->opcode = (ctx->opcode << 16) | insn;
|
ctx->opcode = (ctx->opcode << 16) | insn;
|
||||||
|
|
||||||
rt = (ctx->opcode >> 21) & 0x1f;
|
rt = (ctx->opcode >> 21) & 0x1f;
|
||||||
|
@ -21350,7 +21350,7 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
int offset;
|
int offset;
|
||||||
int imm;
|
int imm;
|
||||||
|
|
||||||
insn = cpu_lduw_code(env, ctx->base.pc_next + 2);
|
insn = translator_lduw(env, ctx->base.pc_next + 2);
|
||||||
ctx->opcode = (ctx->opcode << 16) | insn;
|
ctx->opcode = (ctx->opcode << 16) | insn;
|
||||||
|
|
||||||
rt = extract32(ctx->opcode, 21, 5);
|
rt = extract32(ctx->opcode, 21, 5);
|
||||||
|
@ -21469,7 +21469,7 @@ static int decode_nanomips_32_48_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||||
break;
|
break;
|
||||||
case NM_P48I:
|
case NM_P48I:
|
||||||
{
|
{
|
||||||
insn = cpu_lduw_code(env, ctx->base.pc_next + 4);
|
insn = translator_lduw(env, ctx->base.pc_next + 4);
|
||||||
target_long addr_off = extract32(ctx->opcode, 0, 16) | insn << 16;
|
target_long addr_off = extract32(ctx->opcode, 0, 16) | insn << 16;
|
||||||
switch (extract32(ctx->opcode, 16, 5)) {
|
switch (extract32(ctx->opcode, 16, 5)) {
|
||||||
case NM_LI48:
|
case NM_LI48:
|
||||||
|
@ -29087,17 +29087,17 @@ static void mips_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
|
||||||
|
|
||||||
is_slot = ctx->hflags & MIPS_HFLAG_BMASK;
|
is_slot = ctx->hflags & MIPS_HFLAG_BMASK;
|
||||||
if (ctx->insn_flags & ISA_NANOMIPS32) {
|
if (ctx->insn_flags & ISA_NANOMIPS32) {
|
||||||
ctx->opcode = cpu_lduw_code(env, ctx->base.pc_next);
|
ctx->opcode = translator_lduw(env, ctx->base.pc_next);
|
||||||
insn_bytes = decode_nanomips_opc(env, ctx);
|
insn_bytes = decode_nanomips_opc(env, ctx);
|
||||||
} else if (!(ctx->hflags & MIPS_HFLAG_M16)) {
|
} else if (!(ctx->hflags & MIPS_HFLAG_M16)) {
|
||||||
ctx->opcode = cpu_ldl_code(env, ctx->base.pc_next);
|
ctx->opcode = translator_ldl(env, ctx->base.pc_next);
|
||||||
insn_bytes = 4;
|
insn_bytes = 4;
|
||||||
decode_opc(env, ctx);
|
decode_opc(env, ctx);
|
||||||
} else if (ctx->insn_flags & ASE_MICROMIPS) {
|
} else if (ctx->insn_flags & ASE_MICROMIPS) {
|
||||||
ctx->opcode = cpu_lduw_code(env, ctx->base.pc_next);
|
ctx->opcode = translator_lduw(env, ctx->base.pc_next);
|
||||||
insn_bytes = decode_micromips_opc(env, ctx);
|
insn_bytes = decode_micromips_opc(env, ctx);
|
||||||
} else if (ctx->insn_flags & ASE_MIPS16) {
|
} else if (ctx->insn_flags & ASE_MIPS16) {
|
||||||
ctx->opcode = cpu_lduw_code(env, ctx->base.pc_next);
|
ctx->opcode = translator_lduw(env, ctx->base.pc_next);
|
||||||
insn_bytes = decode_mips16_opc(env, ctx);
|
insn_bytes = decode_mips16_opc(env, ctx);
|
||||||
} else {
|
} else {
|
||||||
gen_reserved_instruction(ctx);
|
gen_reserved_instruction(ctx);
|
||||||
|
|
Loading…
Reference in New Issue