OSDN Git Service

tcg-arm: Use movi32 + blx for calls on v7
authorRichard Henderson <rth@twiddle.net>
Wed, 13 Mar 2013 20:40:43 +0000 (13:40 -0700)
committerAurelien Jarno <aurelien@aurel32.net>
Sat, 27 Apr 2013 00:16:45 +0000 (02:16 +0200)
Work better with branch predition when we have movw+movt,
as the size of the code is the same.  Perhaps re-evaluate
when we have a proper constant pool.

Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg/arm/tcg-target.c

index 5fa3cb1..eb697f2 100644 (file)
@@ -1016,6 +1016,9 @@ static inline void tcg_out_call(TCGContext *s, uint32_t addr)
         } else {
             tcg_out_bl(s, COND_AL, val);
         }
+    } else if (use_armv7_instructions) {
+        tcg_out_movi32(s, COND_AL, TCG_REG_TMP, addr);
+        tcg_out_blx(s, COND_AL, TCG_REG_TMP);
     } else {
         tcg_out_dat_imm(s, COND_AL, ARITH_ADD, TCG_REG_R14, TCG_REG_PC, 4);
         tcg_out_ld32_12(s, COND_AL, TCG_REG_PC, TCG_REG_PC, -4);