On 23/01/24, Philippe Mathieu-Daudé wrote:
> Hi Anton,
> 
> On 19/1/24 15:40, Anton Johansson wrote:
> > Uses target_supports_mttcg() and target_long_bits() to turn ifdefs into
> > runtime branches.
> > 
> > Signed-off-by: Anton Johansson <a...@rev.ng>
> > ---
> >   accel/tcg/tcg-all.c | 25 +++++++++----------------
> >   1 file changed, 9 insertions(+), 16 deletions(-)
> 
> 
> >   static void tcg_accel_instance_init(Object *obj)
> > @@ -137,17 +129,18 @@ static char *tcg_get_thread(Object *obj, Error **errp)
> >   static void tcg_set_thread(Object *obj, const char *value, Error **errp)
> >   {
> >       TCGState *s = TCG_STATE(obj);
> > +    const bool oversized_guest = target_long_bits() > TCG_TARGET_REG_BITS;
> >       if (strcmp(value, "multi") == 0) {
> > -        if (TCG_OVERSIZED_GUEST) {
> > +        if (oversized_guest) {
> >               error_setg(errp, "No MTTCG when guest word size > hosts");
> >           } else if (icount_enabled()) {
> >               error_setg(errp, "No MTTCG when icount is enabled");
> >           } else {
> > -#ifndef TARGET_SUPPORTS_MTTCG
> > -            warn_report("Guest not yet converted to MTTCG - "
> > -                        "you may get unexpected results");
> > -#endif
> > +            if (target_supports_mttcg()) {
> 
> I started smth similar but then realized this call has to be per target,
> so put my work on hold. My plan is to have a single common tcg
> accelerator framework, having target-specific code handled by vcpu
> dispatchers. Is your plan to have each target link its own tcg?

Yes I was leaning towards one tcg per target, but hadn't put much 
thought into it. I think your approach is better.  This patchset was
primarily focused on getting accl/tcg/ to compile once, with 
heterogeneous stuff coming down the line. IMO it becomes a bit easier to 
see what target-specific information we really need.

What do you think of a simple TargetConfig struct for information such 
as target_supports_mttcg() and the other functions introduced in 
cpu-target.c? We probably need dispatcher for other stuff but I think we 
can get quite far with struct.


Reply via email to