direct chaining support for SPARC

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@607 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2004-02-16 20:30:05 +00:00
parent 34f715e754
commit 72cbca10e1
2 changed files with 101 additions and 52 deletions

View file

@ -643,6 +643,36 @@ void OPPROTO op_next_insn(void)
env->npc = env->npc + 4;
}
void OPPROTO op_branch(void)
{
env->npc = PARAM3; /* XXX: optimize */
JUMP_TB(op_branch, PARAM1, 0, PARAM2);
}
void OPPROTO op_branch2(void)
{
if (T2) {
env->npc = PARAM2 + 4;
JUMP_TB(op_branch2, PARAM1, 0, PARAM2);
} else {
env->npc = PARAM3 + 4;
JUMP_TB(op_branch2, PARAM1, 1, PARAM3);
}
FORCE_RET();
}
void OPPROTO op_branch_a(void)
{
if (T2) {
env->npc = PARAM2; /* XXX: optimize */
JUMP_TB(op_generic_branch_a, PARAM1, 0, PARAM3);
} else {
env->npc = PARAM3 + 8; /* XXX: optimize */
JUMP_TB(op_generic_branch_a, PARAM1, 1, PARAM3 + 4);
}
FORCE_RET();
}
void OPPROTO op_generic_branch(void)
{
if (T2) {
@ -653,14 +683,3 @@ void OPPROTO op_generic_branch(void)
FORCE_RET();
}
void OPPROTO op_generic_branch_a(void)
{
if (T2) {
env->pc = PARAM2;
env->npc = PARAM1;
} else {
env->pc = PARAM2 + 4;
env->npc = PARAM2 + 8;
}
FORCE_RET();
}