From c095ed731ce4fecf166e4ac02ddc606b408f5e1f Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 15 Apr 2015 03:45:41 +0200 Subject: [PATCH] s390x: Fix stoc direction The store conditional instruction wants to store when the condition is fulfilled, so we should branch out when it's not true. The code today branches out when the condition is true, clearly reversing the logic. Fix it up by negating the condition. Signed-off-by: Alexander Graf Reviewed-by: Richard Henderson --- target-s390x/translate.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/target-s390x/translate.c b/target-s390x/translate.c index 8784112f4e..fa3e334e4f 100644 --- a/target-s390x/translate.c +++ b/target-s390x/translate.c @@ -3082,6 +3082,10 @@ static ExitStatus op_soc(DisasContext *s, DisasOps *o) disas_jcc(s, &c, get_field(s->fields, m3)); + /* We want to store when the condition is fulfilled, so branch + out when it's not */ + c.cond = tcg_invert_cond(c.cond); + lab = gen_new_label(); if (c.is_64) { tcg_gen_brcond_i64(c.cond, c.u.s64.a, c.u.s64.b, lab);