32 lines
1.1 KiB
Diff
32 lines
1.1 KiB
Diff
|
From fd4142fc207b6d6633f0162631f8ff303807f5f5 Mon Sep 17 00:00:00 2001
|
||
|
From: Alexander Graf <agraf@suse.de>
|
||
|
Date: Wed, 15 Apr 2015 02:28:05 +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 <agraf@suse.de>
|
||
|
---
|
||
|
target-s390x/translate.c | 4 ++++
|
||
|
1 file changed, 4 insertions(+)
|
||
|
|
||
|
diff --git a/target-s390x/translate.c b/target-s390x/translate.c
|
||
|
index 4f82edd..8ae4912 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);
|