[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] target-mips: Can we change function 'decode_opc' to table-d
From: |
jpcstpj7281 |
Subject: |
[Qemu-devel] target-mips: Can we change function 'decode_opc' to table-driven architecture? |
Date: |
Mon, 27 Jul 2015 10:04:52 +0800 (CST) |
I noticed that in function 'decode_opc()'(/target-mips/translate.c), there are
so many switch case sentence, why don't we change it to a table-driven
architecture? I've written a simple demo as following:
struct MIPSInstruction{
int op;
void (*op_func)(CPUMIPSState *, DisasContext *);
};
struct MIPSInstruction op_translate_table[] = {
{ OPC_SPECIAL, decode_opc_special },
{ OPC_SPECIAL2, decode_opc_special2_legacy },
{ OPC_SPECIAL3, decode_opc_special3 },
...
};
static void decode_opc(CPUMIPSState *env, DisasContext *ctx)
{
int op;
...
op = MASK_OP_MAJOR(ctx->opcode);
for (size_t i = 0; i < sizeof(op_translate_table) /
sizeof(op_translate_table[0]); i++) {
if ((op == op_translate_table[i].op) && (op_translate_table.op_func !=
NULL)) {
op_translate_table.op_func(env, ctx);
}
}
...
}
- [Qemu-devel] target-mips: Can we change function 'decode_opc' to table-driven architecture?,
jpcstpj7281 <=