sparc.c (output_cbranch): Fix accidental squashing of the fp branch pre-delay nop.
authorRichard Henderson <rth@cygnus.com>
Wed, 26 Jan 2000 03:13:13 +0000 (19:13 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 26 Jan 2000 03:13:13 +0000 (19:13 -0800)
        * sparc.c (output_cbranch): Fix accidental squashing of the
        fp branch pre-delay nop.

From-SVN: r31625

gcc/ChangeLog
gcc/config/sparc/sparc.c

index 644ba3ed1484cb800af218080d67478a0ed40729..6a7dccaadf89791b445127d22e8b56fafbc47832 100644 (file)
@@ -1,3 +1,8 @@
+2000-01-25  Richard Henderson  <rth@cygnus.com>
+
+       * sparc.c (output_cbranch): Fix accidental squashing of the
+       fp branch pre-delay nop.
+
 2000-01-25  Richard Henderson  <rth@cygnus.com>
 
        * tree.def (UNNE_EXPR): Remove.
index cbf246f8a1be24657e213fcd02bb892b0696f0ac..88502a3ec272e38fbe938abe50f8d038d7ee33cb 100644 (file)
@@ -4641,15 +4641,6 @@ output_cbranch (op, label, reversed, annul, noop, insn)
   const char *branch;
   int labeloff, spaces = 8;
 
-  /* ??? !v9: FP branches cannot be preceded by another floating point insn.
-     Because there is currently no concept of pre-delay slots, we can fix
-     this only by always emitting a nop before a floating point branch.  */
-
-  if ((mode == CCFPmode || mode == CCFPEmode) && ! TARGET_V9)
-    strcpy (string, "nop\n\t");
-  else
-    string[0] = '\0';
-
   if (reversed)
     {
       /* Reversal of FP compares takes care -- an ordered compare
@@ -4662,98 +4653,112 @@ output_cbranch (op, label, reversed, annul, noop, insn)
 
   /* Start by writing the branch condition.  */
   if (mode == CCFPmode || mode == CCFPEmode)
-    switch (code)
-      {
-      case NE:
-       branch = "fbne";
-       break;
-      case EQ:
-       branch = "fbe";
-       break;
-      case GE:
-       branch = "fbge";
-       break;
-      case GT:
-       branch = "fbg";
-       break;
-      case LE:
-       branch = "fble";
-       break;
-      case LT:
-       branch = "fbl";
-       break;
-      case UNORDERED:
-       branch = "fbu";
-       break;
-      case ORDERED:
-       branch = "fbo";
-       break;
-      case UNGT:
-       branch = "fbug";
-       break;
-      case UNLT:
-       branch = "fbul";
-       break;
-      case UNEQ:
-       branch = "fbue";
-       break;
-      case UNGE:
-       branch = "fbuge";
-       break;
-      case UNLE:
-       branch = "fbule";
-       break;
-      case LTGT:
-       branch = "fblg";
-       break;
+    {
+      switch (code)
+       {
+       case NE:
+         branch = "fbne";
+         break;
+       case EQ:
+         branch = "fbe";
+         break;
+       case GE:
+         branch = "fbge";
+         break;
+       case GT:
+         branch = "fbg";
+         break;
+       case LE:
+         branch = "fble";
+         break;
+       case LT:
+         branch = "fbl";
+         break;
+       case UNORDERED:
+         branch = "fbu";
+         break;
+       case ORDERED:
+         branch = "fbo";
+         break;
+       case UNGT:
+         branch = "fbug";
+         break;
+       case UNLT:
+         branch = "fbul";
+         break;
+       case UNEQ:
+         branch = "fbue";
+         break;
+       case UNGE:
+         branch = "fbuge";
+         break;
+       case UNLE:
+         branch = "fbule";
+         break;
+       case LTGT:
+         branch = "fblg";
+         break;
 
-      default:
-       abort ();
-      }
+       default:
+         abort ();
+       }
+
+      /* ??? !v9: FP branches cannot be preceded by another floating point
+        insn.  Because there is currently no concept of pre-delay slots,
+        we can fix this only by always emitting a nop before a floating
+        point branch.  */
+
+      string[0] = '\0';
+      if (! TARGET_V9)
+       strcpy (string, "nop\n\t");
+      strcat (string, branch);
+    }
   else
-    switch (code)
-      {
-      case NE:
-       branch = "bne";
-       break;
-      case EQ:
-       branch = "be";
-       break;
-      case GE:
-       if (mode == CC_NOOVmode)
-         branch = "bpos";
-       else
-         branch = "bge";
-       break;
-      case GT:
-       branch = "bg";
-       break;
-      case LE:
-       branch = "ble";
-       break;
-      case LT:
-       if (mode == CC_NOOVmode)
-         branch = "bneg";
-       else
-         branch = "bl";
-       break;
-      case GEU:
-       branch = "bgeu";
-       break;
-      case GTU:
-       branch = "bgu";
-       break;
-      case LEU:
-       branch = "bleu";
-       break;
-      case LTU:
-       branch = "blu";
-       break;
+    {
+      switch (code)
+       {
+       case NE:
+         branch = "bne";
+         break;
+       case EQ:
+         branch = "be";
+         break;
+       case GE:
+         if (mode == CC_NOOVmode)
+           branch = "bpos";
+         else
+           branch = "bge";
+         break;
+       case GT:
+         branch = "bg";
+         break;
+       case LE:
+         branch = "ble";
+         break;
+       case LT:
+         if (mode == CC_NOOVmode)
+           branch = "bneg";
+         else
+           branch = "bl";
+         break;
+       case GEU:
+         branch = "bgeu";
+         break;
+       case GTU:
+         branch = "bgu";
+         break;
+       case LEU:
+         branch = "bleu";
+         break;
+       case LTU:
+         branch = "blu";
+         break;
 
-      default:
-       abort ();
-      }
-  strcpy (string, branch);
+       default:
+         abort ();
+       }
+      strcpy (string, branch);
+    }
   spaces -= strlen (branch);
 
   /* Now add the annulling, the label, and a possible noop.  */