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.

cputlb.c, cpu-exec.c and parts of translate-all.c should be the moral
equivalent of C++ templates.  I wouldn't mind switching to C++, but if
we want to make them polymorphic we should do it at compile time through
multiple compilation and/or inclusion from target-*.

Paolo

Reply via email to