diff mbox

[15/18] tcg: Allow TCG_TARGET_REG_BITS to be specified independantly

Message ID 1377190729-14008-16-git-send-email-rth@twiddle.net
State New
Headers show

Commit Message

Richard Henderson Aug. 22, 2013, 4:58 p.m. UTC
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 <rth@twiddle.net>
---
 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(-)

Comments

Aurelien Jarno Aug. 29, 2013, 4:45 p.m. UTC | #1
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 <rth@twiddle.net>
> ---
>  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@aurel32.net>
diff mbox

Patch

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