|
|
|
@ -677,7 +677,7 @@ void JitCompiler::Compile_MAD(Instruction instr) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void JitCompiler::Compile_IF(Instruction instr) {
|
|
|
|
|
RuntimeAssert(instr.flow_control.dest_offset > last_program_counter, "Backwards if-statements not supported");
|
|
|
|
|
RuntimeAssert(instr.flow_control.dest_offset >= program_counter, "Backwards if-statements not supported");
|
|
|
|
|
|
|
|
|
|
// Evaluate the "IF" condition
|
|
|
|
|
if (instr.opcode.Value() == OpCode::Id::IFU) {
|
|
|
|
@ -708,7 +708,7 @@ void JitCompiler::Compile_IF(Instruction instr) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void JitCompiler::Compile_LOOP(Instruction instr) {
|
|
|
|
|
RuntimeAssert(instr.flow_control.dest_offset > last_program_counter, "Backwards loops not supported");
|
|
|
|
|
RuntimeAssert(instr.flow_control.dest_offset >= program_counter, "Backwards loops not supported");
|
|
|
|
|
RuntimeAssert(!looping, "Nested loops not supported");
|
|
|
|
|
|
|
|
|
|
looping = true;
|
|
|
|
@ -770,8 +770,6 @@ void JitCompiler::Compile_Return() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void JitCompiler::Compile_NextInstr() {
|
|
|
|
|
last_program_counter = program_counter;
|
|
|
|
|
|
|
|
|
|
auto search = return_offsets.find(program_counter);
|
|
|
|
|
if (search != return_offsets.end()) {
|
|
|
|
|
Compile_Return();
|
|
|
|
@ -839,7 +837,6 @@ void JitCompiler::Compile() {
|
|
|
|
|
FindReturnOffsets();
|
|
|
|
|
|
|
|
|
|
// Reset flow control state
|
|
|
|
|
last_program_counter = 0;
|
|
|
|
|
program_counter = 0;
|
|
|
|
|
looping = false;
|
|
|
|
|
code_ptr.fill(nullptr);
|
|
|
|
|