tcg: Replace TCG_TARGET_EXTEND_ARGS with TCG_TARGET_CALL_ARG_I32
For 64-bit hosts that had TCG_TARGET_EXTEND_ARGS, set TCG_TARGET_CALL_ARG_I32 to TCG_CALL_ARG_EXTEND. Otherwise, use TCG_CALL_ARG_NORMAL. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
c8eef96046
commit
eb8b0224fc
@ -52,6 +52,7 @@ typedef enum {
|
||||
#define TCG_REG_CALL_STACK TCG_REG_SP
|
||||
#define TCG_TARGET_STACK_ALIGN 16
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET 0
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL
|
||||
|
||||
/* optional instructions */
|
||||
|
@ -89,6 +89,7 @@ extern bool use_neon_instructions;
|
||||
/* used for function call generation */
|
||||
#define TCG_TARGET_STACK_ALIGN 8
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET 0
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_EVEN
|
||||
|
||||
/* optional instructions */
|
||||
|
@ -98,6 +98,7 @@ typedef enum {
|
||||
#else
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET 0
|
||||
#endif
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL
|
||||
|
||||
extern bool have_bmi1;
|
||||
|
@ -93,6 +93,7 @@ typedef enum {
|
||||
#define TCG_REG_CALL_STACK TCG_REG_SP
|
||||
#define TCG_TARGET_STACK_ALIGN 16
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET 0
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL
|
||||
|
||||
/* optional instructions */
|
||||
|
@ -88,6 +88,7 @@ typedef enum {
|
||||
# define TCG_TARGET_CALL_STACK_OFFSET 0
|
||||
# define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL
|
||||
#endif
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
|
||||
/* MOVN/MOVZ instructions detection */
|
||||
#if (defined(__mips_isa_rev) && (__mips_isa_rev >= 1)) || \
|
||||
|
@ -44,6 +44,11 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if TCG_TARGET_REG_BITS == 64
|
||||
# define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_EXTEND
|
||||
#else
|
||||
# define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
#endif
|
||||
#ifdef _CALL_SYSV
|
||||
# define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_EVEN
|
||||
#else
|
||||
@ -2520,7 +2525,6 @@ static void tcg_out_nop_fill(tcg_insn_unit *p, int count)
|
||||
|
||||
/* Parameters for function call generation, used in tcg.c. */
|
||||
#define TCG_TARGET_STACK_ALIGN 16
|
||||
#define TCG_TARGET_EXTEND_ARGS 1
|
||||
|
||||
#ifdef _CALL_AIX
|
||||
# define LINK_AREA_SIZE (6 * SZR)
|
||||
|
@ -82,6 +82,7 @@ typedef enum {
|
||||
#define TCG_REG_CALL_STACK TCG_REG_SP
|
||||
#define TCG_TARGET_STACK_ALIGN 16
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET 0
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
#if TCG_TARGET_REG_BITS == 32
|
||||
#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_EVEN
|
||||
#else
|
||||
|
@ -166,9 +166,9 @@ extern uint64_t s390_facilities[3];
|
||||
/* used for function call generation */
|
||||
#define TCG_TARGET_STACK_ALIGN 8
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET 160
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_EXTEND
|
||||
#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL
|
||||
|
||||
#define TCG_TARGET_EXTEND_ARGS 1
|
||||
#define TCG_TARGET_HAS_MEMORY_BSWAP 1
|
||||
|
||||
#define TCG_TARGET_DEFAULT_MO (TCG_MO_ALL & ~TCG_MO_ST_LD)
|
||||
|
@ -71,7 +71,7 @@ typedef enum {
|
||||
#define TCG_TARGET_STACK_BIAS 2047
|
||||
#define TCG_TARGET_STACK_ALIGN 16
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET (128 + 6*8 + TCG_TARGET_STACK_BIAS)
|
||||
#define TCG_TARGET_EXTEND_ARGS 1
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_EXTEND
|
||||
#define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_NORMAL
|
||||
|
||||
#if defined(__VIS__) && __VIS__ >= 0x300
|
||||
|
42
tcg/tcg.c
42
tcg/tcg.c
@ -1494,24 +1494,24 @@ void tcg_gen_callN(void *func, TCGTemp *ret, int nargs, TCGTemp **args)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TCG_TARGET_EXTEND_ARGS) && TCG_TARGET_REG_BITS == 64
|
||||
for (i = 0; i < nargs; ++i) {
|
||||
int argtype = extract32(typemask, (i + 1) * 3, 3);
|
||||
bool is_32bit = (argtype & ~1) == dh_typecode_i32;
|
||||
bool is_signed = argtype & 1;
|
||||
if (TCG_TARGET_CALL_ARG_I32 == TCG_CALL_ARG_EXTEND) {
|
||||
for (i = 0; i < nargs; ++i) {
|
||||
int argtype = extract32(typemask, (i + 1) * 3, 3);
|
||||
bool is_32bit = (argtype & ~1) == dh_typecode_i32;
|
||||
bool is_signed = argtype & 1;
|
||||
|
||||
if (is_32bit) {
|
||||
TCGv_i64 temp = tcg_temp_new_i64();
|
||||
TCGv_i32 orig = temp_tcgv_i32(args[i]);
|
||||
if (is_signed) {
|
||||
tcg_gen_ext_i32_i64(temp, orig);
|
||||
} else {
|
||||
tcg_gen_extu_i32_i64(temp, orig);
|
||||
if (is_32bit) {
|
||||
TCGv_i64 temp = tcg_temp_new_i64();
|
||||
TCGv_i32 orig = temp_tcgv_i32(args[i]);
|
||||
if (is_signed) {
|
||||
tcg_gen_ext_i32_i64(temp, orig);
|
||||
} else {
|
||||
tcg_gen_extu_i32_i64(temp, orig);
|
||||
}
|
||||
args[i] = tcgv_i64_temp(temp);
|
||||
}
|
||||
args[i] = tcgv_i64_temp(temp);
|
||||
}
|
||||
}
|
||||
#endif /* TCG_TARGET_EXTEND_ARGS */
|
||||
|
||||
op = tcg_emit_op(INDEX_op_call);
|
||||
|
||||
@ -1572,16 +1572,16 @@ void tcg_gen_callN(void *func, TCGTemp *ret, int nargs, TCGTemp **args)
|
||||
tcg_debug_assert(TCGOP_CALLI(op) == real_args);
|
||||
tcg_debug_assert(pi <= ARRAY_SIZE(op->args));
|
||||
|
||||
#if defined(TCG_TARGET_EXTEND_ARGS) && TCG_TARGET_REG_BITS == 64
|
||||
for (i = 0; i < nargs; ++i) {
|
||||
int argtype = extract32(typemask, (i + 1) * 3, 3);
|
||||
bool is_32bit = (argtype & ~1) == dh_typecode_i32;
|
||||
if (TCG_TARGET_CALL_ARG_I32 == TCG_CALL_ARG_EXTEND) {
|
||||
for (i = 0; i < nargs; ++i) {
|
||||
int argtype = extract32(typemask, (i + 1) * 3, 3);
|
||||
bool is_32bit = (argtype & ~1) == dh_typecode_i32;
|
||||
|
||||
if (is_32bit) {
|
||||
tcg_temp_free_internal(args[i]);
|
||||
if (is_32bit) {
|
||||
tcg_temp_free_internal(args[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* TCG_TARGET_EXTEND_ARGS */
|
||||
}
|
||||
|
||||
static void tcg_reg_alloc_start(TCGContext *s)
|
||||
|
@ -158,6 +158,7 @@ typedef enum {
|
||||
/* Used for function call generation. */
|
||||
#define TCG_TARGET_CALL_STACK_OFFSET 0
|
||||
#define TCG_TARGET_STACK_ALIGN 8
|
||||
#define TCG_TARGET_CALL_ARG_I32 TCG_CALL_ARG_NORMAL
|
||||
#if TCG_TARGET_REG_BITS == 32
|
||||
# define TCG_TARGET_CALL_ARG_I64 TCG_CALL_ARG_EVEN
|
||||
#else
|
||||
|
Loading…
Reference in New Issue
Block a user