Changeset 309 in dev for trunk/abdev/BasicCompiler64
- Timestamp:
- Aug 29, 2007, 9:19:17 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler64
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/BasicCompiler.vcproj
r308 r309 412 412 </File> 413 413 </Filter> 414 <Filter415 Name="Low Level Classes"416 >417 <File418 RelativePath="..\BasicCompiler_Common\include\StackFrame.h"419 >420 </File>421 </Filter>422 414 </Filter> 423 415 </Filter> -
trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
r308 r309 146 146 147 147 Compile_AddGlobalRootsForGc(); 148 } 149 else if( userProc.GetName() == compiler.globalAreaProcName ){ 150 //////////////////////////////////////// 151 // グローバル領域をコンパイル 152 //////////////////////////////////////// 153 154 const UserProc *pBackUserProc = &UserProc::CompilingUserProc(); 155 UserProc::CompileStartForGlobalArea(); 156 157 int BackCp = cp; 158 cp=-1; 159 160 //クラスに属する静的メンバを定義 161 compiler.GetObjectModule().meta.GetClasses().InitStaticMember(); 162 163 //グローバル実行領域をコンパイル開始 164 CompileBuffer(0,0); 165 166 //Goto未知ラベルスケジュールが存在したらエラーにする 167 BOOST_FOREACH( const GotoLabelSchedule *pGotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules ) 168 { 169 if(pGotoLabelSchedule->GetName().size()>0){ 170 SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos()); 171 } 172 else{ 173 char temporary[255]; 174 sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum()); 175 SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos()); 176 } 177 } 178 179 UserProc::CompileStartForUserProc( pBackUserProc ); 180 cp=BackCp; 148 181 } 149 182 else{ … … 691 724 else SetError(300,NULL,cp); 692 725 } 726 else 727 { 728 // グローバル領域を一番初めにコンパイルする 729 extern const UserProc *pSub_System_GlobalArea; 730 CompileBufferInProcedure( *pSub_System_GlobalArea ); 731 } 693 732 694 733 //_System_TypeBase_InitializeUserTypesは一番最後にコンパイル -
trunk/abdev/BasicCompiler64/MakePeHdr.cpp
r308 r309 24 24 const UserProc 25 25 *pSub_System_StartupProgram, 26 *pSub_System_GlobalArea, 26 27 *pSub_DebugSys_StartProc, 27 28 *pSub_DebugSys_EndProc, … … 224 225 pSub_System_StartupProgram->Using(); 225 226 227 if(pSub_System_GlobalArea=GetSubHash(compiler.globalAreaProcName.c_str(),1)) 228 { 229 pSub_System_GlobalArea->Using(); 230 pSub_System_GlobalArea->ThisIsAutoGenerationProc(); 231 } 232 226 233 if(pSub_DebugSys_StartProc=GetSubHash("_DebugSys_StartProc",1)) 227 234 pSub_DebugSys_StartProc->Using(); … … 344 351 345 352 //スタックフレーム管理用クラスを選択 346 pobj_sf = &compiler.GetObjectModule().globalStackFrame;353 pobj_sf=new StackFrame(); 347 354 348 355 // コード生成対象を選択 … … 358 365 { 359 366 //sub rsp,スタックフレームサイズ 360 co nst PertialSchedule *pStackFramePertialSchedule = compiler.codeGenerator.op_sub_rsp( 0, true);367 compiler.codeGenerator.op_sub_RV( sizeof(_int64), REG_RSP, 0x100 ); 361 368 362 369 if(bDebugCompile){ … … 372 379 } 373 380 374 //クラスに属する静的メンバを定義 375 compiler.GetObjectModule().meta.GetClasses().InitStaticMember(); 376 377 //グローバル実行領域をコンパイル開始 378 CompileBuffer(0,0); 379 380 //Goto未知ラベルスケジュールが存在したらエラーにする 381 BOOST_FOREACH( const GotoLabelSchedule *pGotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules ) 382 { 383 if(pGotoLabelSchedule->GetName().size()>0){ 384 SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos()); 385 } 386 else{ 387 sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum()); 388 SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos()); 389 } 390 } 381 // _System_GlobalArea の呼び出し 382 compiler.codeGenerator.op_call( pSub_System_GlobalArea ); 391 383 392 384 … … 403 395 404 396 //add rsp,スタックフレームサイズ 405 int stackFrameSize = pobj_sf->GetFrameSize(0); 406 compiler.codeGenerator.op_add_RV( REG_RSP, stackFrameSize ); 397 compiler.codeGenerator.op_add_RV( REG_RSP, 0x100 ); 407 398 408 399 //xor rax,rax(raxを0に初期化する) … … 411 402 //ret 412 403 compiler.codeGenerator.op_ret(); 413 414 //スタックフレームスケジュール(subコマンドに渡す値) 415 compiler.codeGenerator.opfix( pStackFramePertialSchedule, stackFrameSize ); 416 417 //スタックフレームスケジュールを実行 418 pobj_sf->RunningSchedule( stackFrameSize ); 419 pobj_sf=0; 420 } 404 } 405 406 //スタックフレームスケジュールを実行 407 pobj_sf->RunningSchedule( 0x100 ); 408 delete pobj_sf; 409 pobj_sf=0; 421 410 422 411 //グローバル実行領域のコードサイズ -
trunk/abdev/BasicCompiler64/Opcode.h
r308 r309 43 43 44 44 45 class StackFrame 46 { 47 /////////////////////////// 48 // スタックフレーム管理 49 /////////////////////////// 50 51 PertialSchedules pertialSchedules; 52 53 int lowest_sp; //スタックポインタの最下位位置 54 int now_sp; //スタックポインタ 55 int max_parm_size; //パラメータの最大サイズ 56 57 public: 58 //コンストラクタ 59 StackFrame(); 60 61 //デストラクタ 62 ~StackFrame(); 63 64 int GetFrameSize( int localParamSize ); 65 int GetNowSp(); 66 void mov_sp( int reg ); 67 int push(int reg); 68 void push(int xmm_reg,int varSize); 69 void ref_offset_data( int reg, int sp_offset ); 70 void ref(int reg); 71 void ref(int xmm_reg,int varSize); 72 void pop(int reg = REG_NON); 73 void pop(int xmm_reg,int varSize); 74 void parameter_allocate(int size); 75 void RunningSchedule( int stackFrameSize ); 76 77 void error_check(void); 78 }; 45 79 extern StackFrame *pobj_sf; 46 80
Note:
See TracChangeset
for help on using the changeset viewer.