This commit defines vaddr based on TCG_VADDR_BITS. For non-wasm hosts, TCG_VADDR_BITS maches the pointer size, so this change preserves the original behaviour.
Signed-off-by: Kohei Tokunaga <ktokunaga.m...@gmail.com> --- include/exec/helper-head.h.inc | 9 +++++---- include/exec/vaddr.h | 28 +++++++++++++++++++--------- include/tcg/tcg.h | 6 +++--- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/include/exec/helper-head.h.inc b/include/exec/helper-head.h.inc index 5b248fd713..cbeb7bc371 100644 --- a/include/exec/helper-head.h.inc +++ b/include/exec/helper-head.h.inc @@ -58,16 +58,17 @@ # define dh_ctype_tl target_ulong #endif /* COMPILING_PER_TARGET */ -#if __SIZEOF_POINTER__ == 4 +#if TCG_VADDR_BITS == 32 # define dh_alias_vaddr i32 # define dh_typecode_vaddr dh_typecode_i32 -#elif __SIZEOF_POINTER__ == 8 +# define dh_ctype_vaddr uint32_t +#elif TCG_VADDR_BITS == 64 # define dh_alias_vaddr i64 # define dh_typecode_vaddr dh_typecode_i64 +# define dh_ctype_vaddr uint64_t #else # error "sizeof pointer is different from {4,8}" -#endif /* __SIZEOF_POINTER__ */ -# define dh_ctype_vaddr uintptr_t +#endif /* TCG_VADDR_BITS */ /* We can't use glue() here because it falls foul of C preprocessor recursive expansion rules. */ diff --git a/include/exec/vaddr.h b/include/exec/vaddr.h index 28bec632fb..ff6184a31e 100644 --- a/include/exec/vaddr.h +++ b/include/exec/vaddr.h @@ -6,15 +6,25 @@ /** * vaddr: * Type wide enough to contain any #target_ulong virtual address. - * We do not support 64-bit guest on 32-host and detect at configure time. - * Therefore, a host pointer width will always fit a guest pointer. */ -typedef uintptr_t vaddr; -#define VADDR_PRId PRIdPTR -#define VADDR_PRIu PRIuPTR -#define VADDR_PRIo PRIoPTR -#define VADDR_PRIx PRIxPTR -#define VADDR_PRIX PRIXPTR -#define VADDR_MAX UINTPTR_MAX +#if TCG_VADDR_BITS == 32 +typedef uint32_t vaddr; +#define VADDR_PRId PRId32 +#define VADDR_PRIu PRIu32 +#define VADDR_PRIo PRIo32 +#define VADDR_PRIx PRIx32 +#define VADDR_PRIX PRIX32 +#define VADDR_MAX UINT32_MAX +#elif TCG_VADDR_BITS == 64 +typedef uint64_t vaddr; +#define VADDR_PRId PRId64 +#define VADDR_PRIu PRIu64 +#define VADDR_PRIo PRIo64 +#define VADDR_PRIx PRIx64 +#define VADDR_PRIX PRIX64 +#define VADDR_MAX UINT64_MAX +#else +#error Unknown pointer size +#endif #endif diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h index 3fa5a7aed2..256a7b059c 100644 --- a/include/tcg/tcg.h +++ b/include/tcg/tcg.h @@ -218,13 +218,13 @@ typedef struct TCGv_ptr_d *TCGv_ptr; typedef struct TCGv_vec_d *TCGv_vec; typedef TCGv_ptr TCGv_env; -#if __SIZEOF_POINTER__ == 4 +#if TCG_VADDR_BITS == 32 typedef TCGv_i32 TCGv_vaddr; -#elif __SIZEOF_POINTER__ == 8 +#elif TCG_VADDR_BITS == 64 typedef TCGv_i64 TCGv_vaddr; #else # error "sizeof pointer is different from {4,8}" -#endif /* __SIZEOF_POINTER__ */ +#endif /* TCG_VADDR_BITS */ /* call flags */ /* Helper does not read globals (either directly or through an exception). It -- 2.43.0