diff options
author | Richard Henderson <rth@twiddle.net> | 2014-08-06 12:09:56 -0700 |
---|---|---|
committer | Richard Henderson <rth@redhat.com> | 2014-09-29 14:55:27 -0400 |
commit | 321b6c058544c136341bf9cc6055f127f307f03e (patch) | |
tree | 78ea04a1669bf863d389d5f0e0ddf35fe10eef4c /tcg | |
parent | 90379ca84ebe94b0adc08794d90ea1e196b2a724 (diff) |
tcg-sparc: Fix setcond_i32 uninitialized value
We failed to swap c1 and c2 correctly for NE c2 == 0.
Signed-off-by: Richard Henderson <rth@twiddle.net>
Diffstat (limited to 'tcg')
-rw-r--r-- | tcg/sparc/tcg-target.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/tcg/sparc/tcg-target.c b/tcg/sparc/tcg-target.c index 08ca4829a6..3b232d6333 100644 --- a/tcg/sparc/tcg-target.c +++ b/tcg/sparc/tcg-target.c @@ -674,9 +674,12 @@ static void tcg_out_setcond_i32(TCGContext *s, TCGCond cond, TCGReg ret, case TCG_COND_NE: /* For equality, we can transform to inequality vs zero. */ if (c2 != 0) { - tcg_out_arithc(s, ret, c1, c2, c2const, ARITH_XOR); + tcg_out_arithc(s, TCG_REG_T1, c1, c2, c2const, ARITH_XOR); + c2 = TCG_REG_T1; + } else { + c2 = c1; } - c1 = TCG_REG_G0, c2 = ret, c2const = 0; + c1 = TCG_REG_G0, c2const = 0; cond = (cond == TCG_COND_EQ ? TCG_COND_GEU : TCG_COND_LTU); break; |