Il 04/09/2013 11:04, Andreas Färber ha scritto:
>  static inline TranslationBlock *tb_find_fast(CPUArchState *env)
>  {
> +    CPUState *cpu = ENV_GET_CPU(env);
> +    CPUClass *cc = CPU_GET_CLASS(cpu);
>      TranslationBlock *tb;
> -    target_ulong cs_base, pc;
> +    vaddr cs_base, pc;
>      int flags;
>  
>      /* we record a subset of the CPU state. It will
>         always be the same before a given translated block
>         is executed. */
> -    cpu_get_tb_cpu_state(env, &pc, &cs_base, &flags);
> +    cc->get_tb_cpu_state(cpu, &pc, &cs_base, &flags);

I'm afraid you cannot turn inline functions into indirect calls like
this in hot paths.

One alternative would be to hoist the function call to the beginning of
cpu_exec, and ensure that any place that modifies the result calls
cpu_exit.  It may be a problem for SPARC's npc stuff, for which I have
no idea how it works.

Another is to change cpu-exec.c into a file that is #included by
target-*/helper.c or something like that.  This way cpu-exec.c can still
use the inline functions.

Paolo

Reply via email to