Index: trunk/abdev/BasicCompiler64/CodeGenerator.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/CodeGenerator.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/CodeGenerator.cpp	(revision 228)
@@ -79,5 +79,5 @@
 #define INDEX_NON	0x04
 
-void CodeGenerator::set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,long disp){
+void CodeGenerator::set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,long disp, Schedule::Type scheduleType ){
 	if(mod==MOD_DISP32){
 		//ModR/Mバイト
@@ -115,11 +115,11 @@
 	if(mod==MOD_BASE_DISP8) pNativeCode->Put( (char)disp );
 	else{
-		pNativeCode->Put( disp );
-	}
-}
-
-
-
-void CodeGenerator::__op_format(int op_size,char op_prefix,char opcode1,char opcode2,int reg,int base_reg,long offset,char mod){
+		pNativeCode->Put( disp, scheduleType );
+	}
+}
+
+
+
+void CodeGenerator::__op_format(int op_size,char op_prefix,char opcode1,char opcode2,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType ){
 	//命令プリフィックス
 	if(op_prefix) pNativeCode->Put( op_prefix );
@@ -133,5 +133,23 @@
 
 	//ModR/M, SIB, disp
-	set_mod_rm_sib_disp(mod,reg,SCALE_NON,INDEX_NON,base_reg,offset);
+	set_mod_rm_sib_disp(mod,reg,SCALE_NON,INDEX_NON,base_reg,offset, scheduleType );
+}
+
+void CodeGenerator::__jmp_op_format( char opcode, long offset, int op_size )
+{
+	pNativeCode->Put( opcode );
+	if( op_size == sizeof(char) )
+	{
+		pNativeCode->Put( (char)offset );
+	}
+	else if( op_size == sizeof(long) )
+	{
+		SetError();
+		pNativeCode->Put( offset );
+	}
+	else
+	{
+		SetError();
+	}
 }
 
@@ -175,5 +193,5 @@
 	pNativeCode->Put( i64data );
 }
-void CodeGenerator::op_mov_RM(int op_size,int reg,int base_reg,long offset,char mod){
+void CodeGenerator::op_mov_RM(int op_size,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType ){
 	//mov reg64,qword ptr[base_reg+offset]
 	//mov reg32,dword ptr[base_reg+offset]
@@ -190,7 +208,7 @@
 	else opcode=(char)0x8B;
 
-	__op_format(op_size,op_prefix,opcode,0,reg,base_reg,offset,mod);
-}
-void CodeGenerator::op_mov_RM_ex(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset){
+	__op_format(op_size,op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType);
+}
+void CodeGenerator::op_mov_RM_ex(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType ){
 	//mov reg64,qword ptr[base_reg1+base_reg2+offset]
 	//mov reg32,dword ptr[base_reg1+base_reg2+offset]
@@ -226,5 +244,5 @@
 
 		//オフセット値
-		pNativeCode->Put( offset );
+		pNativeCode->Put( offset, scheduleType );
 	}
 	else{
@@ -561,4 +579,16 @@
 
 //////////////////////////////////
+// ビット拡張
+//////////////////////////////////
+
+void CodeGenerator::op_cqo()
+{
+	pNativeCode->Put( (char)0x48 );
+	pNativeCode->Put( (char)0x99 );
+}
+
+
+
+//////////////////////////////////
 // インクリメント・デクリメント
 //////////////////////////////////
@@ -593,5 +623,5 @@
 /////////////////////
 
-void CodeGenerator::op_add_RM(int op_size,int reg,int base_reg,int offset,char mod){
+void CodeGenerator::op_add_RM(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType ){
 	//add reg64,qword ptr[base_reg+offset]
 	//add reg32,dword ptr[base_reg+offset]
@@ -608,5 +638,5 @@
 	else opcode=(char)0x03;
 
-	__op_format(op_size,op_prefix,opcode,0,reg,base_reg,offset,mod);
+	__op_format(op_size,op_prefix,opcode,0,reg,base_reg,offset,mod, scheduleType );
 }
 
@@ -638,5 +668,5 @@
 	}
 }
-void CodeGenerator::op_add64_reg(int reg1,int reg2){
+void CodeGenerator::op_add_RR(int reg1,int reg2){
 	//add reg1,reg2
 	char RexByte=-1;
@@ -1704,4 +1734,55 @@
 
 /////////////////////////////
+// 分岐
+/////////////////////////////
+
+void CodeGenerator::op_jle( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x7E, offset, op_size );
+}
+void CodeGenerator::op_jbe( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x76, offset, op_size );
+}
+void CodeGenerator::op_jge( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x7D, offset, op_size );
+}
+void CodeGenerator::op_jae( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x73, offset, op_size );
+}
+void CodeGenerator::op_jl( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x7C, offset, op_size );
+}
+void CodeGenerator::op_jb( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x72, offset, op_size );
+}
+void CodeGenerator::op_jg( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x7F, offset, op_size );
+}
+void CodeGenerator::op_ja( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x77, offset, op_size );
+}
+void CodeGenerator::op_jne( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x75, offset, op_size );
+}
+void CodeGenerator::op_je( long offset, int op_size )
+{
+	__jmp_op_format( (char)0x74, offset, op_size );
+}
+void CodeGenerator::op_jmp( long offset, int op_size )
+{
+	__jmp_op_format( (char)0xEB, offset, op_size );
+}
+
+
+
+/////////////////////////////
 // 関数呼び出し
 /////////////////////////////
Index: trunk/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 228)
@@ -185,15 +185,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//mov reg, ptr[r11+offset]
-			compiler.codeGenerator.op_mov_RM(varSize,reg,REG_R11,(int)pRelativeVar->offset,MOD_BASE_DISP32);
-			obp-=sizeof(long);
-			pobj_GlobalVarSchedule->add();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RM(varSize,reg,REG_R11,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::GlobalVar );
 		}
 		else{
 			//mov reg, ptr[offset]
-			compiler.codeGenerator.op_mov_RM(varSize,reg,0,(int)pRelativeVar->offset,MOD_DISP32);
-			obp-=sizeof(long);
-			pobj_GlobalVarSchedule->add();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RM(varSize,reg,0,(int)pRelativeVar->offset,MOD_DISP32, Schedule::GlobalVar );
 		}
 	}
@@ -201,15 +195,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add r11,qword ptr[offset]
-			compiler.codeGenerator.op_add_RM(sizeof(_int64),REG_R11,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
-			obp-=sizeof(long);
-			pobj_GlobalVarSchedule->add();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_add_RM(sizeof(_int64),REG_R11,REG_NON,(int)pRelativeVar->offset,MOD_DISP32, Schedule::GlobalVar );
 		}
 		else{
 			//mov r11,qword ptr[offset]
-			compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_NON,(int)pRelativeVar->offset,MOD_DISP32);
-			obp-=sizeof(long);
-			pobj_GlobalVarSchedule->add();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_NON,(int)pRelativeVar->offset,MOD_DISP32, Schedule::GlobalVar );
 		}
 
@@ -219,15 +207,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//mov reg, ptr[rsp+r11+offset]
-			compiler.codeGenerator.op_mov_RM_ex(varSize,reg,REG_RSP,REG_R11,(int)pRelativeVar->offset,USE_OFFSET);
-			obp-=sizeof(long);
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RM_ex(varSize,reg,REG_RSP,REG_R11,(int)pRelativeVar->offset,USE_OFFSET, Schedule::LocalVar );
 		}
 		else{
 			//mov reg, ptr[rsp+offset]
-			compiler.codeGenerator.op_mov_RM(varSize,reg,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
-			obp-=sizeof(long);
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RM(varSize,reg,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
 		}
 	}
@@ -235,15 +217,9 @@
 		if(pRelativeVar->bOffsetOffset){
 			//add r11,qword ptr[rsp+offset]
-			compiler.codeGenerator.op_add_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
-			obp-=sizeof(long);
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_add_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
 		}
 		else{
 			//mov r11,qword ptr[rsp+offset]
-			compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32);
-			obp-=sizeof(long);
-			AddLocalVarAddrSchedule();
-			obp+=sizeof(long);
+			compiler.codeGenerator.op_mov_RM(sizeof(_int64),REG_R11,REG_RSP,(int)pRelativeVar->offset,MOD_BASE_DISP32, Schedule::LocalVar );
 		}
 
Index: trunk/abdev/BasicCompiler64/Compile_CallProc.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_CallProc.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/Compile_CallProc.cpp	(revision 228)
@@ -82,6 +82,8 @@
 
 	//call rax
-	OpBuffer[obp++]=(char)0xFF;
-	OpBuffer[obp++]=(char)0xD0;
+	compiler.codeGenerator.PutOld(
+		(char)0xFF,
+		(char)0xD0
+	);
 
 
@@ -361,15 +363,18 @@
 		//call qword ptr[r11+func_index]
 		if(i2*PTR_SIZE<=0x7F){
-			OpBuffer[obp++]=(char)0x41;
-			OpBuffer[obp++]=(char)0xFF;
-			OpBuffer[obp++]=(char)0x53;
-			OpBuffer[obp++]=(char)(i2*PTR_SIZE);
+			compiler.codeGenerator.PutOld(
+				(char)0x41,
+				(char)0xFF,
+				(char)0x53,
+				(char)(i2*PTR_SIZE)
+			);
 		}
 		else{
-			OpBuffer[obp++]=(char)0x41;
-			OpBuffer[obp++]=(char)0xFF;
-			OpBuffer[obp++]=(char)0x93;
-			*((long *)(OpBuffer+obp))=i2*PTR_SIZE;
-			obp+=sizeof(long);
+			compiler.codeGenerator.PutOld(
+				(char)0x41,
+				(char)0xFF,
+				(char)0x93,
+				(long)(i2*PTR_SIZE)
+			);
 		}
 	}
Index: trunk/abdev/BasicCompiler64/Compile_Object.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Object.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/Compile_Object.cpp	(revision 228)
@@ -79,13 +79,9 @@
 		pobj_sf->pop(REG_RBX);
 
-		//add eax,TypeSize
-		OpBuffer[obp++]=(char)0x05;
-		*((long *)(OpBuffer+obp))=ObjectSize;
-		obp+=sizeof(long);
-
-		//sub ebx,1
-		OpBuffer[obp++]=(char)0x83;
-		OpBuffer[obp++]=(char)0xEB;
-		OpBuffer[obp++]=(char)0x01;
+		//add rax,TypeSize
+		compiler.codeGenerator.op_add_RV( REG_RAX, ObjectSize );
+
+		//sub rbx,1
+		compiler.codeGenerator.op_sub_RV( sizeof(_int64), REG_RBX, 1 );
 
 		//jnz ↑
@@ -275,6 +271,8 @@
 
 	//call rdi
-	OpBuffer[obp++]=(char)0xFF;
-	OpBuffer[obp++]=(char)0xD7;
+	compiler.codeGenerator.PutOld(
+		(char)0xFF,
+		(char)0xD7
+	);
 
 	//mov rcx,qword ptr[rsp+offset]     ※スタックフレームを利用
@@ -282,5 +280,5 @@
 
 	//add rcx,rsi
-	compiler.codeGenerator.op_add64_reg(REG_RCX,REG_RSI);
+	compiler.codeGenerator.op_add_RR(REG_RCX,REG_RSI);
 
 	//sub rbx,1
Index: trunk/abdev/BasicCompiler64/Compile_Set_Var.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Set_Var.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/Compile_Set_Var.cpp	(revision 228)
@@ -178,9 +178,5 @@
 directmem:
 		//movsd qword ptr[r11],xmm0
-		OpBuffer[obp++]=(char)0xF2;
-		OpBuffer[obp++]=(char)0x41;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x11;
-		OpBuffer[obp++]=(char)0x03;
+		compiler.codeGenerator.op_movsd_MR( REG_XMM0, REG_R11, 0, MOD_BASE );
 	}
 }
@@ -269,9 +265,5 @@
 directmem:
 		//movss dword ptr[r11],xmm0
-		OpBuffer[obp++]=(char)0xF3;
-		OpBuffer[obp++]=(char)0x41;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x11;
-		OpBuffer[obp++]=(char)0x03;
+		compiler.codeGenerator.op_movss_MR( REG_XMM0, REG_R11, 0, MOD_BASE );
 	}
 }
Index: trunk/abdev/BasicCompiler64/Compile_Var.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/Compile_Var.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/Compile_Var.cpp	(revision 228)
@@ -72,5 +72,5 @@
 
 	//add r11,reg
-	compiler.codeGenerator.op_add64_reg(REG_R11,reg);
+	compiler.codeGenerator.op_add_RR(REG_R11,reg);
 }
 void SetRelativeOffset( RELATIVE_VAR &relativeVar ){
@@ -176,5 +176,5 @@
 
 		//add r12,reg
-		compiler.codeGenerator.op_add64_reg(REG_R12,reg);
+		compiler.codeGenerator.op_add_RR(REG_R12,reg);
 
 		HeapDefaultFree(pParm[i]);
@@ -182,9 +182,5 @@
 
 	//imul r12,TypeSize
-	OpBuffer[obp++]=(char)0x4D;
-	OpBuffer[obp++]=(char)0x69;
-	OpBuffer[obp++]=(char)0xE4;
-	*((long *)(OpBuffer+obp))=type.GetSize();
-	obp+=sizeof(long);
+	compiler.codeGenerator.op_imul_RV( sizeof(_int64), REG_R12, type.GetSize() );
 
 	//mov r11,qword ptr[rsp+offset]     ※スタックフレームを利用
@@ -192,7 +188,5 @@
 
 	//add r11,r12
-	OpBuffer[obp++]=(char)0x4D;
-	OpBuffer[obp++]=(char)0x03;
-	OpBuffer[obp++]=(char)0xDC;
+	compiler.codeGenerator.op_add_RR( REG_R11, REG_R12 );
 
 	return true;
@@ -275,9 +269,5 @@
 	if(offset){
 		//add r11,offset
-		OpBuffer[obp++]=(char)0x49;
-		OpBuffer[obp++]=(char)0x81;
-		OpBuffer[obp++]=(char)0xC3;
-		*((long *)(OpBuffer+obp))=offset;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_add_RV( REG_R11, offset );
 	}
 
@@ -1279,5 +1269,5 @@
 
 			//add r11,rsp
-			compiler.codeGenerator.op_add64_reg(REG_R11,REG_RSP);
+			compiler.codeGenerator.op_add_RR(REG_R11,REG_RSP);
 
 			//mov reg,r11
Index: trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 228)
@@ -37,22 +37,28 @@
 			if(idCalc==CALC_ADDITION){
 				//addsd xmm_reg1,xmm_reg2
-				OpBuffer[obp++]=(char)0xF2;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x58;
-				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+				compiler.codeGenerator.PutOld(
+					(char)0xF2,
+					(char)0x0F,
+					(char)0x58,
+					(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+				);
 			}
 			else if(idCalc==CALC_SUBTRACTION){
 				//subsd xmm_reg1,xmm_reg2
-				OpBuffer[obp++]=(char)0xF2;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x5C;
-				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+				compiler.codeGenerator.PutOld(
+					(char)0xF2,
+					(char)0x0F,
+					(char)0x5C,
+					(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+				);
 			}
 			else if(idCalc==CALC_PRODUCT){
 				//mulsd xmm_reg1,xmm_reg2
-				OpBuffer[obp++]=(char)0xF2;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x59;
-				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+				compiler.codeGenerator.PutOld(
+					(char)0xF2,
+					(char)0x0F,
+					(char)0x59,
+					(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+				);
 			}
 
@@ -69,22 +75,28 @@
 			if(idCalc==CALC_ADDITION){
 				//addss xmm_reg1,xmm_reg2
-				OpBuffer[obp++]=(char)0xF3;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x58;
-				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+				compiler.codeGenerator.PutOld(
+					(char)0xF3,
+					(char)0x0F,
+					(char)0x58,
+					(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+				);
 			}
 			else if(idCalc==CALC_SUBTRACTION){
 				//subss xmm_reg1,xmm_reg2
-				OpBuffer[obp++]=(char)0xF3;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x5C;
-				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+				compiler.codeGenerator.PutOld(
+					(char)0xF3,
+					(char)0x0F,
+					(char)0x5C,
+					(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+				);
 			}
 			else if(idCalc==CALC_PRODUCT){
 				//mulss xmm_reg1,xmm_reg2
-				OpBuffer[obp++]=(char)0xF3;
-				OpBuffer[obp++]=(char)0x0F;
-				OpBuffer[obp++]=(char)0x59;
-				OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+				compiler.codeGenerator.PutOld(
+					(char)0xF3,
+					(char)0x0F,
+					(char)0x59,
+					(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+				);
 			}
 
@@ -104,5 +116,5 @@
 		if(idCalc==CALC_ADDITION){
 			//add reg1,reg2
-			compiler.codeGenerator.op_add64_reg(reg1,reg2);
+			compiler.codeGenerator.op_add_RR(reg1,reg2);
 		}
 		else if(idCalc==CALC_SUBTRACTION){
@@ -214,6 +226,5 @@
 
 			//cqo
-			OpBuffer[obp++]=(char)0x48;
-			OpBuffer[obp++]=(char)0x99;
+			compiler.codeGenerator.op_cqo();
 		}
 		else{
@@ -294,8 +305,10 @@
 
 		//divsd xmm_reg1,xmm_reg2
-		OpBuffer[obp++]=(char)0xF2;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x5E;
-		OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+		compiler.codeGenerator.PutOld(
+			(char)0xF2,
+			(char)0x0F,
+			(char)0x5E,
+			(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+		);
 
 		if(xmm_reg1==REG_XMM4){
@@ -310,8 +323,10 @@
 
 		//divss xmm_reg1,xmm_reg2
-		OpBuffer[obp++]=(char)0xF3;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x5E;
-		OpBuffer[obp++]=(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2));
+		compiler.codeGenerator.PutOld(
+			(char)0xF3,
+			(char)0x0F,
+			(char)0x5E,
+			(char)(0xC0 | REGISTER_OPERAND(xmm_reg1)<<3 | REGISTER_OPERAND(xmm_reg2))
+		);
 
 		if(xmm_reg1==REG_XMM4){
@@ -390,6 +405,5 @@
 
 			//cqo
-			OpBuffer[obp++]=(char)0x48;
-			OpBuffer[obp++]=(char)0x99;
+			compiler.codeGenerator.op_cqo();
 		}
 		else{
Index: trunk/abdev/BasicCompiler64/NumOpe_Relation.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/NumOpe_Relation.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/NumOpe_Relation.cpp	(revision 228)
@@ -67,4 +67,6 @@
 	////////////////////
 
+	int jmpOffset = 5;
+
 	if(idCalc==CALC_PE){
 		//	reg1 <= reg2
@@ -72,10 +74,10 @@
 			//符号あり演算
 			//jle
-			OpBuffer[obp++]=(char)0x7E;
+			compiler.codeGenerator.op_jle( jmpOffset );
 		}
 		else{
 			//符号なし演算
 			//jbe
-			OpBuffer[obp++]=(char)0x76;
+			compiler.codeGenerator.op_jbe( jmpOffset );
 		}
 	}
@@ -85,10 +87,10 @@
 			//符号あり演算
 			//jge
-			OpBuffer[obp++]=(char)0x7D;
+			compiler.codeGenerator.op_jge( jmpOffset );
 		}
 		else{
 			//符号なし演算
 			//jae
-			OpBuffer[obp++]=(char)0x73;
+			compiler.codeGenerator.op_jae( jmpOffset );
 		}
 	}
@@ -98,10 +100,10 @@
 			//符号あり演算
 			//jl
-			OpBuffer[obp++]=(char)0x7C;
+			compiler.codeGenerator.op_jl( jmpOffset );
 		}
 		else{
 			//符号なし演算
 			//jb
-			OpBuffer[obp++]=(char)0x72;
+			compiler.codeGenerator.op_jb( jmpOffset );
 		}
 	}
@@ -111,10 +113,10 @@
 			//符号あり演算
 			//jg
-			OpBuffer[obp++]=(char)0x7F;
+			compiler.codeGenerator.op_jg( jmpOffset );
 		}
 		else{
 			//符号なし演算
 			//ja
-			OpBuffer[obp++]=(char)0x77;
+			compiler.codeGenerator.op_ja( jmpOffset );
 		}
 	}
@@ -123,5 +125,5 @@
 
 		//jne
-		OpBuffer[obp++]=(char)0x75;
+		compiler.codeGenerator.op_jne( jmpOffset );
 	}
 	else if(idCalc==CALC_EQUAL){
@@ -129,7 +131,6 @@
 
 		//je
-		OpBuffer[obp++]=(char)0x74;
+		compiler.codeGenerator.op_je( jmpOffset );
 	}
-	OpBuffer[obp++]=(char)0x05;
 
 
@@ -142,6 +143,5 @@
 
 	//jmp 7（次のmovを飛び越す）
-	OpBuffer[obp++]=(char)0xEB;
-	OpBuffer[obp++]=(char)0x07;
+	compiler.codeGenerator.op_jge( 7 );
 
 
Index: trunk/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 228)
@@ -85,6 +85,5 @@
 
 			//jge 9
-			OpBuffer[obp++]=(char)0x7D;
-			OpBuffer[obp++]=(char)0x09;
+			compiler.codeGenerator.op_jge( 9 );
 
 			//addsd xmm_reg,qword ptr[offset]	※offset value:43f0000000000000
@@ -144,6 +143,5 @@
 
 			//jge 9
-			OpBuffer[obp++]=(char)0x7D;
-			OpBuffer[obp++]=(char)0x09;
+			compiler.codeGenerator.op_jge( 9 );
 
 			//addss xmm_reg,dword ptr[offset]	※offset value:5f800000
@@ -315,15 +313,9 @@
 				if(type[sp-1]==DEF_DOUBLE){
 					//movsd xmm5,xmm_reg
-					OpBuffer[obp++]=(char)0xF2;
-					OpBuffer[obp++]=(char)0x0F;
-					OpBuffer[obp++]=(char)0x10;
-					OpBuffer[obp++]=(char)(0xE8 | REGISTER_OPERAND(xmm_reg2));
+					compiler.codeGenerator.op_movsd_RR( REG_XMM5, xmm_reg2 );
 				}
 				if(type[sp-1]==DEF_SINGLE){
 					//movss xmm5,xmm_reg
-					OpBuffer[obp++]=(char)0xF3;
-					OpBuffer[obp++]=(char)0x0F;
-					OpBuffer[obp++]=(char)0x10;
-					OpBuffer[obp++]=(char)(0xE8 | REGISTER_OPERAND(xmm_reg2));
+					compiler.codeGenerator.op_movss_RR( REG_XMM5, xmm_reg2 );
 				}
 
Index: trunk/abdev/BasicCompiler64/stack_frame.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/stack_frame.cpp	(revision 227)
+++ trunk/abdev/BasicCompiler64/stack_frame.cpp	(revision 228)
@@ -80,11 +80,5 @@
 	if(varSize==sizeof(float)){
 		//movss dword ptr[rsp+offset],xmm_reg
-		OpBuffer[obp++]=(char)0xF3;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x11;
-		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(xmm_reg)<<3 );
-		OpBuffer[obp++]=(char)0x24;
-		*((long *)(OpBuffer+obp))=now_sp;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_movss_MR( xmm_reg, REG_RSP, now_sp, MOD_BASE_DISP32 );
 	}
 
@@ -113,11 +107,5 @@
 	if(varSize==sizeof(float)){
 		//movss xmm_reg,dword ptr[rsp+offset]
-		OpBuffer[obp++]=(char)0xF3;
-		OpBuffer[obp++]=(char)0x0F;
-		OpBuffer[obp++]=(char)0x10;
-		OpBuffer[obp++]=(char)(0x84| REGISTER_OPERAND(xmm_reg)<<3 );
-		OpBuffer[obp++]=(char)0x24;
-		*((long *)(OpBuffer+obp))=now_sp;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_movss_MR( xmm_reg, REG_RSP, now_sp, MOD_BASE_DISP32 );
 	}
 
Index: trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 227)
+++ trunk/abdev/BasicCompiler_Common/include/CodeGenerator.h	(revision 228)
@@ -32,13 +32,17 @@
 
 #ifdef _AMD64_
+	/////////////////////////////////////////////////////////////////
+	// 64ビット
+	/////////////////////////////////////////////////////////////////
 private:
 	void set_rex(int op_size,int reg,int index_reg,int base_reg);
-	void set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,long disp);
-	void __op_format(int op_size,char op_prefix,char opcode1,char opcode2,int reg,int base_reg,long offset,char mod);
+	void set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,long disp, Schedule::Type scheduleType = Schedule::None );
+	void __op_format(int op_size,char op_prefix,char opcode1,char opcode2,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType = Schedule::None );
+	void __jmp_op_format( char opcode, long offset, int op_size );
 public:
 	void op_mov_RV					(int op_size,int reg,long i32data);
 	void op_mov_RV64				(int reg,_int64 i64data);
-	void op_mov_RM					(int op_size,int reg,int base_reg,long offset,char mod);
-	void op_mov_RM_ex				(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset);
+	void op_mov_RM					(int op_size,int reg,int base_reg,long offset,char mod, Schedule::Type scheduleType = Schedule::None );
+	void op_mov_RM_ex				(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset, Schedule::Type scheduleType = Schedule::None );
 	void op_mov_MR					(int op_size,int reg,int base_reg,long offset,char mod);
 	void op_mov_MR_ex				(int op_size,int reg,int base_reg1,int base_reg2,long offset,BOOL bUseOffset);
@@ -53,9 +57,10 @@
 	void op_movsx32_FromReg8		(int reg32,int reg8);
 	void op_movsx16_FromReg8		(int reg32,int reg8);
+	void op_cqo						();
 	void op_inc						(int reg);
 	void op_dec						(int reg);
-	void op_add_RM					(int op_size,int reg,int base_reg,int offset,char mod);
+	void op_add_RM					(int op_size,int reg,int base_reg,int offset,char mod, Schedule::Type scheduleType = Schedule::None );
 	void op_add_RV					(int reg,long offset);
-	void op_add64_reg				(int reg1,int reg2);
+	void op_add_RR				(int reg1,int reg2);
 	void op_add32_reg				(int reg1,int reg2);
 	void op_sub_RV					(int op_size,int reg,long i32data);
@@ -104,4 +109,15 @@
 	void op_fld_ptr_esp(int type);
 	void op_zero_reg(int reg);
+	void op_jle( long offset, int op_size = sizeof(char) );
+	void op_jbe( long offset, int op_size = sizeof(char) );
+	void op_jge( long offset, int op_size = sizeof(char) );
+	void op_jae( long offset, int op_size = sizeof(char) );
+	void op_jl( long offset, int op_size = sizeof(char) );
+	void op_jb( long offset, int op_size = sizeof(char) );
+	void op_jg( long offset, int op_size = sizeof(char) );
+	void op_ja( long offset, int op_size = sizeof(char) );
+	void op_jne( long offset, int op_size = sizeof(char) );
+	void op_je( long offset, int op_size = sizeof(char) );
+	void op_jmp( long offset, int op_size = sizeof(char) );
 	void op_call( const UserProc *pUserProc );
 	void op_call( const DllProc *pDllProc );
@@ -109,4 +125,7 @@
 
 #else
+	/////////////////////////////////////////////////////////////////
+	// 32ビット
+	/////////////////////////////////////////////////////////////////
 private:
 	void set_mod_rm_sib_disp(char mod,int reg,int scale,int index_reg,int base_reg,long disp);
@@ -200,4 +219,11 @@
 		pNativeCode->Put( c4 );
 	}
+	void PutOld( char c1, char c2, char c3, long l )
+	{
+		pNativeCode->Put( c1 );
+		pNativeCode->Put( c2 );
+		pNativeCode->Put( c3 );
+		pNativeCode->Put( l );
+	}
 	void PutOld( char c1, char c2, char c3, char c4, char c5 )
 	{
Index: trunk/abdev/BasicCompiler_Common/include/NativeCode.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 227)
+++ trunk/abdev/BasicCompiler_Common/include/NativeCode.h	(revision 228)
@@ -3,5 +3,9 @@
 #include <vector>
 
+#include <jenga/include/common/Exception.h>
+
 #include <BoostSerializationSupport.h>
+
+void AddLocalVarAddrSchedule();
 
 class Schedule
@@ -156,4 +160,21 @@
 
 		// 未完成
+		switch( scheduleType )
+		{
+		case Schedule::None:
+			break;
+		case Schedule::GlobalVar:
+			extern CSchedule *pobj_GlobalVarSchedule;
+			pobj_GlobalVarSchedule->add();
+			break;
+		case Schedule::LocalVar:
+			AddLocalVarAddrSchedule();
+			break;
+		case Schedule::Relocation:
+			break;
+		default:
+			Jenga::Throw( "scheduleTypeが無効な値を保持している" );
+			break;
+		}
 		extern char *OpBuffer;
 		extern int obp;
