2010-02-10 Sterling Augustine <sterling@tensilica.com>
authorSterling Augustine <saugustine@google.com>
Wed, 10 Feb 2010 20:18:14 +0000 (20:18 +0000)
committerSterling Augustine <saugustine@google.com>
Wed, 10 Feb 2010 20:18:14 +0000 (20:18 +0000)
* config/tc-xtensa.c (xtensa_find_unaligned_loops): Rewrite.

gas/config/tc-xtensa.c

index 85a3fe7eeead60a8c6c90573c302601246750cbe..8345ecbdd96585d5d5dd0078954aaff4bf25d959 100644 (file)
@@ -5016,16 +5016,22 @@ xtensa_find_unaligned_loops (bfd *abfd ATTRIBUTE_UNUSED,
              addressT frag_addr;
              xtensa_format fmt;
 
-             xtensa_insnbuf_from_chars
-               (isa, insnbuf, (unsigned char *) frag->fr_literal, 0);
-             fmt = xtensa_format_decode (isa, insnbuf);
-             op_size = xtensa_format_length (isa, fmt);
-             frag_addr = frag->fr_address % xtensa_fetch_width;
-
-             if (frag_addr + op_size > xtensa_fetch_width)
-               as_warn_where (frag->fr_file, frag->fr_line,
-                              _("unaligned loop: %d bytes at 0x%lx"),
-                              op_size, (long) frag->fr_address);
+             if (frag->fr_fix == 0)
+               frag = next_non_empty_frag (frag);
+             
+             if (frag)
+               {
+                 xtensa_insnbuf_from_chars
+                   (isa, insnbuf, (unsigned char *) frag->fr_literal, 0);
+                 fmt = xtensa_format_decode (isa, insnbuf);
+                 op_size = xtensa_format_length (isa, fmt);
+                 frag_addr = frag->fr_address % xtensa_fetch_width;
+                 
+                 if (frag_addr + op_size > xtensa_fetch_width)
+                   as_warn_where (frag->fr_file, frag->fr_line,
+                                  _("unaligned loop: %d bytes at 0x%lx"),
+                                  op_size, (long) frag->fr_address);
+               }
            }
          frag = frag->fr_next;
        }