This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
alpha-linux-x-mn10300-elf won't build libstdc++
- To: gcc-patches at gcc dot gnu dot org
- Subject: alpha-linux-x-mn10300-elf won't build libstdc++
- From: Alexandre Oliva <aoliva at cygnus dot com>
- Date: 21 Apr 2000 06:50:28 -0300
- Organization: Cygnus Solutions, a Red Hat Company
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