]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
arm.h (REGISTER_MOVE_COST): Increase VFP register move cost.
authorDaniel Jacobowitz <dan@codesourcery.com>
Mon, 29 Jun 2009 16:55:56 +0000 (16:55 +0000)
committerDaniel Jacobowitz <drow@gcc.gnu.org>
Mon, 29 Jun 2009 16:55:56 +0000 (16:55 +0000)
* config/arm/arm.h (REGISTER_MOVE_COST): Increase VFP register
move cost.

From-SVN: r149057

gcc/ChangeLog
gcc/config/arm/arm.h

index 10963da5780e03d7d46b9fbdacf17627ea06e301..6ae7be68fa715c45a33793241353a0e046603a0a 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-29  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * config/arm/arm.h (REGISTER_MOVE_COST): Increase VFP register
+       move cost.
+
 2009-06-29  Uros Bizjak  <ubizjak@gmail.com>
 
        * doc/extend.texi (Additional Floating Types): __float128 is also
index 98115d8a1408ae258356bf3de11041df1daa76c5..87441ceb982b9b20dc340c313e75b9c916b369b6 100644 (file)
@@ -1433,13 +1433,17 @@ do {                                                                          \
 /* If defined, gives a class of registers that cannot be used as the
    operand of a SUBREG that changes the mode of the object illegally.  */
 
-/* Moves between FPA_REGS and GENERAL_REGS are two memory insns.  */
+/* Moves between FPA_REGS and GENERAL_REGS are two memory insns.
+   Moves between VFP_REGS and GENERAL_REGS are a single insn, but
+   it is typically more expensive than a single memory access.  We set
+   the cost to less than two memory accesses so that floating
+   point to integer conversion does not go through memory.  */
 #define REGISTER_MOVE_COST(MODE, FROM, TO)             \
   (TARGET_32BIT ?                                              \
    ((FROM) == FPA_REGS && (TO) != FPA_REGS ? 20 :      \
     (FROM) != FPA_REGS && (TO) == FPA_REGS ? 20 :      \
-    IS_VFP_CLASS (FROM) && !IS_VFP_CLASS (TO) ? 10 :   \
-    !IS_VFP_CLASS (FROM) && IS_VFP_CLASS (TO) ? 10 :   \
+    IS_VFP_CLASS (FROM) && !IS_VFP_CLASS (TO) ? 15 :   \
+    !IS_VFP_CLASS (FROM) && IS_VFP_CLASS (TO) ? 15 :   \
     (FROM) == IWMMXT_REGS && (TO) != IWMMXT_REGS ? 4 :  \
     (FROM) != IWMMXT_REGS && (TO) == IWMMXT_REGS ? 4 :  \
     (FROM) == IWMMXT_GR_REGS || (TO) == IWMMXT_GR_REGS ? 20 :  \