void CfrTil_system1 ( ) { _Compile_Stack_PopToReg ( DSP, EAX ) ; _Compile_Stack_PopToReg ( DSP, EBX ) ; _Compile_INT80 ( ) ; _Compile_Stack_PushReg ( DSP, EAX ) ; }
void Compile_Cmp_Set_tttn_Logic ( Compiler * compiler, int32 ttt, int32 negateFlag ) { int32 optFlag = CheckOptimizeOperands ( compiler, 5 ) ; if ( optFlag == OPTIMIZE_DONE ) return ; else if ( optFlag ) { if ( ( optFlag == 2 ) && ( compiler->Optimizer->Optimize_Rm == DSP ) ) { _Compile_Stack_PopToReg ( DSP, ECX ) ; // assuming optimize always uses EAX first compiler->Optimizer->Optimize_Rm = ECX ; compiler->Optimizer->Optimize_Mod = REG ; } // Compile_CMPI( mod, operandReg, offset, immediateData, size if ( compiler->Optimizer->OptimizeFlag & OPTIMIZE_IMM ) Compile_CMPI ( compiler->Optimizer->Optimize_Mod, compiler->Optimizer->Optimize_Rm, compiler->Optimizer->Optimize_Disp, compiler->Optimizer->Optimize_Imm, CELL ) ; // Compile_CMP( toRegOrMem, mod, reg, rm, sib, disp ) else Compile_CMP ( compiler->Optimizer->Optimize_Dest_RegOrMem, compiler->Optimizer->Optimize_Mod, compiler->Optimizer->Optimize_Reg, compiler->Optimizer->Optimize_Rm, 0, compiler->Optimizer->Optimize_Disp, CELL ) ; } else { _Compile_Move_StackN_To_Reg ( ECX, DSP, 0 ) ; _Compile_Move_StackN_To_Reg ( EAX, DSP, - 1 ) ; // ?? must do the DropN before the CMP because CMP sets eflags _Compile_Stack_DropN ( DSP, 2 ) ; // before cmp allows smoother optimizing with C conditionals Compile_CMP ( REG, REG, EAX, ECX, 0, 0, CELL ) ; } _Compile_SET_tttn_REG ( ttt, negateFlag, EAX ) ; // immediately after the 'cmp' insn which changes the flags appropriately _Compile_MOVZX_REG ( EAX ) ; Word *zero = ( Word* ) Compiler_WordStack ( compiler, 0 ) ; _Word_CompileAndRecord_PushEAX ( zero ) ; }
void _Compile_ESP_Restore ( ) { #if 1 _Compile_Move_Rm_To_Reg ( ESP, EDI, 4 ) ; // 4 : placeholder _Context_->Compiler0->EspRestoreOffset = Here - 1 ; #else _Compile_Stack_PopToReg ( DSP, ESP ) ; #endif }