def-helper.h revision cec22f4b94382f5ebee9d2f6b6df672689681e07
/* Helper file for declaring TCG helper functions.
Should be included at the start and end of target-foo/helper.h.
Targets should use DEF_HELPER_N and DEF_HELPER_FLAGS_N to declare helper
functions. Names should be specified without the helper_ prefix, and
the return and argument types specified. 3 basic types are understood
(i32, i64 and ptr). Additional aliases are provided for convenience and
to match the types used by the C helper implementation.
helper functions. THis will ensure that function prototypes are
consistent. In addition it should be included an extra two times for
helper.c, defining:
GEN_HELPER 1 to produce op generation functions (gen_helper_*)
GEN_HELPER 2 to do runtime registration helper functions.
*/
#ifndef DEF_HELPER_H
#define DEF_HELPER_H 1
#define GET_TCGV_i32 GET_TCGV_I32
#define GET_TCGV_i64 GET_TCGV_I64
#define GET_TCGV_ptr GET_TCGV_PTR
/* Some types that make sense in C, but not for TCG. */
#define dh_alias_i32 i32
#define dh_alias_s32 i32
#define dh_alias_int i32
#define dh_alias_i64 i64
#define dh_alias_s64 i64
#define dh_alias_f32 i32
#define dh_alias_f64 i64
#if TARGET_LONG_BITS == 32
#define dh_alias_tl i32
#else
#define dh_alias_tl i64
#endif
#define dh_alias_ptr ptr
#define dh_alias_void void
#define dh_alias_env ptr
#ifdef VBOX
# if ARCH_BITS == 32
# define dh_alias_RTCCUINTREG i32
# define dh_alias_RTCCINTREG i32
# else
# define dh_alias_RTCCUINTREG i64
# define dh_alias_RTCCINTREG i64
# endif
#endif
#define dh_ctype_i32 uint32_t
#define dh_ctype_s32 int32_t
#define dh_ctype_int int
#define dh_ctype_i64 uint64_t
#define dh_ctype_s64 int64_t
#define dh_ctype_f32 float32
#define dh_ctype_f64 float64
#define dh_ctype_tl target_ulong
#define dh_ctype_ptr void *
#define dh_ctype_void void
#define dh_ctype_env CPUState *
#ifdef VBOX
# if ARCH_BITS == 32
# define dh_ctype_RTCCUINTREG uint32_t
# define dh_ctype_RTCCINTREG int32_t
# else
# define dh_ctype_RTCCUINTREG uint64_t
# define dh_ctype_RTCCINTREG int64_t
# endif
#endif
/* We can't use glue() here because it falls foul of C preprocessor
recursive expansion rules. */
#define dh_retvar_decl0_void void
#define dh_retvar_decl_void
#define dh_retvar_void TCG_CALL_DUMMY_ARG
#define dh_is_64bit_void 0
#define dh_is_64bit_i32 0
#define dh_is_64bit_i64 1
#define dh_is_signed_void 0
#define dh_is_signed_i32 0
#define dh_is_signed_s32 1
#define dh_is_signed_i64 0
#define dh_is_signed_s64 1
#define dh_is_signed_f32 0
#define dh_is_signed_f64 0
#define dh_is_signed_tl 0
#define dh_is_signed_int 1
/* ??? This is highly specific to the host cpu. There are even special
extension instructions that may be required, e.g. ia64's addp4. But
for now we don't support any 64-bit targets with 32-bit pointers. */
#define dh_is_signed_ptr 0
#define dh_is_signed_env dh_is_signed_ptr
#define dh_is_signed(t) dh_is_signed_##t
#define dh_sizemask(t, n) \
#define dh_arg(t, n) \
dh_sizemask(t, n)
#endif /* DEF_HELPER_H */
#ifndef GEN_HELPER
/* Function prototypes. */
#define GEN_HELPER -1
/* Gen functions. */
{ \
int sizemask; \
}
{ \
int sizemask = 0; \
dh_sizemask(ret, 0); \
}
{ \
int sizemask = 0; \
dh_sizemask(ret, 0); \
}
{ \
int sizemask = 0; \
dh_sizemask(ret, 0); \
}
{ \
int sizemask = 0; \
dh_sizemask(ret, 0); \
}
#define GEN_HELPER -1
/* Register helpers. */
#define GEN_HELPER -1
/* Undefine macros. */
#endif