Ignore:
Timestamp:
Oct 10, 2007, 1:52:43 AM (17 years ago)
Author:
dai_9181
Message:

64ビット版でもインターフェイスのベース実装周りをコンパイルできるようにした(インターフェイス機構自体はまだ未完成)

File:
1 edited

Legend:

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

    r339 r345  
    121121        //                ->func3
    122122
     123        // vtblマスターリストのポインタを取得
    123124        //mov r11,qword ptr[rcx]
    124125        compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RCX,0,MOD_BASE);
    125126
    126         int i2 = pobj_c->GetFuncNumInVtbl( &userProc );
     127        // vtblのポインタを取得
     128        //mov r11,dword ptr[r11+vtblMasterListIndex]
     129        int vtblMasterListIndex = pobj_c->GetVtblMasterListIndex( &userProc );
     130        compiler.codeGenerator.op_mov_RM( sizeof(_int64), REG_R11, REG_R11, vtblMasterListIndex, MOD_BASE_DISP32 );
     131
     132        int vtblIndex = pobj_c->GetFuncNumInVtbl( &userProc );
    127133
    128134        //mov rax,qword ptr[r11+func_index]
    129         if(i2*PTR_SIZE<=0x7F){
    130             compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RAX,REG_R11,i2*PTR_SIZE,MOD_BASE_DISP8);
    131         }
    132         else{
    133             compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RAX,REG_R11,i2*PTR_SIZE,MOD_BASE_DISP32);
     135        if( vtblIndex * PTR_SIZE <= 0x7F )
     136        {
     137            compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RAX,REG_R11,vtblIndex*PTR_SIZE,MOD_BASE_DISP8);
     138        }
     139        else
     140        {
     141            compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RAX,REG_R11,vtblIndex*PTR_SIZE,MOD_BASE_DISP32);
    134142        }
    135143    }
Note: See TracChangeset for help on using the changeset viewer.