2009-08-20 Sterling Augustine <sterling@jaw.hq.tensilica.com>
authorSterling Augustine <saugustine@google.com>
Thu, 20 Aug 2009 18:12:21 +0000 (18:12 +0000)
committerSterling Augustine <saugustine@google.com>
Thu, 20 Aug 2009 18:12:21 +0000 (18:12 +0000)
* config/tc-xtensa.c (xg_copy_vinsn): New function.
(finish_vinsn): Call xg_copy_vinsn.

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

index 2292534214bde97f7cb5fb02449f57a63be7803e..624e7c947748774926bdd5863dcf1f889c7e9845 100644 (file)
@@ -1,3 +1,8 @@
+2009-08-20  Sterling Augustine  <sterling@jaw.hq.tensilica.com>
+
+       * config/tc-xtensa.c (xg_copy_vinsn): New function.
+       (finish_vinsn): Call xg_copy_vinsn.
+
 2009-08-19  Sterling Augustine  <sterling@tensilica.com>
 
        * config/tc-xtensa.h (xtensa_frag_data): Rename unused field fr_prev
index 645af97be856d06cec7a2cf3718ceea631118494..fdca2322b74966503d89ae7d1ecbba22243f4654 100644 (file)
@@ -527,6 +527,7 @@ static int get_num_stack_literal_bytes (IStack *);
 /* vliw_insn functions.  */
 
 static void xg_init_vinsn (vliw_insn *);
+static void xg_copy_vinsn (vliw_insn *, vliw_insn *);
 static void xg_clear_vinsn (vliw_insn *);
 static bfd_boolean vinsn_has_specific_opcodes (vliw_insn *);
 static void xg_free_vinsn (vliw_insn *);
@@ -6653,7 +6654,6 @@ xg_find_narrowest_format (vliw_insn *vinsn)
 
   xtensa_isa isa = xtensa_default_isa;
   xtensa_format format;
-  vliw_insn v_copy = *vinsn;
   xtensa_opcode nop_opcode = xtensa_nop_opcode;
 
   if (vinsn->num_slots == 1)
@@ -6661,7 +6661,8 @@ xg_find_narrowest_format (vliw_insn *vinsn)
 
   for (format = 0; format < xtensa_isa_num_formats (isa); format++)
     {
-      v_copy = *vinsn;
+      vliw_insn v_copy;
+      xg_copy_vinsn (&v_copy, vinsn);
       if (xtensa_format_num_slots (isa, format) == v_copy.num_slots)
        {
          int slot;
@@ -6696,7 +6697,7 @@ xg_find_narrowest_format (vliw_insn *vinsn)
            }
          if (fit == v_copy.num_slots)
            {
-             *vinsn = v_copy;
+             xg_copy_vinsn (vinsn, &v_copy);
              xtensa_format_encode (isa, format, vinsn->insnbuf);
              vinsn->format = format;
              break;
@@ -11702,6 +11703,16 @@ xg_clear_vinsn (vliw_insn *v)
 }
 
 
+static void
+xg_copy_vinsn (vliw_insn *dst, vliw_insn *src)
+{
+  memcpy (dst, src, 
+         offsetof(vliw_insn, slots) + src->num_slots * sizeof(TInsn));
+  dst->insnbuf = src->insnbuf;
+  memcpy (dst->slotbuf, src->slotbuf, src->num_slots * sizeof(xtensa_insnbuf));
+}
+
+
 static bfd_boolean
 vinsn_has_specific_opcodes (vliw_insn *v)
 {