* config/h8300/h8300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Remove macro.
* config/h8300/h8300-protos.h (h8300_get_index): Remove.
* config/h8300/h8300.c (TARGET_MODE_DEPENDENT_ADDRESS_P): Define.
(h8300_mode_dependent_address_p): New function.
(h8300_get_index): Make static.
From-SVN: r171787
+2011-03-31 Anatoly Sokolov <aesok@post.ru>
+
+ * config/h8300/h8300.h (GO_IF_MODE_DEPENDENT_ADDRESS): Remove macro.
+ * config/h8300/h8300-protos.h (h8300_get_index): Remove.
+ * config/h8300/h8300.c (TARGET_MODE_DEPENDENT_ADDRESS_P): Define.
+ (h8300_mode_dependent_address_p): New function.
+ (h8300_get_index): Make static.
+
2011-03-31 Jeff Law <law@redhat.com>
* tree-ssa-forwprop.c (forward_propagate_into_cond): Avoid
/* Definitions of target machine for GNU compiler.
Renesas H8/300 version
- Copyright (C) 2000, 2002, 2003, 2004, 2005, 2007, 2009, 2010
+ Copyright (C) 2000, 2002, 2003, 2004, 2005, 2007, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Steve Chamberlain (sac@cygnus.com),
Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com).
extern void h8300_pr_interrupt (struct cpp_reader *);
extern void h8300_pr_saveall (struct cpp_reader *);
extern enum reg_class h8300_reg_class_from_letter (int);
-extern rtx h8300_get_index (rtx, enum machine_mode mode, int *);
extern unsigned int h8300_insn_length_from_table (rtx, rtx *);
extern const char * output_h8sx_shift (rtx *, int, int);
extern bool h8300_operands_match_p (rtx *);
static bool h8300_short_move_mem_p (rtx, enum rtx_code);
static unsigned int h8300_move_length (rtx *, const h8300_length_table *);
static bool h8300_hard_regno_scratch_ok (unsigned int);
+static rtx h8300_get_index (rtx, enum machine_mode mode, int *);
/* CPU_TYPE, says what cpu we're compiling for. */
int cpu_type;
MODE is the mode of the value being accessed. It can be VOIDmode
if the address is known to be valid, but its mode is unknown. */
-rtx
+static rtx
h8300_get_index (rtx x, enum machine_mode mode, int *size)
{
int dummy, factor;
return x;
}
\f
+/* Worker function for TARGET_MODE_DEPENDENT_ADDRESS_P.
+
+ On the H8/300, the predecrement and postincrement address depend thus
+ (the amount of decrement or increment being the length of the operand). */
+
+static bool
+h8300_mode_dependent_address_p (const_rtx addr)
+{
+ if (GET_CODE (addr) == PLUS
+ && h8300_get_index (XEXP (addr, 0), VOIDmode, 0) != XEXP (addr, 0))
+ return true;
+
+ return false;
+}
+\f
static const h8300_length_table addb_length_table =
{
/* #xx Rs @aa @Rs @xx */
#undef TARGET_EXCEPT_UNWIND_INFO
#define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
+#undef TARGET_MODE_DEPENDENT_ADDRESS_P
+#define TARGET_MODE_DEPENDENT_ADDRESS_P h8300_mode_dependent_address_p
+
struct gcc_target targetm = TARGET_INITIALIZER;
((C) == 'W')
\f
-/* Go to LABEL if ADDR (a legitimate address expression)
- has an effect that depends on the machine mode it is used for.
-
- On the H8/300, the predecrement and postincrement address depend thus
- (the amount of decrement or increment being the length of the operand). */
-
-#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) \
- if (GET_CODE (ADDR) == PLUS \
- && h8300_get_index (XEXP (ADDR, 0), VOIDmode, 0) != XEXP (ADDR, 0)) \
- goto LABEL;
-\f
/* Specify the machine mode that this machine uses
for the index in the tablejump instruction. */
#define CASE_VECTOR_MODE Pmode