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~

Reply via email to