qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] tcg: Improve tcg_out_label and fix its usage for w64
@ 2012-03-10 18:59 Stefan Weil
  2012-03-11 16:10 ` Blue Swirl
  0 siblings, 1 reply; 2+ messages in thread
From: Stefan Weil @ 2012-03-10 18:59 UTC (permalink / raw)
  To: qemu-devel; +Cc: Blue Swirl, Stefan Weil, Richard Henderson

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>
---
 tcg/hppa/tcg-target.c  |    8 ++++----
 tcg/i386/tcg-target.c  |    8 ++++----
 tcg/sparc/tcg-target.c |    6 +++---
 tcg/tcg.c              |    6 +++---
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/tcg/hppa/tcg-target.c b/tcg/hppa/tcg-target.c
index 59d4d12..71f4a8a 100644
--- a/tcg/hppa/tcg-target.c
+++ b/tcg/hppa/tcg-target.c
@@ -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);
@@ -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);
@@ -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);
@@ -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.  */
diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c
index dc81572..1dbe240 100644
--- a/tcg/i386/tcg-target.c
+++ b/tcg/i386/tcg-target.c
@@ -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
 
@@ -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
@@ -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
diff --git a/tcg/sparc/tcg-target.c b/tcg/sparc/tcg-target.c
index 5cd5a3b..4461fb4 100644
--- a/tcg/sparc/tcg-target.c
+++ b/tcg/sparc/tcg-target.c
@@ -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
 
@@ -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;
     }
@@ -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;
     }
 }
diff --git a/tcg/tcg.c b/tcg/tcg.c
index cd2db3c..531db55 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -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)
@@ -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];
-- 
1.7.9

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [Qemu-devel] [PATCH] tcg: Improve tcg_out_label and fix its usage for w64
  2012-03-10 18:59 [Qemu-devel] [PATCH] tcg: Improve tcg_out_label and fix its usage for w64 Stefan Weil
@ 2012-03-11 16:10 ` Blue Swirl
  0 siblings, 0 replies; 2+ messages in thread
From: Blue Swirl @ 2012-03-11 16:10 UTC (permalink / raw)
  To: Stefan Weil; +Cc: qemu-devel, Richard Henderson

Thanks, applied.

On Sat, Mar 10, 2012 at 18:59, Stefan Weil <sw@weilnetz.de> wrote:
> 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>
> ---
>  tcg/hppa/tcg-target.c  |    8 ++++----
>  tcg/i386/tcg-target.c  |    8 ++++----
>  tcg/sparc/tcg-target.c |    6 +++---
>  tcg/tcg.c              |    6 +++---
>  4 files changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/tcg/hppa/tcg-target.c b/tcg/hppa/tcg-target.c
> index 59d4d12..71f4a8a 100644
> --- a/tcg/hppa/tcg-target.c
> +++ b/tcg/hppa/tcg-target.c
> @@ -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);
> @@ -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);
> @@ -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);
> @@ -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.  */
> diff --git a/tcg/i386/tcg-target.c b/tcg/i386/tcg-target.c
> index dc81572..1dbe240 100644
> --- a/tcg/i386/tcg-target.c
> +++ b/tcg/i386/tcg-target.c
> @@ -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
>
> @@ -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
> @@ -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
> diff --git a/tcg/sparc/tcg-target.c b/tcg/sparc/tcg-target.c
> index 5cd5a3b..4461fb4 100644
> --- a/tcg/sparc/tcg-target.c
> +++ b/tcg/sparc/tcg-target.c
> @@ -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
>
> @@ -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;
>     }
> @@ -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;
>     }
>  }
> diff --git a/tcg/tcg.c b/tcg/tcg.c
> index cd2db3c..531db55 100644
> --- a/tcg/tcg.c
> +++ b/tcg/tcg.c
> @@ -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)
> @@ -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];
> --
> 1.7.9
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-03-11 16:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-10 18:59 [Qemu-devel] [PATCH] tcg: Improve tcg_out_label and fix its usage for w64 Stefan Weil
2012-03-11 16:10 ` Blue Swirl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).