Index: trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp
===================================================================
--- trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp	(revision 225)
+++ trunk/abdev/BasicCompiler32/NumOpe_Relation.cpp	(revision 227)
@@ -176,6 +176,5 @@
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		//ja FalseSchedule2（偽へジャンプ）
@@ -188,7 +187,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//jmp 2（演算終了位置へジャンプ）
@@ -224,31 +221,26 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		if(IsSignedType(type_stack[sp-2])==0&&IsSignedType(type_stack[sp-1])==0){
 			//符号なし演算
 
-			//jbe 5（次のmovを飛び越す）
+			//jbe 2（次のxorを飛び越す）
 			OpBuffer[obp++]=(char)0x76;
-			OpBuffer[obp++]=(char)0x05;
+			OpBuffer[obp++]=(char)0x02;
 		}
 		else{
 			//符号あり演算
 
-			//jle 5（次のmovを飛び越す）
+			//jle 2（次のxorを飛び越す）
 			OpBuffer[obp++]=(char)0x7E;
-			OpBuffer[obp++]=(char)0x05;
-		}
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+			OpBuffer[obp++]=(char)0x02;
+		}
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -342,19 +334,15 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//test ah,1
 		compiler.codeGenerator.op_test_ah( (char)0x01 );
 
-		//je 5
+		//je 2（次のxorを飛び越す）
 		OpBuffer[obp++]=(char)0x74;
-		OpBuffer[obp++]=(char)0x05;
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+		OpBuffer[obp++]=(char)0x02;
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -376,6 +364,5 @@
 
 		//cmp edx,ecx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xD1;
+		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
 		if(IsSignedType(AnswerType)){
@@ -410,6 +397,5 @@
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		//jb FalseSchedule2（偽へジャンプ）
@@ -422,7 +408,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//jmp 2（演算終了位置へジャンプ）
@@ -458,31 +442,26 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		if(IsSignedType(AnswerType)){
 			//符号あり演算
 
-			//jge 5（次のmovを飛び越す）符号有り
+			//jge 2（次のxorを飛び越す）符号有り
 			OpBuffer[obp++]=(char)0x7D;
-			OpBuffer[obp++]=(char)0x05;
+			OpBuffer[obp++]=(char)0x02;
 		}
 		else{
 			//符号なし演算
 
-			//jae 5（次のmovを飛び越す）
+			//jae 2（次のxorを飛び越す）
 			OpBuffer[obp++]=(char)0x73;
-			OpBuffer[obp++]=(char)0x05;
-		}
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+			OpBuffer[obp++]=(char)0x02;
+		}
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -578,19 +557,15 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//test ah,01h
 		compiler.codeGenerator.op_test_ah( (char)0x41 );
 
-		//jne 5
+		//jne 2
 		OpBuffer[obp++]=(char)0x75;
 		OpBuffer[obp++]=(char)0x05;
 
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -612,6 +587,5 @@
 
 		//cmp edx,ecx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xD1;
+		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
 		if(IsSignedType(AnswerType)){
@@ -646,6 +620,5 @@
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		//jb TrueSchedule2（真へジャンプ）
@@ -669,7 +642,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//push eax
@@ -694,31 +665,26 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		if(IsSignedType(AnswerType)){
 			//符号あり演算
 
-			//jl 5（次のmovを飛び越す）
+			//jl 2（次のxorを飛び越す）
 			OpBuffer[obp++]=(char)0x7C;
-			OpBuffer[obp++]=(char)0x05;
+			OpBuffer[obp++]=(char)0x02;
 		}
 		else{
 			//符号なし演算
 
-			//jb 5（次のmovを飛び越す）
+			//jb 2（次のxorを飛び越す）
 			OpBuffer[obp++]=(char)0x72;
-			OpBuffer[obp++]=(char)0x05;
-		}
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+			OpBuffer[obp++]=(char)0x02;
+		}
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -810,19 +776,15 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//test ah,41
 		compiler.codeGenerator.op_test_ah( (char)0x41 );
 
-		//je 5
+		//je 2（次のxorを飛び越す）
 		OpBuffer[obp++]=(char)0x74;
-		OpBuffer[obp++]=(char)0x05;
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+		OpBuffer[obp++]=(char)0x02;
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -844,6 +806,5 @@
 
 		//cmp edx,ecx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xD1;
+		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
 		if(IsSignedType(AnswerType)){
@@ -878,6 +839,5 @@
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		//ja TrueSchedule2（真へジャンプ）
@@ -901,7 +861,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//push eax
@@ -926,27 +884,22 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		if(IsSignedType(AnswerType)){
-			//jg 5（次のmovを飛び越す）
+			//jg 2（次のxorを飛び越す）
 			OpBuffer[obp++]=(char)0x7F;
-			OpBuffer[obp++]=(char)0x05;
-		}
-		else{
-			//ja 5（次のmovを飛び越す）
+			OpBuffer[obp++]=(char)0x02;
+		}
+		else{
+			//ja 2（次のxorを飛び越す）
 			OpBuffer[obp++]=(char)0x77;
-			OpBuffer[obp++]=(char)0x05;
-		}
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+			OpBuffer[obp++]=(char)0x02;
+		}
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -1036,19 +989,15 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//test ah,40
 		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
-		//je 5
+		//je 2
 		OpBuffer[obp++]=(char)0x74;
-		OpBuffer[obp++]=(char)0x05;
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+		OpBuffer[obp++]=(char)0x02;
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -1070,6 +1019,5 @@
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		//jnz TrueSchedule1（真へジャンプ）
@@ -1079,6 +1027,5 @@
 
 		//cmp edx,ecx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xD1;
+		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
 		//jnz TrueSchedule2（真へジャンプ）
@@ -1099,7 +1046,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//push eax
@@ -1132,7 +1077,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//mov dword ptr[esp],eax
@@ -1222,19 +1165,15 @@
 
 		//mov ecx,1
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_ECX, 1 );
 
 		//test ah,40
 		compiler.codeGenerator.op_test_ah( (char)0x40 );
 
-		//jne 5
+		//jne 2（次のxorを飛び越す）
 		OpBuffer[obp++]=(char)0x75;
-		OpBuffer[obp++]=(char)0x05;
-
-		//mov ecx,0
-		OpBuffer[obp++]=(char)0xB9;
-		*((long *)(OpBuffer+obp))=0;
-		obp+=sizeof(long);
+		OpBuffer[obp++]=(char)0x02;
+
+		//xor ecx,ecx
+		compiler.codeGenerator.op_xor_RR( REG_ECX );
 
 		//mov dword ptr[esp],ecx
@@ -1256,6 +1195,5 @@
 
 		//cmp eax,ebx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xC3;
+		compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
 
 		//jnz FalseSchedule1（偽へジャンプ）
@@ -1265,6 +1203,5 @@
 
 		//cmp edx,ecx
-		OpBuffer[obp++]=(char)0x3B;
-		OpBuffer[obp++]=(char)0xD1;
+		compiler.codeGenerator.op_cmp_RR( REG_EDX, REG_ECX );
 
 		//jnz FalseSchedule2（偽へジャンプ）
@@ -1274,7 +1211,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//jmp 2（演算終了位置へジャンプ）
@@ -1326,7 +1261,5 @@
 
 		//mov eax,1
-		OpBuffer[obp++]=(char)0xB8;
-		*((long *)(OpBuffer+obp))=1;
-		obp+=sizeof(long);
+		compiler.codeGenerator.op_mov_RV( REG_EAX, 1 );
 
 		//mov dword ptr[esp],eax
