Changeset 75 in dev for BasicCompiler64/increment.cpp


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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/increment.cpp

    r11 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    //変数オフセットを一時退避
     
    3027
    3128    int reg;
    32     if(VarType==DEF_DOUBLE){
     29    if( varType.IsDouble() ){
    3330        reg=REG_XMM0;
    3431        SetXmmReg_DoubleVariable(&VarRelativeVar,reg);
    3532    }
    36     else if(VarType==DEF_SINGLE){
     33    else if( varType.IsSingle() ){
    3734        reg=REG_XMM0;
    3835        SetXmmReg_SingleVariable(&VarRelativeVar,reg);
     
    4037    else{
    4138        reg=REG_RAX;
    42         SetReg_WholeVariable(VarType,&VarRelativeVar,reg);
     39        SetReg_WholeVariable(varType.GetBasicType(),&VarRelativeVar,reg);
    4340    }
    4441
    4542
    46     if(IsWholeNumberType(VarType)&&lstrcmp(lpszRight,"1")==0&&
     43    if(varType.IsWhole()&&lstrcmp(lpszRight,"1")==0&&
    4744        (idCalc==CALC_ADDITION||idCalc==CALC_SUBTRACTION)){
    4845            if(idCalc==CALC_ADDITION){
     
    6057
    6158        //右辺を計算
    62         int CalcType;
    63         LONG_PTR lpCalcIndex;
     59        Type calcType;
    6460        if(reg==REG_RAX) reg=REG_RCX;
    6561        else reg=REG_RAX;
    66         CalcType=NumOpe(&reg,lpszRight,VarType,lpVarIndex,&lpCalcIndex);
     62        NumOpe(&reg,lpszRight,varType,calcType);
    6763
    6864        //レジスタのブロッキングを解除
     
    7066
    7167
    72         if(IsPtrType(VarType)&&IsWholeNumberType(CalcType)&&(!IsPtrType(CalcType))){
     68        if(varType.IsPointer()&&calcType.IsWhole()&&(!calcType.IsPointer())){
    7369            //左辺がポインタ型、右辺が整数型の場合は、エラーをださないようにする
    74             CalcType=VarType;
    75             lpCalcIndex=lpVarIndex;
     70            calcType = varType;
    7671        }
    7772
     
    8176        /////////////////////////////////
    8277
    83         CheckDifferentType(VarType,lpVarIndex,CalcType,lpCalcIndex,0,0);
     78        CheckDifferentType(varType,calcType,0,0);
    8479
    8580
     
    8883
    8984        //左辺用レジスタ
    90         if(IsRealNumberType(VarType))
     85        if(varType.IsReal())
    9186            pobj_reg->LockXmmReg();
    9287        else
     
    9489
    9590        //右辺値レジスタ
    96         if(VarType==DEF_DOUBLE)
    97             ChangeTypeToXmm_Double(CalcType,
     91        if(varType.IsDouble())
     92            ChangeTypeToXmm_Double(calcType.GetBasicType(),
    9893                pobj_reg->LockXmmReg(),
    9994                pobj_reg->GetNextReg());
    100         else if(VarType==DEF_SINGLE)
    101             ChangeTypeToXmm_Single(CalcType,
     95        else if(varType.IsSingle())
     96            ChangeTypeToXmm_Single(calcType.GetBasicType(),
    10297                pobj_reg->LockXmmReg(),
    10398                pobj_reg->GetNextReg());
    10499        else
    105             ChangeTypeToWhole(CalcType,VarType,
     100            ChangeTypeToWhole(calcType.GetBasicType(),varType.GetBasicType(),
    106101                pobj_reg->LockReg(),
    107102                pobj_reg->GetNextXmmReg());
    108103
    109         int type[255],sp;
     104        int type_stack[255],sp;
    110105        LONG_PTR index_stack[255];
    111         type[0]=VarType;
    112         type[1]=VarType;
    113         index_stack[0]=lpVarIndex;
    114         index_stack[1]=lpVarIndex;
     106        type_stack[0]=varType.GetBasicType();
     107        type_stack[1]=varType.GetBasicType();
     108        index_stack[0]=varType.GetIndex();
     109        index_stack[1]=varType.GetIndex();
    115110        sp=2;
    116111
     
    119114            case CALC_OR:
    120115            case CALC_AND:
    121                 CalcTwoTerm_Logical(idCalc,type,index_stack,&sp);
     116                CalcTwoTerm_Logical(idCalc,type_stack,index_stack,&sp);
    122117                break;
    123118            case CALC_SHL:
    124119            case CALC_SHR:
    125                 Calc_Shift(idCalc,type,&sp);
     120                Calc_Shift(idCalc,type_stack,&sp);
    126121                break;
    127122            case CALC_ADDITION:
    128123            case CALC_SUBTRACTION:
    129124            case CALC_PRODUCT:
    130                 CalcTwoTerm_Arithmetic(idCalc,type,index_stack,&sp);
     125                CalcTwoTerm_Arithmetic(idCalc,type_stack,index_stack,&sp);
    131126                break;
    132127            case CALC_MOD:
    133                 Calc_Mod(type,index_stack,&sp);
     128                Calc_Mod(type_stack,index_stack,&sp);
    134129                break;
    135130            case CALC_QUOTIENT:
    136                 Calc_Divide(type,&sp,VarType);
     131                Calc_Divide(type_stack,&sp,varType.GetBasicType());
    137132                break;
    138133            case CALC_INTQUOTIENT:
    139                 Calc_IntDivide(type,index_stack,&sp);
     134                Calc_IntDivide(type_stack,index_stack,&sp);
    140135                break;
    141136            case CALC_POWER:
    142                 Calc_Power(type,&sp);
     137                Calc_Power(type_stack,&sp);
    143138                break;
    144139        }
     
    160155    }
    161156
    162     SetVariableFromRax(VarType,VarType,&VarRelativeVar);
     157    SetVariableFromRax(varType.GetBasicType(),varType.GetBasicType(),&VarRelativeVar);
    163158}
Note: See TracChangeset for help on using the changeset viewer.