fix static variables used in m68k
This commit is contained in:
@@ -147,6 +147,9 @@ typedef struct CPUM68KState {
|
||||
/* Fields from here on are preserved across CPU reset. */
|
||||
uint32_t features;
|
||||
|
||||
// translate opcode
|
||||
void* opcode_table[65536];
|
||||
|
||||
// Unicorn engine
|
||||
struct uc_struct *uc;
|
||||
} CPUM68KState;
|
||||
|
||||
@@ -5996,10 +5996,8 @@ DISAS_INSN(to_mext)
|
||||
gen_helper_set_mac_extu(tcg_ctx, tcg_ctx->cpu_env, val, acc);
|
||||
}
|
||||
|
||||
static disas_proc opcode_table[65536];
|
||||
|
||||
static void
|
||||
register_opcode (disas_proc proc, uint16_t opcode, uint16_t mask)
|
||||
register_opcode (CPUM68KState *env, disas_proc proc, uint16_t opcode, uint16_t mask)
|
||||
{
|
||||
int i;
|
||||
int from;
|
||||
@@ -6029,7 +6027,7 @@ register_opcode (disas_proc proc, uint16_t opcode, uint16_t mask)
|
||||
to = from + i;
|
||||
for (i = from; i < to; i++) {
|
||||
if ((i & mask) == opcode)
|
||||
opcode_table[i] = proc;
|
||||
env->opcode_table[i] = proc;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6043,16 +6041,16 @@ void register_m68k_insns (CPUM68KState *env)
|
||||
* Build the opcode table only once to avoid
|
||||
* multithreading issues.
|
||||
*/
|
||||
if (opcode_table[0] != NULL) {
|
||||
return;
|
||||
}
|
||||
// if (opcode_table[0] != NULL) {
|
||||
// return;
|
||||
// }
|
||||
|
||||
/*
|
||||
* use BASE() for instruction available
|
||||
* for CF_ISA_A and M68000.
|
||||
*/
|
||||
#define BASE(name, opcode, mask) \
|
||||
register_opcode(disas_##name, 0x##opcode, 0x##mask)
|
||||
register_opcode(env, disas_##name, 0x##opcode, 0x##mask)
|
||||
#define INSN(name, opcode, mask, feature) do { \
|
||||
if (m68k_feature(env, M68K_FEATURE_##feature)) \
|
||||
BASE(name, opcode, mask); \
|
||||
@@ -6344,7 +6342,7 @@ static void m68k_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
|
||||
|
||||
insn = read_im16(env, dc);
|
||||
|
||||
opcode_table[insn](env, dc, insn);
|
||||
((disas_proc)env->opcode_table[insn])(env, dc, insn);
|
||||
do_writebacks(dc);
|
||||
do_release(dc);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user