diff --git a/oscar64/InterCode.cpp b/oscar64/InterCode.cpp index fc87337..fc261a0 100644 --- a/oscar64/InterCode.cpp +++ b/oscar64/InterCode.cpp @@ -887,7 +887,7 @@ bool InterCodeBasicBlock::CanSwapInstructions(const InterInstruction* ins0, cons { if (ins0->mCode == IC_CALL || ins0->mCode == IC_CALL_NATIVE || ins0->mCode == IC_ASSEMBLER || ins0->mCode == IC_RETURN || ins0->mCode == IC_RETURN_STRUCT || ins0->mCode == IC_RETURN_VALUE || - ins0->mCode == IC_PUSH_FRAME || ins0->mCode == IC_POP_FRAME || ins0->mCode == IC_MALLOC || ins0->mCode == IC_FREE) + ins0->mCode == IC_PUSH_FRAME || ins0->mCode == IC_POP_FRAME || ins0->mCode == IC_MALLOC || ins0->mCode == IC_FREE || ins0->mCode == IC_BREAKPOINT) return false; if (ins0->mCode == IC_LOAD) @@ -908,7 +908,7 @@ bool InterCodeBasicBlock::CanSwapInstructions(const InterInstruction* ins0, cons if (ins0->mCode == IC_CALL || ins0->mCode == IC_CALL_NATIVE || ins0->mCode == IC_ASSEMBLER) { if (ins1->mCode == IC_RETURN || ins1->mCode == IC_RETURN_STRUCT || ins1->mCode == IC_RETURN_VALUE || - ins1->mCode == IC_PUSH_FRAME || ins1->mCode == IC_POP_FRAME || ins1->mCode == IC_MALLOC || ins1->mCode == IC_FREE) + ins1->mCode == IC_PUSH_FRAME || ins1->mCode == IC_POP_FRAME || ins1->mCode == IC_MALLOC || ins1->mCode == IC_FREE || ins1->mCode == IC_BREAKPOINT) return false; if (ins0->mSrc[0].mMemory == IM_PROCEDURE && ins0->mSrc[0].mLinkerObject && ins0->mSrc[0].mLinkerObject->mProc && @@ -927,6 +927,11 @@ bool InterCodeBasicBlock::CanSwapInstructions(const InterInstruction* ins0, cons return false; } + if (ins0->mCode == IC_BREAKPOINT && ins1->mCode == IC_STORE) + return false; + if (ins1->mCode == IC_BREAKPOINT && ins0->mCode == IC_STORE) + return false; + if (ins0->mCode == IC_MALLOC || ins0->mCode == IC_FREE) { if (ins1->mCode == IC_MALLOC || ins1->mCode == IC_FREE) @@ -12443,7 +12448,8 @@ bool InterCodeBasicBlock::CanMoveInstructionDown(int si, int ti) const #if 1 if (ins->mCode == IC_COPY || ins->mCode == IC_PUSH_FRAME || ins->mCode == IC_POP_FRAME || ins->mCode == IC_FILL || - ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH) + ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH || + ins->mCode == IC_BREAKPOINT) return false; for (int i = si + 1; i < ti; i++) @@ -12505,7 +12511,7 @@ bool InterCodeBasicBlock::CanMoveInstructionBeforeBlock(int ii, const InterInstr #if 1 if (ins->mCode == IC_CALL || ins->mCode == IC_CALL_NATIVE || ins->mCode == IC_COPY || ins->mCode == IC_PUSH_FRAME || ins->mCode == IC_POP_FRAME || ins->mCode == IC_FILL || - ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH) + ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH || ins->mCode == IC_BREAKPOINT) return false; for (int i = 0; i < ii; i++) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index dd4970d..2195fd6 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -1605,7 +1605,7 @@ bool NativeCodeInstruction::ChangesAddress(void) const bool NativeCodeInstruction::IsSimpleJSR(void) const { - return mType == ASMIT_JSR && mMode == ASMIM_ABSOLUTE && !(mLinkerObject && (mLinkerObject->mFlags & LOBJF_INLINE)); + return mType == ASMIT_JSR && mMode == ASMIM_ABSOLUTE && !(mLinkerObject && (mLinkerObject->mFlags & LOBJF_INLINE)) && !(mFlags & NCIF_BREAKPOINT); } bool NativeCodeInstruction::IsShift(void) const