rx.h (LABEL_ALIGN_FOR_BARRIER): Define.

* config/rx/rx.h (LABEL_ALIGN_FOR_BARRIER): Define.
	(ASM_OUTPUT_MAX_SKIP_ALIGN): Define.
	* config/rx/rx.c (rx_option_override): Set align_jumps,
	align_loops and align_labels if not set by the user.
	(rx_align_for_label): New function.
	(rx_max_skip_for_label): New function.
	(TARGET_ASM_JUMP_ALIGN_MAX_SKIP): Define.
	(TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Define.
	(TARGET_ASM_LABEL_ALIGN_MAX_SKIP): Define.
	(TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Define.
	* config/rx/rx-protos.h (rx_align_for_label): Add prototype.

From-SVN: r171420
This commit is contained in:
Nick Clifton 2011-03-24 17:25:28 +00:00 committed by Nick Clifton
parent 3dc84509f0
commit 662666e541
4 changed files with 81 additions and 1 deletions

View file

@ -1,3 +1,17 @@
2011-03-24 Nick Clifton <nickc@redhat.com>
* config/rx/rx.h (LABEL_ALIGN_FOR_BARRIER): Define.
(ASM_OUTPUT_MAX_SKIP_ALIGN): Define.
* config/rx/rx.c (rx_option_override): Set align_jumps,
align_loops and align_labels if not set by the user.
(rx_align_for_label): New function.
(rx_max_skip_for_label): New function.
(TARGET_ASM_JUMP_ALIGN_MAX_SKIP): Define.
(TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Define.
(TARGET_ASM_LABEL_ALIGN_MAX_SKIP): Define.
(TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Define.
* config/rx/rx-protos.h (rx_align_for_label): Add prototype.
2011-03-24 Richard Sandiford <richard.sandiford@linaro.org>
PR rtl-optimization/48263

View file

@ -26,6 +26,7 @@
#define Fargs CUMULATIVE_ARGS
#define Rcode enum rtx_code
extern int rx_align_for_label (void);
extern void rx_expand_prologue (void);
extern int rx_initial_elimination_offset (int, int);

View file

@ -2350,6 +2350,13 @@ rx_option_override (void)
flag_strict_volatile_bitfields = 1;
rx_override_options_after_change ();
if (align_jumps == 0 && ! optimize_size)
align_jumps = 3;
if (align_loops == 0 && ! optimize_size)
align_loops = 3;
if (align_labels == 0 && ! optimize_size)
align_labels = 3;
}
/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */
@ -2740,8 +2747,47 @@ rx_match_ccmode (rtx insn, enum machine_mode cc_mode)
return true;
}
int
rx_align_for_label (void)
{
return optimize_size ? 1 : 3;
}
static int
rx_max_skip_for_label (rtx lab)
{
int opsize;
rtx op;
if (lab == NULL_RTX)
return 0;
op = lab;
do
{
op = next_nonnote_nondebug_insn (op);
}
while (op && (LABEL_P (op)
|| (INSN_P (op) && GET_CODE (PATTERN (op)) == USE)));
if (!op)
return 0;
opsize = get_attr_length (op);
if (opsize >= 0 && opsize < 8)
return opsize - 1;
return 0;
}
#undef TARGET_ASM_JUMP_ALIGN_MAX_SKIP
#define TARGET_ASM_JUMP_ALIGN_MAX_SKIP rx_max_skip_for_label
#undef TARGET_ASM_LOOP_ALIGN_MAX_SKIP
#define TARGET_ASM_LOOP_ALIGN_MAX_SKIP rx_max_skip_for_label
#undef TARGET_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
#define TARGET_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP rx_max_skip_for_label
#undef TARGET_ASM_LABEL_ALIGN_MAX_SKIP
#define TARGET_ASM_LABEL_ALIGN_MAX_SKIP rx_max_skip_for_label
#undef TARGET_FUNCTION_VALUE
#define TARGET_FUNCTION_VALUE rx_function_value

View file

@ -413,6 +413,25 @@ typedef unsigned int CUMULATIVE_ARGS;
#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX "_"
#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label ()
#define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
do \
{ \
if ((LOG) == 0 || (MAX_SKIP) == 0) \
break; \
if (TARGET_AS100_SYNTAX) \
{ \
if ((LOG) >= 2) \
fprintf (STREAM, "\t.ALIGN 4\t; %d alignment actually requested\n", 1 << (LOG)); \
else \
fprintf (STREAM, "\t.ALIGN 2\n"); \
} \
else \
fprintf (STREAM, "\t.balign %d,3,%d\n", 1 << (LOG), (MAX_SKIP)); \
} \
while (0)
#define ASM_OUTPUT_ALIGN(STREAM, LOG) \
do \
{ \