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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler64/Compile_Set_Var.cpp

    r40 r62  
    153153            obp+=sizeof(long);
    154154        }
     155    }
     156    else if(pRelative->dwKind==VAR_REFGLOBAL){
     157        SetError(300,NULL,cp);
    155158    }
    156159    else if(pRelative->dwKind==VAR_LOCAL){
     
    242245        }
    243246    }
     247    else if(pRelative->dwKind==VAR_REFGLOBAL){
     248        SetError(300,NULL,cp);
     249    }
    244250    else if(pRelative->dwKind==VAR_LOCAL){
    245251        if(pRelative->bOffsetOffset){
     
    367373        }
    368374    }
     375    else if( pRelative->dwKind == VAR_REFGLOBAL ){
     376        if(pRelative->bOffsetOffset){
     377            //add r11,qword ptr[offset]
     378            op_add_RM( sizeof(_int64), REG_R11, REG_NON, (int)pRelative->offset, MOD_DISP32 );
     379            obp-=sizeof(long);
     380            pobj_GlobalVarSchedule->add();
     381            obp+=sizeof(long);
     382        }
     383        else{
     384            //mov r11,qword ptr[offset]
     385            op_mov_RM(sizeof(_int64),REG_R11,REG_NON,(int)pRelative->offset,MOD_DISP32);
     386            obp-=sizeof(long);
     387            pobj_GlobalVarSchedule->add();
     388            obp+=sizeof(long);
     389        }
     390
     391        goto directmem;
     392    }
    369393    else if(pRelative->dwKind==VAR_LOCAL){
    370394        if(pRelative->bOffsetOffset){
     
    386410        if(pRelative->bOffsetOffset){
    387411            //add r11,qword ptr[rsp+offset]
    388             OpBuffer[obp++]=(char)0x4C;
    389             OpBuffer[obp++]=(char)0x03;
    390             OpBuffer[obp++]=(char)0x9C;
    391             OpBuffer[obp++]=(char)0x24;
    392             *((long *)(OpBuffer+obp))=(int)pRelative->offset;
     412            op_add_RM( sizeof(_int64), REG_R11, REG_RSP, (int)pRelative->offset, MOD_BASE_DISP32 );
     413            obp-=sizeof(long);
    393414            AddLocalVarAddrSchedule();
    394415            obp+=sizeof(long);
Note: See TracChangeset for help on using the changeset viewer.