diff options
author | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-04-28 00:32:32 +0000 |
---|---|---|
committer | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-04-28 00:32:32 +0000 |
commit | d2856f1ad4c259e5766847c49acbb4e390731bd4 (patch) | |
tree | a6d87e5188c9951cb9e5c13b58eac28d34755fc0 /target-sparc/translate.c | |
parent | 923e5e339f16d55109a75e3f99a2c668571cc58b (diff) |
Factorize code in translate.c
(Glauber Costa)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4274 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-sparc/translate.c')
-rw-r--r-- | target-sparc/translate.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 2e38f84216..8c8f732bcd 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -4659,3 +4659,23 @@ void gen_intermediate_code_init(CPUSPARCState *env) gregnames[i]); } } + +void gen_pc_load(CPUState *env, TranslationBlock *tb, + unsigned long searched_pc, int pc_pos, void *puc) +{ + target_ulong npc; + env->pc = gen_opc_pc[pc_pos]; + npc = gen_opc_npc[pc_pos]; + if (npc == 1) { + /* dynamic NPC: already stored */ + } else if (npc == 2) { + target_ulong t2 = (target_ulong)(unsigned long)puc; + /* jump PC: use T2 and the jump targets of the translation */ + if (t2) + env->npc = gen_opc_jump_pc[0]; + else + env->npc = gen_opc_jump_pc[1]; + } else { + env->npc = npc; + } +} |