Ignore:
Timestamp:
Jul 22, 2007, 4:58:47 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp

    r221 r226  
    1515    if( userProc.GetName() == "_System_GetEip" ){
    1616        //mov rax,qword ptr[rsp]
    17         op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE);
     17        compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE);
    1818
    1919        //ret
    20         op_ret();
     20        compiler.codeGenerator.op_ret();
    2121    }
    2222    else if( userProc.GetName() == "_System_InitDllGlobalVariables" ){
     
    2727        if(!bDll){
    2828            //ret
    29             op_ret();
     29            compiler.codeGenerator.op_ret();
    3030
    3131            return;
     
    4141        //sub rsp,スタックフレームサイズ
    4242        int StackFrameSchedule;
    43         op_sub_rsp(0xFFFFFFFF);
     43        compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF);
    4444        StackFrameSchedule=obp-sizeof(long);
    4545
     
    5555        //_System_StartupProgramの呼び出し
    5656        extern const UserProc *pSub_System_StartupProgram;
    57         op_call(pSub_System_StartupProgram);
     57        compiler.codeGenerator.op_call(pSub_System_StartupProgram);
    5858
    5959        //クラスに属する静的メンバを定義
     
    6363
    6464        //add rsp,スタックフレームサイズ
    65         op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
     65        compiler.codeGenerator.op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
    6666
    6767        //スタックフレームスケジュール(subコマンドに渡す値)
     
    7272
    7373        //ret
    74         op_ret();
     74        compiler.codeGenerator.op_ret();
    7575    }
    7676    else if( userProc.GetName() == "_System_InitStaticLocalVariables" ){
     
    7979        //sub rsp,スタックフレームサイズ
    8080        int StackFrameSchedule;
    81         op_sub_rsp(0xFFFFFFFF);
     81        compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF);
    8282        StackFrameSchedule=obp-sizeof(long);
    8383
     
    100100
    101101        //add rsp,スタックフレームサイズ
    102         op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
     102        compiler.codeGenerator.op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
    103103
    104104        //スタックフレームスケジュール(subコマンドに渡す値)
     
    106106
    107107        //ret
    108         op_ret();
     108        compiler.codeGenerator.op_ret();
    109109    }
    110110    else if( userProc.GetName() == "_System_Call_Destructor_of_GlobalObject" ){
    111111        //sub rsp,8(※RSPを16バイト境界にあわせるため)
    112         op_sub_rsp(0x8);
     112        compiler.codeGenerator.op_sub_rsp(0x8);
    113113
    114114
     
    122122
    123123        //add rsp,8
    124         op_add_RV(REG_RSP,0x8);
     124        compiler.codeGenerator.op_add_RV(REG_RSP,0x8);
    125125
    126126        //ret
    127         op_ret();
     127        compiler.codeGenerator.op_ret();
    128128    }
    129129    else if( userProc.GetName() == "_System_GetSp" ){
    130130        //mov rax,rsp
    131         op_mov_RR(REG_RAX,REG_RSP);
     131        compiler.codeGenerator.op_mov_RR(REG_RAX,REG_RSP);
    132132
    133133        //add rax,PTR_SIZE
    134         op_add_RV(REG_RAX,PTR_SIZE);
     134        compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
    135135
    136136        //ret
    137         op_ret();
     137        compiler.codeGenerator.op_ret();
    138138    }
    139139    else if( userProc.GetName() == "_allrem" ){
     
    276276    compiler.GetNamespaceSupporter().SetImportedNamespaces( pUserProc->GetImportedNamespaces() );
    277277
     278    // コード生成対象を選択
     279    compiler.codeGenerator.Select( (const_cast<UserProc *>(pUserProc))->GetNativeCode() );
     280
    278281    if(pUserProc->IsSystem()){
    279282        ////////////////////
     
    408411            if(param.IsReal()&&param.IsRef() == false){
    409412                //movsd qword ptr[rsp+0x20],xmm3
    410                 op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32);
     413                compiler.codeGenerator.op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32);
    411414            }
    412415            else{
    413416                //mov qword ptr[rsp+0x20],r9
    414                 op_mov_MR(sizeof(_int64),REG_R9,REG_RSP,0x20,MOD_BASE_DISP32);
     417                compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_R9,REG_RSP,0x20,MOD_BASE_DISP32);
    415418            }
    416419        }
     
    418421            if(param.IsReal()&&param.IsRef() == false){
    419422                //movsd qword ptr[rsp+0x18],xmm2
    420                 op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32);
     423                compiler.codeGenerator.op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32);
    421424            }
    422425            else{
    423426                //mov qword ptr[rsp+0x18],r8
    424                 op_mov_MR(sizeof(_int64),REG_R8,REG_RSP,0x18,MOD_BASE_DISP32);
     427                compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_R8,REG_RSP,0x18,MOD_BASE_DISP32);
    425428            }
    426429        }
     
    428431            if(param.IsReal()&&param.IsRef() == false){
    429432                //movsd qword ptr[rsp+0x10],xmm1
    430                 op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32);
     433                compiler.codeGenerator.op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32);
    431434            }
    432435            else{
    433436                //mov qword ptr[rsp+0x10],rdx
    434                 op_mov_MR(sizeof(_int64),REG_RDX,REG_RSP,0x10,MOD_BASE_DISP32);
     437                compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RDX,REG_RSP,0x10,MOD_BASE_DISP32);
    435438            }
    436439        }
     
    438441            if(param.IsReal()&&param.IsRef() == false){
    439442                //movsd qword ptr[rsp+0x8],xmm0
    440                 op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32);
     443                compiler.codeGenerator.op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32);
    441444            }
    442445            else{
    443446                //mov qword ptr[rsp+0x8],rcx
    444                 op_mov_MR(sizeof(_int64),REG_RCX,REG_RSP,0x8,MOD_BASE_DISP32);
     447                compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RCX,REG_RSP,0x8,MOD_BASE_DISP32);
    445448            }
    446449        }
     
    452455    //sub rsp,スタックフレームサイズ
    453456    int StackFrameSchedule;
    454     op_sub_rsp(0xFFFFFFFF);
     457    compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF);
    455458    StackFrameSchedule=obp-sizeof(long);
    456459
     
    496499    if(bDebugCompile&&bDebugSupportProc==0){
    497500        //mov rdx, qword ptr[rsp+スタックフレームサイズ]
    498         op_mov_RM(sizeof(_int64),REG_RDX,REG_RSP,0,MOD_BASE_DISP32);
     501        compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RDX,REG_RSP,0,MOD_BASE_DISP32);
    499502        RspOffsetSchedule=obp-sizeof(long);
    500503
    501504        //mov rcx,rsp
    502         op_mov_RR(REG_RCX,REG_RSP);
     505        compiler.codeGenerator.op_mov_RR(REG_RCX,REG_RSP);
    503506
    504507        //add rcx,スタックフレームサイズ+sizeof(_int64) ※ret用のサイズを考慮
    505         op_add_RV(REG_RCX,0);
     508        compiler.codeGenerator.op_add_RV(REG_RCX,0);
    506509        RspOffsetSchedule2=obp-sizeof(long);
    507510
    508511        //call _DebugSys_StartProc
    509512        extern const UserProc *pSub_DebugSys_StartProc;
    510         op_call(pSub_DebugSys_StartProc);
     513        compiler.codeGenerator.op_call(pSub_DebugSys_StartProc);
    511514    }
    512515
     
    582585
    583586                    //mov rax,offset
    584                     op_mov_RV(sizeof(_int64),REG_RAX,offset);
     587                    compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,offset);
    585588                    obp-=sizeof(long);
    586589                    pobj_DataTableSchedule->add();
     
    591594
    592595                    //mov qword ptr[rcx],rax
    593                     op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
     596                    compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
    594597            }
    595598        }
     
    695698        //call _DebugSys_EndProc
    696699        extern const UserProc *pSub_DebugSys_EndProc;
    697         op_call(pSub_DebugSys_EndProc);
     700        compiler.codeGenerator.op_call(pSub_DebugSys_EndProc);
    698701    }
    699702
     
    717720            if( i3==DEF_OBJECT ){
    718721                //mov rax,qword ptr[rax]
    719                 op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );
     722                compiler.codeGenerator.op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );
    720723            }
    721724        }
     
    763766
    764767    //add rsp,スタックフレームサイズ
    765     op_add_rsp(stackFrameAndLocalParamSize);
     768    compiler.codeGenerator.op_add_rsp(stackFrameAndLocalParamSize);
    766769
    767770    //ret
    768     op_ret();
     771    compiler.codeGenerator.op_ret();
    769772
    770773
Note: See TracChangeset for help on using the changeset viewer.