diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98d7ce09e5a29546aaac1334b9183fcc72b870bd..486c0186139e8274104511d9adbedd82bcea696d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-04-07 David Edelsohn <edelsohn@gnu.org> + + * config/rs6000/rs6000.c (rs6000_rtx_costs) <CONST_DOUBLE>: Do not + treat CONST_DOUBLE as INTVAL. and64_2_operands require an extra + insn. 2006-04-07 Jan Hubicka <jh@suse.cz> diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 085fa724850fa4e8edd3b2b1a43e81057dc17057..ec2cfdef933ec0f0917e31499f420ef74a47977a 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -18642,28 +18642,25 @@ rs6000_rtx_costs (rtx x, int code, int outer_code, int *total) /* FALLTHRU */ case CONST_DOUBLE: - if (mode == DImode - && ((outer_code == AND - && (satisfies_constraint_K (x) - || satisfies_constraint_L (x) - || mask_operand (x, DImode) - || mask64_operand (x, DImode))) - || ((outer_code == IOR || outer_code == XOR) - && CONST_DOUBLE_HIGH (x) == 0 - && (CONST_DOUBLE_LOW (x) - & ~ (unsigned HOST_WIDE_INT) 0xffff) == 0))) + if (mode == DImode && code == CONST_DOUBLE) { - *total = 0; - return true; - } - else if (mode == DImode - && (outer_code == SET - || outer_code == IOR - || outer_code == XOR) - && CONST_DOUBLE_HIGH (x) == 0) - { - *total = COSTS_N_INSNS (1); - return true; + if ((outer_code == IOR || outer_code == XOR) + && CONST_DOUBLE_HIGH (x) == 0 + && (CONST_DOUBLE_LOW (x) + & ~ (unsigned HOST_WIDE_INT) 0xffff) == 0) + { + *total = 0; + return true; + } + else if ((outer_code == AND && and64_2_operand (x, DImode)) + || ((outer_code == SET + || outer_code == IOR + || outer_code == XOR) + && CONST_DOUBLE_HIGH (x) == 0)) + { + *total = COSTS_N_INSNS (1); + return true; + } } /* FALLTHRU */