Changeset 220 in dev for trunk


Ignore:
Timestamp:
Jul 18, 2007, 4:23:29 AM (17 years ago)
Author:
dai_9181
Message:

[64bitコンパイラ] スタックフレームが128ビット境界ラインにならないバグを修正

Location:
trunk/abdev
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/BasicCompiler.vcproj

    r219 r220  
    478478                        <Tool
    479479                            Name="VCCLCompilerTool"
    480                             PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    481480                            UsePrecompiledHeader="0"
    482481                            BrowseInformation="0"
     
    501500                        <Tool
    502501                            Name="VCCLCompilerTool"
    503                             PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    504502                            UsePrecompiledHeader="0"
    505503                            BrowseInformation="0"
     
    524522                        <Tool
    525523                            Name="VCCLCompilerTool"
    526                             PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    527524                            UsePrecompiledHeader="0"
    528525                            BrowseInformation="0"
     
    547544                        <Tool
    548545                            Name="VCCLCompilerTool"
    549                             PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    550546                            UsePrecompiledHeader="0"
    551547                            BrowseInformation="0"
     
    573569                            <Tool
    574570                                Name="VCCLCompilerTool"
    575                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    576571                                UsePrecompiledHeader="0"
    577572                                BrowseInformation="0"
     
    596591                            <Tool
    597592                                Name="VCCLCompilerTool"
    598                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    599593                                UsePrecompiledHeader="0"
    600594                                BrowseInformation="0"
     
    619613                            <Tool
    620614                                Name="VCCLCompilerTool"
    621                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    622615                                UsePrecompiledHeader="0"
    623616                                BrowseInformation="0"
     
    646639                            <Tool
    647640                                Name="VCCLCompilerTool"
    648                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    649641                                UsePrecompiledHeader="0"
    650642                                BrowseInformation="0"
     
    669661                            <Tool
    670662                                Name="VCCLCompilerTool"
    671                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    672663                                UsePrecompiledHeader="0"
    673664                                BrowseInformation="0"
     
    692683                            <Tool
    693684                                Name="VCCLCompilerTool"
    694                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    695685                                UsePrecompiledHeader="0"
    696686                                BrowseInformation="0"
     
    715705                            <Tool
    716706                                Name="VCCLCompilerTool"
    717                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    718707                                UsePrecompiledHeader="0"
    719708                                BrowseInformation="0"
     
    738727                            <Tool
    739728                                Name="VCCLCompilerTool"
    740                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    741729                                UsePrecompiledHeader="0"
    742730                                BrowseInformation="0"
     
    777765                            <Tool
    778766                                Name="VCCLCompilerTool"
    779                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    780767                                UsePrecompiledHeader="0"
    781768                                BrowseInformation="0"
     
    816803                            <Tool
    817804                                Name="VCCLCompilerTool"
    818                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    819805                                UsePrecompiledHeader="0"
    820806                                BrowseInformation="0"
     
    839825                            <Tool
    840826                                Name="VCCLCompilerTool"
    841                                 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;JPN;$(NoInherit)"
    842827                                UsePrecompiledHeader="0"
    843828                                BrowseInformation="0"
     
    11361121                    RelativePath="..\BasicCompiler_Common\src\BoostSerializationSupport.cpp"
    11371122                    >
     1123                    <FileConfiguration
     1124                        Name="Debug|Win32"
     1125                        >
     1126                        <Tool
     1127                            Name="VCCLCompilerTool"
     1128                            AdditionalOptions="/bigobj"
     1129                        />
     1130                    </FileConfiguration>
    11381131                    <FileConfiguration
    11391132                        Name="Release|Win32"
  • trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp

    r206 r220  
    6363
    6464        //add rsp,スタックフレームサイズ
    65         op_add_RV(REG_RSP,pobj_sf->GetFrameSize());
     65        op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
    6666
    6767        //スタックフレームスケジュール(subコマンドに渡す値)
    68         *((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize();
     68        *((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize(0);
    6969
    7070        UserProc::CompileStartForUserProc( pBackUserProc );
     
    100100
    101101        //add rsp,スタックフレームサイズ
    102         op_add_RV(REG_RSP,pobj_sf->GetFrameSize());
     102        op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
    103103
    104104        //スタックフレームスケジュール(subコマンドに渡す値)
    105         *((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize();
     105        *((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize(0);
    106106
    107107        //ret
     
    735735    }
    736736
     737    if( pUserProc->GetName() == "test" )
     738    {
     739        int test=0;
     740    }
     741
    737742    //ローカル変数領域のサイズをスタックフレームに通知
    738     int iLocalParmSize;
    739     iLocalParmSize=AllLocalVarSize-BaseLocalVar;
    740     pobj_sf->SetLocalParmSize(iLocalParmSize);
     743    int localParmSize = AllLocalVarSize - BaseLocalVar;
     744    int stackFrameSize = pobj_sf->GetFrameSize( AllLocalVarSize );
    741745
    742746    //ローカル変数アドレススケジュール
    743747    for(i3=0;i3<LocalVarAddrScheduleNum;i3++){
    744         *((long *)(OpBuffer+pLocalVarAddrSchedule[i3]))+=AllLocalVarSize+pobj_sf->GetFrameSize();
     748        *((long *)(OpBuffer+pLocalVarAddrSchedule[i3])) += AllLocalVarSize + stackFrameSize;
    745749    }
    746750    HeapDefaultFree(pLocalVarAddrSchedule);
     
    748752        //後にデバッグで利用する
    749753        pVar->SetOffsetAddress(
    750             AllLocalVarSize + pobj_sf->GetFrameSize() - pVar->GetOffsetAddress()
     754            AllLocalVarSize + stackFrameSize - pVar->GetOffsetAddress()
    751755        );
    752756    }
     
    761765    pobj_sf->pop(REG_RBX);
    762766
    763     int iStackFrameSize;
    764     iStackFrameSize=iLocalParmSize + pobj_sf->GetFrameSize();
     767    int stackFrameAndLocalParamSize = localParmSize + stackFrameSize;
    765768
    766769    //add rsp,スタックフレームサイズ
    767     op_add_rsp(iStackFrameSize);
     770    op_add_rsp(stackFrameAndLocalParamSize);
    768771
    769772    //ret
     
    773776    //デバッグ用
    774777    if(RspOffsetSchedule){
    775         *((long *)(OpBuffer+RspOffsetSchedule))=iStackFrameSize;
    776         *((long *)(OpBuffer+RspOffsetSchedule2))=iStackFrameSize+sizeof(_int64);
     778        *((long *)(OpBuffer+RspOffsetSchedule))=stackFrameAndLocalParamSize;
     779        *((long *)(OpBuffer+RspOffsetSchedule2))=stackFrameAndLocalParamSize+sizeof(_int64);
    777780    }
    778781
    779782
    780783    //スタックフレームスケジュール(subコマンド)
    781     *((long *)(OpBuffer+StackFrameSchedule))=iStackFrameSize;
     784    *((long *)(OpBuffer+StackFrameSchedule))=stackFrameAndLocalParamSize;
    782785
    783786    //スタックフレームスケジュールを実行
    784     pobj_sf->RunningSchedule();
     787    pobj_sf->RunningSchedule( stackFrameSize );
    785788    delete pobj_sf;
    786789    pobj_sf=0;
  • trunk/abdev/BasicCompiler64/MakePeHdr.cpp

    r218 r220  
    449449
    450450        //add rsp,スタックフレームサイズ
    451         op_add_RV(REG_RSP,pobj_sf->GetFrameSize());
     451        int stackFrameSize = pobj_sf->GetFrameSize(0);
     452        op_add_RV( REG_RSP, stackFrameSize );
    452453
    453454        //xor rax,rax(raxを0に初期化する)
     
    462463
    463464        //スタックフレームスケジュール(subコマンドに渡す値)
    464         *((long *)(OpBuffer+StackFrameSchedule))=pobj_sf->GetFrameSize();
     465        *((long *)(OpBuffer+StackFrameSchedule)) = stackFrameSize;
    465466
    466467        //スタックフレームスケジュールを実行
    467         pobj_sf->RunningSchedule();
     468        pobj_sf->RunningSchedule( stackFrameSize );
    468469        delete pobj_sf;
    469470        pobj_sf=0;
  • trunk/abdev/BasicCompiler64/Opcode.h

    r206 r220  
    117117    int now_sp;             //スタックポインタ
    118118    int max_parm_size;      //パラメータの最大サイズ
    119     int local_parm_size;    //ローカル領域のパラメータサイズ
    120119
    121120public:
     
    126125    ~CStackFrame();
    127126
    128     void SetLocalParmSize(int size);
    129     int GetFrameSize();
     127    int GetFrameSize( int localParamSize );
    130128    int GetNowSp();
    131129    void mov_sp( int reg );
     
    138136    void pop(int xmm_reg,int varSize);
    139137    void parameter_allocate(int size);
    140     void RunningSchedule(void);
     138    void RunningSchedule( int stackFrameSize );
    141139
    142140    void error_check(void);
  • trunk/abdev/BasicCompiler64/stack_frame.cpp

    r206 r220  
    1212    lowest_sp=0;
    1313    now_sp=0;
    14     local_parm_size=0;
    1514    max_parm_size=0;
    1615}
     
    1918    error_check();
    2019}
    21 void CStackFrame::SetLocalParmSize(int size){
    22     local_parm_size=size;
    23 }
    24 int CStackFrame::GetFrameSize(){
     20int CStackFrame::GetFrameSize( int localParamSize ){
    2521    int answer_sp;
    2622
    2723    answer_sp=lowest_sp-max_parm_size;
    2824
    29     if((local_parm_size%0x10)==0){
     25    if((localParamSize%0x10)){
    3026        if((answer_sp%0x10)==0){
    3127            //関数のエントリポイントで128ビット境界ラインに合わせるため
     
    142138    if(max_parm_size<size) max_parm_size=size;
    143139}
    144 void CStackFrame::RunningSchedule(void){
    145     int i;
    146     int all_size;
    147     all_size=GetFrameSize();
    148     for(i=0;i<num;i++){
    149         *((long *)(OpBuffer+pObpValues[i]))+=all_size;
     140void CStackFrame::RunningSchedule( int stackFrameSize ){
     141    for(int i=0;i<num;i++){
     142        *((long *)(OpBuffer+pObpValues[i])) += stackFrameSize;
    150143    }
    151144}
  • trunk/abdev/BasicCompiler_Common/VarList.cpp

    r208 r220  
    225225    UseCount[i]=-2;
    226226    MemCounter=0;
     227    i--;
    227228    while(1){
    228229        UseCount[i]++;
Note: See TracChangeset for help on using the changeset viewer.