Revision | 538fad597d898f677f81cb4daacd37e7cdc18e6e (tree) |
---|---|
Time | 2017-05-13 07:48:41 |
Author | Aurelien Jarno <aurelien@aure...> |
Commiter | Richard Henderson |
target/s390x: implement serialization in BRANCH CONDITION
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Message-Id: <20170509082800.10756-4-aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
@@ -1518,6 +1518,21 @@ static ExitStatus op_bc(DisasContext *s, DisasOps *o) | ||
1518 | 1518 | int imm = is_imm ? get_field(s->fields, i2) : 0; |
1519 | 1519 | DisasCompare c; |
1520 | 1520 | |
1521 | + /* BCR with R2 = 0 causes no branching */ | |
1522 | + if (have_field(s->fields, r2) && get_field(s->fields, r2) == 0) { | |
1523 | + if (m1 == 14) { | |
1524 | + /* Perform serialization */ | |
1525 | + /* FIXME: check for fast-BCR-serialization facility */ | |
1526 | + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); | |
1527 | + } | |
1528 | + if (m1 == 15) { | |
1529 | + /* Perform serialization */ | |
1530 | + /* FIXME: perform checkpoint-synchronisation */ | |
1531 | + tcg_gen_mb(TCG_MO_ALL | TCG_BAR_SC); | |
1532 | + } | |
1533 | + return NO_EXIT; | |
1534 | + } | |
1535 | + | |
1521 | 1536 | disas_jcc(s, &c, m1); |
1522 | 1537 | return help_branch(s, &c, is_imm, imm, o->in2); |
1523 | 1538 | } |