From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46112) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF5TR-000066-Op for qemu-devel@nongnu.org; Thu, 29 Aug 2013 12:53:38 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VF5TM-0008Nu-Uu for qemu-devel@nongnu.org; Thu, 29 Aug 2013 12:53:33 -0400 Received: from hall.aurel32.net ([2001:470:1f0b:4a8::1]:39543) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VF5TM-0008Ks-O9 for qemu-devel@nongnu.org; Thu, 29 Aug 2013 12:53:28 -0400 Date: Thu, 29 Aug 2013 18:45:00 +0200 From: Aurelien Jarno Message-ID: <20130829164500.GD2287@ohm.aurel32.net> References: <1377190729-14008-1-git-send-email-rth@twiddle.net> <1377190729-14008-16-git-send-email-rth@twiddle.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <1377190729-14008-16-git-send-email-rth@twiddle.net> Subject: Re: [Qemu-devel] [PATCH 15/18] tcg: Allow TCG_TARGET_REG_BITS to be specified independantly List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson Cc: qemu-devel@nongnu.org On Thu, Aug 22, 2013 at 09:58:46AM -0700, Richard Henderson wrote: > There are several hosts for which it would be useful to use the > available 64-bit registers in a 32-bit pointer environment. > > Signed-off-by: Richard Henderson > --- > tcg/hppa/tcg-target.c | 4 ++++ > tcg/hppa/tcg-target.h | 4 ---- > tcg/i386/tcg-target.h | 10 ++++++---- > tcg/sparc/tcg-target.h | 8 ++++++++ > tcg/tcg.h | 19 +++++++++++-------- > tcg/tci/tcg-target.h | 8 ++++++++ > 6 files changed, 37 insertions(+), 16 deletions(-) > > diff --git a/tcg/hppa/tcg-target.c b/tcg/hppa/tcg-target.c > index f464aff..0150e62 100644 > --- a/tcg/hppa/tcg-target.c > +++ b/tcg/hppa/tcg-target.c > @@ -22,6 +22,10 @@ > * THE SOFTWARE. > */ > > +#if TCG_TARGET_REG_BITS != 32 > +#error unsupported > +#endif > + > #ifndef NDEBUG > static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { > "%r0", "%r1", "%rp", "%r3", "%r4", "%r5", "%r6", "%r7", > diff --git a/tcg/hppa/tcg-target.h b/tcg/hppa/tcg-target.h > index a9257a5..302cf4e 100644 > --- a/tcg/hppa/tcg-target.h > +++ b/tcg/hppa/tcg-target.h > @@ -25,10 +25,6 @@ > #ifndef TCG_TARGET_HPPA > #define TCG_TARGET_HPPA 1 > > -#if TCG_TARGET_REG_BITS != 32 > -#error unsupported > -#endif > - > #define TCG_TARGET_WORDS_BIGENDIAN > > #define TCG_TARGET_NB_REGS 32 > diff --git a/tcg/i386/tcg-target.h b/tcg/i386/tcg-target.h > index 963e839..53914f1 100644 > --- a/tcg/i386/tcg-target.h > +++ b/tcg/i386/tcg-target.h > @@ -24,12 +24,14 @@ > #ifndef TCG_TARGET_I386 > #define TCG_TARGET_I386 1 > > -//#define TCG_TARGET_WORDS_BIGENDIAN > +#undef TCG_TARGET_WORDS_BIGENDIAN > > -#if TCG_TARGET_REG_BITS == 64 > -# define TCG_TARGET_NB_REGS 16 > +#ifdef __x86_64__ > +# define TCG_TARGET_REG_BITS 64 > +# define TCG_TARGET_NB_REGS 16 > #else > -# define TCG_TARGET_NB_REGS 8 > +# define TCG_TARGET_REG_BITS 32 > +# define TCG_TARGET_NB_REGS 8 > #endif > > typedef enum { > diff --git a/tcg/sparc/tcg-target.h b/tcg/sparc/tcg-target.h > index d1ca2d6..d356c1b 100644 > --- a/tcg/sparc/tcg-target.h > +++ b/tcg/sparc/tcg-target.h > @@ -24,6 +24,14 @@ > #ifndef TCG_TARGET_SPARC > #define TCG_TARGET_SPARC 1 > > +#if UINTPTR_MAX == UINT32_MAX > +# define TCG_TARGET_REG_BITS 32 > +#elif UINTPTR_MAX == UINT64_MAX > +# define TCG_TARGET_REG_BITS 64 > +#else > +# error Unknown pointer size for tcg target > +#endif > + > #define TCG_TARGET_WORDS_BIGENDIAN > > #define TCG_TARGET_NB_REGS 32 > diff --git a/tcg/tcg.h b/tcg/tcg.h > index 6e2d619..9755189 100644 > --- a/tcg/tcg.h > +++ b/tcg/tcg.h > @@ -23,13 +23,17 @@ > */ > #include "qemu-common.h" > > -/* Target word size (must be identical to pointer size). */ > -#if UINTPTR_MAX == UINT32_MAX > -# define TCG_TARGET_REG_BITS 32 > -#elif UINTPTR_MAX == UINT64_MAX > -# define TCG_TARGET_REG_BITS 64 > -#else > -# error Unknown pointer size for tcg target > +#include "tcg-target.h" > + > +/* Default target word size to pointer size. */ > +#ifndef TCG_TARGET_REG_BITS > +# if UINTPTR_MAX == UINT32_MAX > +# define TCG_TARGET_REG_BITS 32 > +# elif UINTPTR_MAX == UINT64_MAX > +# define TCG_TARGET_REG_BITS 64 > +# else > +# error Unknown pointer size for tcg target > +# endif > #endif > > #if TCG_TARGET_REG_BITS == 32 > @@ -46,7 +50,6 @@ typedef uint64_t tcg_target_ulong; > #error unsupported > #endif > > -#include "tcg-target.h" > #include "tcg-runtime.h" > > #if TCG_TARGET_NB_REGS <= 32 > diff --git a/tcg/tci/tcg-target.h b/tcg/tci/tcg-target.h > index 18f57a2..4811e99 100644 > --- a/tcg/tci/tcg-target.h > +++ b/tcg/tci/tcg-target.h > @@ -44,6 +44,14 @@ > > #define TCG_TARGET_INTERPRETER 1 > > +#if UINTPTR_MAX == UINT32_MAX > +# define TCG_TARGET_REG_BITS 32 > +#elif UINTPTR_MAX == UINT64_MAX > +# define TCG_TARGET_REG_BITS 64 > +#else > +# error Unknown pointer size for tci target > +#endif > + > #ifdef CONFIG_DEBUG_TCG > /* Enable debug output. */ > #define CONFIG_DEBUG_TCG_INTERPRETER Reviewed-by: Aurelien Jarno -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net