PATCH: Fix -xauto for ia64 assembler

H. J. Lu hjl@lucon.org
Thu May 20 18:48:00 GMT 2004
With -xauto, we forgot to restore old operands. This patch fixes it.
Jim, did I miss anything else?


H.J.
-------------- next part --------------
2004-05-20  H.J. Lu  <hongjiu.lu@intel.com>

	* config/tc-ia64.c (remove_marked_resource): Restore the old
	operands when inserting srlz.i/srlz.d.

--- gas/config/tc-ia64.c.auto	2004-05-07 13:22:20.000000000 -0700
+++ gas/config/tc-ia64.c	2004-05-20 11:45:22.267661390 -0700
@@ -9559,6 +9559,8 @@ remove_marked_resource (rs)
 	{
 	  int oldqp = CURR_SLOT.qp_regno;
 	  struct ia64_opcode *oldidesc = CURR_SLOT.idesc;
+	  expressionS oldopnd [6];
+	  memcpy (oldopnd, CURR_SLOT.opnd, sizeof (oldopnd));
 	  /* Manually jam a srlz.i insn into the stream */
 	  CURR_SLOT.qp_regno = 0;
 	  CURR_SLOT.idesc = ia64_find_opcode ("srlz.i");
@@ -9568,6 +9570,7 @@ remove_marked_resource (rs)
 	    emit_one_bundle ();
 	  CURR_SLOT.qp_regno = oldqp;
 	  CURR_SLOT.idesc = oldidesc;
+	  memcpy (CURR_SLOT.opnd, oldopnd, sizeof (oldopnd));
 	}
       insn_group_break (1, 0, 0);
       break;
@@ -9582,6 +9585,8 @@ remove_marked_resource (rs)
       {
 	int oldqp = CURR_SLOT.qp_regno;
 	struct ia64_opcode *oldidesc = CURR_SLOT.idesc;
+	expressionS oldopnd [6];
+	memcpy (oldopnd, CURR_SLOT.opnd, sizeof (oldopnd));
 	/* Manually jam a srlz.d insn into the stream */
 	CURR_SLOT.qp_regno = 0;
 	CURR_SLOT.idesc = ia64_find_opcode ("srlz.d");
@@ -9591,6 +9596,7 @@ remove_marked_resource (rs)
 	  emit_one_bundle ();
 	CURR_SLOT.qp_regno = oldqp;
 	CURR_SLOT.idesc = oldidesc;
+	memcpy (CURR_SLOT.opnd, oldopnd, sizeof (oldopnd));
       }
       break;
     case IA64_DVS_IMPLIED:


More information about the Binutils mailing list