From: Daniel Jacobowitz Date: Mon, 29 Jun 2009 16:55:56 +0000 (+0000) Subject: arm.h (REGISTER_MOVE_COST): Increase VFP register move cost. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=356ecb153076b45d402faf66da6812e01e276906;p=platform%2Fupstream%2Fgcc.git arm.h (REGISTER_MOVE_COST): Increase VFP register move cost. * config/arm/arm.h (REGISTER_MOVE_COST): Increase VFP register move cost. From-SVN: r149057 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10963da..6ae7be68 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2009-06-29 Daniel Jacobowitz + + * config/arm/arm.h (REGISTER_MOVE_COST): Increase VFP register + move cost. + 2009-06-29 Uros Bizjak * doc/extend.texi (Additional Floating Types): __float128 is also diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 98115d8..87441ce 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 : \