Index: trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp	(revision 206)
+++ trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp	(revision 225)
@@ -1,3 +1,5 @@
 #include "stdafx.h"
+
+#include <Compiler.h>
 
 #include "../BasicCompiler_Common/common.h"
@@ -44,15 +46,15 @@
 		if(type_stack[sp-1]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else if(type_stack[sp-1]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
@@ -60,8 +62,8 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else{
@@ -69,20 +71,20 @@
 
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 
 		if(type_stack[sp-2]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-2]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 		}
 		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
@@ -90,8 +92,8 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else{
@@ -99,36 +101,30 @@
 
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 		}
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//test ah,41h
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x41;
+		compiler.codeGenerator.op_test_ah( (char)0x41 );
 
 		//jne 5
-		OpBuffer[obp++]=(char)0x75;
-		OpBuffer[obp++]=(char)0x02;
+		compiler.codeGenerator.PutOld(
+			(char)0x75,
+			(char)0x02
+		);
 
 		//xor ecx,ecx（ecxを0にする）
-		op_zero_reg(REG_ECX);
+		compiler.codeGenerator.op_zero_reg(REG_ECX);
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 	else if(Is64Type(AnswerType)){
@@ -147,6 +143,5 @@
 
 		//cmp edx,ecx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xD1;
+		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
 		if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
@@ -206,8 +201,8 @@
 
 		//xor eax,eax（eaxを0にする）
-		op_zero_reg(REG_EAX);
+		compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 		//push eax
-		op_push(REG_EAX);
+		compiler.codeGenerator.op_push(REG_EAX);
 	}
 	else{
@@ -217,8 +212,8 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		// どちらかのサイズが足りない場合は自動拡張する
@@ -226,5 +221,5 @@
 
 		//sub esp,4
-		op_sub_esp(4);
+		compiler.codeGenerator.op_sub_esp(4);
 
 		//mov ecx,1
@@ -258,7 +253,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 
@@ -283,15 +276,15 @@
 		if(type_stack[sp-1]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else if(type_stack[sp-1]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
@@ -299,8 +292,8 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else{
@@ -308,20 +301,20 @@
 
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 
 		if(type_stack[sp-2]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-2]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 		}
 		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
@@ -329,8 +322,8 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else{
@@ -338,5 +331,5 @@
 
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 		}
 
@@ -346,6 +339,5 @@
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//mov ecx,1
@@ -355,7 +347,5 @@
 
 		//test ah,1
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x01;
+		compiler.codeGenerator.op_test_ah( (char)0x01 );
 
 		//je 5
@@ -369,7 +359,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 	else if(Is64Type(AnswerType)){
@@ -447,8 +435,8 @@
 
 		//xor eax,eax（eaxを0にする）
-		op_zero_reg(REG_EAX);
+		compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 		//push eax
-		op_push(REG_EAX);
+		compiler.codeGenerator.op_push(REG_EAX);
 	}
 	else{
@@ -458,8 +446,8 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		// どちらかのサイズが足りない場合は自動拡張する
@@ -467,5 +455,5 @@
 
 		//sub esp,4
-		op_sub_esp(4);
+		compiler.codeGenerator.op_sub_esp(4);
 
 		//mov ecx,1
@@ -499,7 +487,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 
@@ -527,15 +513,15 @@
 		if(type_stack[sp-1]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else if(type_stack[sp-1]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
@@ -543,8 +529,8 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else{
@@ -552,20 +538,20 @@
 
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 
 		if(type_stack[sp-2]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-2]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 		}
 		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
@@ -573,8 +559,8 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else{
@@ -582,14 +568,12 @@
 
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 		}
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//mov ecx,1
@@ -599,7 +583,5 @@
 
 		//test ah,01h
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x01;
+		compiler.codeGenerator.op_test_ah( (char)0x41 );
 
 		//jne 5
@@ -613,7 +595,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 	else if(Is64Type(AnswerType)){
@@ -678,5 +658,5 @@
 
 		//xor eax,eax（eaxを0にする）
-		op_zero_reg(REG_EAX);
+		compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 		//jmp 5（演算終了位置へジャンプ）
@@ -694,5 +674,5 @@
 
 		//push eax
-		op_push(REG_EAX);
+		compiler.codeGenerator.op_push(REG_EAX);
 	}
 	else{
@@ -702,8 +682,8 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		// どちらかのサイズが足りない場合は自動拡張する
@@ -711,5 +691,5 @@
 
 		//sub esp,4
-		op_sub_esp(4);
+		compiler.codeGenerator.op_sub_esp(4);
 
 		//mov ecx,1
@@ -743,7 +723,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 
@@ -771,15 +749,15 @@
 		if(type_stack[sp-1]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else if(type_stack[sp-1]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-1]==DEF_INT64||type_stack[sp-1]==DEF_QWORD){
@@ -787,27 +765,27 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else{	//Long、DWord
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 
 		if(type_stack[sp-2]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type_stack[sp-2]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 		}
 		else if(type_stack[sp-2]==DEF_INT64||type_stack[sp-2]==DEF_QWORD){
@@ -815,21 +793,19 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else{	//Long、DWord
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 		}
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//mov ecx,1
@@ -839,7 +815,5 @@
 
 		//test ah,41
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x41;
+		compiler.codeGenerator.op_test_ah( (char)0x41 );
 
 		//je 5
@@ -853,7 +827,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 	else if(Is64Type(AnswerType)){
@@ -918,5 +890,5 @@
 
 		//xor eax,eax（eaxを0にする）
-		op_zero_reg(REG_EAX);
+		compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 		//jmp 5（演算終了位置へジャンプ）
@@ -934,5 +906,5 @@
 
 		//push eax
-		op_push(REG_EAX);
+		compiler.codeGenerator.op_push(REG_EAX);
 	}
 	else{
@@ -942,8 +914,8 @@
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		// どちらかのサイズが足りない場合は自動拡張する
@@ -951,5 +923,5 @@
 
 		//sub esp,4
-		op_sub_esp(4);
+		compiler.codeGenerator.op_sub_esp(4);
 
 		//mov ecx,1
@@ -979,7 +951,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 
@@ -1005,15 +975,15 @@
 		if(type[sp-1]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else if(type[sp-1]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
@@ -1021,27 +991,27 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else{	//Long、DWord
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 
 		if(type[sp-2]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type[sp-2]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 		}
 		else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
@@ -1049,21 +1019,19 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else{	//Long、DWord
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 		}
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//mov ecx,1
@@ -1073,7 +1041,5 @@
 
 		//test ah,40
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x40;
+		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 		//je 5
@@ -1087,7 +1053,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD||
@@ -1124,5 +1088,5 @@
 
 		//xor eax,eax（eaxを0にする）
-		op_zero_reg(REG_EAX);
+		compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 		//jmp 5（演算終了位置へジャンプ）
@@ -1140,5 +1104,5 @@
 
 		//push eax
-		op_push(REG_EAX);
+		compiler.codeGenerator.op_push(REG_EAX);
 	}
 	else{
@@ -1148,8 +1112,8 @@
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		// どちらかのサイズが足りない場合は自動拡張する
@@ -1157,5 +1121,5 @@
 
 		//sub esp,4
-		op_sub_esp(4);
+		compiler.codeGenerator.op_sub_esp(4);
 
 		//xor eax,ebx
@@ -1173,7 +1137,5 @@
 
 		//mov dword ptr[esp],eax
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x04;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_ESP, 0, MOD_BASE );
 	}
 
@@ -1199,15 +1161,15 @@
 		if(type[sp-1]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else if(type[sp-1]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type[sp-1]==DEF_INT64||type[sp-1]==DEF_QWORD){
@@ -1215,27 +1177,27 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
 
 			//add esp,8
-			op_add_esp(8);
+			compiler.codeGenerator.op_add_esp(8);
 		}
 		else{	//Long、DWord
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 
 		if(type[sp-2]==DEF_DOUBLE){
 			//fld qword ptr[esp]
-			op_fld_ptr_esp(DEF_DOUBLE);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else if(type[sp-2]==DEF_SINGLE){
 			//fld dword ptr[esp]
-			op_fld_ptr_esp(DEF_SINGLE);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
 		}
 		else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD){
@@ -1243,21 +1205,19 @@
 
 			//fild qword ptr[esp]
-			op_fld_ptr_esp(DEF_INT64);
-
-			//add esp,4
-			op_add_esp(4);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_INT64);
+
+			//add esp,4
+			compiler.codeGenerator.op_add_esp(4);
 		}
 		else{	//Long、DWord
 			//fild dword ptr[esp]
-			op_fld_ptr_esp(DEF_LONG);
+			compiler.codeGenerator.op_fld_ptr_esp(DEF_LONG);
 		}
 
 		//fcompp
-		OpBuffer[obp++]=(char)0xDE;
-		OpBuffer[obp++]=(char)0xD9;
+		compiler.codeGenerator.op_fcompp();
 
 		//fnstsw ax
-		OpBuffer[obp++]=(char)0xDF;
-		OpBuffer[obp++]=(char)0xE0;
+		compiler.codeGenerator.op_fnstsw_ax();
 
 		//mov ecx,1
@@ -1267,7 +1227,5 @@
 
 		//test ah,40
-		OpBuffer[obp++]=(char)0xF6;
-		OpBuffer[obp++]=(char)0xC4;
-		OpBuffer[obp++]=(char)0x40;
+		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
 		//jne 5
@@ -1281,7 +1239,5 @@
 
 		//mov dword ptr[esp],ecx
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x0C;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_ECX, REG_ESP, 0, MOD_BASE );
 	}
 	else if(type[sp-2]==DEF_INT64||type[sp-2]==DEF_QWORD||
@@ -1331,8 +1287,8 @@
 
 		//xor eax,eax（eaxを0にする）
-		op_zero_reg(REG_EAX);
+		compiler.codeGenerator.op_zero_reg(REG_EAX);
 
 		//push eax
-		op_push(REG_EAX);
+		compiler.codeGenerator.op_push(REG_EAX);
 	}
 	else{
@@ -1342,8 +1298,8 @@
 
 		//pop eax
-		op_pop(REG_EAX);
+		compiler.codeGenerator.op_pop(REG_EAX);
 
 		//pop ebx
-		op_pop(REG_EBX);
+		compiler.codeGenerator.op_pop(REG_EBX);
 
 		// どちらかのサイズが足りない場合は自動拡張する
@@ -1351,5 +1307,5 @@
 
 		//sub esp,4
-		op_sub_esp(4);
+		compiler.codeGenerator.op_sub_esp(4);
 
 		//xor eax,ebx
@@ -1375,7 +1331,5 @@
 
 		//mov dword ptr[esp],eax
-		OpBuffer[obp++]=(char)0x89;
-		OpBuffer[obp++]=(char)0x04;
-		OpBuffer[obp++]=(char)0x24;
+		compiler.codeGenerator.op_mov_MR( sizeof(long), REG_EAX, REG_ESP, 0, MOD_BASE );
 	}
 
