]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
mips.c (mips_output_division): When GENERATE_DIVIDE_TRAPS...
authorDavid Ung <davidu@mips.com>
Mon, 3 May 2010 20:43:19 +0000 (20:43 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Mon, 3 May 2010 20:43:19 +0000 (13:43 -0700)
* config/mips/mips.c (mips_output_division): When GENERATE_DIVIDE_TRAPS,
emit the trap instruction before the divide for TUNE_74K.

Co-Authored-By: James E. Wilson <wilson@codesourcery.com>
From-SVN: r159004

gcc/ChangeLog
gcc/config/mips/mips.c

index 727f89724ce48d7e602a8fce2843b2bc0110f79f..a3b1c94c4e669fd0984088fb04d26858be213402 100644 (file)
@@ -1,3 +1,9 @@
+2010-05-03  David Ung <davidu@mips.com>
+           James E. Wilson  <wilson@codesourcery.com>
+
+       * config/mip/mips.c (mips_output_division): When GENERATE_DIVIDE_TRAPS,
+       emit the trap instruction before the divide for TUNE_74K.
+
 2010-05-03  Steven Bosscher  <steven@gcc.gnu.org>
 
        * doc/tm.texi (defmac SMALL_REGISTER_CLASSES): Remove.
index e246981222e7d7dc242007d6c969208901bb9506..345645dbb2546d6e6d83322f2faa5f0b4a703467 100644 (file)
@@ -1,6 +1,6 @@
 /* Subroutines used for MIPS code generation.
    Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
    Contributed by A. Lichnewsky, lich@inria.inria.fr.
    Changes by Michael Meissner, meissner@osf.org.
@@ -11817,10 +11817,17 @@ mips_output_division (const char *division, rtx *operands)
          s = "bnez\t%2,1f\n\tbreak\t7\n1:";
        }
       else if (GENERATE_DIVIDE_TRAPS)
-        {
-         output_asm_insn (s, operands);
-         s = "teq\t%2,%.,7";
-        }
+       {
+         /* Avoid long replay penalty on load miss by putting the trap before
+            the divide.  */
+         if (TUNE_74K)
+           output_asm_insn ("teq\t%2,%.,7", operands);
+         else
+           {
+             output_asm_insn (s, operands);
+             s = "teq\t%2,%.,7";
+           }
+       }
       else
        {
          output_asm_insn ("%(bne\t%2,%.,1f", operands);