target/mips/tx79: Move MFHI1 / MFLO1 opcodes to decodetree
Introduce decodetree structure to decode the tx79 opcodes. Start it by moving the existing MFHI1 and MFLO1 opcodes. Remove unnecessary comments. As the TX79 share opcodes with the TX19/TX39/TX49 CPUs, we introduce the decode_ext_txx9() dispatcher where we will add the other decoders later. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20210214175912.732946-9-f4bug@amsat.org>
This commit is contained in:
parent
c27b457937
commit
ffc672aa97
@ -3,6 +3,7 @@ gen = [
|
||||
decodetree.process('mips64r6.decode', extra_args: '--static-decode=decode_mips64r6'),
|
||||
decodetree.process('msa32.decode', extra_args: '--static-decode=decode_msa32'),
|
||||
decodetree.process('msa64.decode', extra_args: '--static-decode=decode_msa64'),
|
||||
decodetree.process('tx79.decode', extra_args: '--static-decode=decode_tx79'),
|
||||
]
|
||||
|
||||
mips_ss = ss.source_set()
|
||||
@ -23,6 +24,10 @@ mips_tcg_ss.add(files(
|
||||
'tlb_helper.c',
|
||||
'translate.c',
|
||||
'translate_addr_const.c',
|
||||
'txx9_translate.c',
|
||||
))
|
||||
mips_ss.add(when: ['CONFIG_TCG', 'TARGET_MIPS64'], if_true: files(
|
||||
'tx79_translate.c',
|
||||
))
|
||||
mips_tcg_ss.add(when: 'TARGET_MIPS64', if_false: files(
|
||||
'mxu_translate.c',
|
||||
|
@ -1360,9 +1360,7 @@ enum {
|
||||
MMI_OPC_PLZCW = 0x04 | MMI_OPC_CLASS_MMI,
|
||||
MMI_OPC_CLASS_MMI0 = 0x08 | MMI_OPC_CLASS_MMI,
|
||||
MMI_OPC_CLASS_MMI2 = 0x09 | MMI_OPC_CLASS_MMI,
|
||||
MMI_OPC_MFHI1 = 0x10 | MMI_OPC_CLASS_MMI, /* Same minor as OPC_MFHI */
|
||||
MMI_OPC_MTHI1 = 0x11 | MMI_OPC_CLASS_MMI, /* Same minor as OPC_MTHI */
|
||||
MMI_OPC_MFLO1 = 0x12 | MMI_OPC_CLASS_MMI, /* Same minor as OPC_MFLO */
|
||||
MMI_OPC_MTLO1 = 0x13 | MMI_OPC_CLASS_MMI, /* Same minor as OPC_MTLO */
|
||||
MMI_OPC_MULT1 = 0x18 | MMI_OPC_CLASS_MMI, /* Same minor as OPC_MULT */
|
||||
MMI_OPC_MULTU1 = 0x19 | MMI_OPC_CLASS_MMI, /* Same min. as OPC_MULTU */
|
||||
@ -3469,12 +3467,6 @@ static void gen_shift(DisasContext *ctx, uint32_t opc,
|
||||
static void gen_HILO1_tx79(DisasContext *ctx, uint32_t opc, int reg)
|
||||
{
|
||||
switch (opc) {
|
||||
case MMI_OPC_MFHI1:
|
||||
gen_store_gpr(cpu_HI[1], reg);
|
||||
break;
|
||||
case MMI_OPC_MFLO1:
|
||||
gen_store_gpr(cpu_LO[1], reg);
|
||||
break;
|
||||
case MMI_OPC_MTHI1:
|
||||
gen_load_gpr(cpu_HI[1], reg);
|
||||
break;
|
||||
@ -25120,10 +25112,6 @@ static void decode_mmi(CPUMIPSState *env, DisasContext *ctx)
|
||||
case MMI_OPC_MTHI1:
|
||||
gen_HILO1_tx79(ctx, opc, rs);
|
||||
break;
|
||||
case MMI_OPC_MFLO1:
|
||||
case MMI_OPC_MFHI1:
|
||||
gen_HILO1_tx79(ctx, opc, rd);
|
||||
break;
|
||||
case MMI_OPC_PLZCW: /* TODO: MMI_OPC_PLZCW */
|
||||
case MMI_OPC_PMFHL: /* TODO: MMI_OPC_PMFHL */
|
||||
case MMI_OPC_PMTHL: /* TODO: MMI_OPC_PMTHL */
|
||||
@ -26095,6 +26083,9 @@ static void decode_opc(CPUMIPSState *env, DisasContext *ctx)
|
||||
if (cpu_supports_isa(env, ISA_MIPS_R6) && decode_isa_rel6(ctx, ctx->opcode)) {
|
||||
return;
|
||||
}
|
||||
if (cpu_supports_isa(env, INSN_R5900) && decode_ext_txx9(ctx, ctx->opcode)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (decode_opc_legacy(env, ctx)) {
|
||||
return;
|
||||
|
@ -185,5 +185,9 @@ bool decode_ase_mxu(DisasContext *ctx, uint32_t insn);
|
||||
/* decodetree generated */
|
||||
bool decode_isa_rel6(DisasContext *ctx, uint32_t insn);
|
||||
bool decode_ase_msa(DisasContext *ctx, uint32_t insn);
|
||||
bool decode_ext_txx9(DisasContext *ctx, uint32_t insn);
|
||||
#if defined(TARGET_MIPS64)
|
||||
bool decode_ext_tx79(DisasContext *ctx, uint32_t insn);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
25
target/mips/tx79.decode
Normal file
25
target/mips/tx79.decode
Normal file
@ -0,0 +1,25 @@
|
||||
# Toshiba C790's instruction set
|
||||
#
|
||||
# Copyright (C) 2021 Philippe Mathieu-Daudé
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
#
|
||||
# Toshiba Appendix B C790-Specific Instruction Set Details
|
||||
|
||||
###########################################################################
|
||||
# Named attribute sets. These are used to make nice(er) names
|
||||
# when creating helpers common to those for the individual
|
||||
# instruction patterns.
|
||||
|
||||
&rtype rs rt rd sa
|
||||
|
||||
###########################################################################
|
||||
# Named instruction formats. These are generally used to
|
||||
# reduce the amount of duplication between instruction patterns.
|
||||
|
||||
@rd ...... .......... rd:5 ..... ...... &rtype rs=0 rt=0 sa=0
|
||||
|
||||
###########################################################################
|
||||
|
||||
MFHI1 011100 0000000000 ..... 00000 010000 @rd
|
||||
MFLO1 011100 0000000000 ..... 00000 010010 @rd
|
37
target/mips/tx79_translate.c
Normal file
37
target/mips/tx79_translate.c
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Toshiba TX79-specific instructions translation routines
|
||||
*
|
||||
* Copyright (c) 2018 Fredrik Noring
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "tcg/tcg-op.h"
|
||||
#include "exec/helper-gen.h"
|
||||
#include "translate.h"
|
||||
|
||||
/* Include the auto-generated decoder. */
|
||||
#include "decode-tx79.c.inc"
|
||||
|
||||
bool decode_ext_tx79(DisasContext *ctx, uint32_t insn)
|
||||
{
|
||||
if (TARGET_LONG_BITS == 64 && decode_tx79(ctx, insn)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool trans_MFHI1(DisasContext *ctx, arg_rtype *a)
|
||||
{
|
||||
gen_store_gpr(cpu_HI[1], a->rd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool trans_MFLO1(DisasContext *ctx, arg_rtype *a)
|
||||
{
|
||||
gen_store_gpr(cpu_LO[1], a->rd);
|
||||
|
||||
return true;
|
||||
}
|
20
target/mips/txx9_translate.c
Normal file
20
target/mips/txx9_translate.c
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Toshiba TXx9 instructions translation routines
|
||||
*
|
||||
* Copyright (c) 2021 Philippe Mathieu-Daudé
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "translate.h"
|
||||
|
||||
bool decode_ext_txx9(DisasContext *ctx, uint32_t insn)
|
||||
{
|
||||
#if defined(TARGET_MIPS64)
|
||||
if (decode_ext_tx79(ctx, insn)) {
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
Loading…
Reference in New Issue
Block a user