def-helper.h revision 81db31727ed27322c3f5e3bc40e71fe7fc54bf91
/* 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_arg(t, n) \
sizemask |= dh_is_64bit(t) << n
#endif /* DEF_HELPER_H */
#ifndef GEN_HELPER
/* Function prototypes. */
#define GEN_HELPER -1
/* Gen functions. */
{ \
int sizemask; \
}
{ \
int sizemask; \
}
{ \
int sizemask; \
}
{ \
int sizemask; \
}
{ \
int sizemask; \
}
#define GEN_HELPER -1
/* Register helpers. */
#define GEN_HELPER -1
/* Undefine macros. */
#endif