Ignore:
Timestamp:
Jul 21, 2007, 11:47:40 PM (17 years ago)
Author:
dai_9181
Message:

CodeGeneratorクラスのベースを実装

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/Compile_Var.cpp

    r224 r225  
    2828
    2929    //pop ebx
    30     op_pop(REG_EBX);
     30    compiler.codeGenerator.op_pop(REG_EBX);
    3131
    3232    if( resultType.PtrLevel() ){
     
    3636        if(typeSize>=2){
    3737            //imul ebx,i2
    38             op_imul_RV( REG_EBX, typeSize );
     38            compiler.codeGenerator.op_imul_RV( REG_EBX, typeSize );
    3939        }
    4040    }
     
    4646
    4747    //pop ecx
    48     op_pop(REG_ECX);
     48    compiler.codeGenerator.op_pop(REG_ECX);
    4949
    5050    //add ecx,ebx
    51     OpBuffer[obp++]=(char)0x03;
    52     OpBuffer[obp++]=(char)0xCB;
     51    compiler.codeGenerator.op_add_RR( REG_ECX, REG_EBX );
    5352}
    5453void SetRelativeOffset( RELATIVE_VAR &relativeVar ){
    5554    if(relativeVar.dwKind==VAR_DIRECTMEM){
    5655        //mov ecx,dword ptr[ecx]
    57         op_mov_RM( sizeof(long), REG_ECX, REG_ECX, 0, MOD_BASE );
     56        compiler.codeGenerator.op_mov_RM( sizeof(long), REG_ECX, REG_ECX, 0, MOD_BASE );
    5857    }
    5958    else{
     
    6362
    6463        //mov ecx,dword ptr[eax]
    65         op_mov_RM( sizeof(long), REG_ECX, REG_EAX, 0, MOD_BASE );
     64        compiler.codeGenerator.op_mov_RM( sizeof(long), REG_ECX, REG_EAX, 0, MOD_BASE );
    6665    }
    6766}
     
    114113
    115114    //push ecx
    116     op_push(REG_ECX);
     115    compiler.codeGenerator.op_push(REG_ECX);
    117116
    118117    //push 0
    119     op_push_V(0);
     118    compiler.codeGenerator.op_push_V(0);
    120119
    121120    for(i=i3-1;i>=0;i--){
     
    133132
    134133        //pop eax
    135         op_pop(REG_EAX);
     134        compiler.codeGenerator.op_pop(REG_EAX);
    136135
    137136        for(i2=i+1,i4=1;i2<i3;i2++) i4*=subscripts[i2]+1;
     
    152151
    153152    //pop eax
    154     op_pop(REG_EAX);
     153    compiler.codeGenerator.op_pop(REG_EAX);
    155154
    156155    //imul eax,TypeSize
     
    161160
    162161    //pop ecx
    163     op_pop(REG_ECX);
     162    compiler.codeGenerator.op_pop(REG_ECX);
    164163
    165164    //add ecx,eax
    166     OpBuffer[obp++]=(char)0x03;
    167     OpBuffer[obp++]=(char)0xC8;
     165    compiler.codeGenerator.op_add_RR( REG_ECX, REG_EAX );
    168166
    169167    return 1;
     
    628626        //xor ecx,ecx(ecxを0に初期化する)
    629627        //※ecxは変数ベースアドレスからの相対オフセットを示す
    630         op_zero_reg(REG_ECX);
     628        compiler.codeGenerator.op_zero_reg(REG_ECX);
    631629
    632630        pRelativeVar->bOffsetOffset=1;
     
    11941192        else{
    11951193            //push 0
    1196             op_push_V(0);
     1194            compiler.codeGenerator.op_push_V(0);
    11971195
    11981196            //push VarSize
    1199             op_push_V( pVar->GetMemorySize() );
     1197            compiler.codeGenerator.op_push_V( pVar->GetMemorySize() );
    12001198
    12011199            //mov eax,ebp
     
    12101208
    12111209            //push eax
    1212             op_push(REG_EAX);
     1210            compiler.codeGenerator.op_push(REG_EAX);
    12131211
    12141212            //call FillMemory
     
    12371235
    12381236        //pop eax
    1239         op_pop( REG_EAX );
     1237        compiler.codeGenerator.op_pop( REG_EAX );
    12401238
    12411239        RELATIVE_VAR RelativeVar;
     
    12731271
    12741272            //add eax,dword ptr[offset]
    1275             op_add_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     1273            compiler.codeGenerator.op_add_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
    12761274        }
    12771275        else{
    12781276            //mov eax,dword ptr[offset]
    1279             op_mov_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     1277            compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
    12801278        }
    12811279        obp-=sizeof(long);
     
    13561354
    13571355            // 変数領域に要するLONG_PTR単位の個数を引き渡す
    1358             op_push_V( pVar->GetMemorySize()/PTR_SIZE );
     1356            compiler.codeGenerator.op_push_V( pVar->GetMemorySize()/PTR_SIZE );
    13591357
    13601358
     
    13631361
    13641362            //mov eax,offset
    1365             op_mov_RV(REG_EAX,(int)pVar->GetOffsetAddress());
     1363            compiler.codeGenerator.op_mov_RV(REG_EAX,(int)pVar->GetOffsetAddress());
    13661364            obp-=sizeof(long);
    13671365            pobj_GlobalVarSchedule->add();
     
    13691367
    13701368            //push eax
    1371             op_push( REG_EAX );
     1369            compiler.codeGenerator.op_push( REG_EAX );
    13721370
    13731371            //
     
    13811379
    13821380            //push eax
    1383             op_push( REG_EAX );
     1381            compiler.codeGenerator.op_push( REG_EAX );
    13841382
    13851383            //
     
    13881386
    13891387            // call AddGlobalRootPtr
    1390             op_call( pUserProc_AddGlobalRootPtr );
     1388            compiler.codeGenerator.op_call( pUserProc_AddGlobalRootPtr );
    13911389
    13921390            ReallocNativeCodeBuffer();
Note: See TracChangeset for help on using the changeset viewer.