* config/s390/s390-protos.h (s390_label_align): New prototype.
* config/s390/s390.c (s390_label_align): New function.
* config/s390/s390.h (LABEL_ALIGN): New target macro definition.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@170821
138bc75d-0d04-0410-961f-
82ee72b054a4
+2011-03-09 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/s390-protos.h (s390_label_align): New prototype.
+ * config/s390/s390.c (s390_label_align): New function.
+ * config/s390/s390.h (LABEL_ALIGN): New target macro definition.
+
2011-03-08 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/47755
extern void print_operand_address (FILE *, rtx);
extern void print_operand (FILE *, rtx, int);
extern void s390_output_pool_entry (rtx, enum machine_mode, unsigned int);
+extern int s390_label_align (rtx);
extern int s390_agen_dep_p (rtx, rtx);
extern rtx s390_load_got (void);
extern rtx s390_get_thread_pointer (void);
bytes on a z10 (or higher) CPU. */
#define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
+/* Return the alignment for LABEL. We default to the -falign-labels
+ value except for the literal pool base label. */
+int
+s390_label_align (rtx label)
+{
+ rtx prev_insn = prev_active_insn (label);
+
+ if (prev_insn == NULL_RTX)
+ goto old;
+
+ prev_insn = single_set (prev_insn);
+
+ if (prev_insn == NULL_RTX)
+ goto old;
+
+ prev_insn = SET_SRC (prev_insn);
+
+ /* Don't align literal pool base labels. */
+ if (GET_CODE (prev_insn) == UNSPEC
+ && XINT (prev_insn, 1) == UNSPEC_MAIN_BASE)
+ return 0;
+
+ old:
+ return align_labels_log;
+}
+
static enum machine_mode
s390_libgcc_cmp_return_mode (void)
{
/* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h. */
#define LOCAL_LABEL_PREFIX "."
+#define LABEL_ALIGN(LABEL) \
+ s390_label_align (LABEL)
+
/* How to refer to registers in assembler output. This sequence is
indexed by compiler's hard-register-number (see above). */
#define REGISTER_NAMES \