mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
tcg: Allow TCG_TARGET_REG_BITS to be specified independantly
There are several hosts for which it would be useful to use the available 64-bit registers in a 32-bit pointer environment. Reviewed-by: Aurelien Jarno <aurelien@aurel32.net> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
3e9bd63acf
commit
78cd7b835e
6 changed files with 37 additions and 16 deletions
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
19
tcg/tcg.h
19
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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue