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:
parent
3dc84509f0
commit
662666e541
4 changed files with 81 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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 \
|
||||
{ \
|
||||
|
|
Loading…
Add table
Reference in a new issue