Patchwork [v6,20/20] tcg-arm: Remove long jump from tcg_out_goto_label

login
register
mail settings
Submitter Richard Henderson
Date April 23, 2013, 8:46 p.m.
Message ID <1366750012-25015-21-git-send-email-rth@twiddle.net>
Download mbox | patch
Permalink /patch/239005/
State New
Headers show

Comments

Richard Henderson - April 23, 2013, 8:46 p.m.
Branches within a TB will always be within 16MB.

Signed-off-by: Richard Henderson <rth@twiddle.net>
---
 tcg/arm/tcg-target.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)
Aurelien Jarno - April 24, 2013, 7:43 a.m.
On Tue, Apr 23, 2013 at 01:46:52PM -0700, Richard Henderson wrote:
> Branches within a TB will always be within 16MB.
> 
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
>  tcg/arm/tcg-target.c | 7 +------
>  1 file changed, 1 insertion(+), 6 deletions(-)
> 
> diff --git a/tcg/arm/tcg-target.c b/tcg/arm/tcg-target.c
> index d6afa2f..7216f7a 100644
> --- a/tcg/arm/tcg-target.c
> +++ b/tcg/arm/tcg-target.c
> @@ -1055,14 +1055,9 @@ static inline void tcg_out_goto_label(TCGContext *s, int cond, int label_index)
>  {
>      TCGLabel *l = &s->labels[label_index];
>  
> -    if (l->has_value)
> +    if (l->has_value) {
>          tcg_out_goto(s, cond, l->u.value);
> -    else if (cond == COND_AL) {
> -        tcg_out_ld32_12(s, COND_AL, TCG_REG_PC, TCG_REG_PC, -4);
> -        tcg_out_reloc(s, s->code_ptr, R_ARM_ABS32, label_index, 31337);
> -        s->code_ptr += 4;
>      } else {
> -        /* Probably this should be preferred even for COND_AL... */
>          tcg_out_reloc(s, s->code_ptr, R_ARM_PC24, label_index, 31337);
>          tcg_out_b_noaddr(s, cond);
>      }

Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>

Patch

diff --git a/tcg/arm/tcg-target.c b/tcg/arm/tcg-target.c
index d6afa2f..7216f7a 100644
--- a/tcg/arm/tcg-target.c
+++ b/tcg/arm/tcg-target.c
@@ -1055,14 +1055,9 @@  static inline void tcg_out_goto_label(TCGContext *s, int cond, int label_index)
 {
     TCGLabel *l = &s->labels[label_index];
 
-    if (l->has_value)
+    if (l->has_value) {
         tcg_out_goto(s, cond, l->u.value);
-    else if (cond == COND_AL) {
-        tcg_out_ld32_12(s, COND_AL, TCG_REG_PC, TCG_REG_PC, -4);
-        tcg_out_reloc(s, s->code_ptr, R_ARM_ABS32, label_index, 31337);
-        s->code_ptr += 4;
     } else {
-        /* Probably this should be preferred even for COND_AL... */
         tcg_out_reloc(s, s->code_ptr, R_ARM_PC24, label_index, 31337);
         tcg_out_b_noaddr(s, cond);
     }