qemu-devel
[Top][All Lists]
Advanced

[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);
        }
    }

    ...
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]