On 3/12/21 6:04 PM, Paolo Bonzini wrote: > On 12/03/21 14:40, Claudio Fontana wrote: >> /* >> * double dispatch. The first callback allows the accel cpu >> * to run initializations for the CPU, >> * the second one allows the CPU to customize the accel cpu >> * behavior according to the CPU. >> * >> * The second is currently only used by TCG, to specialize the >> * TCGCPUOps depending on the CPU type. >> */ >> cc->accel_cpu = accel_cpu; >> if (accel_cpu->cpu_class_init) { >> accel_cpu->cpu_class_init(cc); >> } >> if (cc->init_accel_cpu) { >> cc->init_accel_cpu(accel_cpu, cc); >> } >> } >> >> .. but maybe this is premature, and should wait for actual users of this >> beyond TCG on ARM? > > I prefer to single out TCG and have the call in cpu_class_init. The > idea of double dispatch (as opposed to an if/else chain with checks on > the class of the argument) is that the first caller uses different > "method names" to tell its type name to the target. > > See for example > https://en.wikipedia.org/wiki/Double_dispatch#Example_in_Ruby. > > Paolo >
Ah, just saw this. I already sent the series, but we can rework and rethink this. Ciao, thanks, Claudio