gcc-4.4: Add workaround for probable AMD cpu bug
authorMatthew Dillon <dillon@apollo.backplane.com>
Sun, 25 Dec 2011 22:02:24 +0000 (14:02 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sun, 25 Dec 2011 22:02:24 +0000 (14:02 -0800)
* Add a workaround to add a nop to the end of gcc-4.4's fill_sons_in_loop()
  function just prior to its return (to its multi-register pop and ret
  sequence).

  This works around what appears to be a aMD cpu bug in contemporary
  AMD cpus.

contrib/gcc-4.4/gcc/cfgloop.c

index e74284e..48f0c71 100644 (file)
@@ -35,6 +35,9 @@ along with GCC; see the file COPYING3.  If not see
 #include "pointer-set.h"
 #include "output.h"
 #include "ggc.h"
+#ifdef __DragonFly__
+#include <machine/cpufunc.h>
+#endif
 
 static void flow_loops_cfg_dump (FILE *);
 \f
@@ -861,6 +864,9 @@ fill_sons_in_loop (const struct loop *loop, basic_block bb,
 
   if (postpone)
     fill_sons_in_loop (loop, postpone, tovisit, tv);
+#ifdef __AMDCPUBUG_DFLY01_AVAILABLE__
+  cpu_amdcpubug_dfly01();
+#endif
 }
 
 /* Gets body of a LOOP (that must be different from the outermost loop)