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:
Philippe Mathieu-Daudé 2021-02-14 17:57:24 +01:00
parent c27b457937
commit ffc672aa97
6 changed files with 94 additions and 12 deletions

View File

@ -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',

View File

@ -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;

View File

@ -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
View 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

View 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;
}

View 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;
}