mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 11:24:59 +08:00
h8300.c (h8300_shift_costs): New.
* config/h8300/h8300.c (h8300_shift_costs): New. * config/h8300/h8300.h (RTX_COSTS): Use h8300_shift_costs. * config/h8300/h8300-protos.h: Add a prototype for h8300_shift_costs. From-SVN: r59588
This commit is contained in:
parent
ebe637e3c2
commit
ae5570023f
@ -1,3 +1,10 @@
|
||||
2002-11-27 Kazu Hirata <kazu@cs.umass.edu>
|
||||
|
||||
* config/h8300/h8300.c (h8300_shift_costs): New.
|
||||
* config/h8300/h8300.h (RTX_COSTS): Use h8300_shift_costs.
|
||||
* config/h8300/h8300-protos.h: Add a prototype for
|
||||
h8300_shift_costs.
|
||||
|
||||
2002-11-27 Jim Wilson <wilson@redhat.com>
|
||||
|
||||
* config/rs6000/spe.md (spu_evsplatfi, spu_evsplati): Swap operands
|
||||
|
@ -32,6 +32,7 @@ extern const char *emit_a_rotate PARAMS ((enum rtx_code, rtx *));
|
||||
extern const char *output_simode_bld PARAMS ((int, rtx[]));
|
||||
extern void print_operand_address PARAMS ((FILE *, rtx));
|
||||
extern int const_costs PARAMS ((rtx, enum rtx_code, enum rtx_code));
|
||||
extern int h8300_shift_costs PARAMS ((rtx));
|
||||
extern void print_operand PARAMS ((FILE *, rtx, int));
|
||||
extern void final_prescan_insn PARAMS ((rtx, rtx *, int));
|
||||
extern int do_movsi PARAMS ((rtx[]));
|
||||
|
@ -1134,6 +1134,24 @@ const_costs (r, c, outer_code)
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
h8300_shift_costs (x)
|
||||
rtx x;
|
||||
{
|
||||
rtx operands[4];
|
||||
|
||||
if (GET_MODE (x) != QImode
|
||||
&& GET_MODE (x) != HImode
|
||||
&& GET_MODE (x) != SImode)
|
||||
return 100;
|
||||
|
||||
operands[0] = NULL;
|
||||
operands[1] = NULL;
|
||||
operands[2] = XEXP (x, 1);
|
||||
operands[3] = x;
|
||||
return compute_a_shift_length (NULL, operands);
|
||||
}
|
||||
|
||||
/* Documentation for the machine specific operand escapes:
|
||||
|
||||
|
@ -1020,20 +1020,20 @@ struct cum_arg
|
||||
|
||||
/* Provide the costs of a rtl expression. This is in the body of a
|
||||
switch on CODE. */
|
||||
/* ??? Shifts need to have a *much* higher cost than this. */
|
||||
|
||||
#define RTX_COSTS(RTX, CODE, OUTER_CODE) \
|
||||
case MOD: \
|
||||
case DIV: \
|
||||
return 60; \
|
||||
case MULT: \
|
||||
return 20; \
|
||||
case ASHIFT: \
|
||||
case ASHIFTRT: \
|
||||
case LSHIFTRT: \
|
||||
case ROTATE: \
|
||||
case ROTATERT: \
|
||||
if (GET_MODE (RTX) == HImode) return 2; \
|
||||
#define RTX_COSTS(RTX, CODE, OUTER_CODE) \
|
||||
case MOD: \
|
||||
case DIV: \
|
||||
return 60; \
|
||||
case MULT: \
|
||||
return 20; \
|
||||
case ASHIFT: \
|
||||
case ASHIFTRT: \
|
||||
case LSHIFTRT: \
|
||||
return COSTS_N_INSNS (h8300_shift_costs (RTX)); \
|
||||
case ROTATE: \
|
||||
case ROTATERT: \
|
||||
if (GET_MODE (RTX) == HImode) return 2; \
|
||||
return 8;
|
||||
|
||||
/* Tell final.c how to eliminate redundant test instructions. */
|
||||
|
Loading…
Reference in New Issue
Block a user