Index: trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp	(revision 221)
+++ trunk/abdev/BasicCompiler64/Compile_ProcOp.cpp	(revision 226)
@@ -15,8 +15,8 @@
 	if( userProc.GetName() == "_System_GetEip" ){
 		//mov rax,qword ptr[rsp]
-		op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE);
+		compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RAX,REG_RSP,0,MOD_BASE);
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_InitDllGlobalVariables" ){
@@ -27,5 +27,5 @@
 		if(!bDll){
 			//ret
-			op_ret();
+			compiler.codeGenerator.op_ret();
 
 			return;
@@ -41,5 +41,5 @@
 		//sub rsp,スタックフレームサイズ
 		int StackFrameSchedule;
-		op_sub_rsp(0xFFFFFFFF);
+		compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF);
 		StackFrameSchedule=obp-sizeof(long);
 
@@ -55,5 +55,5 @@
 		//_System_StartupProgramの呼び出し
 		extern const UserProc *pSub_System_StartupProgram;
-		op_call(pSub_System_StartupProgram);
+		compiler.codeGenerator.op_call(pSub_System_StartupProgram);
 
 		//クラスに属する静的メンバを定義
@@ -63,5 +63,5 @@
 
 		//add rsp,スタックフレームサイズ
-		op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
+		compiler.codeGenerator.op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
 
 		//スタックフレームスケジュール（subコマンドに渡す値）
@@ -72,5 +72,5 @@
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_InitStaticLocalVariables" ){
@@ -79,5 +79,5 @@
 		//sub rsp,スタックフレームサイズ
 		int StackFrameSchedule;
-		op_sub_rsp(0xFFFFFFFF);
+		compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF);
 		StackFrameSchedule=obp-sizeof(long);
 
@@ -100,5 +100,5 @@
 
 		//add rsp,スタックフレームサイズ
-		op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
+		compiler.codeGenerator.op_add_RV(REG_RSP,pobj_sf->GetFrameSize(0));
 
 		//スタックフレームスケジュール（subコマンドに渡す値）
@@ -106,9 +106,9 @@
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_Call_Destructor_of_GlobalObject" ){
 		//sub rsp,8（※RSPを16バイト境界にあわせるため）
-		op_sub_rsp(0x8);
+		compiler.codeGenerator.op_sub_rsp(0x8);
 
 
@@ -122,18 +122,18 @@
 
 		//add rsp,8
-		op_add_RV(REG_RSP,0x8);
+		compiler.codeGenerator.op_add_RV(REG_RSP,0x8);
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_System_GetSp" ){
 		//mov rax,rsp
-		op_mov_RR(REG_RAX,REG_RSP);
+		compiler.codeGenerator.op_mov_RR(REG_RAX,REG_RSP);
 
 		//add rax,PTR_SIZE
-		op_add_RV(REG_RAX,PTR_SIZE);
+		compiler.codeGenerator.op_add_RV(REG_RAX,PTR_SIZE);
 
 		//ret
-		op_ret();
+		compiler.codeGenerator.op_ret();
 	}
 	else if( userProc.GetName() == "_allrem" ){
@@ -276,4 +276,7 @@
 	compiler.GetNamespaceSupporter().SetImportedNamespaces( pUserProc->GetImportedNamespaces() );
 
+	// コード生成対象を選択
+	compiler.codeGenerator.Select( (const_cast<UserProc *>(pUserProc))->GetNativeCode() );
+
 	if(pUserProc->IsSystem()){
 		////////////////////
@@ -408,9 +411,9 @@
 			if(param.IsReal()&&param.IsRef() == false){
 				//movsd qword ptr[rsp+0x20],xmm3
-				op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_movsd_MR(REG_XMM3,REG_RSP,0x20,MOD_BASE_DISP32);
 			}
 			else{
 				//mov qword ptr[rsp+0x20],r9
-				op_mov_MR(sizeof(_int64),REG_R9,REG_RSP,0x20,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_R9,REG_RSP,0x20,MOD_BASE_DISP32);
 			}
 		}
@@ -418,9 +421,9 @@
 			if(param.IsReal()&&param.IsRef() == false){
 				//movsd qword ptr[rsp+0x18],xmm2
-				op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_movsd_MR(REG_XMM2,REG_RSP,0x18,MOD_BASE_DISP32);
 			}
 			else{
 				//mov qword ptr[rsp+0x18],r8
-				op_mov_MR(sizeof(_int64),REG_R8,REG_RSP,0x18,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_R8,REG_RSP,0x18,MOD_BASE_DISP32);
 			}
 		}
@@ -428,9 +431,9 @@
 			if(param.IsReal()&&param.IsRef() == false){
 				//movsd qword ptr[rsp+0x10],xmm1
-				op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_movsd_MR(REG_XMM1,REG_RSP,0x10,MOD_BASE_DISP32);
 			}
 			else{
 				//mov qword ptr[rsp+0x10],rdx
-				op_mov_MR(sizeof(_int64),REG_RDX,REG_RSP,0x10,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RDX,REG_RSP,0x10,MOD_BASE_DISP32);
 			}
 		}
@@ -438,9 +441,9 @@
 			if(param.IsReal()&&param.IsRef() == false){
 				//movsd qword ptr[rsp+0x8],xmm0
-				op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_movsd_MR(REG_XMM0,REG_RSP,0x8,MOD_BASE_DISP32);
 			}
 			else{
 				//mov qword ptr[rsp+0x8],rcx
-				op_mov_MR(sizeof(_int64),REG_RCX,REG_RSP,0x8,MOD_BASE_DISP32);
+				compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RCX,REG_RSP,0x8,MOD_BASE_DISP32);
 			}
 		}
@@ -452,5 +455,5 @@
 	//sub rsp,スタックフレームサイズ
 	int StackFrameSchedule;
-	op_sub_rsp(0xFFFFFFFF);
+	compiler.codeGenerator.op_sub_rsp(0xFFFFFFFF);
 	StackFrameSchedule=obp-sizeof(long);
 
@@ -496,17 +499,17 @@
 	if(bDebugCompile&&bDebugSupportProc==0){
 		//mov rdx, qword ptr[rsp+スタックフレームサイズ]
-		op_mov_RM(sizeof(_int64),REG_RDX,REG_RSP,0,MOD_BASE_DISP32);
+		compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_RDX,REG_RSP,0,MOD_BASE_DISP32);
 		RspOffsetSchedule=obp-sizeof(long);
 
 		//mov rcx,rsp
-		op_mov_RR(REG_RCX,REG_RSP);
+		compiler.codeGenerator.op_mov_RR(REG_RCX,REG_RSP);
 
 		//add rcx,スタックフレームサイズ+sizeof(_int64) ※ret用のサイズを考慮
-		op_add_RV(REG_RCX,0);
+		compiler.codeGenerator.op_add_RV(REG_RCX,0);
 		RspOffsetSchedule2=obp-sizeof(long);
 
 		//call _DebugSys_StartProc
 		extern const UserProc *pSub_DebugSys_StartProc;
-		op_call(pSub_DebugSys_StartProc);
+		compiler.codeGenerator.op_call(pSub_DebugSys_StartProc);
 	}
 
@@ -582,5 +585,5 @@
 
 					//mov rax,offset
-					op_mov_RV(sizeof(_int64),REG_RAX,offset);
+					compiler.codeGenerator.op_mov_RV(sizeof(_int64),REG_RAX,offset);
 					obp-=sizeof(long);
 					pobj_DataTableSchedule->add();
@@ -591,5 +594,5 @@
 
 					//mov qword ptr[rcx],rax
-					op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
+					compiler.codeGenerator.op_mov_MR(sizeof(_int64),REG_RAX,REG_RCX,0,MOD_BASE);
 			}
 		}
@@ -695,5 +698,5 @@
 		//call _DebugSys_EndProc
 		extern const UserProc *pSub_DebugSys_EndProc;
-		op_call(pSub_DebugSys_EndProc);
+		compiler.codeGenerator.op_call(pSub_DebugSys_EndProc);
 	}
 
@@ -717,5 +720,5 @@
 			if( i3==DEF_OBJECT ){
 				//mov rax,qword ptr[rax]
-				op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );
+				compiler.codeGenerator.op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );
 			}
 		}
@@ -763,8 +766,8 @@
 
 	//add rsp,スタックフレームサイズ
-	op_add_rsp(stackFrameAndLocalParamSize);
+	compiler.codeGenerator.op_add_rsp(stackFrameAndLocalParamSize);
 
 	//ret
-	op_ret();
+	compiler.codeGenerator.op_ret();
 
 
