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

    r206 r225  
    11#include "stdafx.h"
     2
     3#include <Compiler.h>
    24
    35#include "../BasicCompiler_Common/common.h"
     
    1921    if(IsUse_ecx(&VarRelativeVar)){
    2022        //push ecx
    21         op_push(REG_ECX);
     23        compiler.codeGenerator.op_push(REG_ECX);
    2224    }
    2325
     
    4850
    4951                //add eax,1
    50                 op_add_RV8(REG_EAX,1);
     52                compiler.codeGenerator.op_add_RV8(REG_EAX,1);
    5153
    5254                //adc edx,0
    53                 op_adc_RV8(REG_EDX,0);
     55                compiler.codeGenerator.op_adc_RV8(REG_EDX,0);
    5456            }
    5557            else if(idCalc==CALC_SUBTRACTION){
     
    5759
    5860                //sub eax,1
    59                 op_sub_RV8(REG_EAX,1);
     61                compiler.codeGenerator.op_sub_RV8(REG_EAX,1);
    6062
    6163                //sbb edx,0
    62                 op_sbb_RV8(REG_EDX,0);
     64                compiler.codeGenerator.op_sbb_RV8(REG_EDX,0);
    6365            }
    6466        }
     
    6668            if(idCalc==CALC_ADDITION){
    6769                //インクリメント
    68                 op_inc(REG_EAX);
     70                compiler.codeGenerator.op_inc(REG_EAX);
    6971            }
    7072            else if(idCalc==CALC_SUBTRACTION){
    7173                //デクリメント
    72                 op_dec(REG_EAX);
     74                compiler.codeGenerator.op_dec(REG_EAX);
    7375            }
    7476        }
     
    7779        //変数オフセットを一時退避
    7880        //push ecx
    79         op_push(REG_ECX);
     81        compiler.codeGenerator.op_push(REG_ECX);
    8082
    8183        if( varType.IsDouble() ){
    8284            //sub esp,8
    83             op_sub_esp(8);
     85            compiler.codeGenerator.op_sub_esp(8);
    8486
    8587            //fstp qword ptr[esp]
    86             op_fstp_basereg(varType.GetBasicType(),REG_ESP);
     88            compiler.codeGenerator.op_fstp_basereg(varType.GetBasicType(),REG_ESP);
    8789        }
    8890        else if( varType.IsSingle() ){
    8991            //sub esp,4
    90             op_sub_esp(4);
     92            compiler.codeGenerator.op_sub_esp(4);
    9193
    9294            //fstp dword ptr[esp]
    93             op_fstp_basereg(varType.GetBasicType(),REG_ESP);
     95            compiler.codeGenerator.op_fstp_basereg(varType.GetBasicType(),REG_ESP);
    9496        }
    9597        else if( varType.Is64() ){
    9698            //push edx
    97             op_push(REG_EDX);
     99            compiler.codeGenerator.op_push(REG_EDX);
    98100
    99101            //push eax
    100             op_push(REG_EAX);
     102            compiler.codeGenerator.op_push(REG_EAX);
    101103        }
    102104        else{
    103105            //push eax
    104             op_push(REG_EAX);
     106            compiler.codeGenerator.op_push(REG_EAX);
    105107        }
    106108
     
    160162        if( varType.IsDouble() ){
    161163            //fld qword ptr[esp]
    162             op_fld_basereg(varType.GetBasicType(),REG_ESP);
     164            compiler.codeGenerator.op_fld_basereg(varType.GetBasicType(),REG_ESP);
    163165
    164166            //add esp,8
    165             op_add_esp(8);
     167            compiler.codeGenerator.op_add_esp(8);
    166168        }
    167169        else if( varType.IsSingle() ){
    168170            //fld dword ptr[esp]
    169             op_fld_basereg(varType.GetBasicType(),REG_ESP);
     171            compiler.codeGenerator.op_fld_basereg(varType.GetBasicType(),REG_ESP);
    170172
    171173            //add esp,4
    172             op_add_esp(4);
     174            compiler.codeGenerator.op_add_esp(4);
    173175        }
    174176        else if( varType.Is64() ){
    175177            //pop eax
    176             op_pop(REG_EAX);
     178            compiler.codeGenerator.op_pop(REG_EAX);
    177179
    178180            //pop edx
    179             op_pop(REG_EDX);
     181            compiler.codeGenerator.op_pop(REG_EDX);
    180182        }
    181183        else{
    182184            //pop eax
    183             op_pop(REG_EAX);
     185            compiler.codeGenerator.op_pop(REG_EAX);
    184186        }
    185187
     
    187189        //変数オフセットを復元
    188190        //pop ecx
    189         op_pop(REG_ECX);
     191        compiler.codeGenerator.op_pop(REG_ECX);
    190192    }
    191193
     
    197199    if(IsUse_ecx(&VarRelativeVar)){
    198200        //pop ecx
    199         op_pop(REG_ECX);
     201        compiler.codeGenerator.op_pop(REG_ECX);
    200202    }
    201203
Note: See TracChangeset for help on using the changeset viewer.