|
|
@@ -810,7 +810,15 @@ void JitCompiler::FindReturnOffsets() {
|
|
|
}
|
|
|
|
|
|
void JitCompiler::Compile() {
|
|
|
+ // Reset flow control state
|
|
|
program = (CompiledShader*)GetCodePtr();
|
|
|
+ program_counter = 0;
|
|
|
+ looping = false;
|
|
|
+ code_ptr.fill(nullptr);
|
|
|
+ fixup_branches.clear();
|
|
|
+
|
|
|
+ // Find all `CALL` instructions and identify return locations
|
|
|
+ FindReturnOffsets();
|
|
|
|
|
|
// The stack pointer is 8 modulo 16 at the entry of a procedure
|
|
|
ABI_PushRegistersAndAdjustStack(ABI_ALL_CALLEE_SAVED, 8);
|
|
|
@@ -833,15 +841,6 @@ void JitCompiler::Compile() {
|
|
|
MOV(PTRBITS, R(RAX), ImmPtr(&neg));
|
|
|
MOVAPS(NEGBIT, MatR(RAX));
|
|
|
|
|
|
- // Find all `CALL` instructions and identify return locations
|
|
|
- FindReturnOffsets();
|
|
|
-
|
|
|
- // Reset flow control state
|
|
|
- program_counter = 0;
|
|
|
- looping = false;
|
|
|
- code_ptr.fill(nullptr);
|
|
|
- fixup_branches.clear();
|
|
|
-
|
|
|
// Jump to start of the shader program
|
|
|
JMPptr(R(ABI_PARAM2));
|
|
|
|