Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #457 from Tilka/jcc
x64Emitter: J_CC: use 32 bit offset automatically
  • Loading branch information
Sonicadvance1 committed Jun 7, 2014
2 parents c118632 + f828040 commit b6db0d0
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 15 deletions.
22 changes: 10 additions & 12 deletions Source/Core/Common/x64Emitter.cpp
Expand Up @@ -447,27 +447,25 @@ FixupBranch XEmitter::J_CC(CCFlags conditionCode, bool force5bytes)
return branch;
}

void XEmitter::J_CC(CCFlags conditionCode, const u8 * addr, bool force5Bytes)
void XEmitter::J_CC(CCFlags conditionCode, const u8* addr)
{
u64 fn = (u64)addr;
if (!force5Bytes)
s64 distance = (s64)(fn - ((u64)code + 2));
if (distance < -0x80 || distance >= 0x80)
{
s64 distance = (s64)(fn - ((u64)code + 2));
_assert_msg_(DYNA_REC, distance >= -0x80 && distance < 0x80, "Jump target too far away, needs force5Bytes = true");
//8 bits will do
Write8(0x70 + conditionCode);
Write8((u8)(s8)distance);
}
else
{
s64 distance = (s64)(fn - ((u64)code + 6));
distance = (s64)(fn - ((u64)code + 6));
_assert_msg_(DYNA_REC,
distance >= -0x80000000LL && distance < 0x80000000LL,
"Jump target too far away, needs indirect register");
"Jump target too far away, needs indirect register");
Write8(0x0F);
Write8(0x80 + conditionCode);
Write32((u32)(s32)distance);
}
else
{
Write8(0x70 + conditionCode);
Write8((u8)(s8)distance);
}
}

void XEmitter::SetJumpTarget(const FixupBranch &branch)
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Common/x64Emitter.h
Expand Up @@ -331,7 +331,7 @@ class XEmitter

FixupBranch J_CC(CCFlags conditionCode, bool force5bytes = false);
//void J_CC(CCFlags conditionCode, JumpTarget target);
void J_CC(CCFlags conditionCode, const u8 * addr, bool force5Bytes = false);
void J_CC(CCFlags conditionCode, const u8* addr);

void SetJumpTarget(const FixupBranch &branch);

Expand Down
2 changes: 1 addition & 1 deletion Source/Core/Core/PowerPC/Jit64/JitAsm.cpp
Expand Up @@ -168,7 +168,7 @@ void Jit64AsmRoutineManager::Generate()
SetJumpTarget(noExtException);

TEST(32, M((void*)PowerPC::GetStatePtr()), Imm32(0xFFFFFFFF));
J_CC(CC_Z, outerLoop, true);
J_CC(CC_Z, outerLoop);

//Landing pad for drec space
ABI_PopAllCalleeSavedRegsAndAdjustStack();
Expand Down
2 changes: 1 addition & 1 deletion Source/Core/VideoCommon/VertexLoader.cpp
Expand Up @@ -769,7 +769,7 @@ void VertexLoader::CompileVertexTranslator()
SUB(32, M(&loop_counter), Imm8(1));
#endif

J_CC(CC_NZ, loop_start, true);
J_CC(CC_NZ, loop_start);
ABI_PopAllCalleeSavedRegsAndAdjustStack();
RET();
#endif
Expand Down

0 comments on commit b6db0d0

Please sign in to comment.