Fix determination of when two instructions can be combined in parallel.
authorNick Clifton <nickc@redhat.com>
Thu, 29 Jan 1998 00:29:37 +0000 (00:29 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 29 Jan 1998 00:29:37 +0000 (00:29 +0000)
gas/ChangeLog
gas/config/tc-m32r.c

index 2ea76a1..19559c4 100644 (file)
@@ -1,3 +1,10 @@
+start-sanitize-m32rx
+Wed Jan 28 16:27:27 1998  Nick Clifton  <nickc@cygnus.com>
+
+       * config/tc-m32r.c (md_assemble): Fix determination of when
+       instructions can be combined in parallel.
+
+end-sanitize-m32rx
 Wed Jan 28 14:35:00 1998  Bill Moyer <billm@cygnus.com>
 
        * as.h (flag_warn_suppress_instructionswap): added new flag.
index 1c79bfd..7232d4b 100644 (file)
@@ -746,21 +746,19 @@ md_assemble (str)
             previous instruction to make one, parallel, 32 bit instruction.
             If the previous instruction (potentially) changed the flow of
             program control, then it cannot be combined with the current
-            instruction, otherwise call can_make_parallel() with both
+            instruction.  Also if the output of the previous instruction
+            is used as an input to the current instruction then it cannot
+            be combined.  Otherwise call can_make_parallel() with both
             orderings of the instructions to see if they can be combined.  */
          if (   ! CGEN_INSN_ATTR (prev_insn.insn, CGEN_INSN_COND_CTI)
-             && ! CGEN_INSN_ATTR (prev_insn.insn, CGEN_INSN_UNCOND_CTI))
+             && ! CGEN_INSN_ATTR (prev_insn.insn, CGEN_INSN_UNCOND_CTI)
+             &&   check_parallel_io_clash (& prev_insn, &insn)
+                )
            {
-             if (can_make_parallel (& prev_insn, & insn) == NULL
-                 && check_parallel_io_clash (& prev_insn, &insn))
-               {
-                 make_parallel (insn.buffer);
-               }
-             else if (can_make_parallel (& insn, & prev_insn.insn) == NULL
-                      && check_parallel_io_clash (& insn, & prev_insn))
-               {
-                 swap = true;
-               }
+             if (can_make_parallel (& prev_insn, & insn) == NULL)
+               make_parallel (insn.buffer);
+             else if (can_make_parallel (& insn, & prev_insn.insn) == NULL)
+               swap = true;
            }
 /* end-sanitize-phase2-m32rx */
 /* end-sanitize-m32rx */