Ignore:
Timestamp:
Jul 31, 2007, 4:30:31 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_Var.cpp

    r243 r254  
    44#include <jenga/include/smoothie/LexicalAnalysis.h>
    55
    6 #include <LexicalScopingImpl.h>
    76#include <CodeGenerator.h>
    87#include <Compiler.h>
     
    989988
    990989        //mov qword ptr[rsp+offset],rax
    991         compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32);
    992         obp-=sizeof(long);
    993         AddLocalVarAddrSchedule();
    994         obp+=sizeof(long);
     990        compiler.codeGenerator.localVarPertialSchedules.push_back(
     991            compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32, Schedule::None, true )
     992        );
    995993    }
    996994    else if( type.IsSingle() ){
     
    999997
    1000998        //mov dword ptr[rsp+offset],value
    1001         compiler.codeGenerator.op_mov_MV(sizeof(long),REG_RSP,offset, Schedule::LocalVar, USE_OFFSET,*(int *)&flt);
     999        compiler.codeGenerator.localVarPertialSchedules.push_back(
     1000            compiler.codeGenerator.op_mov_MV(sizeof(long),REG_RSP,offset, Schedule::None, true, USE_OFFSET,*(int *)&flt)
     1001        );
    10021002    }
    10031003    else if( type.Is64() || type.IsPointer() ){
     
    10141014
    10151015            //mov qword ptr[rsp+offset],rax
    1016             compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32, Schedule::LocalVar );
     1016            compiler.codeGenerator.localVarPertialSchedules.push_back(
     1017                compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32, Schedule::None, true )
     1018            );
    10171019        }
    10181020        else{
     
    10221024
    10231025                //mov qword ptr[rsp+offset],rax
    1024                 compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32, Schedule::LocalVar );
     1026                compiler.codeGenerator.localVarPertialSchedules.push_back(
     1027                    compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RSP,offset,MOD_BASE_DISP32, Schedule::None, true )
     1028                );
    10251029            }
    10261030            else{
    10271031                //mov qword ptr[rsp+offset],value
    1028                 compiler.codeGenerator.op_mov_MV(sizeof(_int64),REG_RSP,offset, Schedule::LocalVar, USE_OFFSET,(int)i64data);
     1032                compiler.codeGenerator.localVarPertialSchedules.push_back(
     1033                    compiler.codeGenerator.op_mov_MV(sizeof(_int64),REG_RSP,offset, Schedule::None, true, USE_OFFSET,(int)i64data)
     1034                );
    10291035            }
    10301036        }
     
    10321038    else if( type.IsDWord() || type.IsLong() ){
    10331039        //mov dword ptr[rsp+offset],value
    1034         compiler.codeGenerator.op_mov_MV(sizeof(long),REG_RSP,offset, Schedule::LocalVar,USE_OFFSET,(int)i64data);
     1040        compiler.codeGenerator.localVarPertialSchedules.push_back(
     1041            compiler.codeGenerator.op_mov_MV(sizeof(long),REG_RSP,offset, Schedule::None, true, USE_OFFSET,(int)i64data)
     1042        );
    10351043    }
    10361044    else if( type.IsWord() || type.IsInteger() ){
    10371045        //mov word ptr[rsp+offset],value
    1038         compiler.codeGenerator.op_mov_MV(sizeof(short),REG_RSP,offset, Schedule::LocalVar,USE_OFFSET,(int)i64data);
     1046        compiler.codeGenerator.localVarPertialSchedules.push_back(
     1047            compiler.codeGenerator.op_mov_MV(sizeof(short),REG_RSP,offset, Schedule::None, true, USE_OFFSET,(int)i64data)
     1048        );
    10391049    }
    10401050    else if( type.IsSByte() || type.IsByte() || type.IsBoolean() ){
    10411051        //mov byte ptr[rsp+offset],value
    1042         compiler.codeGenerator.op_mov_MV(sizeof(char),REG_RSP,offset, Schedule::LocalVar,USE_OFFSET,(int)i64data);
     1052        compiler.codeGenerator.localVarPertialSchedules.push_back(
     1053            compiler.codeGenerator.op_mov_MV(sizeof(char),REG_RSP,offset, Schedule::None, true, USE_OFFSET,(int)i64data)
     1054        );
    10431055    }
    10441056    return true;
     
    10741086
    10751087        //レキシカルスコープ
    1076         pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
    1077         pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
     1088        pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
     1089        pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
    10781090        pVar->bLiving=TRUE;
    10791091
     
    11091121
    11101122        //レキシカルスコープ
    1111         pVar->SetScopeLevel( GetLexicalScopes().GetNowLevel() );
    1112         pVar->SetScopeStartAddress( GetLexicalScopes().GetStartAddress() );
     1123        pVar->SetScopeLevel( compiler.codeGenerator.lexicalScopes.GetNowLevel() );
     1124        pVar->SetScopeStartAddress( compiler.codeGenerator.lexicalScopes.GetStartAddress() );
    11131125        pVar->bLiving=TRUE;
    11141126
     
    11511163
    11521164            //add rcx, offset
    1153             compiler.codeGenerator.op_add_RV( REG_RCX, -pVar->GetOffsetAddress() );
    1154             obp-=sizeof(long);
    1155             AddLocalVarAddrSchedule();
    1156             obp+=sizeof(long);
     1165            compiler.codeGenerator.localVarPertialSchedules.push_back(
     1166                compiler.codeGenerator.op_add_RV( REG_RCX, -pVar->GetOffsetAddress(), Schedule::None, true )
     1167            );
    11571168
    11581169            //call FillMemory
     
    12171228        if(pRelativeVar->bOffsetOffset){
    12181229            //add r11,offset
    1219             compiler.codeGenerator.op_add_RV( REG_R11, (long)pRelativeVar->offset, Schedule::LocalVar );
     1230            compiler.codeGenerator.localVarPertialSchedules.push_back(
     1231                compiler.codeGenerator.op_add_RV( REG_R11, (long)pRelativeVar->offset, Schedule::None, true )
     1232            );
    12201233
    12211234            //add r11,rsp
     
    12301243
    12311244            //add reg,offset
    1232             compiler.codeGenerator.op_add_RV(reg,(long)pRelativeVar->offset, Schedule::LocalVar );
     1245            compiler.codeGenerator.localVarPertialSchedules.push_back(
     1246                compiler.codeGenerator.op_add_RV(reg,(long)pRelativeVar->offset, Schedule::None, true )
     1247            );
    12331248        }
    12341249    }
     
    12361251        if(pRelativeVar->bOffsetOffset){
    12371252            //add r11,qword ptr[rsp+offset]
    1238             compiler.codeGenerator.op_add_RM( sizeof(_int64), REG_R11, REG_RSP, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
     1253            compiler.codeGenerator.localVarPertialSchedules.push_back(
     1254                compiler.codeGenerator.op_add_RM( sizeof(_int64), REG_R11, REG_RSP, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::None, true )
     1255            );
    12391256        }
    12401257        else{
    12411258            //mov r11,qword ptr[rsp+offset]
    1242             compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
     1259            compiler.codeGenerator.localVarPertialSchedules.push_back(
     1260                compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::None, true )
     1261            );
    12431262        }
    12441263
Note: See TracChangeset for help on using the changeset viewer.