On Fri, Aug 19, 2022 at 1:33 PM Richard Henderson <richard.hender...@linaro.org> wrote: > > The function is not used outside of cpu-exec.c. Move it and > its subroutines up in the file, before the first use. > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > include/exec/exec-all.h | 3 - > accel/tcg/cpu-exec.c | 122 ++++++++++++++++++++-------------------- > 2 files changed, 61 insertions(+), 64 deletions(-) > > diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h > index 0475ec6007..9f35e3b7a9 100644 > --- a/include/exec/exec-all.h > +++ b/include/exec/exec-all.h > @@ -552,9 +552,6 @@ void tb_invalidate_phys_addr(AddressSpace *as, hwaddr > addr, MemTxAttrs attrs); > #endif > void tb_flush(CPUState *cpu); > void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr); > -TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc, > - target_ulong cs_base, uint32_t flags, > - uint32_t cflags); > void tb_set_jmp_target(TranslationBlock *tb, int n, uintptr_t addr); > > /* GETPC is the true target of the return instruction that we'll execute. */ > diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c > index d18081ca6f..7887af6f45 100644 > --- a/accel/tcg/cpu-exec.c > +++ b/accel/tcg/cpu-exec.c > @@ -170,6 +170,67 @@ uint32_t curr_cflags(CPUState *cpu) > return cflags; > } > > +struct tb_desc { > + target_ulong pc; > + target_ulong cs_base; > + CPUArchState *env; > + tb_page_addr_t phys_page1; > + uint32_t flags; > + uint32_t cflags; > + uint32_t trace_vcpu_dstate; > +}; > + > +static bool tb_lookup_cmp(const void *p, const void *d) > +{ > + const TranslationBlock *tb = p; > + const struct tb_desc *desc = d; > + > + if (tb->pc == desc->pc && > + tb->page_addr[0] == desc->phys_page1 && > + tb->cs_base == desc->cs_base && > + tb->flags == desc->flags && > + tb->trace_vcpu_dstate == desc->trace_vcpu_dstate && > + tb_cflags(tb) == desc->cflags) { > + /* check next page if needed */ > + if (tb->page_addr[1] == -1) { > + return true; > + } else { > + tb_page_addr_t phys_page2; > + target_ulong virt_page2; > + > + virt_page2 = (desc->pc & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > + phys_page2 = get_page_addr_code(desc->env, virt_page2); > + if (tb->page_addr[1] == phys_page2) { > + return true; > + } > + } > + } > + return false; > +} > + > +static TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc, > + target_ulong cs_base, uint32_t > flags, > + uint32_t cflags) > +{ > + tb_page_addr_t phys_pc; > + struct tb_desc desc; > + uint32_t h; > + > + desc.env = cpu->env_ptr; > + desc.cs_base = cs_base; > + desc.flags = flags; > + desc.cflags = cflags; > + desc.trace_vcpu_dstate = *cpu->trace_dstate; > + desc.pc = pc; > + phys_pc = get_page_addr_code(desc.env, pc); > + if (phys_pc == -1) { > + return NULL; > + } > + desc.phys_page1 = phys_pc & TARGET_PAGE_MASK; > + h = tb_hash_func(phys_pc, pc, flags, cflags, *cpu->trace_dstate); > + return qht_lookup_custom(&tb_ctx.htable, &desc, h, tb_lookup_cmp); > +} > + > /* Might cause an exception, so have a longjmp destination ready */ > static inline TranslationBlock *tb_lookup(CPUState *cpu, target_ulong pc, > target_ulong cs_base, > @@ -485,67 +546,6 @@ void cpu_exec_step_atomic(CPUState *cpu) > end_exclusive(); > } > > -struct tb_desc { > - target_ulong pc; > - target_ulong cs_base; > - CPUArchState *env; > - tb_page_addr_t phys_page1; > - uint32_t flags; > - uint32_t cflags; > - uint32_t trace_vcpu_dstate; > -}; > - > -static bool tb_lookup_cmp(const void *p, const void *d) > -{ > - const TranslationBlock *tb = p; > - const struct tb_desc *desc = d; > - > - if (tb->pc == desc->pc && > - tb->page_addr[0] == desc->phys_page1 && > - tb->cs_base == desc->cs_base && > - tb->flags == desc->flags && > - tb->trace_vcpu_dstate == desc->trace_vcpu_dstate && > - tb_cflags(tb) == desc->cflags) { > - /* check next page if needed */ > - if (tb->page_addr[1] == -1) { > - return true; > - } else { > - tb_page_addr_t phys_page2; > - target_ulong virt_page2; > - > - virt_page2 = (desc->pc & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE; > - phys_page2 = get_page_addr_code(desc->env, virt_page2); > - if (tb->page_addr[1] == phys_page2) { > - return true; > - } > - } > - } > - return false; > -} > - > -TranslationBlock *tb_htable_lookup(CPUState *cpu, target_ulong pc, > - target_ulong cs_base, uint32_t flags, > - uint32_t cflags) > -{ > - tb_page_addr_t phys_pc; > - struct tb_desc desc; > - uint32_t h; > - > - desc.env = cpu->env_ptr; > - desc.cs_base = cs_base; > - desc.flags = flags; > - desc.cflags = cflags; > - desc.trace_vcpu_dstate = *cpu->trace_dstate; > - desc.pc = pc; > - phys_pc = get_page_addr_code(desc.env, pc); > - if (phys_pc == -1) { > - return NULL; > - } > - desc.phys_page1 = phys_pc & TARGET_PAGE_MASK; > - h = tb_hash_func(phys_pc, pc, flags, cflags, *cpu->trace_dstate); > - return qht_lookup_custom(&tb_ctx.htable, &desc, h, tb_lookup_cmp); > -} > - > void tb_set_jmp_target(TranslationBlock *tb, int n, uintptr_t addr) > { > if (TCG_TARGET_HAS_direct_jump) { > -- > 2.34.1 > >