File ibm311554-ltoc-r169426:169427 of Package gcc43

2011-01-31  Alan Modra  <amodra@gmail.com>

	* config/rs6000/rs6000.c (print_operand): Rearrange addends in
	toc relative expressions as we do in print_operand_address.

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c	(revision 169426)
+++ gcc/config/rs6000/rs6000.c	(revision 169427)
@@ -16182,7 +16182,18 @@ print_operand (FILE *file, rtx x, int co
 	    output_address (XEXP (x, 0));
 	}
       else
-	output_addr_const (file, x);
+	{
+	  if (toc_relative_expr_p (x))
+	    /* This hack along with a corresponding hack in
+	       rs6000_output_addr_const_extra arranges to output addends
+	       where the assembler expects to find them.  eg.
+	       (const (plus (unspec [symbol_ref ("x") tocrel]) 4))
+	       without this hack would be output as "x@toc+4".  We
+	       want "x+4@toc".  */
+	    output_addr_const (file, tocrel_base);
+	  else
+	    output_addr_const (file, x);
+	}
       return;
 
     case '&':
openSUSE Build Service is sponsored by