diff options
| author | drow <drow@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-29 16:55:56 +0000 |
|---|---|---|
| committer | drow <drow@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-29 16:55:56 +0000 |
| commit | d6d765b4a20ee056454dc87d9e002cd2f5ebb42d (patch) | |
| tree | 6cee9fe2d32fedc52d27b1b7f618ad16f6d9c829 | |
| parent | 70a239683befa8948d953dbd1841fd5f68bf5c11 (diff) | |
| download | ppe42-gcc-d6d765b4a20ee056454dc87d9e002cd2f5ebb42d.tar.gz ppe42-gcc-d6d765b4a20ee056454dc87d9e002cd2f5ebb42d.zip | |
* config/arm/arm.h (REGISTER_MOVE_COST): Increase VFP register
move cost.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@149057 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/arm/arm.h | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10963da5780..6ae7be68fa7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 98115d8a140..87441ceb982 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -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 : \ |

