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
					
				| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Richard Henderson
						Richard Henderson