mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 05:20:50 +00:00
TCG: Use gen_opc_buf from context instead of global variable.
Signed-off-by: Evgeny Voevodin <e.voevodin@samsung.com> Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
parent
c4afe5c4d3
commit
92414b31e7
@ -3373,7 +3373,7 @@ static inline void gen_intermediate_code_internal(CPUAlphaState *env,
|
||||
int max_insns;
|
||||
|
||||
pc_start = tb->pc;
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
ctx.tb = tb;
|
||||
ctx.env = env;
|
||||
@ -3406,7 +3406,7 @@ static inline void gen_intermediate_code_internal(CPUAlphaState *env,
|
||||
}
|
||||
}
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -3465,7 +3465,7 @@ static inline void gen_intermediate_code_internal(CPUAlphaState *env,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -9727,7 +9727,7 @@ static inline void gen_intermediate_code_internal(CPUARMState *env,
|
||||
|
||||
dc->tb = tb;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
dc->pc = pc_start;
|
||||
@ -9834,7 +9834,7 @@ static inline void gen_intermediate_code_internal(CPUARMState *env,
|
||||
}
|
||||
}
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -9974,7 +9974,7 @@ done_generating:
|
||||
}
|
||||
#endif
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -3232,7 +3232,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb,
|
||||
dc->env = env;
|
||||
dc->tb = tb;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
dc->ppc = pc_start;
|
||||
@ -3297,7 +3297,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb,
|
||||
check_breakpoint(env, dc);
|
||||
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
@ -3436,7 +3436,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
@ -3452,7 +3452,7 @@ gen_intermediate_code_internal(CPUCRISState *env, TranslationBlock *tb,
|
||||
log_target_disas(env, pc_start, dc->pc - pc_start,
|
||||
dc->env->pregs[PR_VR]);
|
||||
qemu_log("\nisize=%d osize=%td\n",
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr - gen_opc_buf);
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -7962,7 +7962,7 @@ static inline void gen_intermediate_code_internal(CPUX86State *env,
|
||||
cpu_ptr0 = tcg_temp_new_ptr();
|
||||
cpu_ptr1 = tcg_temp_new_ptr();
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
pc_ptr = pc_start;
|
||||
@ -7984,7 +7984,7 @@ static inline void gen_intermediate_code_internal(CPUX86State *env,
|
||||
}
|
||||
}
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -8034,7 +8034,7 @@ static inline void gen_intermediate_code_internal(CPUX86State *env,
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
/* we don't forget to fill the last values */
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -1018,7 +1018,7 @@ static void gen_intermediate_code_internal(CPULM32State *env,
|
||||
dc->env = env;
|
||||
dc->tb = tb;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
dc->pc = pc_start;
|
||||
@ -1047,7 +1047,7 @@ static void gen_intermediate_code_internal(CPULM32State *env,
|
||||
check_breakpoint(env, dc);
|
||||
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
@ -1107,7 +1107,7 @@ static void gen_intermediate_code_internal(CPULM32State *env,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
@ -1122,7 +1122,8 @@ static void gen_intermediate_code_internal(CPULM32State *env,
|
||||
qemu_log("\n");
|
||||
log_target_disas(env, pc_start, dc->pc - pc_start, 0);
|
||||
qemu_log("\nisize=%d osize=%td\n",
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr - gen_opc_buf);
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr -
|
||||
tcg_ctx.gen_opc_buf);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -2982,7 +2982,7 @@ gen_intermediate_code_internal(CPUM68KState *env, TranslationBlock *tb,
|
||||
|
||||
dc->tb = tb;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
dc->env = env;
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
@ -3015,7 +3015,7 @@ gen_intermediate_code_internal(CPUM68KState *env, TranslationBlock *tb,
|
||||
break;
|
||||
}
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -3075,7 +3075,7 @@ gen_intermediate_code_internal(CPUM68KState *env, TranslationBlock *tb,
|
||||
}
|
||||
#endif
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -1741,7 +1741,7 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb,
|
||||
dc->tb = tb;
|
||||
org_flags = dc->synced_flags = dc->tb_flags = tb->flags;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
dc->jmp = 0;
|
||||
@ -1784,7 +1784,7 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb,
|
||||
check_breakpoint(env, dc);
|
||||
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -1899,7 +1899,7 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
@ -1916,7 +1916,8 @@ gen_intermediate_code_internal(CPUMBState *env, TranslationBlock *tb,
|
||||
log_target_disas(env, pc_start, dc->pc - pc_start, 0);
|
||||
#endif
|
||||
qemu_log("\nisize=%d osize=%td\n",
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr - gen_opc_buf);
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr -
|
||||
tcg_ctx.gen_opc_buf);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -15513,7 +15513,7 @@ gen_intermediate_code_internal (CPUMIPSState *env, TranslationBlock *tb,
|
||||
qemu_log("search pc %d\n", search_pc);
|
||||
|
||||
pc_start = tb->pc;
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
ctx.pc = pc_start;
|
||||
ctx.saved_pc = -1;
|
||||
ctx.singlestep_enabled = env->singlestep_enabled;
|
||||
@ -15549,7 +15549,7 @@ gen_intermediate_code_internal (CPUMIPSState *env, TranslationBlock *tb,
|
||||
}
|
||||
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -15633,7 +15633,7 @@ done_generating:
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -1675,7 +1675,7 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||
pc_start = tb->pc;
|
||||
dc->tb = tb;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
dc->ppc = pc_start;
|
||||
dc->pc = pc_start;
|
||||
@ -1703,7 +1703,7 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||
do {
|
||||
check_breakpoint(cpu, dc);
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (k < j) {
|
||||
k++;
|
||||
while (k < j) {
|
||||
@ -1784,7 +1784,7 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
k++;
|
||||
while (k <= j) {
|
||||
gen_opc_instr_start[k++] = 0;
|
||||
@ -1799,7 +1799,8 @@ static inline void gen_intermediate_code_internal(OpenRISCCPU *cpu,
|
||||
qemu_log("\n");
|
||||
log_target_disas(&cpu->env, pc_start, dc->pc - pc_start, 0);
|
||||
qemu_log("\nisize=%d osize=%td\n",
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr - gen_opc_buf);
|
||||
dc->pc - pc_start, tcg_ctx.gen_opc_ptr -
|
||||
tcg_ctx.gen_opc_buf);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -9624,7 +9624,7 @@ static inline void gen_intermediate_code_internal(CPUPPCState *env,
|
||||
int max_insns;
|
||||
|
||||
pc_start = tb->pc;
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
ctx.nip = pc_start;
|
||||
ctx.tb = tb;
|
||||
ctx.exception = POWERPC_EXCP_NONE;
|
||||
@ -9675,7 +9675,7 @@ static inline void gen_intermediate_code_internal(CPUPPCState *env,
|
||||
}
|
||||
}
|
||||
if (unlikely(search_pc)) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -9777,7 +9777,7 @@ static inline void gen_intermediate_code_internal(CPUPPCState *env,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (unlikely(search_pc)) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -5134,7 +5134,7 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env,
|
||||
dc.tb = tb;
|
||||
dc.cc_op = CC_OP_DYNAMIC;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
next_page_start = (pc_start & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE;
|
||||
|
||||
@ -5156,7 +5156,7 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env,
|
||||
}
|
||||
}
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
@ -5209,7 +5209,7 @@ static inline void gen_intermediate_code_internal(CPUS390XState *env,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -1967,7 +1967,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,
|
||||
int max_insns;
|
||||
|
||||
pc_start = tb->pc;
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
ctx.pc = pc_start;
|
||||
ctx.flags = (uint32_t)tb->flags;
|
||||
ctx.bstate = BS_NONE;
|
||||
@ -1999,7 +1999,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,
|
||||
}
|
||||
}
|
||||
if (search_pc) {
|
||||
i = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
i = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (ii < i) {
|
||||
ii++;
|
||||
while (ii < i)
|
||||
@ -2058,7 +2058,7 @@ gen_intermediate_code_internal(CPUSH4State * env, TranslationBlock * tb,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (search_pc) {
|
||||
i = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
i = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
ii++;
|
||||
while (ii <= i)
|
||||
gen_opc_instr_start[ii++] = 0;
|
||||
|
@ -5257,7 +5257,7 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb,
|
||||
dc->fpu_enabled = tb_fpu_enabled(tb->flags);
|
||||
dc->address_mask_32bit = tb_am_enabled(tb->flags);
|
||||
dc->singlestep = (env->singlestep_enabled || singlestep);
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
num_insns = 0;
|
||||
max_insns = tb->cflags & CF_COUNT_MASK;
|
||||
@ -5279,7 +5279,7 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb,
|
||||
}
|
||||
if (spc) {
|
||||
qemu_log("Search PC...\n");
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j)
|
||||
@ -5336,7 +5336,7 @@ static inline void gen_intermediate_code_internal(TranslationBlock * tb,
|
||||
gen_icount_end(tb, num_insns);
|
||||
*tcg_ctx.gen_opc_ptr = INDEX_op_end;
|
||||
if (spc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j)
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -1956,7 +1956,7 @@ static inline void gen_intermediate_code_internal(CPUUniCore32State *env,
|
||||
|
||||
dc->tb = tb;
|
||||
|
||||
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
|
||||
dc->is_jmp = DISAS_NEXT;
|
||||
dc->pc = pc_start;
|
||||
@ -1999,7 +1999,7 @@ static inline void gen_intermediate_code_internal(CPUUniCore32State *env,
|
||||
}
|
||||
}
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
@ -2114,7 +2114,7 @@ done_generating:
|
||||
}
|
||||
#endif
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
lj++;
|
||||
while (lj <= j) {
|
||||
gen_opc_instr_start[lj++] = 0;
|
||||
|
@ -2849,7 +2849,7 @@ static void gen_intermediate_code_internal(
|
||||
DisasContext dc;
|
||||
int insn_count = 0;
|
||||
int j, lj = -1;
|
||||
uint16_t *gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
|
||||
uint16_t *gen_opc_end = tcg_ctx.gen_opc_buf + OPC_MAX_SIZE;
|
||||
int max_insns = tb->cflags & CF_COUNT_MASK;
|
||||
uint32_t pc_start = tb->pc;
|
||||
uint32_t next_page_start =
|
||||
@ -2893,7 +2893,7 @@ static void gen_intermediate_code_internal(
|
||||
check_breakpoint(env, &dc);
|
||||
|
||||
if (search_pc) {
|
||||
j = tcg_ctx.gen_opc_ptr - gen_opc_buf;
|
||||
j = tcg_ctx.gen_opc_ptr - tcg_ctx.gen_opc_buf;
|
||||
if (lj < j) {
|
||||
lj++;
|
||||
while (lj < j) {
|
||||
|
@ -484,10 +484,10 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
nb_globals = s->nb_globals;
|
||||
memset(temps, 0, nb_temps * sizeof(struct tcg_temp_info));
|
||||
|
||||
nb_ops = tcg_opc_ptr - gen_opc_buf;
|
||||
nb_ops = tcg_opc_ptr - s->gen_opc_buf;
|
||||
gen_args = args;
|
||||
for (op_index = 0; op_index < nb_ops; op_index++) {
|
||||
op = gen_opc_buf[op_index];
|
||||
op = s->gen_opc_buf[op_index];
|
||||
def = &tcg_op_defs[op];
|
||||
/* Do copy propagation */
|
||||
if (op == INDEX_op_call) {
|
||||
@ -569,7 +569,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(rotr):
|
||||
if (temps[args[1]].state == TCG_TEMP_CONST
|
||||
&& temps[args[1]].val == 0) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tcg_opt_gen_movi(gen_args, args[0], 0);
|
||||
args += 3;
|
||||
gen_args += 2;
|
||||
@ -598,9 +598,9 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
if (temps[args[2]].state == TCG_TEMP_CONST
|
||||
&& temps[args[2]].val == 0) {
|
||||
if (temps_are_copies(args[0], args[1])) {
|
||||
gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
} else {
|
||||
gen_opc_buf[op_index] = op_to_mov(op);
|
||||
s->gen_opc_buf[op_index] = op_to_mov(op);
|
||||
tcg_opt_gen_mov(s, gen_args, args[0], args[1]);
|
||||
gen_args += 2;
|
||||
}
|
||||
@ -618,7 +618,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(mul):
|
||||
if ((temps[args[2]].state == TCG_TEMP_CONST
|
||||
&& temps[args[2]].val == 0)) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tcg_opt_gen_movi(gen_args, args[0], 0);
|
||||
args += 3;
|
||||
gen_args += 2;
|
||||
@ -635,9 +635,9 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(and):
|
||||
if (temps_are_copies(args[1], args[2])) {
|
||||
if (temps_are_copies(args[0], args[1])) {
|
||||
gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
} else {
|
||||
gen_opc_buf[op_index] = op_to_mov(op);
|
||||
s->gen_opc_buf[op_index] = op_to_mov(op);
|
||||
tcg_opt_gen_mov(s, gen_args, args[0], args[1]);
|
||||
gen_args += 2;
|
||||
}
|
||||
@ -654,7 +654,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(sub):
|
||||
CASE_OP_32_64(xor):
|
||||
if (temps_are_copies(args[1], args[2])) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tcg_opt_gen_movi(gen_args, args[0], 0);
|
||||
gen_args += 2;
|
||||
args += 3;
|
||||
@ -672,7 +672,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(mov):
|
||||
if (temps_are_copies(args[0], args[1])) {
|
||||
args += 2;
|
||||
gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
break;
|
||||
}
|
||||
if (temps[args[1]].state != TCG_TEMP_CONST) {
|
||||
@ -684,7 +684,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
/* Source argument is constant. Rewrite the operation and
|
||||
let movi case handle it. */
|
||||
op = op_to_movi(op);
|
||||
gen_opc_buf[op_index] = op;
|
||||
s->gen_opc_buf[op_index] = op;
|
||||
args[1] = temps[args[1]].val;
|
||||
/* fallthrough */
|
||||
CASE_OP_32_64(movi):
|
||||
@ -702,7 +702,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
case INDEX_op_ext32s_i64:
|
||||
case INDEX_op_ext32u_i64:
|
||||
if (temps[args[1]].state == TCG_TEMP_CONST) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tmp = do_constant_folding(op, temps[args[1]].val, 0);
|
||||
tcg_opt_gen_movi(gen_args, args[0], tmp);
|
||||
gen_args += 2;
|
||||
@ -729,7 +729,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(nor):
|
||||
if (temps[args[1]].state == TCG_TEMP_CONST
|
||||
&& temps[args[2]].state == TCG_TEMP_CONST) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tmp = do_constant_folding(op, temps[args[1]].val,
|
||||
temps[args[2]].val);
|
||||
tcg_opt_gen_movi(gen_args, args[0], tmp);
|
||||
@ -742,7 +742,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(deposit):
|
||||
if (temps[args[1]].state == TCG_TEMP_CONST
|
||||
&& temps[args[2]].state == TCG_TEMP_CONST) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tmp = ((1ull << args[4]) - 1);
|
||||
tmp = (temps[args[1]].val & ~(tmp << args[3]))
|
||||
| ((temps[args[2]].val & tmp) << args[3]);
|
||||
@ -756,7 +756,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
CASE_OP_32_64(setcond):
|
||||
tmp = do_constant_folding_cond(op, args[1], args[2], args[3]);
|
||||
if (tmp != 2) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tcg_opt_gen_movi(gen_args, args[0], tmp);
|
||||
gen_args += 2;
|
||||
args += 4;
|
||||
@ -769,11 +769,11 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
if (tmp != 2) {
|
||||
if (tmp) {
|
||||
memset(temps, 0, nb_temps * sizeof(struct tcg_temp_info));
|
||||
gen_opc_buf[op_index] = INDEX_op_br;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_br;
|
||||
gen_args[0] = args[3];
|
||||
gen_args += 1;
|
||||
} else {
|
||||
gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
}
|
||||
args += 4;
|
||||
break;
|
||||
@ -784,13 +784,13 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
tmp = do_constant_folding_cond(op, args[1], args[2], args[5]);
|
||||
if (tmp != 2) {
|
||||
if (temps_are_copies(args[0], args[4-tmp])) {
|
||||
gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
} else if (temps[args[4-tmp]].state == TCG_TEMP_CONST) {
|
||||
gen_opc_buf[op_index] = op_to_movi(op);
|
||||
s->gen_opc_buf[op_index] = op_to_movi(op);
|
||||
tcg_opt_gen_movi(gen_args, args[0], temps[args[4-tmp]].val);
|
||||
gen_args += 2;
|
||||
} else {
|
||||
gen_opc_buf[op_index] = op_to_mov(op);
|
||||
s->gen_opc_buf[op_index] = op_to_mov(op);
|
||||
tcg_opt_gen_mov(s, gen_args, args[0], args[4-tmp]);
|
||||
gen_args += 2;
|
||||
}
|
||||
@ -820,12 +820,12 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
}
|
||||
|
||||
/* We emit the extra nop when we emit the add2/sub2. */
|
||||
assert(gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
assert(s->gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
|
||||
rl = args[0];
|
||||
rh = args[1];
|
||||
gen_opc_buf[op_index] = INDEX_op_movi_i32;
|
||||
gen_opc_buf[++op_index] = INDEX_op_movi_i32;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_movi_i32;
|
||||
s->gen_opc_buf[++op_index] = INDEX_op_movi_i32;
|
||||
tcg_opt_gen_movi(&gen_args[0], rl, (uint32_t)a);
|
||||
tcg_opt_gen_movi(&gen_args[2], rh, (uint32_t)(a >> 32));
|
||||
gen_args += 4;
|
||||
@ -843,12 +843,12 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
TCGArg rl, rh;
|
||||
|
||||
/* We emit the extra nop when we emit the mulu2. */
|
||||
assert(gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
assert(s->gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
|
||||
rl = args[0];
|
||||
rh = args[1];
|
||||
gen_opc_buf[op_index] = INDEX_op_movi_i32;
|
||||
gen_opc_buf[++op_index] = INDEX_op_movi_i32;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_movi_i32;
|
||||
s->gen_opc_buf[++op_index] = INDEX_op_movi_i32;
|
||||
tcg_opt_gen_movi(&gen_args[0], rl, (uint32_t)r);
|
||||
tcg_opt_gen_movi(&gen_args[2], rh, (uint32_t)(r >> 32));
|
||||
gen_args += 4;
|
||||
@ -862,11 +862,11 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
if (tmp != 2) {
|
||||
if (tmp) {
|
||||
memset(temps, 0, nb_temps * sizeof(struct tcg_temp_info));
|
||||
gen_opc_buf[op_index] = INDEX_op_br;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_br;
|
||||
gen_args[0] = args[5];
|
||||
gen_args += 1;
|
||||
} else {
|
||||
gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_nop;
|
||||
}
|
||||
} else if ((args[4] == TCG_COND_LT || args[4] == TCG_COND_GE)
|
||||
&& temps[args[2]].state == TCG_TEMP_CONST
|
||||
@ -876,7 +876,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
/* Simplify LT/GE comparisons vs zero to a single compare
|
||||
vs the high word of the input. */
|
||||
memset(temps, 0, nb_temps * sizeof(struct tcg_temp_info));
|
||||
gen_opc_buf[op_index] = INDEX_op_brcond_i32;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_brcond_i32;
|
||||
gen_args[0] = args[1];
|
||||
gen_args[1] = args[3];
|
||||
gen_args[2] = args[4];
|
||||
@ -891,7 +891,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
case INDEX_op_setcond2_i32:
|
||||
tmp = do_constant_folding_cond2(&args[1], &args[3], args[5]);
|
||||
if (tmp != 2) {
|
||||
gen_opc_buf[op_index] = INDEX_op_movi_i32;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_movi_i32;
|
||||
tcg_opt_gen_movi(gen_args, args[0], tmp);
|
||||
gen_args += 2;
|
||||
} else if ((args[5] == TCG_COND_LT || args[5] == TCG_COND_GE)
|
||||
@ -901,7 +901,7 @@ static TCGArg *tcg_constant_folding(TCGContext *s, uint16_t *tcg_opc_ptr,
|
||||
&& temps[args[4]].val == 0) {
|
||||
/* Simplify LT/GE comparisons vs zero to a single compare
|
||||
vs the high word of the input. */
|
||||
gen_opc_buf[op_index] = INDEX_op_setcond_i32;
|
||||
s->gen_opc_buf[op_index] = INDEX_op_setcond_i32;
|
||||
gen_args[0] = args[0];
|
||||
gen_args[1] = args[2];
|
||||
gen_args[2] = args[4];
|
||||
|
30
tcg/tcg.c
30
tcg/tcg.c
@ -297,7 +297,7 @@ void tcg_func_start(TCGContext *s)
|
||||
s->goto_tb_issue_mask = 0;
|
||||
#endif
|
||||
|
||||
s->gen_opc_ptr = gen_opc_buf;
|
||||
s->gen_opc_ptr = s->gen_opc_buf;
|
||||
s->gen_opparam_ptr = gen_opparam_buf;
|
||||
|
||||
#if defined(CONFIG_QEMU_LDST_OPTIMIZATION) && defined(CONFIG_SOFTMMU)
|
||||
@ -896,7 +896,7 @@ void tcg_dump_ops(TCGContext *s)
|
||||
char buf[128];
|
||||
|
||||
first_insn = 1;
|
||||
opc_ptr = gen_opc_buf;
|
||||
opc_ptr = s->gen_opc_buf;
|
||||
args = gen_opparam_buf;
|
||||
while (opc_ptr < s->gen_opc_ptr) {
|
||||
c = *opc_ptr++;
|
||||
@ -1231,7 +1231,7 @@ static void tcg_liveness_analysis(TCGContext *s)
|
||||
|
||||
s->gen_opc_ptr++; /* skip end */
|
||||
|
||||
nb_ops = s->gen_opc_ptr - gen_opc_buf;
|
||||
nb_ops = s->gen_opc_ptr - s->gen_opc_buf;
|
||||
|
||||
s->op_dead_args = tcg_malloc(nb_ops * sizeof(uint16_t));
|
||||
s->op_sync_args = tcg_malloc(nb_ops * sizeof(uint8_t));
|
||||
@ -1243,7 +1243,7 @@ static void tcg_liveness_analysis(TCGContext *s)
|
||||
args = s->gen_opparam_ptr;
|
||||
op_index = nb_ops - 1;
|
||||
while (op_index >= 0) {
|
||||
op = gen_opc_buf[op_index];
|
||||
op = s->gen_opc_buf[op_index];
|
||||
def = &tcg_op_defs[op];
|
||||
switch(op) {
|
||||
case INDEX_op_call:
|
||||
@ -1266,7 +1266,7 @@ static void tcg_liveness_analysis(TCGContext *s)
|
||||
goto do_not_remove_call;
|
||||
}
|
||||
}
|
||||
tcg_set_nop(s, gen_opc_buf + op_index,
|
||||
tcg_set_nop(s, s->gen_opc_buf + op_index,
|
||||
args - 1, nb_args);
|
||||
} else {
|
||||
do_not_remove_call:
|
||||
@ -1347,11 +1347,11 @@ static void tcg_liveness_analysis(TCGContext *s)
|
||||
} else {
|
||||
op = INDEX_op_sub_i32;
|
||||
}
|
||||
gen_opc_buf[op_index] = op;
|
||||
s->gen_opc_buf[op_index] = op;
|
||||
args[1] = args[2];
|
||||
args[2] = args[4];
|
||||
assert(gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
tcg_set_nop(s, gen_opc_buf + op_index + 1, args + 3, 3);
|
||||
assert(s->gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
tcg_set_nop(s, s->gen_opc_buf + op_index + 1, args + 3, 3);
|
||||
/* Fall through and mark the single-word operation live. */
|
||||
nb_iargs = 2;
|
||||
nb_oargs = 1;
|
||||
@ -1367,11 +1367,11 @@ static void tcg_liveness_analysis(TCGContext *s)
|
||||
if (dead_temps[args[0]] && !mem_temps[args[0]]) {
|
||||
goto do_remove;
|
||||
}
|
||||
gen_opc_buf[op_index] = op = INDEX_op_mul_i32;
|
||||
s->gen_opc_buf[op_index] = op = INDEX_op_mul_i32;
|
||||
args[1] = args[2];
|
||||
args[2] = args[3];
|
||||
assert(gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
tcg_set_nop(s, gen_opc_buf + op_index + 1, args + 3, 1);
|
||||
assert(s->gen_opc_buf[op_index + 1] == INDEX_op_nop);
|
||||
tcg_set_nop(s, s->gen_opc_buf + op_index + 1, args + 3, 1);
|
||||
/* Fall through and mark the single-word operation live. */
|
||||
nb_oargs = 1;
|
||||
}
|
||||
@ -1394,7 +1394,7 @@ static void tcg_liveness_analysis(TCGContext *s)
|
||||
}
|
||||
}
|
||||
do_remove:
|
||||
tcg_set_nop(s, gen_opc_buf + op_index, args, def->nb_args);
|
||||
tcg_set_nop(s, s->gen_opc_buf + op_index, args, def->nb_args);
|
||||
#ifdef CONFIG_PROFILER
|
||||
s->del_op_count++;
|
||||
#endif
|
||||
@ -1448,7 +1448,7 @@ static void tcg_liveness_analysis(TCGContext *s)
|
||||
static void tcg_liveness_analysis(TCGContext *s)
|
||||
{
|
||||
int nb_ops;
|
||||
nb_ops = s->gen_opc_ptr - gen_opc_buf;
|
||||
nb_ops = s->gen_opc_ptr - s->gen_opc_buf;
|
||||
|
||||
s->op_dead_args = tcg_malloc(nb_ops * sizeof(uint16_t));
|
||||
memset(s->op_dead_args, 0, nb_ops * sizeof(uint16_t));
|
||||
@ -2253,7 +2253,7 @@ static inline int tcg_gen_code_common(TCGContext *s, uint8_t *gen_code_buf,
|
||||
op_index = 0;
|
||||
|
||||
for(;;) {
|
||||
opc = gen_opc_buf[op_index];
|
||||
opc = s->gen_opc_buf[op_index];
|
||||
#ifdef CONFIG_PROFILER
|
||||
tcg_table_op_count[opc]++;
|
||||
#endif
|
||||
@ -2334,7 +2334,7 @@ int tcg_gen_code(TCGContext *s, uint8_t *gen_code_buf)
|
||||
#ifdef CONFIG_PROFILER
|
||||
{
|
||||
int n;
|
||||
n = (s->gen_opc_ptr - gen_opc_buf);
|
||||
n = (s->gen_opc_ptr - s->gen_opc_buf);
|
||||
s->op_count += n;
|
||||
if (n > s->op_count_max)
|
||||
s->op_count_max = n;
|
||||
|
Loading…
Reference in New Issue
Block a user