This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

alpha-linux-x-mn10300-elf won't build libstdc++


For some reason, this bug doesn't show up on x86 or sparc, but it
causes `movu' to be inappropriately used while building libstdc++ on
alpha-linux-x-mn10300-elf.  Ok to install?

Index: gcc/ChangeLog
from  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>

	* config/mn10300/mn10300.md (movdi, movdf): Do not use `movu' when
	the operand is not constant.

Index: gcc/config/mn10300/mn10300.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/mn10300/mn10300.md,v
retrieving revision 1.27
diff -u -r1.27 mn10300.md
--- gcc/config/mn10300/mn10300.md	2000/01/14 23:03:45	1.27
+++ gcc/config/mn10300/mn10300.md	2000/04/21 09:19:55
@@ -499,8 +499,10 @@
 		else
 		  output_asm_insn (\"mov %L1,%L0\", operands);
 	      }
-	    else if ((REGNO_REG_CLASS (true_regnum (operands[0]))
-		      == EXTENDED_REGS)
+	    else if ((GET_CODE (operands[1]) == CONST_INT
+		      || GET_CODE (operands[1]) == CONST_DOUBLE)
+		     && (REGNO_REG_CLASS (true_regnum (operands[0]))
+			 == EXTENDED_REGS)
 		     && (((val[0] & 0x80) && ! (val[0] & 0xffffff00))
 			 || ((val[0] & 0x800000) && ! (val[0] & 0xff000000))))
 	      output_asm_insn (\"movu %1,%0\", operands);
@@ -520,8 +522,10 @@
 		      || GET_CODE (operands[1]) == CONST_DOUBLE)
 		     && val[0] == val[1])
 	      output_asm_insn (\"mov %L0,%H0\", operands);
-	    else if ((REGNO_REG_CLASS (true_regnum (operands[0]))
-		      == EXTENDED_REGS)
+	    else if ((GET_CODE (operands[1]) == CONST_INT
+		      || GET_CODE (operands[1]) == CONST_DOUBLE)
+		     && (REGNO_REG_CLASS (true_regnum (operands[0]))
+			 == EXTENDED_REGS)
 		     && (((val[1] & 0x80) && ! (val[1] & 0xffffff00))
 			 || ((val[1] & 0x800000) && ! (val[1] & 0xff000000))))
 	      output_asm_insn (\"movu %1,%0\", operands);
@@ -643,8 +647,10 @@
 		else
 		  output_asm_insn (\"mov %L1,%L0\", operands);
 	      }
-	    else if ((REGNO_REG_CLASS (true_regnum (operands[0]))
-		      == EXTENDED_REGS)
+	    else if ((GET_CODE (operands[1]) == CONST_INT
+		      || GET_CODE (operands[1]) == CONST_DOUBLE)
+		     && (REGNO_REG_CLASS (true_regnum (operands[0]))
+			 == EXTENDED_REGS)
 		     && (((val[0] & 0x80) && ! (val[0] & 0xffffff00))
 			 || ((val[0] & 0x800000) && ! (val[0] & 0xff000000))))
 	      output_asm_insn (\"movu %1,%0\", operands);
@@ -664,8 +670,10 @@
 		      || GET_CODE (operands[1]) == CONST_DOUBLE)
 		     && val[0] == val[1])
 	      output_asm_insn (\"mov %L0,%H0\", operands);
-	    else if ((REGNO_REG_CLASS (true_regnum (operands[0]))
-		      == EXTENDED_REGS)
+	    else if ((GET_CODE (operands[1]) == CONST_INT
+		      || GET_CODE (operands[1]) == CONST_DOUBLE)
+		     && (REGNO_REG_CLASS (true_regnum (operands[0]))
+			 == EXTENDED_REGS)
 		     && (((val[1] & 0x80) && ! (val[1] & 0xffffff00))
 			 || ((val[1] & 0x800000) && ! (val[1] & 0xff000000))))
 	      output_asm_insn (\"movu %1,%0\", operands);

-- 
Alexandre Oliva    Enjoy Guaranį, see http://www.ic.unicamp.br/~oliva/
Cygnus Solutions, a Red Hat company        aoliva@{redhat, cygnus}.com
Free Software Developer and Evangelist    CS PhD student at IC-Unicamp
oliva@{lsd.ic.unicamp.br, gnu.org}   Write to mailing lists, not to me

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]