Commit ae557002 by Kazu Hirata Committed by Kazu Hirata

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
parent ebe637e3
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> 2002-11-27 Jim Wilson <wilson@redhat.com>
* config/rs6000/spe.md (spu_evsplatfi, spu_evsplati): Swap operands * 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 *)); ...@@ -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 const char *output_simode_bld PARAMS ((int, rtx[]));
extern void print_operand_address PARAMS ((FILE *, rtx)); extern void print_operand_address PARAMS ((FILE *, rtx));
extern int const_costs PARAMS ((rtx, enum rtx_code, enum rtx_code)); 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 print_operand PARAMS ((FILE *, rtx, int));
extern void final_prescan_insn PARAMS ((rtx, rtx *, int)); extern void final_prescan_insn PARAMS ((rtx, rtx *, int));
extern int do_movsi PARAMS ((rtx[])); extern int do_movsi PARAMS ((rtx[]));
......
...@@ -1134,6 +1134,24 @@ const_costs (r, c, outer_code) ...@@ -1134,6 +1134,24 @@ const_costs (r, c, outer_code)
return 4; 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: /* Documentation for the machine specific operand escapes:
......
...@@ -1020,20 +1020,20 @@ struct cum_arg ...@@ -1020,20 +1020,20 @@ struct cum_arg
/* Provide the costs of a rtl expression. This is in the body of a /* Provide the costs of a rtl expression. This is in the body of a
switch on CODE. */ switch on CODE. */
/* ??? Shifts need to have a *much* higher cost than this. */
#define RTX_COSTS(RTX, CODE, OUTER_CODE) \
#define RTX_COSTS(RTX, CODE, OUTER_CODE) \ case MOD: \
case MOD: \ case DIV: \
case DIV: \ return 60; \
return 60; \ case MULT: \
case MULT: \ return 20; \
return 20; \ case ASHIFT: \
case ASHIFT: \ case ASHIFTRT: \
case ASHIFTRT: \ case LSHIFTRT: \
case LSHIFTRT: \ return COSTS_N_INSNS (h8300_shift_costs (RTX)); \
case ROTATE: \ case ROTATE: \
case ROTATERT: \ case ROTATERT: \
if (GET_MODE (RTX) == HImode) return 2; \ if (GET_MODE (RTX) == HImode) return 2; \
return 8; return 8;
/* Tell final.c how to eliminate redundant test instructions. */ /* Tell final.c how to eliminate redundant test instructions. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment