* config/tc-mips.c (mips_move_labels): New function, taken from...
authorRichard Sandiford <rdsandiford@googlemail.com>
Wed, 9 Mar 2005 09:21:18 +0000 (09:21 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Wed, 9 Mar 2005 09:21:18 +0000 (09:21 +0000)
(append_insn, mips_emit_delays): ...here.

gas/ChangeLog
gas/config/tc-mips.c

index 2f44fa65919ef7746272ef45e37264e6102b9186..15e12c81cb01eddc3ecb5bafad6a18beca1dbaee 100644 (file)
@@ -1,3 +1,8 @@
+2005-03-09  Richard Sandiford  <rsandifo@redhat.com>
+
+       * config/tc-mips.c (mips_move_labels): New function, taken from...
+       (append_insn, mips_emit_delays): ...here.
+
 2005-03-09  Richard Sandiford  <rsandifo@redhat.com>
 
        * config/tc-mips.c (MAX_NOPS): New macro.
index c00bbe339dd855e9e57ee57378f5aca25bad0ed5..dac280133515cb0942a3eb5df22f3834ae469ef3 100644 (file)
@@ -1771,6 +1771,26 @@ reg_needs_delay (unsigned int reg)
   return 0;
 }
 
+/* Move all labels in insn_labels to the current insertion point.  */
+
+static void
+mips_move_labels (void)
+{
+  struct insn_label_list *l;
+  valueT val;
+
+  for (l = insn_labels; l != NULL; l = l->next)
+    {
+      assert (S_GET_SEGMENT (l->label) == now_seg);
+      symbol_set_frag (l->label, frag_now);
+      val = (valueT) frag_now_fix ();
+      /* mips16 text labels are stored as odd.  */
+      if (mips_opts.mips16)
+       ++val;
+      S_SET_VALUE (l->label, val);
+    }
+}
+
 /* Mark instruction labels in mips16 mode.  This permits the linker to
    handle them specially, such as generating jalx instructions when
    needed.  We also make them odd for the duration of the assembly, in
@@ -2098,7 +2118,6 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
          fragS *old_frag;
          unsigned long old_frag_offset;
          int i;
-         struct insn_label_list *l;
 
          old_frag = frag_now;
          old_frag_offset = frag_now_fix ();
@@ -2120,18 +2139,7 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
              frag_grow (40);
            }
 
-         for (l = insn_labels; l != NULL; l = l->next)
-           {
-             valueT val;
-
-             assert (S_GET_SEGMENT (l->label) == now_seg);
-             symbol_set_frag (l->label, frag_now);
-             val = (valueT) frag_now_fix ();
-             /* mips16 text labels are stored as odd.  */
-             if (mips_opts.mips16)
-               ++val;
-             S_SET_VALUE (l->label, val);
-           }
+         mips_move_labels ();
 
 #ifndef NO_ECOFF_DEBUGGING
          if (ECOFF_DEBUGGING)
@@ -2719,8 +2727,6 @@ mips_emit_delays (bfd_boolean insns)
       int nops = nops_for_insn (history, NULL);
       if (nops > 0)
        {
-         struct insn_label_list *l;
-
          if (insns && mips_optimize != 0)
            {
              /* Record the frag which holds the nop instructions, so
@@ -2743,18 +2749,7 @@ mips_emit_delays (bfd_boolean insns)
              frag_new (0);
            }
 
-         for (l = insn_labels; l != NULL; l = l->next)
-           {
-             valueT val;
-
-             assert (S_GET_SEGMENT (l->label) == now_seg);
-             symbol_set_frag (l->label, frag_now);
-             val = (valueT) frag_now_fix ();
-             /* mips16 text labels are stored as odd.  */
-             if (mips_opts.mips16)
-               ++val;
-             S_SET_VALUE (l->label, val);
-           }
+         mips_move_labels ();
        }
     }