Changeset 226 in dev for trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
- Timestamp:
- Jul 22, 2007, 4:58:47 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
r221 r226 15 15 if( userProc.GetName() == "_System_GetEip" ){ 16 16 //mov rax,qword ptr[rsp] 17 op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE);17 compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE); 18 18 19 19 //ret 20 op_ret();20 compiler.codeGenerator.op_ret(); 21 21 } 22 22 else if( userProc.GetName() == "_System_InitDllGlobalVariables" ){ … … 27 27 if(!bDll){ 28 28 //ret 29 op_ret();29 compiler.codeGenerator.op_ret(); 30 30 31 31 return; … … 41 41 //sub rsp,スタックフレームサイズ 42 42 int StackFrameSchedule; 43 op_sub_rsp(0xFFFFFFFF);43 compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF); 44 44 StackFrameSchedule=obp-sizeof(long); 45 45 … … 55 55 //_System_StartupProgramの呼び出し 56 56 extern const UserProc *pSub_System_StartupProgram; 57 op_call(pSub_System_StartupProgram);57 compiler.codeGenerator.op_call(pSub_System_StartupProgram); 58 58 59 59 //クラスに属する静的メンバを定義 … … 63 63 64 64 //add rsp,スタックフレームサイズ 65 op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));65 compiler.codeGenerator.op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0)); 66 66 67 67 //スタックフレームスケジュール(subコマンドに渡す値) … … 72 72 73 73 //ret 74 op_ret();74 compiler.codeGenerator.op_ret(); 75 75 } 76 76 else if( userProc.GetName() == "_System_InitStaticLocalVariables" ){ … … 79 79 //sub rsp,スタックフレームサイズ 80 80 int StackFrameSchedule; 81 op_sub_rsp(0xFFFFFFFF);81 compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF); 82 82 StackFrameSchedule=obp-sizeof(long); 83 83 … … 100 100 101 101 //add rsp,スタックフレームサイズ 102 op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));102 compiler.codeGenerator.op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0)); 103 103 104 104 //スタックフレームスケジュール(subコマンドに渡す値) … … 106 106 107 107 //ret 108 op_ret();108 compiler.codeGenerator.op_ret(); 109 109 } 110 110 else if( userProc.GetName() == "_System_Call_Destructor_of_GlobalObject" ){ 111 111 //sub rsp,8(※RSPを16バイト境界にあわせるため) 112 op_sub_rsp(0x8);112 compiler.codeGenerator.op_sub_rsp(0x8); 113 113 114 114 … … 122 122 123 123 //add rsp,8 124 op_add_RV(REG_RSP,0x8);124 compiler.codeGenerator.op_add_RV(REG_RSP,0x8); 125 125 126 126 //ret 127 op_ret();127 compiler.codeGenerator.op_ret(); 128 128 } 129 129 else if( userProc.GetName() == "_System_GetSp" ){ 130 130 //mov rax,rsp 131 op_mov_RR(REG_RAX,REG_RSP);131 compiler.codeGenerator.op_mov_RR(REG_RAX,REG_RSP); 132 132 133 133 //add rax,PTR_SIZE 134 op_add_RV(REG_RAX,PTR_SIZE);134 compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE); 135 135 136 136 //ret 137 op_ret();137 compiler.codeGenerator.op_ret(); 138 138 } 139 139 else if( userProc.GetName() == "_allrem" ){ … … 276 276 compiler.GetNamespaceSupporter().SetImportedNamespaces( pUserProc->GetImportedNamespaces() ); 277 277 278 // コード生成対象を選択 279 compiler.codeGenerator.Select( (const_cast<UserProc *>(pUserProc))->GetNativeCode() ); 280 278 281 if(pUserProc->IsSystem()){ 279 282 //////////////////// … … 408 411 if(param.IsReal()&¶m.IsRef() == false){ 409 412 //movsd qword ptr[rsp+0x20],xmm3 410 op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32);413 compiler.codeGenerator.op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32); 411 414 } 412 415 else{ 413 416 //mov qword ptr[rsp+0x20],r9 414 op_mov_MR(sizeof(_int64),REG_R9,REG_RSP,0x20,MOD_BASE_DISP32);417 compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_R9,REG_RSP,0x20,MOD_BASE_DISP32); 415 418 } 416 419 } … … 418 421 if(param.IsReal()&¶m.IsRef() == false){ 419 422 //movsd qword ptr[rsp+0x18],xmm2 420 op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32);423 compiler.codeGenerator.op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32); 421 424 } 422 425 else{ 423 426 //mov qword ptr[rsp+0x18],r8 424 op_mov_MR(sizeof(_int64),REG_R8,REG_RSP,0x18,MOD_BASE_DISP32);427 compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_R8,REG_RSP,0x18,MOD_BASE_DISP32); 425 428 } 426 429 } … … 428 431 if(param.IsReal()&¶m.IsRef() == false){ 429 432 //movsd qword ptr[rsp+0x10],xmm1 430 op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32);433 compiler.codeGenerator.op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32); 431 434 } 432 435 else{ 433 436 //mov qword ptr[rsp+0x10],rdx 434 op_mov_MR(sizeof(_int64),REG_RDX,REG_RSP,0x10,MOD_BASE_DISP32);437 compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RDX,REG_RSP,0x10,MOD_BASE_DISP32); 435 438 } 436 439 } … … 438 441 if(param.IsReal()&¶m.IsRef() == false){ 439 442 //movsd qword ptr[rsp+0x8],xmm0 440 op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32);443 compiler.codeGenerator.op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32); 441 444 } 442 445 else{ 443 446 //mov qword ptr[rsp+0x8],rcx 444 op_mov_MR(sizeof(_int64),REG_RCX,REG_RSP,0x8,MOD_BASE_DISP32);447 compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RCX,REG_RSP,0x8,MOD_BASE_DISP32); 445 448 } 446 449 } … … 452 455 //sub rsp,スタックフレームサイズ 453 456 int StackFrameSchedule; 454 op_sub_rsp(0xFFFFFFFF);457 compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF); 455 458 StackFrameSchedule=obp-sizeof(long); 456 459 … … 496 499 if(bDebugCompile&&bDebugSupportProc==0){ 497 500 //mov rdx, qword ptr[rsp+スタックフレームサイズ] 498 op_mov_RM(sizeof(_int64),REG_RDX,REG_RSP,0,MOD_BASE_DISP32);501 compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RDX,REG_RSP,0,MOD_BASE_DISP32); 499 502 RspOffsetSchedule=obp-sizeof(long); 500 503 501 504 //mov rcx,rsp 502 op_mov_RR(REG_RCX,REG_RSP);505 compiler.codeGenerator.op_mov_RR(REG_RCX,REG_RSP); 503 506 504 507 //add rcx,スタックフレームサイズ+sizeof(_int64) ※ret用のサイズを考慮 505 op_add_RV(REG_RCX,0);508 compiler.codeGenerator.op_add_RV(REG_RCX,0); 506 509 RspOffsetSchedule2=obp-sizeof(long); 507 510 508 511 //call _DebugSys_StartProc 509 512 extern const UserProc *pSub_DebugSys_StartProc; 510 op_call(pSub_DebugSys_StartProc);513 compiler.codeGenerator.op_call(pSub_DebugSys_StartProc); 511 514 } 512 515 … … 582 585 583 586 //mov rax,offset 584 op_mov_RV(sizeof(_int64),REG_RAX,offset);587 compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,offset); 585 588 obp-=sizeof(long); 586 589 pobj_DataTableSchedule->add(); … … 591 594 592 595 //mov qword ptr[rcx],rax 593 op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);596 compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE); 594 597 } 595 598 } … … 695 698 //call _DebugSys_EndProc 696 699 extern const UserProc *pSub_DebugSys_EndProc; 697 op_call(pSub_DebugSys_EndProc);700 compiler.codeGenerator.op_call(pSub_DebugSys_EndProc); 698 701 } 699 702 … … 717 720 if( i3==DEF_OBJECT ){ 718 721 //mov rax,qword ptr[rax] 719 op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );722 compiler.codeGenerator.op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE ); 720 723 } 721 724 } … … 763 766 764 767 //add rsp,スタックフレームサイズ 765 op_add_rsp(stackFrameAndLocalParamSize);768 compiler.codeGenerator.op_add_rsp(stackFrameAndLocalParamSize); 766 769 767 770 //ret 768 op_ret();771 compiler.codeGenerator.op_ret(); 769 772 770 773
Note:
See TracChangeset
for help on using the changeset viewer.