* config/tc-xtensa.c (xg_find_narrowest_format): Optimize 1 slot case.
authorBob Wilson <bob.wilson@acm.org>
Tue, 20 Dec 2005 18:13:32 +0000 (18:13 +0000)
committerBob Wilson <bob.wilson@acm.org>
Tue, 20 Dec 2005 18:13:32 +0000 (18:13 +0000)
(xg_init_vinsn): Remove redundant initialization.
(xg_clear_vinsn): Zero all the slots with a single memset.
* config/xtensa-istack.h (vliw_insn): Move insnbuf field after slots.

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

index c39cf3def038efcc15e8cfb55d14992565188dee..a8df9a3f4a627d0ebdf02b1cfe375f14ef484e0c 100644 (file)
@@ -1,3 +1,10 @@
+2005-12-20  Sterling Augustine  <sterling@tensilica.com>
+
+       * config/tc-xtensa.c (xg_find_narrowest_format): Optimize 1 slot case.
+       (xg_init_vinsn): Remove redundant initialization.
+       (xg_clear_vinsn): Zero all the slots with a single memset.
+       * config/xtensa-istack.h (vliw_insn): Move insnbuf field after slots.
+
 2005-12-20  Nathan Sidwell  <nathan@codesourcery.com>
 
        * doc/t-mt.texi: Update MS1 to MT.
index 57fb7b27b24a21c10e1fab29297fb2441e1f301b..6b1b1786d62ccc679654b444b733a4c4624c9c7f 100644 (file)
@@ -6403,6 +6403,9 @@ xg_find_narrowest_format (vliw_insn *vinsn)
   vliw_insn v_copy = *vinsn;
   xtensa_opcode nop_opcode = xtensa_nop_opcode;
 
+  if (vinsn->num_slots == 1)
+    return xg_get_single_format (vinsn->slots[0].opcode);
+
   for (format = 0; format < xtensa_isa_num_formats (isa); format++)
     {
       v_copy = *vinsn;
@@ -11417,8 +11420,6 @@ xg_init_vinsn (vliw_insn *v)
 
   for (i = 0; i < MAX_SLOTS; i++)
     {
-      tinsn_init (&v->slots[i]);
-      v->slots[i].opcode = XTENSA_UNDEFINED;
       v->slotbuf[i] = xtensa_insnbuf_alloc (isa);
       if (v->slotbuf[i] == NULL)
        as_fatal (_("out of memory"));
@@ -11430,6 +11431,9 @@ static void
 xg_clear_vinsn (vliw_insn *v)
 {
   int i;
+
+  memset (v, 0, offsetof (vliw_insn, insnbuf));
+
   v->format = XTENSA_UNDEFINED;
   v->num_slots = 0;
   v->inside_bundle = FALSE;
@@ -11438,10 +11442,7 @@ xg_clear_vinsn (vliw_insn *v)
     debug_type = xt_saved_debug_type;
 
   for (i = 0; i < MAX_SLOTS; i++)
-    {
-      memset (&v->slots[i], 0, sizeof (TInsn));
-      v->slots[i].opcode = XTENSA_UNDEFINED;
-    }
+    v->slots[i].opcode = XTENSA_UNDEFINED;
 }
 
 
index c7eaad7e275cd8ca6747da3799e6aa6e2b488857..248e73f3700f6091b267f77662b0cbbaa3f98db9 100644 (file)
@@ -89,10 +89,10 @@ expressionS *tinsn_get_tok (TInsn *, int);
 typedef struct vliw_insn
 {
   xtensa_format format;
-  xtensa_insnbuf insnbuf;
   int num_slots;
   unsigned int inside_bundle;
   TInsn slots[MAX_SLOTS];
+  xtensa_insnbuf insnbuf;
   xtensa_insnbuf slotbuf[MAX_SLOTS];
 } vliw_insn;