Ignore:
Timestamp:
Jul 25, 2007, 4:04:11 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

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

    r228 r232  
    868868
    869869            //mov qword ptr[offset],rax
    870             compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,0,offset,MOD_DISP32);
    871             obp-=sizeof(long);
    872             pobj_GlobalVarSchedule->add();
    873             obp+=sizeof(long);
     870            compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,0,offset,MOD_DISP32, Schedule::GlobalVar );
    874871        }
    875872        else{
     
    992989
    993990        //mov rax,i64data
    994         compiler.codeGenerator.op_mov64_ToReg(REG_RAX,i64data);
     991        compiler.codeGenerator.op_mov_RV64(REG_RAX,i64data);
    995992
    996993        //mov qword ptr[rsp+offset],rax
     
    10341031            if(i64data&0xFFFFFFFF00000000){
    10351032                //mov rax,i64data
    1036                 compiler.codeGenerator.op_mov64_ToReg(REG_RAX,i64data);
     1033                compiler.codeGenerator.op_mov_RV64(REG_RAX,i64data);
    10371034
    10381035                //mov qword ptr[rsp+offset],rax
     
    11161113        //アラインメントを考慮
    11171114        if( pVar->GetType().IsStruct() ){
    1118             int alignment = pVar->GetType().GetClass().iAlign;
     1115            int alignment = pVar->GetType().GetClass().GetFixedAlignment();
    11191116
    11201117            if( alignment ){
     
    12221219        if(pRelativeVar->bOffsetOffset){
    12231220            //add r11,offset
    1224             OpBuffer[obp++]=(char)0x49;
    1225             OpBuffer[obp++]=(char)0x81;
    1226             OpBuffer[obp++]=(char)0xC3;
    1227             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    1228             pobj_GlobalVarSchedule->add();
    1229             obp+=sizeof(long);
     1221            compiler.codeGenerator.op_add_RV( REG_R11, (long)pRelativeVar->offset, Schedule::GlobalVar );
    12301222
    12311223            //mov reg,r11
     
    12341226        else{
    12351227            //mov reg,offset
    1236             compiler.codeGenerator.op_mov64_ToReg(reg,(long)pRelativeVar->offset);
    1237             obp-=sizeof(long);
    1238             pobj_GlobalVarSchedule->add();
    1239             obp+=sizeof(long);
     1228            compiler.codeGenerator.op_mov_RV( sizeof(_int64), reg, (long)pRelativeVar->offset, Schedule::GlobalVar );
    12401229        }
    12411230    }
     
    12431232        if(pRelativeVar->bOffsetOffset){
    12441233            //add r11,qword ptr[offset]
    1245             compiler.codeGenerator.op_add_RM( sizeof(_int64), REG_R11, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
    1246             obp-=sizeof(long);
    1247             pobj_GlobalVarSchedule->add();
    1248             obp+=sizeof(long);
     1234            compiler.codeGenerator.op_add_RM( sizeof(_int64), REG_R11, REG_NON, (int)pRelativeVar->offset, MOD_DISP32, Schedule::GlobalVar );
    12491235        }
    12501236        else{
    12511237            //mov r11,qword ptr[offset]
    1252             compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
    1253             obp-=sizeof(long);
    1254             pobj_GlobalVarSchedule->add();
    1255             obp+=sizeof(long);
     1238            compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_NON,(int)pRelativeVar->offset,MOD_DISP32, Schedule::GlobalVar );
    12561239        }
    12571240
     
    12611244        if(pRelativeVar->bOffsetOffset){
    12621245            //add r11,offset
    1263             OpBuffer[obp++]=(char)0x49;
    1264             OpBuffer[obp++]=(char)0x81;
    1265             OpBuffer[obp++]=(char)0xC3;
    1266             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    1267             AddLocalVarAddrSchedule();
    1268             obp+=sizeof(long);
     1246            compiler.codeGenerator.op_add_RV( REG_R11, (long)pRelativeVar->offset, Schedule::LocalVar );
    12691247
    12701248            //add r11,rsp
     
    12791257
    12801258            //add reg,offset
    1281             compiler.codeGenerator.op_add_RV(reg,(int)pRelativeVar->offset);
    1282             obp-=sizeof(long);
    1283             AddLocalVarAddrSchedule();
    1284             obp+=sizeof(long);
     1259            compiler.codeGenerator.op_add_RV(reg,(long)pRelativeVar->offset, Schedule::LocalVar );
    12851260        }
    12861261    }
     
    12881263        if(pRelativeVar->bOffsetOffset){
    12891264            //add r11,qword ptr[rsp+offset]
    1290             OpBuffer[obp++]=(char)0x4C;
    1291             OpBuffer[obp++]=(char)0x03;
    1292             OpBuffer[obp++]=(char)0x9C;
    1293             OpBuffer[obp++]=(char)0x24;
    1294             *((long *)(OpBuffer+obp))=(int)pRelativeVar->offset;
    1295             AddLocalVarAddrSchedule();
    1296             obp+=sizeof(long);
     1265            compiler.codeGenerator.op_add_RM( REG_R11, REG_RSP, (long)pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
    12971266        }
    12981267        else{
    12991268            //mov r11,qword ptr[rsp+offset]
    1300             compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    1301             obp-=sizeof(long);
    1302             AddLocalVarAddrSchedule();
    1303             obp+=sizeof(long);
     1269            compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
    13041270        }
    13051271
     
    13311297            // ルートポインタを引き渡す
    13321298            //mov rdx,offset
    1333             compiler.codeGenerator.op_mov_RV(sizeof(_int64), REG_RDX,(int)pVar->GetOffsetAddress());
    1334             obp-=sizeof(long);
    1335             pobj_GlobalVarSchedule->add();
    1336             obp+=sizeof(long);
     1299            compiler.codeGenerator.op_mov_RV(sizeof(_int64), REG_RDX,(int)pVar->GetOffsetAddress(), Schedule::GlobalVar );
    13371300
    13381301            // Thisポインタを引き渡す
Note: See TracChangeset for help on using the changeset viewer.