Changeset 62 in dev for BasicCompiler32/increment.cpp


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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.