Changeset 276 in dev


Ignore:
Timestamp:
Aug 12, 2007, 1:25:20 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev
Files:
24 edited

Legend:

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

    r275 r276  
    120120        };
    121121
    122         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allrem, 178, false ) );
     122        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allrem, 178 ) );
    123123    }
    124124    else if( userProc.GetName() == "_aullrem" ){
     
    136136        };
    137137
    138         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullrem, 117, false ) );
     138        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullrem, 117 ) );
    139139    }
    140140    else if( userProc.GetName() == "_allmul" ){
     
    144144        };
    145145
    146         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allmul, 52, false ) );
     146        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allmul, 52 ) );
    147147    }
    148148    else if( userProc.GetName() == "_alldiv" ){
     
    152152        };
    153153
    154         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_alldiv, 170, false ) );
     154        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_alldiv, 170 ) );
    155155    }
    156156    else if( userProc.GetName() == "_aulldiv" ){
     
    167167        };
    168168
    169         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aulldiv, 104, false ) );
     169        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aulldiv, 104 ) );
    170170    }
    171171    else if( userProc.GetName() == "_allshl" ){
     
    175175        };
    176176
    177         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshl, 31, false ) );
     177        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshl, 31 ) );
    178178    }
    179179    else if( userProc.GetName() == "_allshr" ){
     
    183183        };
    184184
    185         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshr, 33, false ) );
     185        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshr, 33 ) );
    186186    }
    187187    else if( userProc.GetName() == "_aullshr" ){
     
    207207        };
    208208
    209         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullshr, 31, false ) );
     209        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullshr, 31 ) );
    210210    }
    211211    else{
     
    262262    else bDebugSupportProc=0;
    263263
    264     extern int obp;
    265     pUserProc->_beginOpAddressOld = obp;
     264    if( pUserProc->GetCodeSize() != 0 )
     265    {
     266        // 既にコード生成が行われている場合はエラー
     267        SetError();
     268    }
    266269
    267270    //コンパイル中の関数が属するクラス
     
    292295
    293296        SystemProc(*pUserProc);
    294 
    295         pUserProc->_endOpAddressOld = obp;
    296297        return;
    297298    }
     
    399400    //プロシージャ抜け出しスケジュール(Exit Sub/Function)
    400401    compiler.codeGenerator.exitSubCodePositions.clear();
    401     compiler.codeGenerator._exitSubCodePositions_ObpOld.clear();
    402402
    403403    //ラベル管理オブジェクトを初期化
     
    727727
    728728
    729     pUserProc->_endOpAddressOld = obp;
    730 
    731 
    732729    //重複エラー情報管理のメモリを解放
    733730    for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
  • trunk/abdev/BasicCompiler32/Compile_Statement.cpp

    r261 r276  
    240240
    241241    //レキシカルスコープをレベルアップ
    242     extern int obp;
    243     compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF );
     242    compiler.codeGenerator.lexicalScopes.Start(
     243        compiler.codeGenerator.GetNativeCodeSize(),
     244        LexicalScope::SCOPE_TYPE_IF
     245    );
    244246
    245247    i2=CompileBuffer(ESC_ENDIF,0);
     
    263265
    264266        //レキシカルスコープをレベルアップ
    265         compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF );
     267        compiler.codeGenerator.lexicalScopes.Start(
     268            compiler.codeGenerator.GetNativeCodeSize(),
     269            LexicalScope::SCOPE_TYPE_IF
     270        );
    266271
    267272        CompileBuffer(ESC_ENDIF,0);
     
    320325        {
    321326            //jmp ...
    322             extern int obp;
    323             compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true );
     327            compiler.codeGenerator.op_jmp(
     328                i-compiler.codeGenerator.GetNativeCodeSize(),
     329                sizeof(long),
     330                false,
     331                true
     332            );
    324333        }
    325334    }
     
    336345        {
    337346            //jmp ...
    338             extern int obp;
    339             compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true );
     347            compiler.codeGenerator.op_jmp(
     348                i-compiler.codeGenerator.GetNativeCodeSize(),
     349                sizeof(long),
     350                false,
     351                true
     352            );
    340353        }
    341354    }
     
    445458
    446459    //レキシカルスコープをレベルアップ
    447     extern int obp;
    448     compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_WHILE );
     460    compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_WHILE );
    449461
    450462    //While内をコンパイル
     
    562574
    563575    //レキシカルスコープをレベルアップ
    564     extern int obp;
    565     compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_FOR );
     576    compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_FOR );
    566577
    567578    //For内をコンパイル
     
    599610
    600611    //レキシカルスコープをレベルアップ
    601     extern int obp;
    602     compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_DO );
     612    compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_DO );
    603613
    604614    //Do内をコンパイル
     
    10401050
    10411051    //レキシカルスコープをレベルアップ
    1042     extern int obp;
    1043     compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_SELECT );
     1052    compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_SELECT );
    10441053
    10451054    //Select Case内をコンパイル
     
    10901099void OpcodeGosub(char *Parameter){
    10911100    extern HANDLE hHeap;
    1092     extern int obp;
    10931101    int i,LineNum;
    10941102
     
    11041112        {
    11051113            //jmp ...
    1106             compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true );
     1114            compiler.codeGenerator.op_jmp(
     1115                i-compiler.codeGenerator.GetNativeCodeSize(),
     1116                sizeof(long),
     1117                false,
     1118                true
     1119            );
    11071120        }
    11081121    }
     
    11191132        {
    11201133            //jmp ...
    1121             compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true );
     1134            compiler.codeGenerator.op_jmp(
     1135                i-compiler.codeGenerator.GetNativeCodeSize(),
     1136                sizeof(long),
     1137                false,
     1138                true
     1139            );
    11221140        }
    11231141    }
  • trunk/abdev/BasicCompiler32/Compile_Var.cpp

    r275 r276  
    13001300            // call AddGlobalRootPtr
    13011301            compiler.codeGenerator.op_call( pUserProc_AddGlobalRootPtr );
    1302 
    1303             ReallocNativeCodeBuffer();
    13041302        }
    13051303    }
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r273 r276  
    122122    extern BOOL bDebugCompile;
    123123    extern DWORD ImageBase;
    124     extern int obp_AllocSize;
    125124    extern char *basbuf;
    126125    extern char OutputFileName[MAX_PATH];
     
    355354
    356355
    357 
    358 
    359     //データテーブルスケジュール
    360     pobj_DataTableSchedule=new CSchedule();
    361     pobj_DataTableSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
    362 
    363     //インポートテーブルスケジュール
    364     pobj_ImportAddrSchedule=new CImportAddrSchedule();
    365     pobj_ImportAddrSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
    366 
    367     //プロシージャポインタスケジュール
    368     pobj_SubAddrSchedule=new CSubAddrSchedule();
    369 
    370     //グローバル変数アドレススケジュール
    371     pobj_GlobalVarSchedule=new CSchedule();
    372     pobj_GlobalVarSchedule->SetFlag(SCHEDULE_FLAG_RELOC);
    373 
    374356    //グローバル変数の初期バッファ
    375357    extern BYTE *initGlobalBuf;
     
    379361    pobj_Reloc=new CReloc();
    380362
    381     extern char *OpBuffer;
    382     extern int obp;
    383     obp_AllocSize=8192*2;
    384     OpBuffer=(char *)malloc(obp_AllocSize);
    385     obp=0;
    386 
    387363    //レキシカルスコープ情報を初期化
    388     compiler.codeGenerator.lexicalScopes.Init(obp);
     364    compiler.codeGenerator.lexicalScopes.Init( 0 );
     365    //compiler.codeGenerator.lexicalScopes.Init( compiler.codeGenerator.GetNativeCodeSize() );
    389366
    390367
     
    702679
    703680            if( pUserProc->GetName() == "DllMain" ){
    704                 // TODO: 未完成
    705                 DllMain_EntryPoint=pUserProc->_beginOpAddressOld;
     681                DllMain_EntryPoint = pUserProc->GetBeginOpAddress();
    706682            }
    707683
    708684            lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD));
    709             lpdwExportAddressTable[ExportNum]=pUserProc->_beginOpAddressOld;
     685            lpdwExportAddressTable[ExportNum] = pUserProc->GetBeginOpAddress();
    710686
    711687            lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD));
     
    11431119
    11441120
    1145     //////////////////////////////
    1146     // データテーブルスケジュール
    1147     for(i=0;i<pobj_DataTableSchedule->num;i++){
    1148         *((long *)(OpBuffer+pobj_DataTableSchedule->pObpValues[i]))+=ImageBase+MemPos_DataSection;
    1149     }
    1150     delete pobj_DataTableSchedule;
    1151 
    1152 
    1153     //////////////////////////////////
    1154     // インポートテーブルスケジュール(インポート アドレス テーブルを指し示させる)
    1155     for(i=0;i<pobj_ImportAddrSchedule->num;i++){
    1156         const DllProc *pDllProc=pobj_ImportAddrSchedule->ppdi[i];
    1157         *((long *)(OpBuffer+pobj_ImportAddrSchedule->pObpValues[i]))=
    1158             ImageBase+
    1159             MemPos_ImportSection+
    1160             LookupSize+         //ルックアップテーブル
    1161             HintSize+           //ヒント名(関数名)テーブル
    1162             pDllProc->GetLookupAddress();
    1163     }
    1164     delete pobj_ImportAddrSchedule;
    1165 
    1166 
    1167     ////////////////////////////////////
    1168     // プロシージャポインタスケジュール
    1169     for(i=0;i<pobj_SubAddrSchedule->num;i++){
    1170         if(pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld==0
    1171             &&pobj_SubAddrSchedule->ppsi[i]->_endOpAddressOld==0){
    1172             SetError(300,NULL,-1);
    1173         }
    1174 
    1175         if(pobj_SubAddrSchedule->pbCall[i]){
    1176             *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1177                 pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));
    1178         }
    1179         else{
    1180             *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=
    1181                 pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld+ImageBase+MemPos_CodeSection;
    1182         }
    1183     }
    1184     delete pobj_SubAddrSchedule;
    1185 
    1186 
    11871121    if( compiler.IsDll() ){
    11881122        //DLLの場合はリロケーション情報を生成
    11891123        pobj_Reloc->ResetRelocBuffer();
    11901124    }
    1191 
    1192 
    1193 
    1194     //////////////////////////////////////
    1195     // グローバル変数アドレススケジュール
    1196     //////////////////////////////////////
    1197 
    1198     /*
    1199     GlobalArea1 - 初期バッファあり
    1200     GlobalArea2 - 初期バッファなし
    1201     */
    1202     for(i=0;i<pobj_GlobalVarSchedule->num;i++){
    1203         if(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x80000000){
    1204             //初期バッファなし
    1205             *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))=
    1206                 compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() +
    1207                 (*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+
    1208                 ImageBase+MemPos_RWSection;
    1209         }
    1210         else{
    1211             //初期バッファあり
    1212             *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))+=
    1213                 ImageBase+MemPos_RWSection;
    1214         }
    1215     }
    1216     delete pobj_GlobalVarSchedule;
    12171125
    12181126
     
    17841692    HeapDefaultFree(initGlobalBuf);
    17851693
    1786     //コードバッファを解放
    1787     free(OpBuffer);
    1788     OpBuffer=0;
    1789 
    17901694    //リソースセクションバッファを解放
    17911695    HeapDefaultFree(RSrcSectionBuffer);
  • trunk/abdev/BasicCompiler32/NumOpe.cpp

    r265 r276  
    677677    //リテラル値のみの計算かどうかを判別するためのフラグ
    678678    BOOL bLiteralCalculation=1;
    679 
    680     //リテラル演算の場合を考慮した演算前のプロシージャスケジュール位置
    681     //※64ビットの掛け算、除算などで特殊関数が呼ばれるため
    682     int Before_ProcAddrScheduleNum;
    683     Before_ProcAddrScheduleNum=pobj_SubAddrSchedule->num;
    684 
    685     //リテラル演算の場合を考慮した演算前のデータテーブルスケジュール位置
    686     int Before_DataTableScheduleNum;
    687     Before_DataTableScheduleNum=pobj_DataTableSchedule->num;
    688679
    689680    //リテラル演算の場合を考慮した演算前の再配置スケジュール
  • trunk/abdev/BasicCompiler_Common/BasicCompiler.cpp

    r269 r276  
    9797    //この部分にobpのチェックを挿入
    9898    //※例 … epi=0x41999  →  obp>=0x0999
    99 
     99/*
    100100    extern int obp;
    101101    if(obp>=0x988DE){
    102102        int test=0;
    103     }
     103    }*/
    104104}
    105105
  • trunk/abdev/BasicCompiler_Common/Compile.cpp

    r263 r276  
    8181}
    8282
    83 
    84 void NextLine(void){
    85     extern int obp;
    86 
    87     extern SourceLines oldSourceLines;
    88     if( oldSourceLines.size() )
    89     {
    90         if( oldSourceLines.back().GetNativeCodePos() == obp )
    91         {
    92             oldSourceLines.back().SetSourceCodePos( cp );
    93             return;
    94         }
    95     }
    96 
    97     extern BOOL bDebugSupportProc;
    98     extern BOOL bSystemProc;
    99     DWORD sourceLineType = 0;
    100     if( bDebugSupportProc )
    101     {
    102         sourceLineType |= CODETYPE_DEBUGPROC;
    103     }
    104     if( bSystemProc )
    105     {
    106         sourceLineType |= CODETYPE_SYSTEMPROC;
    107     }
    108     oldSourceLines.push_back( SourceLine( (long)oldSourceLines.size(), obp, cp, sourceLineType ) );
    109 }
    110 
    11183void ChangeOpcode(char *Command){
    11284    extern HANDLE hHeap;
     
    12193    if(Command[0]=='*'&&IsVariableTopChar(Command[1])){
    12294        //Goto先ラベル
    123         extern int obp;
    124         compiler.codeGenerator.gotoLabels.push_back( GotoLabel( Command + 1, obp ) );
     95        compiler.codeGenerator.gotoLabels.push_back( GotoLabel( Command + 1, compiler.codeGenerator.GetNativeCodeSize() ) );
    12596
    12697        //書き込みスケジュール
     
    475446                OpcodeDim(Command+2,0);
    476447
    477             // ネイティブコードバッファの再確保
    478             ReallocNativeCodeBuffer();
    479 
    480448            if(basbuf[cp]=='\0') break;
    481449            i2=-1;
     
    533501
    534502                //Goto先ラベル
    535                 extern int obp;
    536                 compiler.codeGenerator.gotoLabels.push_back( GotoLabel( (long)i3, obp ) );
     503                compiler.codeGenerator.gotoLabels.push_back( GotoLabel( (long)i3, compiler.codeGenerator.GetNativeCodeSize() ) );
    537504
    538505                //書き込みスケジュール
     
    639606            }
    640607
    641             NextLine();
    642608            compiler.codeGenerator.NextSourceLine();
    643609
     
    675641            if(bStopCompile) return 0;
    676642
    677             ReallocNativeCodeBuffer();
    678 
    679643            if(basbuf[cp]=='\0'){
    680644                switch(Return_Command){
  • trunk/abdev/BasicCompiler_Common/Debug.cpp

    r266 r276  
    99#include "../BasicCompiler_Common/debug.h"
    1010
    11 extern char *OpBuffer;
     11char *OpBuffer;
    1212
    1313extern DWORD dwStepRun;
  • trunk/abdev/BasicCompiler_Common/Diagnose.cpp

    r265 r276  
    2323        ///////////////////////////////////////////////////////////////////
    2424
    25         extern int obp;
    2625        extern int GlobalOpBufferSize;
    2726        sprintf(temporary, "%d", GlobalOpBufferSize/1024 );
    2827        trace_for_size( (string)"グローバル領域のコードサイズ: " + temporary + "KB" );
    29         sprintf(temporary, "%d", (obp-GlobalOpBufferSize)/1024 );
    30         trace_for_size( (string)"ローカル領域のコードサイズ: " + temporary + "KB" );
    31         sprintf(temporary, "%d", obp/1024 );
    32         trace_for_size( (string)"コードサイズ総量: " + temporary + "KB" );
     28        //sprintf(temporary, "%d", (obp-GlobalOpBufferSize)/1024 );
     29        //trace_for_size( (string)"ローカル領域のコードサイズ: " + temporary + "KB" );
     30        //sprintf(temporary, "%d", obp/1024 );
     31        //trace_for_size( (string)"コードサイズ総量: " + temporary + "KB" );
    3332    }
    3433
  • trunk/abdev/BasicCompiler_Common/Object.cpp

    r206 r276  
    6363
    6464            ss[0]++;
    65 
    66 
    67             //ネイティブコードバッファの再確保
    68             ReallocNativeCodeBuffer();
    6965        }
    7066    }
  • trunk/abdev/BasicCompiler_Common/PESchedule.cpp

    r266 r276  
    131131    }
    132132}
    133 
    134 
    135 
    136 
    137 //////////////////////////
    138 // 一般スケジュール
    139 //////////////////////////
    140 
    141 CSchedule::CSchedule(){
    142     pObpValues=(int *)HeapAlloc(hHeap,0,1);
    143     num=0;
    144 
    145     this->flag=0;
    146 }
    147 CSchedule::~CSchedule(){
    148     HeapDefaultFree(pObpValues);
    149 }
    150 void CSchedule::SetFlag(int flag){
    151     this->flag=flag;
    152 }
    153 void CSchedule::add(){
    154     pObpValues=(int *)HeapReAlloc(hHeap,0,pObpValues,(num+1)*sizeof(int));
    155     extern int obp;
    156     pObpValues[num]=obp;
    157     num++;
    158 
    159     if(flag&SCHEDULE_FLAG_RELOC){
    160         //リロケーション情報を追加する
    161         pobj_Reloc->AddSchedule_CodeSection(obp);
    162     }
    163 }
    164 void CSchedule::move(int iStartPos,int iSize,int offset){
    165     int i;
    166     for(i=0;i<num;i++){
    167         if(iStartPos<=pObpValues[i] && pObpValues[i]<iStartPos+iSize){
    168             pObpValues[i]+=offset;
    169         }
    170     }
    171 }
    172 
    173 //データテーブルスケジュール
    174 CSchedule *pobj_DataTableSchedule;
    175 
    176 //グローバル変数アドレススケジュール
    177 CSchedule *pobj_GlobalVarSchedule;
    178 
    179 
    180 
    181 /////////////////////////////////////////
    182 // インポート アドレス スケジューリング
    183 /////////////////////////////////////////
    184 
    185 CImportAddrSchedule::CImportAddrSchedule(){
    186     ppdi=(const DllProc **)HeapAlloc(hHeap,0,1);
    187 }
    188 CImportAddrSchedule::~CImportAddrSchedule(){
    189     HeapDefaultFree(ppdi);
    190 }
    191 
    192 void CImportAddrSchedule::add(const DllProc *pDllProc){
    193     ppdi=(const DllProc **)HeapReAlloc(hHeap,0,ppdi,(num+1)*sizeof(DllProc *));
    194     ppdi[num]=pDllProc;
    195 
    196     CSchedule::add();
    197 }
    198 
    199 CImportAddrSchedule *pobj_ImportAddrSchedule;
    200 
    201 
    202 
    203 
    204 /////////////////////////////////////////
    205 // プロシージャ アドレス スケジューリング
    206 /////////////////////////////////////////
    207 
    208 CSubAddrSchedule::CSubAddrSchedule(){
    209     ppsi=(const UserProc **)HeapAlloc(hHeap,0,1);
    210     pbCall=(BOOL *)HeapAlloc(hHeap,0,1);
    211 }
    212 CSubAddrSchedule::~CSubAddrSchedule(){
    213     HeapDefaultFree(ppsi);
    214     HeapDefaultFree(pbCall);
    215 }
    216 
    217 void CSubAddrSchedule::add(const UserProc *pUserProc,BOOL bCall){
    218     if(!pUserProc) return;
    219 
    220     ppsi=(const UserProc **)HeapReAlloc(hHeap,0,ppsi,(num+1)*sizeof(UserProc *));
    221     ppsi[num]=pUserProc;
    222     pbCall=(BOOL *)HeapReAlloc(hHeap,0,pbCall,(num+1)*sizeof(BOOL));
    223     pbCall[num]=bCall;
    224 
    225     CSchedule::add();
    226 
    227     if(!bCall){
    228         //リロケーション情報を追加する
    229         extern int obp;
    230         pobj_Reloc->AddSchedule_CodeSection(obp);
    231     }
    232 }
    233 
    234 CSubAddrSchedule *pobj_SubAddrSchedule;
  • trunk/abdev/BasicCompiler_Common/PESchedule.h

    r242 r276  
    3939
    4040
    41 //////////////////////////
    42 // 一般スケジューリング
    43 //////////////////////////
    44 #define SCHEDULE_FLAG_RELOC 1
    45 class CSchedule{
    46     int flag;
    47 public:
    48     int *pObpValues;
    49     int num;
    50 
    51     CSchedule();
    52     ~CSchedule();
    53     void SetFlag(int flag);
    54 
    55     void add();
    56     void move(int iStartPos,int iSize,int offset);
    57 };
    58 extern CSchedule *pobj_DataTableSchedule;
    59 extern CSchedule *pobj_GlobalVarSchedule;
    60 
    61 
    62 
    63 /////////////////////////////////////////
    64 // インポート アドレス スケジューリング
    65 /////////////////////////////////////////
    66 class CImportAddrSchedule:public CSchedule{
    67 public:
    68     const DllProc **ppdi;
    69 
    70     CImportAddrSchedule();
    71     ~CImportAddrSchedule();
    72 
    73     void add(const DllProc *pDllProc);
    74 };
    75 extern CImportAddrSchedule *pobj_ImportAddrSchedule;
    76 
    77 
    78 
    79 /////////////////////////////////////////
    80 // プロシージャ アドレス スケジューリング
    81 /////////////////////////////////////////
    82 class CSubAddrSchedule:public CSchedule{
    83 public:
    84     const UserProc **ppsi;
    85     BOOL *pbCall;
    86 
    87     CSubAddrSchedule();
    88     ~CSubAddrSchedule();
    89 
    90     void add(const UserProc *pUserProc,BOOL bCall);
    91 };
    92 extern CSubAddrSchedule *pobj_SubAddrSchedule;
    93 
    94 
    95 
    9641void NativeBuffer_StaticRelocation(int iStartPos,int iSize,int offset);
  • trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h

    r263 r276  
    1010#endif
    1111
    12 void ReallocNativeCodeBuffer();
    13 
    1412// コード生成時の部分的なスケジューリング
    1513class PertialSchedule
     
    1816    int typeSize;   // 対象サイズ(一般的には8bit/32bit)
    1917
    20     int _obpOld;    // 未完成
    2118public:
    2219    PertialSchedule( int codePos, int typeSize )
     
    2421        , typeSize( typeSize )
    2522    {
    26         extern int obp;
    27         _obpOld = obp;
    2823    }
    2924    ~PertialSchedule()
     
    3833    {
    3934        return typeSize;
    40     }
    41     int GetObpOld() const
    42     {
    43         return _obpOld;
    4435    }
    4536};
     
    201192    // Continue用のコード位置情報の管理
    202193    std::vector<long> continueCodePositions;
    203     std::vector<long> _continueCodePositions_ObpOld;
    204194
    205195public:
     
    210200    // Exit Subスケジュールの管理
    211201    std::vector<long> exitSubCodePositions;
    212     std::vector<int> _exitSubCodePositions_ObpOld;
    213202
    214203    // Gotoスケジュールの管理
     
    239228        pNativeCode = &nativeCode;
    240229    }
     230    long GetNativeCodeSize() const
     231    {
     232        return pNativeCode->GetSize();
     233    }
    241234
    242235    void NextSourceLine()
     
    256249    {
    257250        continueCodePositions.clear();
    258         _continueCodePositions_ObpOld.clear();
    259251    }
    260252    void ContinueAreaBegin()
    261253    {
    262254        continueCodePositions.push_back( pNativeCode->GetSize() );
    263 
    264         extern int obp;
    265         _continueCodePositions_ObpOld.push_back( obp );
    266255    }
    267256    void ContinueAreaEnd()
    268257    {
    269258        continueCodePositions.pop_back();
    270         _continueCodePositions_ObpOld.pop_back();
    271     }
    272     long GetContinueCodePosOld() const
    273     {
    274         if( _continueCodePositions_ObpOld.size() == 0 )
    275         {
    276             return -1;
    277         }
    278         return _continueCodePositions_ObpOld[_continueCodePositions_ObpOld.size()-1];
    279259    }
    280260   
     
    489469    void PutOld( const NativeCode &nativeCode )
    490470    {
    491         pNativeCode->Put( nativeCode, true );
     471        pNativeCode->Put( nativeCode );
    492472    }
    493473    void PutOld( char c )
  • trunk/abdev/BasicCompiler_Common/include/NativeCode.h

    r273 r276  
    66
    77#include <BoostSerializationSupport.h>
    8 
    9 void ObpPlus( int step = 1 );
    108
    119class UserProc;
     
    270268    {
    271269    }
    272     NativeCode( const NativeCode &nativeCode, bool isOpBuffer )
     270    NativeCode( const NativeCode &nativeCode )
    273271        : allocateSize( 8192 )
    274272        , codeBuffer( (char *)malloc( allocateSize ) )
    275273        , size( 0 )
    276274    {
    277         Put( nativeCode, isOpBuffer );
    278     }
    279     NativeCode( const char *codeBuffer, int size, bool isOpBuffer )
     275        Put( nativeCode );
     276    }
     277    NativeCode( const char *codeBuffer, int size )
    280278        : allocateSize( 8192 )
    281279        , codeBuffer( (char *)malloc( allocateSize ) )
    282280        , size( 0 )
    283281    {
    284         Put( codeBuffer, size, isOpBuffer );
     282        Put( codeBuffer, size );
    285283    }
    286284    ~NativeCode()
     
    296294    {
    297295        Clear();
    298         Put( nativeCode, false );
     296        Put( nativeCode );
    299297    }
    300298
     
    316314        return *(long *)(this->codeBuffer+codePos);
    317315    }
    318     long _GetLong_ObpOld( int _obpOld ) const
    319     {
    320         extern char *OpBuffer;
    321         return *(long *)(OpBuffer+_obpOld);
    322     }
    323316
    324317    void Overwrite( int codePos, char c )
     
    326319        codeBuffer[codePos] = c;
    327320    }
    328     void OverwriteOld( int _obpOld, char c )
    329     {
    330         // 未完成
    331         extern char *OpBuffer;
    332         OpBuffer[_obpOld] = c;
    333     }
    334321    void Overwrite( int codePos, long newLongValue )
    335322    {
    336323        *(long *)(this->codeBuffer+codePos) = newLongValue;
    337324    }
    338     void OverwriteOld( int _obpOld, long newLongValue )
    339     {
    340         // 未完成
    341         extern char *OpBuffer;
    342         *(long *)(OpBuffer+_obpOld) = newLongValue;
    343     }
    344 
    345     void Put( const char *codeBuffer, int size, bool isOpBuffer = true )
     325
     326    void Put( const char *codeBuffer, int size )
    346327    {
    347328        Realloc( this->size + size );
     
    349330        memcpy( this->codeBuffer + this->size, codeBuffer, size );
    350331        this->size += size;
    351 
    352         // 未完成
    353         if( isOpBuffer )
    354         {
    355             extern char *OpBuffer;
    356             extern int obp;
    357             memcpy( OpBuffer + obp, codeBuffer, size );
    358             ObpPlus( size );
    359         }
    360     }
    361     void Put( const NativeCode &nativeCode, bool isOpBuffer );
     332    }
     333    void Put( const NativeCode &nativeCode );
    362334    void Put( _int64 i64data )
    363335    {
     
    373345        *((long *)(codeBuffer+size))=l;
    374346        size += sizeof(long);
    375 
    376 
    377 
    378         // 未完成
    379         switch( scheduleType )
    380         {
    381         case Schedule::None:
    382             // 何もしない
    383             break;
    384         case Schedule::GlobalVar:
    385             extern CSchedule *pobj_GlobalVarSchedule;
    386             pobj_GlobalVarSchedule->add();
    387             break;
    388         case Schedule::DataTable:
    389             extern CSchedule *pobj_DataTableSchedule;
    390             pobj_DataTableSchedule->add();
    391             break;
    392         case Schedule::Relocation:
    393             // 未完成
    394             break;
    395         default:
    396             Jenga::Throw( "scheduleTypeが無効な値を保持している" );
    397             break;
    398         }
    399         extern char *OpBuffer;
    400         extern int obp;
    401         *((long *)(OpBuffer+obp))=l;
    402         ObpPlus( sizeof(long) );
    403347    }
    404348    void PutUserProcSchedule( const UserProc *pUserProc, bool isCall );
     
    412356        Realloc( size + 1 );
    413357        codeBuffer[size++] = c;
    414 
    415 
    416 
    417         // 未完成
    418         extern char *OpBuffer;
    419         extern int obp;
    420         OpBuffer[obp]=c;
    421         ObpPlus();
    422358    }
    423359
  • trunk/abdev/BasicCompiler_Common/include/Procedure.h

    r271 r276  
    373373        return *pCompilingUserProc;
    374374    }
    375 
    376 
    377 
    378     mutable long _beginOpAddressOld;
    379     mutable long _endOpAddressOld;
    380375};
    381376
  • trunk/abdev/BasicCompiler_Common/include/Prototype.h

    r215 r276  
    3030    {
    3131        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol );
     32        ar & BOOST_SERIALIZATION_NVP( isUsing );
    3233    }
    3334
  • trunk/abdev/BasicCompiler_Common/include/option.h

    r270 r276  
    3434
    3535    // モジュールサイズに関するログを生成する
    36     //#define USE_TRACE_FOR_SIZE
     36    #define USE_TRACE_FOR_SIZE
    3737
    3838    // XMLシリアライズに関するログを生成する
  • trunk/abdev/BasicCompiler_Common/src/Class.cpp

    r272 r276  
    732732        if(!pUserProc) continue;
    733733
    734         // 古いOpBufferを利用する場合は_beginOpAddressOldでないとダメ
    735         //pVtbl[i]=pUserProc->_beginOpAddressOld+ImageBase+MemPos_CodeSection;
    736734        pVtbl[i]=pUserProc->GetBeginOpAddress()+ImageBase+MemPos_CodeSection;
    737735    }
     
    954952                member->GetConstructParameter().c_str(),
    955953                0);
    956 
    957             //ネイティブコードバッファの再確保
    958             ReallocNativeCodeBuffer();
    959954
    960955            i++;
     
    15021497        // コンパイル
    15031498        ChangeOpcode( temporary );
    1504 
    1505         // ネイティブコードバッファの再確保
    1506         ReallocNativeCodeBuffer();
    15071499    }
    15081500
     
    15501542            ChangeOpcode( temporary );
    15511543        }
    1552 
    1553         // ネイティブコードバッファの再確保
    1554         ReallocNativeCodeBuffer();
    15551544    }
    15561545
  • trunk/abdev/BasicCompiler_Common/src/CodeGenerator.cpp

    r206 r276  
    44#include <stdlib.h>
    55
    6 int obp,obp_AllocSize;
    76int GlobalOpBufferSize;
    8 char *OpBuffer;
    9 void ReallocNativeCodeBuffer(){
    10     if(obp_AllocSize<obp+8192){
    11         obp_AllocSize+=8192;
    12         OpBuffer=(char *)realloc(OpBuffer,obp_AllocSize); //matea
    13     }
    14 }
  • trunk/abdev/BasicCompiler_Common/src/CommonCodeGenerator.cpp

    r254 r276  
    99    {
    1010        pNativeCode->Overwrite( exitSubCodePosition, (long)( pNativeCode->GetSize()-(exitSubCodePosition+sizeof(long)) ) );
    11     }
    12    
    13     // TODO: 未完成
    14     BOOST_FOREACH( long exitSubCodePositionOld, _exitSubCodePositions_ObpOld )
    15     {
    16         extern int obp;
    17         pNativeCode->OverwriteOld( exitSubCodePositionOld, (long)( obp-(exitSubCodePositionOld+sizeof(long)) ) );
    1811    }
    1912}
     
    4538
    4639                pNativeCode->Overwrite( pPertialSchedule->GetCodePos(), (char)newValue );
    47 
    48                 // TODO: 未完成(用が無くなったら消す)
    49                 pNativeCode->OverwriteOld( pPertialSchedule->GetObpOld(), (char)newValue );
    5040            }
    5141            else if( pPertialSchedule->GetTypeSize() == sizeof(long) )
    5242            {
    5343                pNativeCode->Overwrite( pPertialSchedule->GetCodePos(), newValue );
    54 
    55                 // TODO: 未完成(用が無くなったら消す)
    56                 pNativeCode->OverwriteOld( pPertialSchedule->GetObpOld(), newValue );
    5744            }
    5845            else
     
    9481                    pNativeCode->GetLong(pPertialSchedule->GetCodePos()) + offset
    9582                );
    96 
    97                 // TODO: 未完成(用が無くなったら消す)
    98                 pNativeCode->OverwriteOld(
    99                     pPertialSchedule->GetObpOld(),
    100                     pNativeCode->_GetLong_ObpOld(pPertialSchedule->GetObpOld()) + offset
    101                 );
    10283            }
    10384            else
     
    136117        {
    137118            long newValue = pNativeCode->GetSize() - (pPertialSchedule->GetCodePos()+pPertialSchedule->GetTypeSize());
    138 
    139             extern int obp;
    140             long newValueOld = obp - (pPertialSchedule->GetObpOld()+pPertialSchedule->GetTypeSize());
    141119
    142120            if( pPertialSchedule->GetTypeSize() == sizeof(char) )
     
    149127
    150128                pNativeCode->Overwrite( pPertialSchedule->GetCodePos(), (char)newValue );
    151 
    152                 // TODO: 未完成(用が無くなったら消す)
    153                 pNativeCode->OverwriteOld( pPertialSchedule->GetObpOld(), (char)newValueOld );
    154129            }
    155130            else if( pPertialSchedule->GetTypeSize() == sizeof(long) )
    156131            {
    157132                pNativeCode->Overwrite( pPertialSchedule->GetCodePos(), newValue );
    158 
    159                 // TODO: 未完成(用が無くなったら消す)
    160                 pNativeCode->OverwriteOld( pPertialSchedule->GetObpOld(), newValueOld );
    161133            }
    162134            else
     
    184156{
    185157    long beginCodePos = pNativeCode->GetSize();
    186     {
    187         // TODO: 未完成
    188         extern int obp;
    189         beginCodePos = obp;
    190     }
    191158
    192159    if( opcode == (char)0xEB )
     
    233200    {
    234201        // 自分自身の命令サイズを考慮する場合
    235         //offset += ( pNativeCode->GetSize() - beginCodePos ) + op_size;
    236 
    237         // TODO: 未完成
    238         extern int obp;
    239         offset -= ( obp - beginCodePos ) + op_size;
     202        offset -= ( pNativeCode->GetSize() - beginCodePos ) + op_size;
    240203    }
    241204
     
    301264void CodeGenerator::op_jmp_continue()
    302265{
    303     ////////////////////////////////////
    304     // エラー検出(必要なくなったら消す)
    305     extern int obp;
    306     if( GetContinueCodePosOld()-obp != GetContinueCodePos()-pNativeCode->GetSize() )
    307     {
    308         int continueCodePosOld = GetContinueCodePosOld();
    309         int continueCodePos = GetContinueCodePos();
    310         int size = pNativeCode->GetSize();
    311         int test=0;
    312         SetError();
    313     }
    314     ////////////////////////////////////
    315 
    316 
    317266    if( GetContinueCodePos() == -1 )
    318267    {
     
    328277
    329278    exitSubCodePositions.push_back( pNativeCode->GetSize() );
    330    
    331     extern int obp;
    332     _exitSubCodePositions_ObpOld.push_back( obp );
    333279
    334280    pNativeCode->Put( (long)0 );
  • trunk/abdev/BasicCompiler_Common/src/LexicalScope.cpp

    r265 r276  
    7979        if(pVar->bLiving&&pVar->GetScopeLevel()==level){
    8080            pVar->bLiving=0;
    81             extern int obp;
    82             pVar->SetScopeEndAddress( obp );
     81            pVar->SetScopeEndAddress( compiler.codeGenerator.GetNativeCodeSize() );
    8382        }
    8483    }
  • trunk/abdev/BasicCompiler_Common/src/Linker.cpp

    r273 r276  
    110110    }
    111111
    112     nativeCode.Put( masterObjectModule.globalNativeCode, false );
     112    nativeCode.Put( masterObjectModule.globalNativeCode );
    113113
    114114    masterObjectModule.meta.GetUserProcs().Iterator_Reset();
     
    117117        const UserProc *pUserProc = masterObjectModule.meta.GetUserProcs().Iterator_GetNext();
    118118
    119         if( pUserProc->IsUsing() )
     119        if( pUserProc->GetNativeCode().GetSize() > 0 )
    120120        {
    121121            pUserProc->SetBeginOpAddress( nativeCode.GetSize() );
    122122
    123             nativeCode.Put( pUserProc->GetNativeCode(), false );
     123            nativeCode.Put( pUserProc->GetNativeCode() );
    124124
    125125            pUserProc->SetEndOpAddress( nativeCode.GetSize() );
  • trunk/abdev/BasicCompiler_Common/src/NativeCode.cpp

    r273 r276  
    66#define BREAK_EIP(checkEip)  (obp+0x00401000>=checkEip)
    77
    8 void ObpPlus( int step )
    9 {
    10     extern int obp;
    11     obp += step;
    12 
    13     // 例:epi=0x00401999
    14     if( BREAK_EIP(0x00433FD7) )
    15     {
    16         int test=0;
    17     }
    18 }
    19 
    20 void NativeCode::Put( const NativeCode &nativeCode, bool isOpBuffer )
     8void NativeCode::Put( const NativeCode &nativeCode )
    219{
    2210    long baseOffset = size;
    2311
    2412    // コードバッファを追加
    25     Put( nativeCode.codeBuffer, nativeCode.size, isOpBuffer );
     13    Put( nativeCode.codeBuffer, nativeCode.size );
    2614
    2715    // スケジュールを追加
     
    6452    *((long *)(codeBuffer+size))=0;
    6553    size += sizeof(long);
    66 
    67 
    68 
    69     // 未完成
    70     if( isCall )
    71     {
    72         pobj_SubAddrSchedule->add(pUserProc,1);
    73     }
    74     else
    75     {
    76         pobj_SubAddrSchedule->add(pUserProc,0);
    77     }
    78     extern char *OpBuffer;
    79     extern int obp;
    80     *((long *)(OpBuffer+obp))=0;
    81     ObpPlus( sizeof(long) );
    8254}
    8355
     
    9062    *((long *)(codeBuffer+size))=0;
    9163    size += sizeof(long);
    92 
    93 
    94 
    95     // 未完成
    96     pobj_ImportAddrSchedule->add(pDllProc);
    97     extern char *OpBuffer;
    98     extern int obp;
    99     *((long *)(OpBuffer+obp))=0;
    100     ObpPlus( sizeof(long) );
    10164}
    10265
  • trunk/abdev/BasicCompiler_Common/src/ObjectModule.cpp

    r274 r276  
    88    meta.StaticLink( objectModule.meta, dataTable.GetSize() );
    99
     10    // ネイティブコードを結合
     11    globalNativeCode.Put( objectModule.globalNativeCode );
     12    globalNativeCode.ResetDataSectionBaseOffset( dataTable.GetSize() );
     13
    1014    // データテーブルを結合
    1115    dataTable.Add( objectModule.dataTable );
Note: See TracChangeset for help on using the changeset viewer.