Index: /trunk/abdev/BasicCompiler32/Compile_Statement.cpp
===================================================================
--- /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 407)
+++ /trunk/abdev/BasicCompiler32/Compile_Statement.cpp	(revision 408)
@@ -922,5 +922,6 @@
 std::vector<SelectSchedule> selectSchedules;
 
-void OpcodeSelect(const char *lpszParms){
+void OpcodeSelect(const char *lpszParms)
+{
 	extern HANDLE hHeap;
 	extern char *basbuf;
@@ -929,209 +930,210 @@
 	
 	Type type1;
-	if( !NumOpe(lpszParms,Type(), type1 ) ){
-		return;
-	}
+	bool result = NumOpe(lpszParms,Type(), type1 );
 
 	selectSchedules.push_back( SelectSchedule( type1.GetSize() ) );
 
-	if( selectSchedules.back().typeSize < sizeof(long) ){
-		selectSchedules.back().typeSize = sizeof(long);
-	}
-
-	for(i=cp,sw=0;;i++){
-		if(basbuf[i]=='\0'){
-			selectSchedules.pop_back();
-			SetError(22,"Select",cp);
-			return;
-		}
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE){
-			for(i2=0;;i++){
-				if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE) i2++;
-				if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
-					i2--;
-					if(i2==0) break;
+	if( result )
+	{
+		if( selectSchedules.back().typeSize < sizeof(long) ){
+			selectSchedules.back().typeSize = sizeof(long);
+		}
+
+		for(i=cp,sw=0;;i++){
+			if(basbuf[i]=='\0'){
+				selectSchedules.pop_back();
+				SetError(22,"Select",cp);
+				return;
+			}
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE){
+				for(i2=0;;i++){
+					if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE) i2++;
+					if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
+						i2--;
+						if(i2==0) break;
+					}
 				}
-			}
-			continue;
-		}
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
-			if(sw==0){
-				//add esp,CaseTypeSize
-				compiler.codeGenerator.op_add_esp( selectSchedules.back().typeSize );
-			}
-			break;
-		}
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASE){
-			NowCaseCp=i;
-
-			i++;
-			while(1){
-				for(i++,i2=0;;i++,i2++){
-					if(basbuf[i]=='\"'){
-						i3=GetStringInQuotation(temporary+i2,basbuf+i);
-						i+=i3-1;
-						i2+=i3-1;
-						continue;
+				continue;
+			}
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
+				if(sw==0){
+					//add esp,CaseTypeSize
+					compiler.codeGenerator.op_add_esp( selectSchedules.back().typeSize );
+				}
+				break;
+			}
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_CASE){
+				NowCaseCp=i;
+
+				i++;
+				while(1){
+					for(i++,i2=0;;i++,i2++){
+						if(basbuf[i]=='\"'){
+							i3=GetStringInQuotation(temporary+i2,basbuf+i);
+							i+=i3-1;
+							i2+=i3-1;
+							continue;
+						}
+						if(basbuf[i]=='('){
+							i3=GetStringInPare(temporary+i2,basbuf+i);
+							i+=i3-1;
+							i2+=i3-1;
+							continue;
+						}
+						if(basbuf[i]=='['){
+							i3=GetStringInBracket(temporary+i2,basbuf+i);
+							i+=i3-1;
+							i2+=i3-1;
+							continue;
+						}
+
+						if(IsCommandDelimitation(basbuf[i])){
+							temporary[i2]=0;
+							break;
+						}
+						if(basbuf[i]==','){
+							temporary[i2]=0;
+							break;
+						}
+
+						temporary[i2]=basbuf[i];
 					}
-					if(basbuf[i]=='('){
-						i3=GetStringInPare(temporary+i2,basbuf+i);
-						i+=i3-1;
-						i2+=i3-1;
-						continue;
-					}
-					if(basbuf[i]=='['){
-						i3=GetStringInBracket(temporary+i2,basbuf+i);
-						i+=i3-1;
-						i2+=i3-1;
-						continue;
-					}
-
-					if(IsCommandDelimitation(basbuf[i])){
-						temporary[i2]=0;
-						break;
-					}
-					if(basbuf[i]==','){
-						temporary[i2]=0;
-						break;
-					}
-
-					temporary[i2]=basbuf[i];
-				}
-
-				//エラー用
-				i2=cp;
-				cp=NowCaseCp;
-
-				Type type2;
-				if( !NumOpe(temporary,type1,type2) ){
-					return;
-				}
-
-				cp=i2;
-
-				if(type1.IsObject()){
-					std::vector<const UserProc *> subs;
-					type1.GetClass().GetDynamicMethods().Enum( CALC_EQUAL, subs );
-					if( subs.size() == 0 ){
+
+					//エラー用
+					i2=cp;
+					cp=NowCaseCp;
+
+					Type type2;
+					if( !NumOpe(temporary,type1,type2) ){
 						return;
 					}
 
-					Parameters params;
-					params.push_back( new Parameter( "", Type( type2 ) ) );
-
-					//オーバーロードを解決
-					const UserProc *pUserProc = OverloadSolution("==",subs, params, NULL);
-
-					delete params[0];
-
-					if(!pUserProc){
-						//エラー
-						return;
+					cp=i2;
+
+					if(type1.IsObject()){
+						std::vector<const UserProc *> subs;
+						type1.GetClass().GetDynamicMethods().Enum( CALC_EQUAL, subs );
+						if( subs.size() == 0 ){
+							return;
+						}
+
+						Parameters params;
+						params.push_back( new Parameter( "", Type( type2 ) ) );
+
+						//オーバーロードを解決
+						const UserProc *pUserProc = OverloadSolution("==",subs, params, NULL);
+
+						delete params[0];
+
+						if(!pUserProc){
+							//エラー
+							return;
+						}
+
+
+						//pop edx
+						compiler.codeGenerator.op_pop(REG_EDX);
+
+						//mov ecx,dword ptr[esp]
+						compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_ESP,0,MOD_BASE);
+
+						//push edx
+						compiler.codeGenerator.op_push(REG_EDX);
+
+						//push ecx
+						compiler.codeGenerator.op_push(REG_ECX);
+
+						//call operator_proc	※ ==演算子
+						compiler.codeGenerator.op_call(pUserProc);
+
+						//test eax,eax
+						compiler.codeGenerator.op_test(REG_EAX,REG_EAX);
+
+						//jne ...
+						selectSchedules.back().casePertialSchedules.push_back(
+							compiler.codeGenerator.op_jne( 0, sizeof(long), true )
+						);
 					}
-
-
-					//pop edx
-					compiler.codeGenerator.op_pop(REG_EDX);
-
-					//mov ecx,dword ptr[esp]
-					compiler.codeGenerator.op_mov_RM(sizeof(long),REG_ECX,REG_ESP,0,MOD_BASE);
-
-					//push edx
-					compiler.codeGenerator.op_push(REG_EDX);
-
-					//push ecx
-					compiler.codeGenerator.op_push(REG_ECX);
-
-					//call operator_proc	※ ==演算子
-					compiler.codeGenerator.op_call(pUserProc);
-
-					//test eax,eax
-					compiler.codeGenerator.op_test(REG_EAX,REG_EAX);
-
-					//jne ...
-					selectSchedules.back().casePertialSchedules.push_back(
-						compiler.codeGenerator.op_jne( 0, sizeof(long), true )
-					);
+					else if(type1.IsDouble()){
+						ChangeTypeToDouble(type2.GetBasicType());
+
+						//fld qword ptr[esp]
+						compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+						//add esp,CaseTypeSize
+						compiler.codeGenerator.op_add_esp(selectSchedules.back().typeSize);
+
+						//fld qword ptr[esp]
+						compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
+
+						//fcompp
+						compiler.codeGenerator.op_fcompp();
+
+						//fnstsw ax
+						compiler.codeGenerator.op_fnstsw_ax();
+
+						//test ah,40
+						compiler.codeGenerator.op_test_ah( (char)0x40 );
+
+						//jne ...
+						selectSchedules.back().casePertialSchedules.push_back(
+							compiler.codeGenerator.op_jne( 0, sizeof(long), true )
+						);
+					}
+					else if(type1.IsSingle()){
+						ChangeTypeToSingle(type2.GetBasicType());
+
+						//fld dword ptr[esp]
+						compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+						//add esp,CaseTypeSize
+						compiler.codeGenerator.op_add_esp(selectSchedules.back().typeSize);
+
+						//fld dword ptr[esp]
+						compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
+
+						//fcompp
+						compiler.codeGenerator.op_fcompp();
+
+						//fnstsw ax
+						compiler.codeGenerator.op_fnstsw_ax();
+
+						//test ah,40
+						compiler.codeGenerator.op_test_ah( (char)0x40 );
+
+						//jne ...
+						selectSchedules.back().casePertialSchedules.push_back(
+							compiler.codeGenerator.op_jne( 0, sizeof(long), true )
+						);
+					}
+					else{
+						//その他整数型
+
+						//pop ebx
+						compiler.codeGenerator.op_pop(REG_EBX);
+
+						//mov eax,dword ptr[esp]
+						compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_ESP, 0, MOD_BASE );
+
+						//cmp eax,ebx
+						compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
+
+						//je ...
+						selectSchedules.back().casePertialSchedules.push_back(
+							compiler.codeGenerator.op_je( 0, sizeof(long), true )
+						);
+					}
+
+					if(basbuf[i]!=',') break;
 				}
-				else if(type1.IsDouble()){
-					ChangeTypeToDouble(type2.GetBasicType());
-
-					//fld qword ptr[esp]
-					compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
-
-					//add esp,CaseTypeSize
-					compiler.codeGenerator.op_add_esp(selectSchedules.back().typeSize);
-
-					//fld qword ptr[esp]
-					compiler.codeGenerator.op_fld_ptr_esp(DEF_DOUBLE);
-
-					//fcompp
-					compiler.codeGenerator.op_fcompp();
-
-					//fnstsw ax
-					compiler.codeGenerator.op_fnstsw_ax();
-
-					//test ah,40
-					compiler.codeGenerator.op_test_ah( (char)0x40 );
-
-					//jne ...
-					selectSchedules.back().casePertialSchedules.push_back(
-						compiler.codeGenerator.op_jne( 0, sizeof(long), true )
-					);
-				}
-				else if(type1.IsSingle()){
-					ChangeTypeToSingle(type2.GetBasicType());
-
-					//fld dword ptr[esp]
-					compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
-
-					//add esp,CaseTypeSize
-					compiler.codeGenerator.op_add_esp(selectSchedules.back().typeSize);
-
-					//fld dword ptr[esp]
-					compiler.codeGenerator.op_fld_ptr_esp(DEF_SINGLE);
-
-					//fcompp
-					compiler.codeGenerator.op_fcompp();
-
-					//fnstsw ax
-					compiler.codeGenerator.op_fnstsw_ax();
-
-					//test ah,40
-					compiler.codeGenerator.op_test_ah( (char)0x40 );
-
-					//jne ...
-					selectSchedules.back().casePertialSchedules.push_back(
-						compiler.codeGenerator.op_jne( 0, sizeof(long), true )
-					);
-				}
-				else{
-					//その他整数型
-
-					//pop ebx
-					compiler.codeGenerator.op_pop(REG_EBX);
-
-					//mov eax,dword ptr[esp]
-					compiler.codeGenerator.op_mov_RM( sizeof(long), REG_EAX, REG_ESP, 0, MOD_BASE );
-
-					//cmp eax,ebx
-					compiler.codeGenerator.op_cmp_RR( REG_EAX, REG_EBX );
-
-					//je ...
-					selectSchedules.back().casePertialSchedules.push_back(
-						compiler.codeGenerator.op_je( 0, sizeof(long), true )
-					);
-				}
-
-				if(basbuf[i]!=',') break;
-			}
-		}
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASEELSE){
-			sw=1;
-
-			//jmp ...
-			selectSchedules.back().casePertialSchedules.push_back(
-				compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
-			);
+			}
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_CASEELSE){
+				sw=1;
+
+				//jmp ...
+				selectSchedules.back().casePertialSchedules.push_back(
+					compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
+				);
+			}
 		}
 	}
Index: /trunk/abdev/BasicCompiler64/Compile_Statement.cpp
===================================================================
--- /trunk/abdev/BasicCompiler64/Compile_Statement.cpp	(revision 407)
+++ /trunk/abdev/BasicCompiler64/Compile_Statement.cpp	(revision 408)
@@ -669,5 +669,6 @@
 std::vector<SelectSchedule> selectSchedules;
 
-void OpcodeSelect( const char *lpszParms ){
+void OpcodeSelect( const char *lpszParms )
+{
 	extern HANDLE hHeap;
 	extern char *basbuf;
@@ -677,193 +678,194 @@
 	int reg1=REG_RAX;
 	Type type1;
-	if( !NumOpe(&reg1,lpszParms,Type(), type1 ) ){
-		return;
-	}
+	bool result = NumOpe(&reg1,lpszParms,Type(), type1 );
 
 	selectSchedules.push_back( SelectSchedule( type1.GetSize() ) );
 
-	if( selectSchedules.back().typeSize < sizeof(long) ){
-		selectSchedules.back().typeSize = sizeof(long);
-	}
-
-	if(type1.IsDouble()){
-		//movsd qword ptr[rsp+offset],xmm_reg		※スタックフレームを利用
-		pobj_sf->push(reg1,sizeof(double));
-	}
-	else if(type1.IsSingle()){
-		//movss dword ptr[rsp+offset],xmm_reg		※スタックフレームを利用
-		pobj_sf->push(reg1,sizeof(float));
-	}
-	else{
-		ExtendTypeTo64(type1.GetBasicType(),reg1);
-
-		//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
-		pobj_sf->push(reg1);
-	}
-
-	for(i=cp;;i++){
-		if(basbuf[i]=='\0'){
-			selectSchedules.pop_back();
-			SetError(22,"Select",cp);
-			return;
-		}
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE){
-			for(i2=0;;i++){
-				if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE) i2++;
-				if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
-					i2--;
-					if(i2==0) break;
+	if( result )
+	{
+		if( selectSchedules.back().typeSize < sizeof(long) ){
+			selectSchedules.back().typeSize = sizeof(long);
+		}
+
+		if(type1.IsDouble()){
+			//movsd qword ptr[rsp+offset],xmm_reg		※スタックフレームを利用
+			pobj_sf->push(reg1,sizeof(double));
+		}
+		else if(type1.IsSingle()){
+			//movss dword ptr[rsp+offset],xmm_reg		※スタックフレームを利用
+			pobj_sf->push(reg1,sizeof(float));
+		}
+		else{
+			ExtendTypeTo64(type1.GetBasicType(),reg1);
+
+			//mov qword ptr[rsp+offset],reg     ※スタックフレームを利用
+			pobj_sf->push(reg1);
+		}
+
+		for(i=cp;;i++){
+			if(basbuf[i]=='\0'){
+				selectSchedules.pop_back();
+				SetError(22,"Select",cp);
+				return;
+			}
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE){
+				for(i2=0;;i++){
+					if(basbuf[i]==1&&basbuf[i+1]==ESC_SELECTCASE) i2++;
+					if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT){
+						i2--;
+						if(i2==0) break;
+					}
 				}
-			}
-			continue;
-		}
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT) break;
-
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASE){
-			NowCaseCp=i;
-
-			i++;
-			while(1){
-				for(i++,i2=0;;i++,i2++){
-					if(basbuf[i]=='\"'){
-						i3=GetStringInQuotation(temporary+i2,basbuf+i);
-						i+=i3-1;
-						i2+=i3-1;
-						continue;
+				continue;
+			}
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_ENDSELECT) break;
+
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_CASE){
+				NowCaseCp=i;
+
+				i++;
+				while(1){
+					for(i++,i2=0;;i++,i2++){
+						if(basbuf[i]=='\"'){
+							i3=GetStringInQuotation(temporary+i2,basbuf+i);
+							i+=i3-1;
+							i2+=i3-1;
+							continue;
+						}
+						if(basbuf[i]=='('){
+							i3=GetStringInPare(temporary+i2,basbuf+i);
+							i+=i3-1;
+							i2+=i3-1;
+							continue;
+						}
+						if(basbuf[i]=='['){
+							i3=GetStringInBracket(temporary+i2,basbuf+i);
+							i+=i3-1;
+							i2+=i3-1;
+							continue;
+						}
+
+						if(IsCommandDelimitation(basbuf[i])){
+							temporary[i2]=0;
+							break;
+						}
+						if(basbuf[i]==','){
+							temporary[i2]=0;
+							break;
+						}
+
+						temporary[i2]=basbuf[i];
 					}
-					if(basbuf[i]=='('){
-						i3=GetStringInPare(temporary+i2,basbuf+i);
-						i+=i3-1;
-						i2+=i3-1;
-						continue;
-					}
-					if(basbuf[i]=='['){
-						i3=GetStringInBracket(temporary+i2,basbuf+i);
-						i+=i3-1;
-						i2+=i3-1;
-						continue;
-					}
-
-					if(IsCommandDelimitation(basbuf[i])){
-						temporary[i2]=0;
-						break;
-					}
-					if(basbuf[i]==','){
-						temporary[i2]=0;
-						break;
-					}
-
-					temporary[i2]=basbuf[i];
-				}
-
-				//エラー用
-				i2=cp;
-				cp=NowCaseCp;
-
-				int reg2=REG_RDX;
-				Type type2;
-				if( !NumOpe(&reg2,temporary,type1,type2) ){
-					return;
-				}
-
-				cp=i2;
-
-				if(type1.IsObject()){
-					std::vector<const UserProc *> subs;
-					type1.GetClass().GetDynamicMethods().Enum( CALC_EQUAL, subs );
-					if( subs.size() == 0 ){
+
+					//エラー用
+					i2=cp;
+					cp=NowCaseCp;
+
+					int reg2=REG_RDX;
+					Type type2;
+					if( !NumOpe(&reg2,temporary,type1,type2) ){
 						return;
 					}
 
-					Parameters params;
-					params.push_back( new Parameter( "", Type( type2 ) ) );
-
-					//オーバーロードを解決
-					const UserProc *pUserProc = OverloadSolution("==",subs, params, NULL);
-
-					delete params[0];
-
-					if(!pUserProc){
-						//エラー
-						return;
-					}
-
-
-					//実体オブジェクト
-					if(reg2!=REG_RDX){
-						//mov rdx,reg2
-						compiler.codeGenerator.op_mov_RR(REG_RDX,reg2);
-					}
-
-					//mov rcx,qword ptr[rsp+offset]		※スタックフレームから参照
-					pobj_sf->ref(REG_RCX);
-
-					//call operator_proc	※ ==演算子
-					compiler.codeGenerator.op_call(pUserProc);
-
-					//test rax,rax
-					compiler.codeGenerator.op_test(REG_RAX,REG_RAX);
-
-					//jne ...
-					selectSchedules.back().casePertialSchedules.push_back(
-						compiler.codeGenerator.op_jne( 0, sizeof(long), true )
-					);
-				}
-				else{
-					if(type1.IsDouble()){
-						int xmm_reg;
-						if(IsXmmReg(reg2)) xmm_reg=reg2;
-						else xmm_reg=REG_XMM5;
-						ChangeTypeToXmm_Double(type2.GetBasicType(),xmm_reg,reg2);
-
-						//movsd xmm4,qword ptr[rsp+offset]	※スタックフレームから参照
-						pobj_sf->ref(REG_XMM4,sizeof(double));
-
-						//comiss xmm_reg1,xmm_reg2
-						compiler.codeGenerator.op_comisd(xmm_reg,REG_XMM4);
-					}
-					else if(type1.IsSingle()){
-						int xmm_reg;
-						if(IsXmmReg(reg2)) xmm_reg=reg2;
-						else xmm_reg=REG_XMM5;
-						ChangeTypeToXmm_Single(type2.GetBasicType(),xmm_reg,reg2);
-
-						//movss xmm4,dword ptr[rsp+offset]	※スタックフレームから参照
-						pobj_sf->ref(REG_XMM4,sizeof(float));
-
-						//comiss xmm_reg1,xmm_reg2
-						compiler.codeGenerator.op_comiss(xmm_reg,REG_XMM4);
+					cp=i2;
+
+					if(type1.IsObject()){
+						std::vector<const UserProc *> subs;
+						type1.GetClass().GetDynamicMethods().Enum( CALC_EQUAL, subs );
+						if( subs.size() == 0 ){
+							return;
+						}
+
+						Parameters params;
+						params.push_back( new Parameter( "", Type( type2 ) ) );
+
+						//オーバーロードを解決
+						const UserProc *pUserProc = OverloadSolution("==",subs, params, NULL);
+
+						delete params[0];
+
+						if(!pUserProc){
+							//エラー
+							return;
+						}
+
+
+						//実体オブジェクト
+						if(reg2!=REG_RDX){
+							//mov rdx,reg2
+							compiler.codeGenerator.op_mov_RR(REG_RDX,reg2);
+						}
+
+						//mov rcx,qword ptr[rsp+offset]		※スタックフレームから参照
+						pobj_sf->ref(REG_RCX);
+
+						//call operator_proc	※ ==演算子
+						compiler.codeGenerator.op_call(pUserProc);
+
+						//test rax,rax
+						compiler.codeGenerator.op_test(REG_RAX,REG_RAX);
+
+						//jne ...
+						selectSchedules.back().casePertialSchedules.push_back(
+							compiler.codeGenerator.op_jne( 0, sizeof(long), true )
+						);
 					}
 					else{
-						//その他整数型
-
-						i2=NeutralizationType(type1.GetBasicType(),-1,type2.GetBasicType(),-1);
-
-						//mov r14,qword ptr[rsp+offset]		※スタックフレームから参照
-						pobj_sf->ref(REG_R14);
-
-						//cmp reg2,r14
-						compiler.codeGenerator.op_cmp_reg(Type(i2).GetSize(),reg2,REG_R14);
+						if(type1.IsDouble()){
+							int xmm_reg;
+							if(IsXmmReg(reg2)) xmm_reg=reg2;
+							else xmm_reg=REG_XMM5;
+							ChangeTypeToXmm_Double(type2.GetBasicType(),xmm_reg,reg2);
+
+							//movsd xmm4,qword ptr[rsp+offset]	※スタックフレームから参照
+							pobj_sf->ref(REG_XMM4,sizeof(double));
+
+							//comiss xmm_reg1,xmm_reg2
+							compiler.codeGenerator.op_comisd(xmm_reg,REG_XMM4);
+						}
+						else if(type1.IsSingle()){
+							int xmm_reg;
+							if(IsXmmReg(reg2)) xmm_reg=reg2;
+							else xmm_reg=REG_XMM5;
+							ChangeTypeToXmm_Single(type2.GetBasicType(),xmm_reg,reg2);
+
+							//movss xmm4,dword ptr[rsp+offset]	※スタックフレームから参照
+							pobj_sf->ref(REG_XMM4,sizeof(float));
+
+							//comiss xmm_reg1,xmm_reg2
+							compiler.codeGenerator.op_comiss(xmm_reg,REG_XMM4);
+						}
+						else{
+							//その他整数型
+
+							i2=NeutralizationType(type1.GetBasicType(),-1,type2.GetBasicType(),-1);
+
+							//mov r14,qword ptr[rsp+offset]		※スタックフレームから参照
+							pobj_sf->ref(REG_R14);
+
+							//cmp reg2,r14
+							compiler.codeGenerator.op_cmp_reg(Type(i2).GetSize(),reg2,REG_R14);
+						}
+
+						//je ...
+						selectSchedules.back().casePertialSchedules.push_back(
+							compiler.codeGenerator.op_je( 0, sizeof(long), true )
+						);
 					}
 
-					//je ...
-					selectSchedules.back().casePertialSchedules.push_back(
-						compiler.codeGenerator.op_je( 0, sizeof(long), true )
-					);
+					if(basbuf[i]!=',') break;
 				}
-
-				if(basbuf[i]!=',') break;
-			}
-		}
-		if(basbuf[i]==1&&basbuf[i+1]==ESC_CASEELSE){
-			//jmp ...
-			selectSchedules.back().casePertialSchedules.push_back(
-				compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
-			);
-		}
-	}
-
-	//スタックフレームを1スペースだけ解除
-	pobj_sf->pop(REG_NON);
+			}
+			if(basbuf[i]==1&&basbuf[i+1]==ESC_CASEELSE){
+				//jmp ...
+				selectSchedules.back().casePertialSchedules.push_back(
+					compiler.codeGenerator.op_jmp( 0, sizeof(long), true )
+				);
+			}
+		}
+
+		//スタックフレームを1スペースだけ解除
+		pobj_sf->pop(REG_NON);
+	}
 
 	//レキシカルスコープをレベルアップ
