Changeset 62 in dev for BasicCompiler32


Ignore:
Timestamp:
Feb 22, 2007, 3:57:56 AM (17 years ago)
Author:
dai_9181
Message:

グローバル変数に対してByRefを指定できるようにした

Location:
BasicCompiler32
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/Compile_Calc.cpp

    r55 r62  
    656656
    657657
    658     if( VarType == DEF_OBJECT && VarRelativeVar.dwKind == VAR_REFLOCAL ){
     658    if( VarType == DEF_OBJECT
     659        && (VarRelativeVar.dwKind == VAR_REFLOCAL || VarRelativeVar.dwKind == VAR_REFGLOBAL ) ){
    659660        // 参照型オブジェクトへの代入(初期化)はポインタ変数と同様の処理に値する
    660661        PTR_LEVEL_UP( VarType );
    661662
    662         VarRelativeVar.dwKind = VAR_LOCAL;
     663        if( VarRelativeVar.dwKind == VAR_REFGLOBAL ){
     664            VarRelativeVar.dwKind = VAR_GLOBAL;
     665        }
     666        else if( VarRelativeVar.dwKind == VAR_REFLOCAL ){
     667            VarRelativeVar.dwKind = VAR_LOCAL;
     668        }
    663669
    664670        if( CalcType == DEF_OBJECT ){
  • BasicCompiler32/Compile_Calc_PushVar.cpp

    r3 r62  
    2121            op_fld_basereg(type,REG_ECX);
    2222        }
     23    }
     24    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     25        SetError(300,NULL,cp);
    2326    }
    2427    else if(pRelativeVar->dwKind==VAR_LOCAL){
     
    8992            //mov reg, ptr[ecx+offset]
    9093            op_mov_RM(var_size,reg,REG_ECX,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    91             obp-=sizeof(long);
    92             pobj_GlobalVarSchedule->add();
    93             obp+=sizeof(long);
    9494        }
    9595        else{
    9696            //mov reg, ptr[offset]
    9797            op_mov_RM(var_size,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
    98             obp-=sizeof(long);
    99             pobj_GlobalVarSchedule->add();
    100             obp+=sizeof(long);
    101         }
     98        }
     99        obp-=sizeof(long);
     100        pobj_GlobalVarSchedule->add();
     101        obp+=sizeof(long);
     102    }
     103    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     104        if(pRelativeVar->bOffsetOffset){
     105            //add ecx,qword ptr[offset]
     106            op_add_RM(var_size,REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
     107        }
     108        else{
     109            //mov ecx,qword ptr[offset]
     110            op_mov_RM(var_size,REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
     111        }
     112        obp-=sizeof(long);
     113        pobj_GlobalVarSchedule->add();
     114        obp+=sizeof(long);
     115
     116        goto directmem;
    102117    }
    103118    else if(pRelativeVar->dwKind==VAR_LOCAL){
     
    105120            //mov reg, ptr[ebp+ecx+offset]
    106121            op_mov_RM_ex(var_size,reg,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET);
    107             obp-=sizeof(long);
    108             AddLocalVarAddrSchedule();
    109             obp+=sizeof(long);
    110122        }
    111123        else{
    112124            //mov reg, ptr[ebp+offset]
    113125            op_mov_RM(var_size,reg,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    114             obp-=sizeof(long);
    115             AddLocalVarAddrSchedule();
    116             obp+=sizeof(long);
    117         }
     126        }
     127        obp-=sizeof(long);
     128        AddLocalVarAddrSchedule();
     129        obp+=sizeof(long);
    118130    }
    119131    else if(pRelativeVar->dwKind==VAR_REFLOCAL){
     
    121133            //add ecx,qword ptr[ebp+offset]
    122134            op_add_RM(var_size,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    123             obp-=sizeof(long);
    124             AddLocalVarAddrSchedule();
    125             obp+=sizeof(long);
    126135        }
    127136        else{
    128137            //mov ecx,qword ptr[ebp+offset]
    129138            op_mov_RM(var_size,REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    130             obp-=sizeof(long);
    131             AddLocalVarAddrSchedule();
    132             obp+=sizeof(long);
    133         }
     139        }
     140        obp-=sizeof(long);
     141        AddLocalVarAddrSchedule();
     142        obp+=sizeof(long);
    134143
    135144        goto directmem;
     
    178187            obp+=sizeof(long);
    179188        }
     189    }
     190    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     191        SetError(300,NULL,cp);
    180192    }
    181193    else if(pRelativeVar->dwKind==VAR_LOCAL){
     
    275287        }
    276288    }
     289    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     290        //mov eax,dword ptr[offset]
     291        op_mov_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     292        obp-=sizeof(long);
     293        pobj_GlobalVarSchedule->add();
     294        obp+=sizeof(long);
     295
     296        if(pRelativeVar->bOffsetOffset){
     297            //add eax,ecx
     298            OpBuffer[obp++]=(char)0x03;
     299            OpBuffer[obp++]=(char)0xC1;
     300        }
     301
     302        //push dword ptr[eax]
     303        OpBuffer[obp++]=(char)0xFF;
     304        OpBuffer[obp++]=(char)0x30;
     305    }
    277306    else if(pRelativeVar->dwKind==VAR_LOCAL){
    278307        if(pRelativeVar->bOffsetOffset){
     
    343372            obp+=sizeof(long);
    344373        }
     374    }
     375    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     376        //mov ebx,dword ptr[offset]
     377        op_mov_RM( sizeof(long), REG_EBX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     378        obp-=sizeof(long);
     379        pobj_GlobalVarSchedule->add();
     380        obp+=sizeof(long);
     381
     382        if(pRelativeVar->bOffsetOffset){
     383            //add ebx,ecx
     384            OpBuffer[obp++]=(char)0x03;
     385            OpBuffer[obp++]=(char)0xD9;
     386        }
     387
     388        //movsx eax,word ptr[ebx]
     389        OpBuffer[obp++]=(char)0x0F;
     390        OpBuffer[obp++]=(char)0xBF;
     391        OpBuffer[obp++]=(char)0x03;
    345392    }
    346393    else if(pRelativeVar->dwKind==VAR_LOCAL){
     
    422469        }
    423470    }
     471    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     472        //mov ebx,dword ptr[offset]
     473        op_mov_RM( sizeof(long), REG_EBX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     474        obp-=sizeof(long);
     475        pobj_GlobalVarSchedule->add();
     476        obp+=sizeof(long);
     477
     478        if(pRelativeVar->bOffsetOffset){
     479            //add ebx,ecx
     480            OpBuffer[obp++]=(char)0x03;
     481            OpBuffer[obp++]=(char)0xD9;
     482        }
     483
     484        //mov ax,word ptr[ebx]
     485        OpBuffer[obp++]=(char)0x66;
     486        OpBuffer[obp++]=(char)0x8B;
     487        OpBuffer[obp++]=(char)0x03;
     488    }
    424489    else if(pRelativeVar->dwKind==VAR_LOCAL){
    425490        if(pRelativeVar->bOffsetOffset){
     
    498563        }
    499564    }
     565    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     566        //mov ebx,dword ptr[offset]
     567        op_mov_RM( sizeof(long), REG_EBX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     568        obp-=sizeof(long);
     569        pobj_GlobalVarSchedule->add();
     570        obp+=sizeof(long);
     571
     572        if(pRelativeVar->bOffsetOffset){
     573            //add ebx,ecx
     574            OpBuffer[obp++]=(char)0x03;
     575            OpBuffer[obp++]=(char)0xD9;
     576        }
     577
     578        //movsx eax,byte ptr[ebx]
     579        OpBuffer[obp++]=(char)0x0F;
     580        OpBuffer[obp++]=(char)0xBE;
     581        OpBuffer[obp++]=(char)0x03;
     582    }
    500583    else if(pRelativeVar->dwKind==VAR_LOCAL){
    501584        if(pRelativeVar->bOffsetOffset){
     
    574657        }
    575658    }
     659    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     660        //mov ebx,dword ptr[offset]
     661        op_mov_RM( sizeof(long), REG_EBX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     662        obp-=sizeof(long);
     663        pobj_GlobalVarSchedule->add();
     664        obp+=sizeof(long);
     665
     666        if(pRelativeVar->bOffsetOffset){
     667            //add ebx,ecx
     668            OpBuffer[obp++]=(char)0x03;
     669            OpBuffer[obp++]=(char)0xD9;
     670        }
     671
     672        //mov al,byte ptr[ebx]
     673        OpBuffer[obp++]=(char)0x8A;
     674        OpBuffer[obp++]=(char)0x03;
     675    }
    576676    else if(pRelativeVar->dwKind==VAR_LOCAL){
    577677        if(pRelativeVar->bOffsetOffset){
  • BasicCompiler32/Compile_Set_Var.cpp

    r55 r62  
    121121            obp+=sizeof(long);
    122122        }
     123    }
     124    else if( VarKind==VAR_REFGLOBAL ){
     125        SetError(300,NULL,cp);
    123126    }
    124127    else if(VarKind==VAR_LOCAL){
     
    278281            obp+=sizeof(long);
    279282        }
     283    }
     284    else if( VarKind==VAR_REFGLOBAL ){
     285        SetError(300,NULL,cp);
    280286    }
    281287    else if(VarKind==VAR_LOCAL){
     
    430436        }
    431437    }
     438    else if(pRelative->dwKind==VAR_REFLOCAL){
     439        if(pRelative->bOffsetOffset){
     440            //add ecx,dword ptr[offset]
     441            op_add_RM( sizeof(long), REG_ECX, REG_NON, (int)pRelative->offset, MOD_DISP32 );
     442        }
     443        else{
     444            //mov ecx,dword ptr[offset]
     445            op_mov_RM( sizeof(long), REG_ECX, REG_NON, (int)pRelative->offset, MOD_DISP32 );
     446        }
     447        obp-=sizeof(long);
     448        pobj_GlobalVarSchedule->add();
     449        obp+=sizeof(long);
     450
     451        //mov dword ptr[ecx],eax
     452        OpBuffer[obp++]=(char)0x89;
     453        OpBuffer[obp++]=(char)0x01;
     454
     455        //mov dword ptr[ecx+sizeof(long)],edx
     456        OpBuffer[obp++]=(char)0x89;
     457        OpBuffer[obp++]=(char)0x51;
     458        OpBuffer[obp++]=(char)0x04;
     459    }
    432460    else if(pRelative->dwKind==VAR_LOCAL){
    433461        if(pRelative->bOffsetOffset){
     
    573601            obp+=sizeof(long);
    574602        }
     603    }
     604    else if(VarKind==VAR_REFGLOBAL){
     605        if(bOffsetOffset){
     606            //add ecx,dword ptr[offset]
     607            op_add_RM( sizeof(long), REG_ECX, REG_NON, (int)offset, MOD_DISP32 );
     608        }
     609        else{
     610            //mov ecx,dword ptr[offset]
     611            op_mov_RM( sizeof(long), REG_ECX, REG_NON, (int)offset, MOD_DISP32 );
     612        }
     613        obp-=sizeof(long);
     614        pobj_GlobalVarSchedule->add();
     615        obp+=sizeof(long);
     616
     617        //mov dword ptr[ecx],eax
     618        OpBuffer[obp++]=(char)0x89;
     619        OpBuffer[obp++]=(char)0x01;
    575620    }
    576621    else if(VarKind==VAR_LOCAL){
     
    665710            }
    666711        }
     712        else if(VarKind==VAR_REFGLOBAL){
     713            //mov eax,dword ptr[offset]
     714            op_mov_RM( sizeof(long), REG_EAX, REG_NON, (int)offset, MOD_DISP32 );
     715            obp-=sizeof(long);
     716            pobj_GlobalVarSchedule->add();
     717            obp+=sizeof(long);
     718
     719            if(bOffsetOffset){
     720                //add eax,ecx
     721                OpBuffer[obp++]=(char)0x03;
     722                OpBuffer[obp++]=(char)0xC1;
     723            }
     724
     725            //fistp dword ptr[eax]
     726            fpu_cast();
     727            OpBuffer[obp++]=(char)0xDB;
     728            OpBuffer[obp++]=(char)0x18;
     729            fpu_cast_end();
     730        }
    667731        else if(VarKind==VAR_LOCAL){
    668732            if(bOffsetOffset){
     
    751815        }
    752816    }
     817    else if(VarKind==VAR_REFGLOBAL){
     818        //mov ebx,dword ptr[offset]
     819        op_mov_RM( sizeof(long), REG_EBX, REG_NON, (int)offset, MOD_DISP32 );
     820        obp-=sizeof(long);
     821        pobj_GlobalVarSchedule->add();
     822        obp+=sizeof(long);
     823
     824        if(bOffsetOffset){
     825            //add ebx,ecx
     826            OpBuffer[obp++]=(char)0x03;
     827            OpBuffer[obp++]=(char)0xD9;
     828        }
     829
     830        //mov word ptr[ebx],ax
     831        OpBuffer[obp++]=(char)0x66;
     832        OpBuffer[obp++]=(char)0x89;
     833        OpBuffer[obp++]=(char)0x03;
     834    }
    753835    else if(VarKind==VAR_LOCAL){
    754836        if(bOffsetOffset){
     
    826908        }
    827909    }
     910    else if(VarKind==VAR_REFGLOBAL){
     911        //mov ebx,dword ptr[offset]
     912        op_mov_RM( sizeof(long), REG_EBX, REG_NON, (int)offset, MOD_DISP32 );
     913        obp-=sizeof(long);
     914        pobj_GlobalVarSchedule->add();
     915        obp+=sizeof(long);
     916
     917        if(bOffsetOffset){
     918            //add ebx,ecx
     919            OpBuffer[obp++]=(char)0x03;
     920            OpBuffer[obp++]=(char)0xD9;
     921        }
     922
     923        //mov byte ptr[ebx],al
     924        OpBuffer[obp++]=(char)0x88;
     925        OpBuffer[obp++]=(char)0x03;
     926    }
    828927    else if(VarKind==VAR_LOCAL){
    829928        if(bOffsetOffset){
  • BasicCompiler32/Compile_Var.cpp

    r56 r62  
    614614    pRelativeVar->offset=GlobalVar[i].offset;
    615615    pRelativeVar->bOffsetOffset=0;
    616     pRelativeVar->dwKind=VAR_GLOBAL;
     616    if(GlobalVar[i].fRef){
     617        // 参照型
     618        pRelativeVar->dwKind = VAR_REFGLOBAL;
     619    }
     620    else pRelativeVar->dwKind=VAR_GLOBAL;
    617621    *pType=GlobalVar[i].type;
    618622    lpIndex=GlobalVar[i].u.index;
     
    11801184        GetNowStaticVarFullName(VarName,temporary);
    11811185
    1182         AddGlobalVariable(temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
     1186        AddGlobalVariable(isRef, temporary,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11831187
    11841188        /*
     
    11931197            /////////////////////////
    11941198
    1195             AddGlobalVariable(VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
     1199            AddGlobalVariable(isRef, VarName,SubScripts,&TypeInfo,TypeSize,InitBuf,ConstractParameter,dwFlags);
    11961200        }
    11971201        else{
     
    13651369        }
    13661370    }
     1371    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     1372        if(pRelativeVar->bOffsetOffset){
     1373            //mov eax,ecx
     1374            OpBuffer[obp++]=(char)0x8B;
     1375            OpBuffer[obp++]=(char)0xC1;
     1376
     1377            //add eax,dword ptr[offset]
     1378            op_add_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     1379        }
     1380        else{
     1381            //mov eax,dword ptr[offset]
     1382            op_mov_RM( sizeof(long), REG_EAX, REG_NON, (int)pRelativeVar->offset, MOD_DISP32 );
     1383        }
     1384        obp-=sizeof(long);
     1385        pobj_GlobalVarSchedule->add();
     1386        obp+=sizeof(long);
     1387    }
    13671388    else if(pRelativeVar->dwKind==VAR_LOCAL){
    13681389        if(pRelativeVar->bOffsetOffset){
  • BasicCompiler32/Opcode.h

    r56 r62  
    66
    77//レジスタを示す定数
     8#define REG_NON -1
    89#define REG_EAX 0x00    //reg:000
    910#define REG_ECX 0x01    //reg:001
     
    2728
    2829//変数の種類
    29 #define NON_VAR         0
    30 #define VAR_GLOBAL      1   //Global Variable
    31 #define VAR_LOCAL       2   //Local Variable
    32 #define VAR_REFLOCAL    3   //Local Refference Variable
    33 #define VAR_DIRECTMEM   4   //Direct memory
     30#define NON_VAR             0
     31#define VAR_GLOBAL          1   // Global Variable
     32#define VAR_REFGLOBAL       2   // Global Refference Variable
     33#define VAR_LOCAL           3   // Local Variable
     34#define VAR_REFLOCAL        4   // Local Refference Variable
     35#define VAR_DIRECTMEM       5   // Direct memory
    3436
    3537
  • BasicCompiler32/WatchList.cpp

    r3 r62  
    1414    if(pRelativeVar->dwKind==VAR_GLOBAL){
    1515        return ImageBase+MemPos_RWSection+pRelativeVar->offset;
     16    }
     17    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     18        extern HANDLE hDebugProcess;
     19        ULONG_PTR lpData;
     20        ULONG_PTR lpAccBytes;
     21        ReadProcessMemory(hDebugProcess,
     22            (void *)(ImageBase+MemPos_RWSection+pRelativeVar->offset),
     23            &lpData,
     24            sizeof(ULONG_PTR),
     25            &lpAccBytes);
     26
     27        return lpData;
    1628    }
    1729    else if(pRelativeVar->dwKind==VAR_LOCAL){
     
    426438
    427439        pRelativeVar->offset=GlobalVar[i].offset;
    428         pRelativeVar->dwKind=VAR_GLOBAL;
     440        if(GlobalVar[i].fRef) pRelativeVar->dwKind=VAR_REFGLOBAL;
     441        else pRelativeVar->dwKind=VAR_GLOBAL;
    429442        *pType=GlobalVar[i].type;
    430443        lpIndex=GlobalVar[i].u.index;
  • BasicCompiler32/increment.cpp

    r55 r62  
    2323        }
    2424    }
     25    else if(pRelativeVar->dwKind==VAR_REFGLOBAL){
     26        if(pRelativeVar->bOffsetOffset){
     27            //add ecx,qword ptr[offset]
     28            op_add_RM(sizeof(long),REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
     29        }
     30        else{
     31            //mov ecx,qword ptr[offset]
     32            op_mov_RM(sizeof(long),REG_ECX,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
     33        }
     34        obp-=sizeof(long);
     35        pobj_GlobalVarSchedule->add();
     36        obp+=sizeof(long);
     37
     38        goto directmem;
     39    }
    2540    else if(pRelativeVar->dwKind==VAR_LOCAL){
    2641        if(pRelativeVar->bOffsetOffset){
    2742            //fstp ptr[ebp+ecx+offset]
    2843            op_fstp_base_offset_ex(type,REG_EBP,REG_ECX,(int)pRelativeVar->offset,USE_OFFSET);
    29             obp-=sizeof(long);
    30             AddLocalVarAddrSchedule();
    31             obp+=sizeof(long);
    3244        }
    3345        else{
    3446            //fstp ptr[ebp+offset]
    3547            op_fstp_base_offset(type,REG_EBP,(int)pRelativeVar->offset);
    36             obp-=sizeof(long);
    37             AddLocalVarAddrSchedule();
    38             obp+=sizeof(long);
    39         }
     48        }
     49        obp-=sizeof(long);
     50        AddLocalVarAddrSchedule();
     51        obp+=sizeof(long);
    4052    }
    4153    else if(pRelativeVar->dwKind==VAR_REFLOCAL){
     
    4355            //add ecx,qword ptr[ebp+offset]
    4456            op_add_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    45             obp-=sizeof(long);
    46             AddLocalVarAddrSchedule();
    47             obp+=sizeof(long);
    4857        }
    4958        else{
    5059            //mov ecx,qword ptr[ebp+offset]
    5160            op_mov_RM(sizeof(long),REG_ECX,REG_EBP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
    52             obp-=sizeof(long);
    53             AddLocalVarAddrSchedule();
    54             obp+=sizeof(long);
    55         }
     61        }
     62        obp-=sizeof(long);
     63        AddLocalVarAddrSchedule();
     64        obp+=sizeof(long);
    5665
    5766        goto directmem;
     
    151160            //mov ptr[ecx+offset],eax/ax/al
    152161            op_mov_MR(var_size,reg,REG_ECX,(int)pRelative->offset,MOD_BASE_DISP32);
    153             obp-=sizeof(long);
    154             pobj_GlobalVarSchedule->add();
    155             obp+=sizeof(long);
    156162        }
    157163        else{
    158164            //mov ptr[offset],eax/ax/al
    159165            op_mov_MR(var_size,reg,0,(int)pRelative->offset,MOD_DISP32);
    160             obp-=sizeof(long);
    161             pobj_GlobalVarSchedule->add();
    162             obp+=sizeof(long);
    163         }
     166        }
     167        obp-=sizeof(long);
     168        pobj_GlobalVarSchedule->add();
     169        obp+=sizeof(long);
     170    }
     171    else if(pRelative->dwKind==VAR_REFGLOBAL){
     172        if(pRelative->bOffsetOffset){
     173            //add ecx,qword ptr[offset]
     174            op_add_RM(var_size,REG_ECX,REG_NON,(int)pRelative->offset,MOD_DISP32);
     175        }
     176        else{
     177            //mov ecx,qword ptr[offset]
     178            op_mov_RM(var_size,REG_ECX,REG_NON,(int)pRelative->offset,MOD_DISP32);
     179        }
     180        obp-=sizeof(long);
     181        pobj_GlobalVarSchedule->add();
     182        obp+=sizeof(long);
     183
     184        goto directmem;
    164185    }
    165186    else if(pRelative->dwKind==VAR_LOCAL){
     
    167188            //mov ptr[ebp+ecx+offset],eax/ax/al
    168189            op_mov_MR_ex(var_size,reg,REG_EBP,REG_ECX,(int)pRelative->offset,USE_OFFSET);
    169             obp-=sizeof(long);
    170             AddLocalVarAddrSchedule();
    171             obp+=sizeof(long);
    172190        }
    173191        else{
    174192            //mov ptr[ebp+offset],eax/ax/al
    175193            op_mov_MR(var_size,reg,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
    176             obp-=sizeof(long);
    177             AddLocalVarAddrSchedule();
    178             obp+=sizeof(long);
    179         }
     194        }
     195        obp-=sizeof(long);
     196        AddLocalVarAddrSchedule();
     197        obp+=sizeof(long);
    180198    }
    181199    else if(pRelative->dwKind==VAR_REFLOCAL){
     
    183201            //add ecx,qword ptr[ebp+offset]
    184202            op_add_RM(var_size,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
    185             obp-=sizeof(long);
    186             AddLocalVarAddrSchedule();
    187             obp+=sizeof(long);
    188203        }
    189204        else{
    190205            //mov ecx,qword ptr[ebp+offset]
    191206            op_mov_RM(var_size,REG_ECX,REG_EBP,(int)pRelative->offset,MOD_BASE_DISP32);
    192             obp-=sizeof(long);
    193             AddLocalVarAddrSchedule();
    194             obp+=sizeof(long);
    195         }
     207        }
     208        obp-=sizeof(long);
     209        AddLocalVarAddrSchedule();
     210        obp+=sizeof(long);
    196211
    197212        goto directmem;
Note: See TracChangeset for help on using the changeset viewer.