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/NumOpe_TypeOperation.cpp

    r206 r225  
    2020
    2121        //pop eax
    22         op_pop(REG_EAX);
     22        compiler.codeGenerator.op_pop(REG_EAX);
    2323
    2424        //cdq
    25         op_cdq();
     25        compiler.codeGenerator.op_cdq();
    2626
    2727        //push edx
    28         op_push(REG_EDX);
     28        compiler.codeGenerator.op_push(REG_EDX);
    2929
    3030        //push eax
    31         op_push(REG_EAX);
     31        compiler.codeGenerator.op_push(REG_EAX);
    3232    }
    3333    else{
     
    3535
    3636        //pop eax
    37         op_pop(REG_EAX);
     37        compiler.codeGenerator.op_pop(REG_EAX);
    3838
    3939        //push 0
    40         op_push_V(0);
     40        compiler.codeGenerator.op_push_V(0);
    4141
    4242        //push eax
    43         op_push(REG_EAX);
     43        compiler.codeGenerator.op_push(REG_EAX);
    4444    }
    4545}
     
    4949    if(Is64Type(type)){
    5050        //pop eax
    51         op_pop(REG_EAX);
     51        compiler.codeGenerator.op_pop(REG_EAX);
    5252
    5353        //pop edx
    54         op_pop(REG_EDX);
     54        compiler.codeGenerator.op_pop(REG_EDX);
    5555
    5656        //push eax
    57         op_push(REG_EAX);
     57        compiler.codeGenerator.op_push(REG_EAX);
    5858    }
    5959    else if(type==DEF_INTEGER || (Smoothie::IsUnicode()&&type==DEF_CHAR)){
    6060        //pop eax
    61         op_pop(REG_EAX);
     61        compiler.codeGenerator.op_pop(REG_EAX);
    6262
    6363        //movsx eax,ax
    64         OpBuffer[obp++]=(char)0x0F;
    65         OpBuffer[obp++]=(char)0xBF;
    66         OpBuffer[obp++]=(char)0xC0;
     64        compiler.codeGenerator.op_movsx_R32R16( REG_EAX );
    6765
    6866        //push eax
    69         op_push(REG_EAX);
     67        compiler.codeGenerator.op_push(REG_EAX);
    7068    }
    7169    else if(type==DEF_WORD){
    7270        //pop eax
    73         op_pop(REG_EAX);
     71        compiler.codeGenerator.op_pop(REG_EAX);
    7472
    7573        //and eax,0000FFFFh
     
    7977
    8078        //push eax
    81         op_push(REG_EAX);
     79        compiler.codeGenerator.op_push(REG_EAX);
    8280    }
    8381    else if(type==DEF_SBYTE || (Smoothie::IsUnicode()==false&&type==DEF_CHAR)){
    8482        //pop eax
    85         op_pop(REG_EAX);
     83        compiler.codeGenerator.op_pop(REG_EAX);
    8684
    8785        //movsx eax,al
    88         OpBuffer[obp++]=(char)0x0F;
    89         OpBuffer[obp++]=(char)0xBE;
    90         OpBuffer[obp++]=(char)0xC0;
     86        compiler.codeGenerator.op_movsx_R32R8( REG_EAX );
    9187
    9288        //push eax
    93         op_push(REG_EAX);
     89        compiler.codeGenerator.op_push(REG_EAX);
    9490    }
    9591    else if(type==DEF_BYTE||type==DEF_BOOLEAN){
    9692        //pop eax
    97         op_pop(REG_EAX);
     93        compiler.codeGenerator.op_pop(REG_EAX);
    9894
    9995        //and eax,000000FFh
     
    10399
    104100        //push eax
    105         op_push(REG_EAX);
     101        compiler.codeGenerator.op_push(REG_EAX);
    106102    }
    107103}
     
    109105    if(type==DEF_SBYTE || (Smoothie::IsUnicode()==false&&type==DEF_CHAR)){
    110106        //pop eax
    111         op_pop(REG_EAX);
     107        compiler.codeGenerator.op_pop(REG_EAX);
    112108
    113109        //movsx eax,al
    114         OpBuffer[obp++]=(char)0x0F;
    115         OpBuffer[obp++]=(char)0xBE;
    116         OpBuffer[obp++]=(char)0xC0;
     110        compiler.codeGenerator.op_movsx_R32R8( REG_EAX );
    117111
    118112        //push eax
    119         op_push(REG_EAX);
     113        compiler.codeGenerator.op_push(REG_EAX);
    120114    }
    121115    else if(type==DEF_BYTE){
    122116        //pop eax
    123         op_pop(REG_EAX);
     117        compiler.codeGenerator.op_pop(REG_EAX);
    124118
    125119        //and eax,000000FFh
     
    129123
    130124        //push eax
    131         op_push(REG_EAX);
     125        compiler.codeGenerator.op_push(REG_EAX);
    132126    }
    133127}
     
    135129    if(Is64Type(type)){
    136130        //pop eax
    137         op_pop(REG_EAX);
     131        compiler.codeGenerator.op_pop(REG_EAX);
    138132
    139133        //pop edx
    140         op_pop(REG_EDX);
     134        compiler.codeGenerator.op_pop(REG_EDX);
    141135
    142136        //push eax
    143         op_push(REG_EAX);
     137        compiler.codeGenerator.op_push(REG_EAX);
    144138    }
    145139}
     
    150144        if(Is64Type(NewType)){
    151145            //fld qword ptr[esp]
    152             op_fld_ptr_esp(DEF_DOUBLE);
     146            compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
    153147
    154148            //fistp qword ptr[esp]
    155             op_fistp_ptr_esp( sizeof(_int64) );
     149            compiler.codeGenerator.op_fistp_ptr_esp( sizeof(_int64) );
    156150        }
    157151        else{
    158152            //fld qword ptr[esp]
    159             op_fld_ptr_esp(DEF_DOUBLE);
     153            compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
    160154
    161155            //add esp,4
    162             op_add_esp(4);
     156            compiler.codeGenerator.op_add_esp(4);
    163157
    164158            //fistp dword ptr[esp]
    165             op_fistp_ptr_esp( sizeof(long) );
     159            compiler.codeGenerator.op_fistp_ptr_esp( sizeof(long) );
    166160        }
    167161    }
     
    169163        if(Is64Type(NewType)){
    170164            //fld dword ptr[esp]
    171             op_fld_ptr_esp(DEF_SINGLE);
     165            compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
    172166
    173167            //sub esp,4
    174             op_sub_esp(4);
     168            compiler.codeGenerator.op_sub_esp(4);
    175169
    176170            //fistp qword ptr[esp]
    177             op_fistp_ptr_esp( sizeof(_int64) );
     171            compiler.codeGenerator.op_fistp_ptr_esp( sizeof(_int64) );
    178172        }
    179173        else{
    180174            //fld dword ptr[esp]
    181             op_fld_ptr_esp(DEF_SINGLE);
     175            compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
    182176
    183177            //fistp dword ptr[esp]
    184             op_fistp_ptr_esp( sizeof(long) );
     178            compiler.codeGenerator.op_fistp_ptr_esp( sizeof(long) );
    185179        }
    186180    }
Note: See TracChangeset for help on using the changeset viewer.