On 05/11/2015 03:24 AM, Paolo Bonzini wrote: > > > On 11/05/2015 12:18, Andreas Färber wrote: >>>> + int (*cpu_mmu_index)(CPUState *cpu); >>>> + void (*cpu_get_tb_cpu_state)(CPUState *cpu, >>>> + void *pc, /* target_long * */ >>>> + void *cs_base, /* target_long */ >>>> + int *flags); >>>> + void (*gen_intermediate_code)(void *env, struct TranslationBlock *tb); >>>> + void (*gen_intermediate_code_pc)(void *env, struct TranslationBlock >>>> *tb); >>>> + void (*restore_state_to_opc)(void *env, struct TranslationBlock *tb, >>>> + int pc_pos); >>>> + void (*tlb_fill)(CPUState *cs, uint64_t addr, int is_write, int >>>> mmu_idx, >>>> + uintptr_t retaddr); >>>> } CPUClass; >>>> >>>> #ifdef HOST_WORDS_BIGENDIAN >> [snip] >> >> Paolo had objected to this when I tried it. The counter-suggestion was >> something about reworking how the cputlb code is built per target - >> please check the archives. > > Right. My point was that these functions are not polymorphic. Each > call to these should know exactly which function to call.
That's some major surgery you have planned there. Especially the path via the qemu_ld/st helpers, where function to call is currently hard-coded into the tcg backend. I think that this is a decent step forward, modulo the conditionals along the use paths. I think we ought to clean up all of the translators to the new QOM hooks. I can't imagine that most of these hooks are called frequently enough that the indirect call really matters. Certainly gen_intermediate_code need not use the hook when initializing the mmu_idx in the DisasContext. That said, I'd approve of a goal to arrange for the correct qemu_ld/st helpers to be called, and a direct call to the proper tlb_fill. But, one step at a time... r~