diff options
author | Andreas Färber <afaerber@suse.de> | 2013-06-28 19:31:32 +0200 |
---|---|---|
committer | Andreas Färber <afaerber@suse.de> | 2013-07-23 02:41:32 +0200 |
commit | bdf7ae5bbdb3f050d97862b2ba0261fa902ebc53 (patch) | |
tree | dec1f74f86690f2f5e7e9682e82ae08e40c0ac49 /cpu-exec.c | |
parent | b42eab27beaefd5c9bf9353383d6403e0628c014 (diff) |
cpu: Introduce CPUClass::synchronize_from_tb() for cpu_pc_from_tb()
Where no extra implementation is needed, fall back to CPUClass::set_pc().
Acked-by: Michael Walle <michael@walle.cc> (for lm32)
Signed-off-by: Andreas Färber <afaerber@suse.de>
Diffstat (limited to 'cpu-exec.c')
-rw-r--r-- | cpu-exec.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/cpu-exec.c b/cpu-exec.c index 6c784a7e09..3fccb8617e 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -59,8 +59,14 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, uint8_t *tb_ptr) * counter hit zero); we must restore the guest PC to the address * of the start of the TB. */ + CPUClass *cc = CPU_GET_CLASS(cpu); TranslationBlock *tb = (TranslationBlock *)(next_tb & ~TB_EXIT_MASK); - cpu_pc_from_tb(env, tb); + if (cc->synchronize_from_tb) { + cc->synchronize_from_tb(cpu, tb); + } else { + assert(cc->set_pc); + cc->set_pc(cpu, tb->pc); + } } if ((next_tb & TB_EXIT_MASK) == TB_EXIT_REQUESTED) { /* We were asked to stop executing TBs (probably a pending |