Ignore:
Timestamp:
Jul 25, 2007, 12:02:30 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

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

    r230 r231  
    978978
    979979        //mov dword ptr[ebp+offset+sizeof(long)],eax
    980         OpBuffer[obp++]=(char)0x89;
    981         OpBuffer[obp++]=(char)0x85;
    982         *((long *)(OpBuffer+obp))=offset+sizeof(long);
    983         AddLocalVarAddrSchedule();
    984         obp+=sizeof(long);
     980        compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset+sizeof(long), MOD_BASE_DISP32, Schedule::LocalVar );
    985981
    986982        //mov eax,LOLONG(dbl)
    987         OpBuffer[obp++]=(char)0xB8;
    988         *((long *)(OpBuffer+obp))=*(long *)(&dbl);
    989         obp+=sizeof(long);
     983        compiler.codeGenerator.op_mov_RV( REG_EAX, *(long *)(&dbl) );
    990984
    991985        //mov dword ptr[ebp+offset],eax
    992         OpBuffer[obp++]=(char)0x89;
    993         OpBuffer[obp++]=(char)0x85;
    994         *((long *)(OpBuffer+obp))=offset;
    995         AddLocalVarAddrSchedule();
    996         obp+=sizeof(long);
     986        compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, Schedule::LocalVar );
    997987    }
    998988    else if( type.IsSingle() ){
    999989        float flt;
    1000990        flt=(float)dbl;
     991
    1001992        //mov eax,InitValue
    1002         OpBuffer[obp++]=(char)0xB8;
    1003         *((long *)(OpBuffer+obp))=*(long *)&flt;
    1004         obp+=sizeof(long);
     993        compiler.codeGenerator.op_mov_RV( REG_EAX, *(long *)&flt );
    1005994
    1006995        //mov dword ptr[ebp+offset],eax
    1007         OpBuffer[obp++]=(char)0x89;
    1008         OpBuffer[obp++]=(char)0x85;
    1009         *((long *)(OpBuffer+obp))=offset;
    1010         AddLocalVarAddrSchedule();
    1011         obp+=sizeof(long);
     996        compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::LocalVar );
    1012997    }
    1013998    else if( type.Is64() ){
    1014999        //mov eax,HILONG(i64data)
    1015         OpBuffer[obp++]=(char)0xB8;
    1016         *((long *)(OpBuffer+obp))=(long)*(long *)(((char *)(&i64data))+4);
    1017         obp+=sizeof(long);
     1000        compiler.codeGenerator.op_mov_RV( REG_EAX, *(long *)(((char *)(&i64data))+4) );
    10181001
    10191002        //mov dword ptr[ebp+offset+sizeof(long)],eax
    1020         OpBuffer[obp++]=(char)0x89;
    1021         OpBuffer[obp++]=(char)0x85;
    1022         *((long *)(OpBuffer+obp))=offset+sizeof(long);
    1023         AddLocalVarAddrSchedule();
    1024         obp+=sizeof(long);
     1003        compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset+sizeof(long), MOD_BASE_DISP32, Schedule::LocalVar );
    10251004
    10261005        //mov eax,LOLONG(i64data)
    1027         OpBuffer[obp++]=(char)0xB8;
    1028         *((long *)(OpBuffer+obp))=*(long *)(&i64data);
    1029         obp+=sizeof(long);
     1006        compiler.codeGenerator.op_mov_RV( REG_EAX, *(long *)(&i64data) );
    10301007
    10311008        //mov dword ptr[ebp+offset],eax
    1032         OpBuffer[obp++]=(char)0x89;
    1033         OpBuffer[obp++]=(char)0x85;
    1034         *((long *)(OpBuffer+obp))=offset;
    1035         AddLocalVarAddrSchedule();
    1036         obp+=sizeof(long);
     1009        compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, Schedule::LocalVar );
    10371010    }
    10381011    else if( type.IsDWord() || type.IsLong() || type.IsPointer() ){
     
    10531026        else{
    10541027            //mov eax,InitValue
    1055             OpBuffer[obp++]=(char)0xB8;
    1056             *((long *)(OpBuffer+obp))=(long)i64data;
    1057             obp+=sizeof(long);
     1028            compiler.codeGenerator.op_mov_RV( REG_EAX, (long)i64data );
    10581029        }
    10591030
    10601031        //mov dword ptr[ebp+offset],eax
    1061         OpBuffer[obp++]=(char)0x89;
    1062         OpBuffer[obp++]=(char)0x85;
    1063         *((long *)(OpBuffer+obp))=offset;
    1064         AddLocalVarAddrSchedule();
    1065         obp+=sizeof(long);
     1032        compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::LocalVar );
    10661033    }
    10671034    else if( type.IsWord() || type.IsInteger() ){
     
    10731040
    10741041        //mov word ptr[ebp+offset],ax
    1075         OpBuffer[obp++]=(char)0x66;
    1076         OpBuffer[obp++]=(char)0x89;
    1077         OpBuffer[obp++]=(char)0x85;
    1078         *((long *)(OpBuffer+obp))=offset;
    1079         AddLocalVarAddrSchedule();
    1080         obp+=sizeof(long);
     1042        compiler.codeGenerator.op_mov_MR( sizeof(short), REG_EAX, REG_EBP, offset, MOD_BASE_DISP32, Schedule::LocalVar );
    10811043    }
    10821044    else if( type.IsSByte() || type.IsByte() || type.IsBoolean() ){
     
    12871249        if(pRelativeVar->bOffsetOffset){
    12881250            //mov eax,ecx
    1289             OpBuffer[obp++]=(char)0x8B;
    1290             OpBuffer[obp++]=(char)0xC1;
     1251            compiler.codeGenerator.op_mov_RR( REG_EAX, REG_ECX );
    12911252
    12921253            //add eax,dword ptr[ebp+offset]
    1293             OpBuffer[obp++]=(char)0x03;
    1294             OpBuffer[obp++]=(char)0x85;
    1295             *((long *)(OpBuffer+obp))=pRelativeVar->offset;
    1296             AddLocalVarAddrSchedule();
    1297             obp+=sizeof(long);
     1254            compiler.codeGenerator.op_add_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
    12981255        }
    12991256        else{
    13001257            //mov eax,dword ptr[ebp+offset]
    1301             OpBuffer[obp++]=(char)0x8B;
    1302             OpBuffer[obp++]=(char)0x85;
    1303             *((long *)(OpBuffer+obp))=pRelativeVar->offset;
    1304             AddLocalVarAddrSchedule();
    1305             obp+=sizeof(long);
     1258            compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EBP, pRelativeVar->offset, MOD_BASE_DISP32, Schedule::LocalVar );
    13061259        }
    13071260    }
    13081261    else if(pRelativeVar->dwKind==VAR_DIRECTMEM){
    13091262        //mov eax,ecx
    1310         OpBuffer[obp++]=(char)0x8B;
    1311         OpBuffer[obp++]=(char)0xC1;
     1263        compiler.codeGenerator.op_mov_RR( REG_EAX, REG_ECX );
    13121264    }
    13131265}
     
    13401292
    13411293            //mov eax,offset
    1342             compiler.codeGenerator.op_mov_RV(REG_EAX,(int)pVar->GetOffsetAddress());
    1343             obp-=sizeof(long);
    1344             pobj_GlobalVarSchedule->add();
    1345             obp+=sizeof(long);
     1294            compiler.codeGenerator.op_mov_RV(REG_EAX,(int)pVar->GetOffsetAddress(), Schedule::GlobalVar );
    13461295
    13471296            //push eax
Note: See TracChangeset for help on using the changeset viewer.