[SPARC] Prevent -mfix-ut699 from generating b2bst errata sequences
authorMartin Aberg <maberg@gaisler.com>
Wed, 29 Nov 2017 15:41:45 +0000 (15:41 +0000)
committerDaniel Hellstrom <danielh@gcc.gnu.org>
Wed, 29 Nov 2017 15:41:45 +0000 (16:41 +0100)
The sequence
  st
  fdivd / fsqrtd
  std
was generated in some cases with -mfix-ut699 when there was
a st before the div/sqrt. This sequence could trigger the b2bst errata.

Now the following safe sequence is generated instead:
  st
  nop
  fdivd / fsqrtd
  std

2017-11-29  Martin Aberg  <maberg@gaisler.com>

gcc/
* config/sparc/sparc.md (divdf3_fix): Add NOP and adjust length
        to prevent b2bst errata sequence.
        (sqrtdf2_fix): Likewise.

From-SVN: r255238

gcc/ChangeLog
gcc/config/sparc/sparc.md

index 7c12d02b4e4b1e9edfe84f63aee439bae15688f3..a00174a3db86d643489182e8eae1c962c83ab8ea 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-29  Martin Aberg  <maberg@gaisler.com>
+
+       * config/sparc/sparc.md (divdf3_fix): Add NOP and adjust length
+        to prevent b2bst errata sequence.
+        (sqrtdf2_fix): Likewise.
+
 2017-11-29  Daniel Cederman  <cederman@gaisler.com>
 
        * config/sparc/sparc.c (fpop_reg_depend_p): New function.
index d1af68034dd0d47a8e307f07bfae6d742c3a6f75..4753c9bde3c4095c59d9ea20b1a0ff3a8a3f1616 100644 (file)
@@ -6212,10 +6212,10 @@ visl")
        (div:DF (match_operand:DF 1 "register_operand" "e")
                (match_operand:DF 2 "register_operand" "e")))]
   "TARGET_FPU && sparc_fix_ut699"
-  "fdivd\t%1, %2, %0\n\tstd\t%0, [%%sp-8]\n\tnop"
+  "fdivd\t%1, %2, %0\n\tnop\n\tstd\t%0, [%%sp-8]\n\tnop"
   [(set_attr "type" "fpdivd")
    (set_attr "fptype" "double")
-   (set_attr "length" "3")])
+   (set_attr "length" "4")])
 
 (define_insn "divsf3"
   [(set (match_operand:SF 0 "register_operand" "=f")
@@ -6464,10 +6464,10 @@ visl")
   [(set (match_operand:DF 0 "register_operand" "=e")
        (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
   "TARGET_FPU && sparc_fix_ut699"
-  "fsqrtd\t%1, %0\n\tstd\t%0, [%%sp-8]\n\tnop"
+  "fsqrtd\t%1, %0\n\tnop\n\tstd\t%0, [%%sp-8]\n\tnop"
   [(set_attr "type" "fpsqrtd")
    (set_attr "fptype" "double")
-   (set_attr "length" "3")])
+   (set_attr "length" "4")])
 
 (define_insn "sqrtsf2"
   [(set (match_operand:SF 0 "register_operand" "=f")