shrec/x86: SIMPLELINK implementation for cross checking
This commit is contained in:
parent
a0175c8011
commit
89b9687628
|
@ -438,7 +438,70 @@ u32 DynaRBI::Relink()
|
||||||
x86e->x86_size=512;
|
x86e->x86_size=512;
|
||||||
x86e->do_realloc=false;
|
x86e->do_realloc=false;
|
||||||
|
|
||||||
if (BlockType==BET_StaticCall || BlockType==BET_DynamicCall)
|
//#define SIMPLELINK
|
||||||
|
#ifdef SIMPLELINK
|
||||||
|
switch (BlockType) {
|
||||||
|
|
||||||
|
case BET_StaticJump:
|
||||||
|
case BET_StaticCall:
|
||||||
|
//next_pc = block->BranchBlock;
|
||||||
|
x86e->Emit(op_mov32, ECX, BranchBlock);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BET_Cond_0:
|
||||||
|
case BET_Cond_1:
|
||||||
|
{
|
||||||
|
//next_pc = next_pc_value;
|
||||||
|
//if (*jdyn == 0)
|
||||||
|
//next_pc = branch_pc_value;
|
||||||
|
|
||||||
|
x86e->Emit(op_mov32, ECX, NextBlock);
|
||||||
|
|
||||||
|
u32* ptr = &sr.T;
|
||||||
|
if (has_jcond)
|
||||||
|
ptr = &Sh4cntx.jdyn;
|
||||||
|
|
||||||
|
x86e->Emit(op_cmp32, ptr, BlockType & 1);
|
||||||
|
|
||||||
|
x86_Label* lbl = x86e->CreateLabel(false, 8);
|
||||||
|
x86e->Emit(op_jne, lbl);
|
||||||
|
x86e->Emit(op_mov32, ECX, BranchBlock);
|
||||||
|
x86e->MarkLabel(lbl);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BET_DynamicJump:
|
||||||
|
case BET_DynamicCall:
|
||||||
|
case BET_DynamicRet:
|
||||||
|
//next_pc = *jdyn;
|
||||||
|
x86e->Emit(op_mov32, ECX, &Sh4cntx.jdyn);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BET_DynamicIntr:
|
||||||
|
case BET_StaticIntr:
|
||||||
|
if (BlockType == BET_StaticIntr)
|
||||||
|
{
|
||||||
|
x86e->Emit(op_mov32, &next_pc, NextBlock);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x86e->Emit(op_mov32, EAX, GetRegPtr(reg_pc_dyn));
|
||||||
|
x86e->Emit(op_mov32, &next_pc, EAX);
|
||||||
|
}
|
||||||
|
x86e->Emit(op_call, x86_ptr_imm(UpdateINTC));
|
||||||
|
|
||||||
|
x86e->Emit(op_mov32, ECX, &next_pc);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
die("Invalid block end type");
|
||||||
|
}
|
||||||
|
|
||||||
|
x86e->Emit(op_jmp, x86_ptr_imm(loop_no_update));
|
||||||
|
|
||||||
|
#else
|
||||||
|
if (BlockType == BET_StaticCall || BlockType == BET_DynamicCall)
|
||||||
{
|
{
|
||||||
//csc_push(this);
|
//csc_push(this);
|
||||||
}
|
}
|
||||||
|
@ -532,6 +595,7 @@ u32 DynaRBI::Relink()
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue