diff options
author | Richard Henderson <rth@twiddle.net> | 2010-03-16 13:04:34 -0700 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2010-04-10 02:44:32 +0200 |
commit | 9e05960fdc0f6d10470f9471aa9e6fe80f1217f5 (patch) | |
tree | 47c93517c05784bd78020f1fa0ac415eacb84b89 /target-alpha/translate.c | |
parent | 735cf45f9c05a5b2a780a0fb2bdb57829193ea5f (diff) |
target-alpha: Use setcond for int comparisons.
Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'target-alpha/translate.c')
-rw-r--r-- | target-alpha/translate.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/target-alpha/translate.c b/target-alpha/translate.c index a4bf1fdf22..fd173df422 100644 --- a/target-alpha/translate.c +++ b/target-alpha/translate.c @@ -1199,33 +1199,34 @@ MVIOP2(pkwb) MVIOP2(unpkbl) MVIOP2(unpkbw) -static inline void gen_cmp(TCGCond cond, int ra, int rb, int rc, int islit, - uint8_t lit) +static void gen_cmp(TCGCond cond, int ra, int rb, int rc, + int islit, uint8_t lit) { - int l1, l2; - TCGv tmp; + TCGv va, vb; - if (unlikely(rc == 31)) + if (unlikely(rc == 31)) { return; + } - l1 = gen_new_label(); - l2 = gen_new_label(); + if (ra == 31) { + va = tcg_const_i64(0); + } else { + va = cpu_ir[ra]; + } + if (islit) { + vb = tcg_const_i64(lit); + } else { + vb = cpu_ir[rb]; + } - if (ra != 31) { - tmp = tcg_temp_new(); - tcg_gen_mov_i64(tmp, cpu_ir[ra]); - } else - tmp = tcg_const_i64(0); - if (islit) - tcg_gen_brcondi_i64(cond, tmp, lit, l1); - else - tcg_gen_brcond_i64(cond, tmp, cpu_ir[rb], l1); + tcg_gen_setcond_i64(cond, cpu_ir[rc], va, vb); - tcg_gen_movi_i64(cpu_ir[rc], 0); - tcg_gen_br(l2); - gen_set_label(l1); - tcg_gen_movi_i64(cpu_ir[rc], 1); - gen_set_label(l2); + if (ra == 31) { + tcg_temp_free(va); + } + if (islit) { + tcg_temp_free(vb); + } } static inline int translate_one(DisasContext *ctx, uint32_t insn) |