TCG: Use gen_opc_instr_start from context instead of global variable.
Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
c9c99c22d5
commit
ab1103def4
@ -3410,10 +3410,10 @@ static inline void gen_intermediate_code_internal(CPUAlphaState *env,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = ctx.pc;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO))
|
||||
@ -3468,7 +3468,7 @@ static inline void gen_intermediate_code_internal(CPUAlphaState *env,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
} else {
|
||||
tb->size = ctx.pc - pc_start;
|
||||
tb->icount = num_insns;
|
||||
|
@ -9838,11 +9838,11 @@ static inline void gen_intermediate_code_internal(CPUARMState *env,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
||||
gen_opc_condexec_bits[lj] = (dc->condexec_cond << 4) | (dc->condexec_mask >> 1);
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
|
||||
@ -9977,7 +9977,7 @@ done_generating:
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
} else {
|
||||
tb->size = dc->pc - pc_start;
|
||||
tb->icount = num_insns;
|
||||
|
@ -3301,7 +3301,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
}
|
||||
if (dc->delayed_branch == 1) {
|
||||
@ -3309,7 +3309,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb,
|
||||
} else {
|
||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
||||
}
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
|
||||
@ -3439,7 +3439,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
} else {
|
||||
tb->size = dc->pc - pc_start;
|
||||
|
@ -7988,11 +7988,11 @@ static inline void gen_intermediate_code_internal(CPUX86State *env,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = pc_ptr;
|
||||
gen_opc_cc_op[lj] = dc->cc_op;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO))
|
||||
@ -8037,7 +8037,7 @@ static inline void gen_intermediate_code_internal(CPUX86State *env,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_DISAS
|
||||
@ -8080,7 +8080,7 @@ void restore_state_to_opc(CPUX86State *env, TranslationBlock *tb, int pc_pos)
|
||||
int i;
|
||||
qemu_log("RESTORE:\n");
|
||||
for(i = 0;i <= pc_pos; i++) {
|
||||
if (gen_opc_instr_start[i]) {
|
||||
if (tcg_ctx.gen_opc_instr_start[i]) {
|
||||
qemu_log("0x%04x: " TARGET_FMT_lx "\n", i,
|
||||
tcg_ctx.gen_opc_pc[i]);
|
||||
}
|
||||
|
@ -1051,11 +1051,11 @@ static void gen_intermediate_code_internal(CPULM32State *env,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
|
||||
@ -1110,7 +1110,7 @@ static void gen_intermediate_code_internal(CPULM32State *env,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
} else {
|
||||
tb->size = dc->pc - pc_start;
|
||||
|
@ -3019,10 +3019,10 @@ gen_intermediate_code_internal(CPUM68KState *env, TranslationBlock *tb,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO))
|
||||
@ -3078,7 +3078,7 @@ gen_intermediate_code_internal(CPUM68KState *env, TranslationBlock *tb,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
} else {
|
||||
tb->size = dc->pc - pc_start;
|
||||
tb->icount = num_insns;
|
||||
|
@ -1788,10 +1788,10 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
|
||||
@ -1902,7 +1902,7 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
} else {
|
||||
tb->size = dc->pc - pc_start;
|
||||
tb->icount = num_insns;
|
||||
|
@ -15579,12 +15579,12 @@ gen_intermediate_code_internal (CPUMIPSState *env, TranslationBlock *tb,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = ctx.pc;
|
||||
gen_opc_hflags[lj] = ctx.hflags & MIPS_HFLAG_BMASK;
|
||||
gen_opc_btarget[lj] = ctx.btarget;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO))
|
||||
@ -15662,7 +15662,7 @@ done_generating:
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
} else {
|
||||
tb->size = ctx.pc - pc_start;
|
||||
tb->icount = num_insns;
|
||||
|
@ -1707,11 +1707,11 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||
if (k < j) {
|
||||
k++;
|
||||
while (k < j) {
|
||||
gen_opc_instr_start[k++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[k++] = 0;
|
||||
}
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[k] = dc->pc;
|
||||
gen_opc_instr_start[k] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[k] = 1;
|
||||
tcg_ctx.gen_opc_icount[k] = num_insns;
|
||||
}
|
||||
|
||||
@ -1787,7 +1787,7 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
k++;
|
||||
while (k <= j) {
|
||||
gen_opc_instr_start[k++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[k++] = 0;
|
||||
}
|
||||
} else {
|
||||
tb->size = dc->pc - pc_start;
|
||||
|
@ -9680,10 +9680,10 @@ static inline void gen_intermediate_code_internal(CPUPPCState *env,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = ctx.nip;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
LOG_DISAS("----------------\n");
|
||||
@ -9781,7 +9781,7 @@ static inline void gen_intermediate_code_internal(CPUPPCState *env,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
} else {
|
||||
tb->size = ctx.nip - pc_start;
|
||||
tb->icount = num_insns;
|
||||
|
@ -5160,12 +5160,12 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = dc.pc;
|
||||
gen_opc_cc_op[lj] = dc.cc_op;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO)) {
|
||||
@ -5212,7 +5212,7 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
} else {
|
||||
tb->size = dc.pc - pc_start;
|
||||
|
@ -2003,11 +2003,11 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,
|
||||
if (ii < i) {
|
||||
ii++;
|
||||
while (ii < i)
|
||||
gen_opc_instr_start[ii++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[ii++] = 0;
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[ii] = ctx.pc;
|
||||
gen_opc_hflags[ii] = ctx.flags;
|
||||
gen_opc_instr_start[ii] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[ii] = 1;
|
||||
tcg_ctx.gen_opc_icount[ii] = num_insns;
|
||||
}
|
||||
if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO))
|
||||
@ -2061,7 +2061,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,
|
||||
i = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
ii++;
|
||||
while (ii <= i)
|
||||
gen_opc_instr_start[ii++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[ii++] = 0;
|
||||
} else {
|
||||
tb->size = ctx.pc - pc_start;
|
||||
tb->icount = num_insns;
|
||||
|
@ -5283,10 +5283,10 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
||||
gen_opc_npc[lj] = dc->npc;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
}
|
||||
@ -5339,7 +5339,7 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb,
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
#if 0
|
||||
log_page_dump();
|
||||
#endif
|
||||
|
@ -2003,11 +2003,11 @@ static inline void gen_intermediate_code_internal(CPUUniCore32State *env,
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = dc->pc;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = num_insns;
|
||||
}
|
||||
|
||||
@ -2117,7 +2117,7 @@ done_generating:
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
} else {
|
||||
tb->size = dc->pc - pc_start;
|
||||
|
@ -2897,11 +2897,11 @@ static void gen_intermediate_code_internal(
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
tcg_ctx.gen_opc_instr_start[lj++] = 0;
|
||||
}
|
||||
}
|
||||
tcg_ctx.gen_opc_pc[lj] = dc.pc;
|
||||
gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_instr_start[lj] = 1;
|
||||
tcg_ctx.gen_opc_icount[lj] = insn_count;
|
||||
}
|
||||
|
||||
|
@ -146,8 +146,9 @@ int cpu_restore_state(TranslationBlock *tb,
|
||||
if (j < 0)
|
||||
return -1;
|
||||
/* now find start of instruction before */
|
||||
while (gen_opc_instr_start[j] == 0)
|
||||
while (s->gen_opc_instr_start[j] == 0) {
|
||||
j--;
|
||||
}
|
||||
env->icount_decr.u16.low -= s->gen_opc_icount[j];
|
||||
|
||||
restore_state_to_opc(env, tb, j);
|
||||
|
Loading…
Reference in New Issue
Block a user