Bootstrap failure on powerpc-ibm-aix4.1.4.0 building libF77/r_sign.c

Kaveh R. Ghazi ghazi@caip.rutgers.edu
Sat Jul 8 05:44:00 GMT 2000


 > From: Geoff Keating <geoffk@cygnus.com>
 > 
 > OK.  I have now tested this patch pretty extensively in a compiler
 > that is almost but not quite the same as gcc (of some months ago), and
 > it worked well there too.
 > 
 > If you could commit it, the ChangeLog entry is:
 > 
 > 2000-07-07  Geoffrey Keating  <geoffk@cygnus.com>
 > 
 > 	* config/rs6000/rs6000.c (rs6000_emit_move): Fix conditions for
 > 	emitting aux_truncdfsf2.
 > 
 > I have some other stability patches (including the ones that inspired
 > me to create rs6000_emit_move in the first place) which should be
 > hitting the tree over the next weeks.
 > -- 
 > - Geoffrey Keating <geoffk@cygnus.com>


Done.  Here's the final patch CC:ed to the patches list since our
discussion took place on gcc-bugs.



Index: ChangeLog
===================================================================
RCS file: /cvs/gcc/egcs/gcc/ChangeLog,v
retrieving revision 1.7046
diff -u -p -r1.7046 ChangeLog
--- ChangeLog	2000/07/08 06:21:11	1.7046
+++ ChangeLog	2000/07/08 12:39:59
@@ -1,3 +1,8 @@
+2000-07-08  Geoffrey Keating  <geoffk@cygnus.com>
+
+	* config/rs6000/rs6000.c (rs6000_emit_move): Fix conditions for
+	emitting aux_truncdfsf2.
+
 2000-07-03  Donn Terry  (donnte@microsoft.com)
 
 	* cppinit.c (print_help): split overlong line into ISO C89
Index: config/rs6000/rs6000.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/rs6000/rs6000.c,v
retrieving revision 1.131
diff -u -p -r1.131 rs6000.c
--- rs6000.c	2000/07/03 20:00:44	1.131
+++ rs6000.c	2000/07/08 12:40:08
@@ -1492,10 +1492,17 @@ rs6000_emit_move (dest, source, mode)
   if (! no_new_pseudos && GET_CODE (operands[0]) != REG)
     operands[1] = force_reg (mode, operands[1]);
   
-  if (mode == SFmode && ! TARGET_POWERPC && TARGET_HARD_FLOAT)
+  if (mode == SFmode && ! TARGET_POWERPC && TARGET_HARD_FLOAT
+      && GET_CODE (operands[0]) == MEM)
     {
-      int regnum = true_regnum (operands[1]);
-      /* regnum may be -1 in which case the test below will fail.  */	
+      int regnum;
+
+      if (reload_in_progress || reload_completed)
+	regnum = true_regnum (operands[1]);
+      else if (GET_CODE (operands[1]) == REG)
+	regnum = REGNO (operands[1]);
+      else
+	regnum = -1;
       
       /* If operands[1] is a register, on POWER it may have
 	 double-precision data in it, so truncate it to single


More information about the Gcc-bugs mailing list