|
|
|
@ -653,7 +653,7 @@ void JitCompiler::Compile_IF(Instruction instr) {
|
|
|
|
|
FixupBranch b = J_CC(CC_Z, true);
|
|
|
|
|
|
|
|
|
|
// Compile the code that corresponds to the condition evaluating as true
|
|
|
|
|
Compile_Block(instr.flow_control.dest_offset - 1);
|
|
|
|
|
Compile_Block(instr.flow_control.dest_offset);
|
|
|
|
|
|
|
|
|
|
// If there isn't an "ELSE" condition, we are done here
|
|
|
|
|
if (instr.flow_control.num_instructions == 0) {
|
|
|
|
@ -667,7 +667,7 @@ void JitCompiler::Compile_IF(Instruction instr) {
|
|
|
|
|
|
|
|
|
|
// This code corresponds to the "ELSE" condition
|
|
|
|
|
// Comple the code that corresponds to the condition evaluating as false
|
|
|
|
|
Compile_Block(instr.flow_control.dest_offset + instr.flow_control.num_instructions - 1);
|
|
|
|
|
Compile_Block(instr.flow_control.dest_offset + instr.flow_control.num_instructions);
|
|
|
|
|
|
|
|
|
|
SetJumpTarget(b2);
|
|
|
|
|
}
|
|
|
|
@ -691,7 +691,7 @@ void JitCompiler::Compile_LOOP(Instruction instr) {
|
|
|
|
|
|
|
|
|
|
auto loop_start = GetCodePtr();
|
|
|
|
|
|
|
|
|
|
Compile_Block(instr.flow_control.dest_offset);
|
|
|
|
|
Compile_Block(instr.flow_control.dest_offset + 1);
|
|
|
|
|
|
|
|
|
|
ADD(32, R(LOOPCOUNT_REG), R(LOOPINC)); // Increment LOOPCOUNT_REG by Z-component
|
|
|
|
|
SUB(32, R(LOOPCOUNT), Imm8(1)); // Increment loop count by 1
|
|
|
|
@ -719,12 +719,12 @@ void JitCompiler::Compile_JMP(Instruction instr) {
|
|
|
|
|
SetJumpTarget(b);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void JitCompiler::Compile_Block(unsigned stop) {
|
|
|
|
|
void JitCompiler::Compile_Block(unsigned end) {
|
|
|
|
|
// Save current offset pointer
|
|
|
|
|
unsigned* prev_offset_ptr = offset_ptr;
|
|
|
|
|
unsigned offset = *prev_offset_ptr;
|
|
|
|
|
|
|
|
|
|
while (offset <= stop)
|
|
|
|
|
while (offset < end)
|
|
|
|
|
Compile_NextInstr(&offset);
|
|
|
|
|
|
|
|
|
|
// Restore current offset pointer
|
|
|
|
|