aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Kovalenko <igor.v.kovalenko@gmail.com>2009-07-29 01:32:23 +0400
committerBlue Swirl <blauwirbel@gmail.com>2009-07-31 06:48:47 +0000
commit14ed7adc1b14597741ac6f9bb64ca23ac26b3f2a (patch)
tree7cce0e4db45adca595ffa57c75072156d4f8fa5b
parentbfdb36293fb947ae4c30e24d00fb883a24ef88e5 (diff)
downloadqemu-14ed7adc1b14597741ac6f9bb64ca23ac26b3f2a.zip
qemu-14ed7adc1b14597741ac6f9bb64ca23ac26b3f2a.tar.gz
qemu-14ed7adc1b14597741ac6f9bb64ca23ac26b3f2a.tar.bz2
sparc64 flush pending conditional evaluations before exposing cpu state
If translation block is interrupted by e.g. mmu exception we need to compute conditional flags for inclusion into saved cpu state. Otherwise after return from trap conditional instructions would use stale psr/xcc data. Signed-off-by: igor.v.kovalenko@gmail.com -- Kind regards, Igor V. Kovalenko
-rw-r--r--target-sparc/translate.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/target-sparc/translate.c b/target-sparc/translate.c
index a372eca..d7894f1 100644
--- a/target-sparc/translate.c
+++ b/target-sparc/translate.c
@@ -4908,4 +4908,9 @@ void gen_pc_load(CPUState *env, TranslationBlock *tb,
} else {
env->npc = npc;
}
+
+ /* flush pending conditional evaluations before exposing cpu state */
+ if (CC_OP != CC_OP_FLAGS) {
+ helper_compute_psr();
+ }
}