Changeset 225 in dev for trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
- Timestamp:
- Jul 21, 2007, 11:47:40 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r206 r225 23 23 24 24 //ret 25 op_ret();25 compiler.codeGenerator.op_ret(); 26 26 } 27 27 else if( userProc.GetName() == "_System_InitDllGlobalVariables" ){ … … 33 33 if(!bDll){ 34 34 //ret 35 op_ret();35 compiler.codeGenerator.op_ret(); 36 36 37 37 return; … … 57 57 //_System_StartupProgramの呼び出し 58 58 extern const UserProc *pSub_System_StartupProgram; 59 op_call(pSub_System_StartupProgram);59 compiler.codeGenerator.op_call(pSub_System_StartupProgram); 60 60 61 61 //クラスに属する静的メンバを定義 … … 68 68 69 69 //ret 70 op_ret();70 compiler.codeGenerator.op_ret(); 71 71 } 72 72 else if( userProc.GetName() == "_System_InitStaticLocalVariables" ){ … … 91 91 92 92 //ret 93 op_ret();93 compiler.codeGenerator.op_ret(); 94 94 } 95 95 else if( userProc.GetName() == "_System_Call_Destructor_of_GlobalObject" ){ … … 105 105 106 106 //ret 107 op_ret();107 compiler.codeGenerator.op_ret(); 108 108 } 109 109 else if( userProc.GetName() == "_System_GetSp" ){ 110 110 //mov eax,esp 111 op_mov_RR(REG_EAX,REG_ESP);111 compiler.codeGenerator.op_mov_RR(REG_EAX,REG_ESP); 112 112 113 113 //add eax,PTR_SIZE 114 op_add_RV8(REG_EAX,PTR_SIZE);114 compiler.codeGenerator.op_add_RV8(REG_EAX,PTR_SIZE); 115 115 116 116 //ret 117 op_ret();117 compiler.codeGenerator.op_ret(); 118 118 } 119 119 else if( userProc.GetName() == "_allrem" ){ … … 290 290 compiler.GetNamespaceSupporter().SetImportedNamespaces( pUserProc->GetImportedNamespaces() ); 291 291 292 // コード生成対象を選択 293 compiler.codeGenerator.Select( (const_cast<UserProc *>(pUserProc))->GetNativeCode() ); 294 292 295 if(pUserProc->IsSystem()){ 293 296 //////////////////// … … 369 372 370 373 //sub esp,AllLocalVarSize(スケジュール) 371 op_sub_esp(0xFFFFFFFF);374 compiler.codeGenerator.op_sub_esp(0xFFFFFFFF); 372 375 LocalVarSchedule=obp-sizeof(long); 373 376 374 377 //push ebp 375 op_push(REG_EBP);378 compiler.codeGenerator.op_push(REG_EBP); 376 379 377 380 //mov ebp,esp … … 380 383 381 384 //push ebx 382 op_push(REG_EBX);385 compiler.codeGenerator.op_push(REG_EBX); 383 386 384 387 //push esi … … 460 463 //call _DebugSys_StartProc 461 464 extern const UserProc *pSub_DebugSys_StartProc; 462 op_call(pSub_DebugSys_StartProc);465 compiler.codeGenerator.op_call(pSub_DebugSys_StartProc); 463 466 } 464 467 … … 543 546 544 547 //mov dword ptr[ecx],eax 545 OpBuffer[obp++]=(char)0x89; 546 OpBuffer[obp++]=(char)0x01; 548 compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_ECX, 0, MOD_BASE ); 547 549 } 548 550 } … … 653 655 //call _DebugSys_EndProc 654 656 extern const UserProc *pSub_DebugSys_EndProc; 655 op_call(pSub_DebugSys_EndProc);657 compiler.codeGenerator.op_call(pSub_DebugSys_EndProc); 656 658 } 657 659 … … 672 674 if( i3==DEF_OBJECT ){ 673 675 //mov eax,dword ptr[eax] 674 op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE );676 compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_EAX, 0, MOD_BASE ); 675 677 } 676 678 } … … 717 719 else if(i3==DEF_INTEGER||i3==DEF_WORD || (Smoothie::IsUnicode()&&i3==DEF_CHAR)){ 718 720 //xor eax,eax(eaxを0に初期化する) 719 op_zero_reg(REG_EAX);721 compiler.codeGenerator.op_zero_reg(REG_EAX); 720 722 721 723 //mov ax,word ptr[ebp+offset] … … 729 731 else if(i3==DEF_SBYTE||i3==DEF_BYTE||i3==DEF_BOOLEAN || (Smoothie::IsUnicode()==false&&i3==DEF_CHAR)){ 730 732 //xor eax,eax(eaxを0に初期化する) 731 op_zero_reg(REG_EAX);733 compiler.codeGenerator.op_zero_reg(REG_EAX); 732 734 733 735 //mov al,byte ptr[ebp+offset] … … 763 765 764 766 //pop ebx 765 op_pop(REG_EBX);767 compiler.codeGenerator.op_pop(REG_EBX); 766 768 767 769 if(bDebugCompile){ 768 770 //cmp esp,ebp 769 op_cmp_RR( REG_ESP, REG_EBP );771 compiler.codeGenerator.op_cmp_RR( REG_ESP, REG_EBP ); 770 772 771 773 //jz 6(次のcallとbreakpointを飛び越す) … … 775 777 //call _esp_error 776 778 extern const UserProc *pSub_esp_error; 777 op_call( pSub_esp_error );779 compiler.codeGenerator.op_call( pSub_esp_error ); 778 780 779 781 breakpoint; … … 785 787 786 788 //pop ebp 787 op_pop(REG_EBP);789 compiler.codeGenerator.op_pop(REG_EBP); 788 790 789 791 //add esp AllLocalVarSize 790 op_add_esp(AllLocalVarSize-BaseOffset);792 compiler.codeGenerator.op_add_esp(AllLocalVarSize-BaseOffset); 791 793 792 794 if( BaseOffset==0 || pUserProc->IsCdecl() ){ 793 795 //ret 794 op_ret();796 compiler.codeGenerator.op_ret(); 795 797 } 796 798 else{
Note:
See TracChangeset
for help on using the changeset viewer.