OSDN Git Service

* config/mips/mips.c (mips_output_division): When GENERATE_DIVIDE_TRAPS,
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 May 2010 20:43:19 +0000 (20:43 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 May 2010 20:43:19 +0000 (20:43 +0000)
emit the trap instruction before the divide for TUNE_74K.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159004 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 727f897..a3b1c94 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 e246981..345645d 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);