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_Func.cpp

    r206 r225  
    3333    if( resultType.IsDouble() ){
    3434        //fld qword ptr[esp]
    35         op_fld_ptr_esp(DEF_DOUBLE);
     35        compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
    3636
    3737        //fnstcw word ptr[esp]
     
    7676
    7777        //add esp,4
    78         op_add_esp(4);
     78        compiler.codeGenerator.op_add_esp(4);
    7979    }
    8080    else if( resultType.IsSingle() ){
    8181        //fld dword ptr[esp]
    82         op_fld_ptr_esp(DEF_SINGLE);
     82        compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
    8383
    8484        //sub esp,4
    85         op_sub_esp(4);
     85        compiler.codeGenerator.op_sub_esp(4);
    8686
    8787        //fnstcw word ptr[esp]
     
    126126
    127127        //add esp,4
    128         op_add_esp(4);
     128        compiler.codeGenerator.op_add_esp(4);
    129129    }
    130130    else if( resultType.Is64() ){
    131131        //pop eax
    132         op_pop(REG_EAX);
     132        compiler.codeGenerator.op_pop(REG_EAX);
    133133
    134134        //add esp,4
    135         op_add_esp(4);
     135        compiler.codeGenerator.op_add_esp(4);
    136136
    137137        //push eax
    138         op_push(REG_EAX);
     138        compiler.codeGenerator.op_push(REG_EAX);
    139139    }
    140140
    141141    //pop eax
    142     op_pop(REG_EAX);
     142    compiler.codeGenerator.op_pop(REG_EAX);
    143143}
    144144
     
    151151
    152152    //pop eax
    153     op_pop(REG_EAX);
     153    compiler.codeGenerator.op_pop(REG_EAX);
    154154
    155155    //push 0
     
    158158
    159159    //push eax
    160     op_push(REG_EAX);
     160    compiler.codeGenerator.op_push(REG_EAX);
    161161
    162162    //fild qword ptr[esp]
     
    166166
    167167    //add esp,8
    168     op_add_esp(8);
     168    compiler.codeGenerator.op_add_esp(8);
    169169}
    170170void Opcode_Func_Len(const char *Parameter){
     
    193193
    194194        //pop eax
    195         op_pop(REG_EAX);
     195        compiler.codeGenerator.op_pop(REG_EAX);
    196196
    197197        return;
     
    270270
    271271                //mov ecx,eax
    272                 op_mov_RR(REG_ECX,REG_EAX);
     272                compiler.codeGenerator.op_mov_RR(REG_ECX,REG_EAX);
    273273
    274274                //参照タイプが整合しているかをチェック
     
    277277                if(type.IsObjectPtr()){
    278278                    //mov ecx,dword ptr[ecx]
    279                     op_mov_RM(sizeof(long),REG_ECX,REG_ECX,0,MOD_BASE);
     279                    compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_ECX,0,MOD_BASE);
    280280                }
    281281            }
     
    303303        //mov eax,dword ptr[edx+func_index]
    304304        if(i2*PTR_SIZE<=0x7F){
    305             op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP8);
     305            compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP8);
    306306        }
    307307        else{
    308             op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP32);
     308            compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EAX,REG_EDX,i2*PTR_SIZE,MOD_BASE_DISP32);
    309309        }
    310310    }
     
    331331
    332332    //mov eax,size
    333     op_mov_RV( REG_EAX, typeSize );
     333    compiler.codeGenerator.op_mov_RV( REG_EAX, typeSize );
    334334}
    335335void Opcode_Func_VarPtr( const char *Parameter, Type &resultType, bool isCallOn ){
     
    362362
    363363        //mov eax,dword ptr[eax]
    364         op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );
     364        compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );
    365365
    366366        SetError(-120,NULL,cp);
     
    397397
    398398        //mov eax,dword ptr[eax]
    399         op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );
     399        compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );
    400400    }
    401401    else{
     
    416416    if(type==DEF_DOUBLE){
    417417        //pop eax
    418         op_pop(REG_EAX);
     418        compiler.codeGenerator.op_pop(REG_EAX);
    419419
    420420        //fld qword ptr[eax]
     
    424424    else if(type==DEF_SINGLE||type==DEF_DWORD){
    425425        //pop eax
    426         op_pop(REG_EAX);
     426        compiler.codeGenerator.op_pop(REG_EAX);
    427427
    428428        //mov eax,dword ptr[eax]
     
    432432    else if(type==DEF_QWORD){
    433433        //pop ecx
    434         op_pop(REG_ECX);
     434        compiler.codeGenerator.op_pop(REG_ECX);
    435435
    436436        //mov eax,dword ptr[ecx]
    437         op_mov_RM(sizeof(long),REG_EAX,REG_ECX,0,MOD_BASE);
     437        compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EAX,REG_ECX,0,MOD_BASE);
    438438
    439439        //mov edx,dword ptr[ecx+sizeof(long)]
    440         op_mov_RM(sizeof(long),REG_EDX,REG_ECX,sizeof(long),MOD_BASE_DISP8);
     440        compiler.codeGenerator.op_mov_RM(sizeof(long),REG_EDX,REG_ECX,sizeof(long),MOD_BASE_DISP8);
    441441    }
    442442    else if(type==DEF_WORD){
    443443        //pop ebx
    444         op_pop(REG_EBX);
     444        compiler.codeGenerator.op_pop(REG_EBX);
    445445
    446446        //xor eax,eax
     
    455455    else if(type==DEF_BYTE){
    456456        //pop ebx
    457         op_pop(REG_EBX);
     457        compiler.codeGenerator.op_pop(REG_EBX);
    458458
    459459        //xor eax,eax
Note: See TracChangeset for help on using the changeset viewer.