Skip to content

Commit

Permalink
accel/tcg: move CF_CLUSTER calculation to curr_cflags
Browse files Browse the repository at this point in the history
There is nothing special about this compile flag that doesn't mean we
can't just compute it with curr_cflags() which we should be using when
building a new set.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210224165811.11567-3-alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
  • Loading branch information
stsquad authored and rth7680 committed Mar 6, 2021
1 parent 6f04cb1 commit c0ae396
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 16 deletions.
9 changes: 4 additions & 5 deletions accel/tcg/cpu-exec.c
Expand Up @@ -249,8 +249,7 @@ void cpu_exec_step_atomic(CPUState *cpu)
TranslationBlock *tb;
target_ulong cs_base, pc;
uint32_t flags;
uint32_t cflags = 1;
uint32_t cf_mask = cflags & CF_HASH_MASK;
uint32_t cflags = (curr_cflags(cpu) & ~CF_PARALLEL) | 1;
int tb_exit;

if (sigsetjmp(cpu->jmp_env, 0) == 0) {
Expand All @@ -260,7 +259,7 @@ void cpu_exec_step_atomic(CPUState *cpu)
cpu->running = true;

cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags);
tb = tb_lookup(cpu, pc, cs_base, flags, cf_mask);
tb = tb_lookup(cpu, pc, cs_base, flags, cflags);

if (tb == NULL) {
mmap_lock();
Expand Down Expand Up @@ -497,7 +496,7 @@ static inline bool cpu_handle_exception(CPUState *cpu, int *ret)
if (replay_has_exception()
&& cpu_neg(cpu)->icount_decr.u16.low + cpu->icount_extra == 0) {
/* Execute just one insn to trigger exception pending in the log */
cpu->cflags_next_tb = (curr_cflags() & ~CF_USE_ICOUNT) | 1;
cpu->cflags_next_tb = (curr_cflags(cpu) & ~CF_USE_ICOUNT) | 1;
}
#endif
return false;
Expand Down Expand Up @@ -794,7 +793,7 @@ int cpu_exec(CPUState *cpu)
have CF_INVALID set, -1 is a convenient invalid value that
does not require tcg headers for cpu_common_reset. */
if (cflags == -1) {
cflags = curr_cflags();
cflags = curr_cflags(cpu);
} else {
cpu->cflags_next_tb = -1;
}
Expand Down
2 changes: 1 addition & 1 deletion accel/tcg/tcg-runtime.c
Expand Up @@ -154,7 +154,7 @@ const void *HELPER(lookup_tb_ptr)(CPUArchState *env)

cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags);

tb = tb_lookup(cpu, pc, cs_base, flags, curr_cflags());
tb = tb_lookup(cpu, pc, cs_base, flags, curr_cflags(cpu));
if (tb == NULL) {
return tcg_code_gen_epilogue;
}
Expand Down
6 changes: 3 additions & 3 deletions accel/tcg/translate-all.c
Expand Up @@ -2194,7 +2194,7 @@ tb_invalidate_phys_page_range__locked(struct page_collection *pages,
if (current_tb_modified) {
page_collection_unlock(pages);
/* Force execution of one insn next time. */
cpu->cflags_next_tb = 1 | curr_cflags();
cpu->cflags_next_tb = 1 | curr_cflags(cpu);
mmap_unlock();
cpu_loop_exit_noexc(cpu);
}
Expand Down Expand Up @@ -2362,7 +2362,7 @@ static bool tb_invalidate_phys_page(tb_page_addr_t addr, uintptr_t pc)
#ifdef TARGET_HAS_PRECISE_SMC
if (current_tb_modified) {
/* Force execution of one insn next time. */
cpu->cflags_next_tb = 1 | curr_cflags();
cpu->cflags_next_tb = 1 | curr_cflags(cpu);
return true;
}
#endif
Expand Down Expand Up @@ -2438,7 +2438,7 @@ void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr)
* operations only (which execute after completion) so we don't
* double instrument the instruction.
*/
cpu->cflags_next_tb = curr_cflags() | CF_MEMI_ONLY | CF_LAST_IO | n;
cpu->cflags_next_tb = curr_cflags(cpu) | CF_MEMI_ONLY | CF_LAST_IO | n;

qemu_log_mask_and_addr(CPU_LOG_EXEC, tb->pc,
"cpu_io_recompile: rewound execution of TB to "
Expand Down
8 changes: 5 additions & 3 deletions include/exec/exec-all.h
Expand Up @@ -519,10 +519,12 @@ static inline uint32_t tb_cflags(const TranslationBlock *tb)
}

/* current cflags for hashing/comparison */
static inline uint32_t curr_cflags(void)
static inline uint32_t curr_cflags(CPUState *cpu)
{
return (parallel_cpus ? CF_PARALLEL : 0)
| (icount_enabled() ? CF_USE_ICOUNT : 0);
uint32_t cflags = deposit32(0, CF_CLUSTER_SHIFT, 8, cpu->cluster_index);
cflags |= parallel_cpus ? CF_PARALLEL : 0;
cflags |= icount_enabled() ? CF_USE_ICOUNT : 0;
return cflags;
}

/* TranslationBlock invalidate API */
Expand Down
3 changes: 0 additions & 3 deletions include/exec/tb-lookup.h
Expand Up @@ -27,9 +27,6 @@ static inline TranslationBlock *tb_lookup(CPUState *cpu, target_ulong pc,
hash = tb_jmp_cache_hash_func(pc);
tb = qatomic_rcu_read(&cpu->tb_jmp_cache[hash]);

cf_mask &= ~CF_CLUSTER_MASK;
cf_mask |= cpu->cluster_index << CF_CLUSTER_SHIFT;

if (likely(tb &&
tb->pc == pc &&
tb->cs_base == cs_base &&
Expand Down
2 changes: 1 addition & 1 deletion softmmu/physmem.c
Expand Up @@ -937,7 +937,7 @@ void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len,
cpu_loop_exit_restore(cpu, ra);
} else {
/* Force execution of one insn next time. */
cpu->cflags_next_tb = 1 | curr_cflags();
cpu->cflags_next_tb = 1 | curr_cflags(cpu);
mmap_unlock();
if (ra) {
cpu_restore_state(cpu, ra, true);
Expand Down

0 comments on commit c0ae396

Please sign in to comment.