コード例 #1
0
ファイル: system.c プロジェクト: 8l/openvmtil
void
CfrTil_system1 ( )
{
    _Compile_Stack_PopToReg ( DSP, EAX ) ;
    _Compile_Stack_PopToReg ( DSP, EBX ) ;
    _Compile_INT80 ( ) ;
    _Compile_Stack_PushReg ( DSP, EAX ) ;
}
コード例 #2
0
ファイル: logic.c プロジェクト: 8l/openvmtil
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 ) ;
}
コード例 #3
0
ファイル: locals.c プロジェクト: dennisj001/openvmtil
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    
}