Skip to content

Commit

Permalink
tcg: Improve tcg_out_label and fix its usage for w64
Browse files Browse the repository at this point in the history
tcg_out_label is always called with a third argument of pointer type
which was casted to tcg_target_long.

These casts can be avoided by changing the prototype of tcg_out_label.

There was also a cast to long. For most hosts with
sizeof(long) == sizeof(tcg_target_long) == sizeof(void *) this did not
matter, but for w64 it was wrong. This is fixed now.

Cc: Blue Swirl <blauwirbel@gmail.com>
Cc: Richard Henderson <rth@twiddle.net>
Signed-off-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
  • Loading branch information
stweil authored and blueswirl committed Mar 11, 2012
1 parent f7cf5d5 commit 9d6fca7
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 14 deletions.
8 changes: 4 additions & 4 deletions tcg/hppa/tcg-target.c
Expand Up @@ -1052,7 +1052,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc)

/* TLB Miss. */
/* label1: */
tcg_out_label(s, lab1, (tcg_target_long)s->code_ptr);
tcg_out_label(s, lab1, s->code_ptr);

argreg = TCG_REG_R26;
tcg_out_mov(s, TCG_TYPE_I32, argreg--, addrlo_reg);
Expand Down Expand Up @@ -1089,7 +1089,7 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, int opc)
}

/* label2: */
tcg_out_label(s, lab2, (tcg_target_long)s->code_ptr);
tcg_out_label(s, lab2, s->code_ptr);
#else
tcg_out_qemu_ld_direct(s, datalo_reg, datahi_reg, addrlo_reg,
(GUEST_BASE ? TCG_GUEST_BASE_REG : TCG_REG_R0), opc);
Expand Down Expand Up @@ -1171,7 +1171,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, int opc)

/* TLB Miss. */
/* label1: */
tcg_out_label(s, lab1, (tcg_target_long)s->code_ptr);
tcg_out_label(s, lab1, s->code_ptr);

argreg = TCG_REG_R26;
tcg_out_mov(s, TCG_TYPE_I32, argreg--, addrlo_reg);
Expand Down Expand Up @@ -1215,7 +1215,7 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, int opc)
tcg_out_call(s, qemu_st_helpers[opc]);

/* label2: */
tcg_out_label(s, lab2, (tcg_target_long)s->code_ptr);
tcg_out_label(s, lab2, s->code_ptr);
#else
/* There are no indexed stores, so if GUEST_BASE is set we must do the add
explicitly. Careful to avoid R20, which is used for the bswaps to follow. */
Expand Down
8 changes: 4 additions & 4 deletions tcg/i386/tcg-target.c
Expand Up @@ -875,7 +875,7 @@ static void tcg_out_brcond2(TCGContext *s, const TCGArg *args,
default:
tcg_abort();
}
tcg_out_label(s, label_next, (tcg_target_long)s->code_ptr);
tcg_out_label(s, label_next, s->code_ptr);
}
#endif

Expand Down Expand Up @@ -917,10 +917,10 @@ static void tcg_out_setcond2(TCGContext *s, const TCGArg *args,

tcg_out_movi(s, TCG_TYPE_I32, args[0], 0);
tcg_out_jxx(s, JCC_JMP, label_over, 1);
tcg_out_label(s, label_true, (tcg_target_long)s->code_ptr);
tcg_out_label(s, label_true, s->code_ptr);

tcg_out_movi(s, TCG_TYPE_I32, args[0], 1);
tcg_out_label(s, label_over, (tcg_target_long)s->code_ptr);
tcg_out_label(s, label_over, s->code_ptr);
} else {
/* When the destination does not overlap one of the arguments,
clear the destination first, jump if cond false, and emit an
Expand All @@ -934,7 +934,7 @@ static void tcg_out_setcond2(TCGContext *s, const TCGArg *args,
tcg_out_brcond2(s, new_args, const_args+1, 1);

tgen_arithi(s, ARITH_ADD, args[0], 1, 0);
tcg_out_label(s, label_over, (tcg_target_long)s->code_ptr);
tcg_out_label(s, label_over, s->code_ptr);
}
}
#endif
Expand Down
6 changes: 3 additions & 3 deletions tcg/sparc/tcg-target.c
Expand Up @@ -582,7 +582,7 @@ static void tcg_out_brcond2_i32(TCGContext *s, TCGCond cond,
}
tcg_out_nop(s);

tcg_out_label(s, label_next, (tcg_target_long)s->code_ptr);
tcg_out_label(s, label_next, s->code_ptr);
}
#endif

Expand Down Expand Up @@ -628,7 +628,7 @@ static void tcg_out_setcond_i32(TCGContext *s, TCGCond cond, TCGArg ret,
tcg_out_branch_i32(s, INSN_COND(tcg_cond_to_bcond[cond], 1), t);
tcg_out_movi_imm13(s, ret, 1);
tcg_out_movi_imm13(s, ret, 0);
tcg_out_label(s, t, (tcg_target_long)s->code_ptr);
tcg_out_label(s, t, s->code_ptr);
#endif
return;
}
Expand Down Expand Up @@ -683,7 +683,7 @@ static void tcg_out_setcond2_i32(TCGContext *s, TCGCond cond, TCGArg ret,

tcg_out_setcond_i32(s, tcg_unsigned_cond(cond), ret, al, bl, blconst);

tcg_out_label(s, lab, (tcg_target_long)s->code_ptr);
tcg_out_label(s, lab, s->code_ptr);
break;
}
}
Expand Down
6 changes: 3 additions & 3 deletions tcg/tcg.c
Expand Up @@ -128,11 +128,11 @@ static void tcg_out_reloc(TCGContext *s, uint8_t *code_ptr, int type,
}
}

static void tcg_out_label(TCGContext *s, int label_index,
tcg_target_long value)
static void tcg_out_label(TCGContext *s, int label_index, void *ptr)
{
TCGLabel *l;
TCGRelocation *r;
tcg_target_long value = (tcg_target_long)ptr;

l = &s->labels[label_index];
if (l->has_value)
Expand Down Expand Up @@ -2123,7 +2123,7 @@ static inline int tcg_gen_code_common(TCGContext *s, uint8_t *gen_code_buf,
break;
case INDEX_op_set_label:
tcg_reg_alloc_bb_end(s, s->reserved_regs);
tcg_out_label(s, args[0], (long)s->code_ptr);
tcg_out_label(s, args[0], s->code_ptr);
break;
case INDEX_op_call:
dead_args = s->op_dead_args[op_index];
Expand Down

0 comments on commit 9d6fca7

Please sign in to comment.