qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC 00/16] TCG indirect registers


From: Blue Swirl
Subject: Re: [Qemu-devel] [RFC 00/16] TCG indirect registers
Date: Mon, 23 Sep 2013 20:23:36 +0300

On Fri, Sep 20, 2013 at 12:24 AM, Richard Henderson <address@hidden> wrote:
>
> This is an attempt to improve performance of target-sparc
> by exposing the windowed registers as TCG globals, and all
> the optimization that we can do there.
>
> This is done via allowing tcg_global_mem_new to be used
> with any base pointer, not just off of a fixed register.
> Thus the sparc windowed registers are globals off cpu_regwptr.

Nice and simple.

Would it be possible to eliminate regwptr and perform the calculation
of the effective register set during compile time? We could get rid of
register shuffling (memcpy32) and register access would be much
simpler. The downside would be that code which is called from
different register window level would need to be recompiled.

>
> In the process of working through this, I attempt to remove
> as many uses of "int" as I can throughout the TCG code gen
> paths, replacing them with TCGReg when we're talking about
> hard registers, and TCGTemp pointers when we're talking about
> temporaries.  This, IMO, reduces confusion as to what kind of
> "int" we mean at any given time.
>
> By the time we get to patch 14, actually implementing the
> indirect temps, it's fairly easy to recurse in order to
> load the base pointer when we need to load or store an
> indirect temp.
>
> I've not yet tried to measure the performance.  As far as
> testing, linux-user-0.3 and sparc-test-0.2 works.  I've
> scanned some of the dumps from those.  In the cases where
> no real optimization was possible, we generate practically
> the same code -- usually with different registers selected.
> In the cases where we can optimize, I've seen some TB's
> cut in half.
>
> Anyway, I wanted some feedback before I take this any further.
>
>
> r~
>
>
> Richard Henderson (16):
>   tcg: Change tcg_global_mem_new_* to take a TCGv_ptr
>   tcg: Introduce TCGTempType
>   tcg: Change ts->mem_reg to ts->mem_base
>   tcg: Compress TCGLabelQemuLdst
>   tcg: More use of TCGReg where appropriate
>   tcg: Remove tcg_get_arg_str_i32/64
>   tcg: Change reg_to_temp to TCGTemp pointer
>   tcg: Change temp_dead argument to TCGTemp
>   tcg: Change temp_sync argument to TCGTemp
>   tcg: Change temp_save argument to TCGTemp
>   tcg: Introduce temp_load
>   tcg: Tidy temporary allocation
>   tcg: Use temp_idx
>   tcg: Implement indirect memory registers
>   target-sparc: Tidy global register initialization
>   target-sparc: Use global registers for the register window
>
>  target-alpha/translate.c      |  40 +--
>  target-arm/translate.c        |  20 +-
>  target-cris/translate.c       |  24 +-
>  target-cris/translate_v10.c   |  82 +++---
>  target-i386/translate.c       |  56 ++--
>  target-lm32/translate.c       |  24 +-
>  target-m68k/translate.c       |  28 +-
>  target-microblaze/translate.c |  14 +-
>  target-mips/translate.c       |  25 +-
>  target-moxie/translate.c      |   8 +-
>  target-openrisc/translate.c   |  26 +-
>  target-ppc/translate.c        |  40 +--
>  target-s390x/translate.c      |  16 +-
>  target-sh4/translate.c        |  36 +--
>  target-sparc/translate.c      | 195 ++++++-------
>  target-unicore32/translate.c  |   2 +-
>  target-xtensa/translate.c     |  10 +-
>  tcg/tcg.c                     | 641 
> +++++++++++++++++++++---------------------
>  tcg/tcg.h                     |  78 +++--
>  19 files changed, 693 insertions(+), 672 deletions(-)
>
> --
> 1.8.1.4
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]