Changeset 75 in dev for BasicCompiler32/increment.cpp


Ignore:
Timestamp:
Mar 20, 2007, 4:36:16 AM (18 years ago)
Author:
dai_9181
Message:

TYPEINFO→Typeへのリファクタリングを実施。64bitはほぼ完了。32bitが全般的に未完成。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/increment.cpp

    r64 r75  
    33
    44void IncDec(int idCalc, char *lpszLeft, char *lpszRight){
    5     int VarType;
    6     LONG_PTR lpVarIndex;
    7     RELATIVE_VAR VarRelativeVar;
    8 
    95
    106    ///////////////////////////
     
    128    ///////////////////////////
    139
     10    RELATIVE_VAR VarRelativeVar;
     11    Type varType;
    1412    if(!GetVarOffsetReadWrite(
    1513        lpszLeft,
    16         &VarType,
    1714        &VarRelativeVar,
    18         &lpVarIndex)) return;
     15        varType)) return;
    1916
    2017    if(IsUse_ecx(&VarRelativeVar)){
     
    2825    ///////////////////////////////////
    2926
    30     if(IsRealNumberType(VarType)){
     27    if( varType.IsReal() ){
    3128        //実数
    32         SetReg_RealVariable(VarType,&VarRelativeVar);
     29        SetReg_RealVariable(varType.GetBasicType(),&VarRelativeVar);
    3330    }
    3431    else{
    3532        //整数
    36         SetReg_WholeVariable(VarType,&VarRelativeVar,REG_EAX);
     33        SetReg_WholeVariable(varType.GetBasicType(),&VarRelativeVar,REG_EAX);
    3734    }
    3835
    3936   
    40     if(IsWholeNumberType(VarType)&&lstrcmp(lpszRight,"1")==0&&
     37    if(varType.IsWhole()&&lstrcmp(lpszRight,"1")==0&&
    4138        (idCalc==CALC_ADDITION||idCalc==CALC_SUBTRACTION)){
    4239        ////////////////////////////////////////////
     
    4441        ////////////////////////////////////////////
    4542
    46         if(Is64Type(VarType)){
     43        if( varType.Is64() ){
    4744            if(idCalc==CALC_ADDITION){
    4845                //64ビット インクリメント
     
    8077        op_push(REG_ECX);
    8178
    82 
    83         if(VarType==DEF_DOUBLE){
     79        if( varType.IsDouble() ){
    8480            //sub esp,8
    8581            op_sub_esp(8);
    8682
    8783            //fstp qword ptr[esp]
    88             op_fstp_basereg(VarType,REG_ESP);
    89         }
    90         else if(VarType==DEF_SINGLE){
     84            op_fstp_basereg(varType.GetBasicType(),REG_ESP);
     85        }
     86        else if( varType.IsSingle() ){
    9187            //sub esp,4
    9288            op_sub_esp(4);
    9389
    9490            //fstp dword ptr[esp]
    95             op_fstp_basereg(VarType,REG_ESP);
    96         }
    97         else if(Is64Type(VarType)){
     91            op_fstp_basereg(varType.GetBasicType(),REG_ESP);
     92        }
     93        else if( varType.Is64() ){
    9894            //push edx
    9995            op_push(REG_EDX);
     
    107103        }
    108104
    109         int CalcType;
    110         CalcType=NumOpe(lpszRight,VarType,lpVarIndex,0);
    111 
    112         if(VarType==DEF_DOUBLE)         ChangeTypeToDouble(CalcType);
    113         else if(VarType==DEF_SINGLE)    ChangeTypeToSingle(CalcType);
    114         else ChangeTypeToWhole(CalcType,VarType);
    115 
    116         int type[255],sp;
     105        Type calcType;
     106        if( !NumOpe(lpszRight,varType,calcType) ){
     107            return;
     108        }
     109
     110        if( varType.IsDouble() )        ChangeTypeToDouble(calcType.GetBasicType());
     111        else if( varType.IsSingle() )   ChangeTypeToSingle(calcType.GetBasicType());
     112        else ChangeTypeToWhole(calcType.GetBasicType(),varType.GetBasicType());
     113
     114        int type_stack[255],sp;
    117115        LONG_PTR index_stack[255];
    118         type[0]=VarType;
    119         type[1]=VarType;
    120         index_stack[0]=lpVarIndex;
    121         index_stack[1]=lpVarIndex;
     116        type_stack[0]=varType.GetBasicType();
     117        type_stack[1]=varType.GetBasicType();
     118        index_stack[0]=varType.GetIndex();
     119        index_stack[1]=varType.GetIndex();
    122120        sp=2;
    123121
    124122        switch(idCalc){
    125123            case CALC_XOR:
    126                 Calc_Xor(type,index_stack,&sp);
     124                Calc_Xor(type_stack,index_stack,&sp);
    127125                break;
    128126            case CALC_OR:
    129                 Calc_Or(type,index_stack,&sp);
     127                Calc_Or(type_stack,index_stack,&sp);
    130128                break;
    131129            case CALC_AND:
    132                 Calc_And(type,index_stack,&sp);
     130                Calc_And(type_stack,index_stack,&sp);
    133131                break;
    134132            case CALC_SHL:
    135                 Calc_SHL(type,&sp);
     133                Calc_SHL(type_stack,&sp);
    136134                break;
    137135            case CALC_SHR:
    138                 Calc_SHR(type,&sp);
     136                Calc_SHR(type_stack,&sp);
    139137                break;
    140138            case CALC_ADDITION:
    141139            case CALC_SUBTRACTION:
    142140            case CALC_PRODUCT:
    143                 CalcTwoTerm_Arithmetic(idCalc,type,index_stack,&sp);
     141                CalcTwoTerm_Arithmetic(idCalc,type_stack,index_stack,&sp);
    144142                break;
    145143            case CALC_MOD:
    146                 Calc_Mod(type,&sp);
     144                Calc_Mod(type_stack,&sp);
    147145                break;
    148146            case CALC_QUOTIENT:
    149                 Calc_Divide(type,&sp,VarType);
     147                Calc_Divide(type_stack,&sp,varType.GetBasicType());
    150148                break;
    151149            case CALC_INTQUOTIENT:
    152                 Calc_IntDivide(type,index_stack,&sp);
     150                Calc_IntDivide(type_stack,index_stack,&sp);
    153151                break;
    154152            case CALC_POWER:
    155                 Calc_Power(type,&sp);
    156                 break;
    157         }
    158 
    159 
    160         if(VarType==DEF_DOUBLE){
     153                Calc_Power(type_stack,&sp);
     154                break;
     155        }
     156
     157
     158        if( varType.IsDouble() ){
    161159            //fld qword ptr[esp]
    162             op_fld_basereg(VarType,REG_ESP);
     160            op_fld_basereg(varType.GetBasicType(),REG_ESP);
    163161
    164162            //add esp,8
    165163            op_add_esp(8);
    166164        }
    167         else if(VarType==DEF_SINGLE){
     165        else if( varType.IsSingle() ){
    168166            //fld dword ptr[esp]
    169             op_fld_basereg(VarType,REG_ESP);
     167            op_fld_basereg(varType.GetBasicType(),REG_ESP);
    170168
    171169            //add esp,4
    172170            op_add_esp(4);
    173171        }
    174         else if(Is64Type(VarType)){
     172        else if( varType.Is64() ){
    175173            //pop eax
    176174            op_pop(REG_EAX);
     
    200198    }
    201199
    202     SetVariableFromEax(VarType,VarType,&VarRelativeVar);
     200    SetVariableFromEax(varType.GetBasicType(),varType.GetBasicType(),&VarRelativeVar);
    203201}
Note: See TracChangeset for help on using the changeset viewer.