Sometimes, even on AVR there is the need to align data.

However, alignments of 2 are ignored at the moment because of

#define ASM_OUTPUT_ALIGN(STREAM, POWER)                 \
  do {                                                  \
    if ((POWER) > 1)                                    \
      fprintf (STREAM, "\t.p2align\t%d\n", POWER);      \
  } while (0)

The fix is to use POWER > 0 instead.

Maybe someone knows why the restriction to POWER >= 2 is
there at all?

Ok to install?

Johann

        PR target/53448
        * config/avr/avr.h (ASM_OUTPUT_ALIGN): Don't inhibit .p2align 1.
        * config/avr/elf.h (ASM_OUTPUT_BEFORE_CASE_LABEL): Use
        ASM_OUTPUT_ALIGN.
Index: config/avr/elf.h
===================================================================
--- config/avr/elf.h	(revision 187704)
+++ config/avr/elf.h	(working copy)
@@ -35,7 +35,7 @@
 /* Output alignment 2**1 for jump tables.  */
 #undef ASM_OUTPUT_BEFORE_CASE_LABEL
 #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE, PREFIX, NUM, TABLE) \
-  fprintf (FILE, "\t.p2align\t1\n");
+  ASM_OUTPUT_ALIGN (FILE, 1);
 
 /* Be conservative in crtstuff.c.  */
 #undef INIT_SECTION_ASM_OP
Index: config/avr/avr.h
===================================================================
--- config/avr/avr.h	(revision 187704)
+++ config/avr/avr.h	(working copy)
@@ -557,10 +557,10 @@ typedef struct avr_args {
 #define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE)		\
   avr_output_addr_vec_elt(STREAM, VALUE)
 
-#define ASM_OUTPUT_ALIGN(STREAM, POWER)			\
-  do {							\
-      if ((POWER) > 1)					\
-          fprintf (STREAM, "\t.p2align\t%d\n", POWER);	\
+#define ASM_OUTPUT_ALIGN(STREAM, POWER)                 \
+  do {                                                  \
+    if ((POWER) > 0)                                    \
+      fprintf (STREAM, "\t.p2align\t%d\n", POWER);      \
   } while (0)
 
 #define CASE_VECTOR_MODE HImode

Reply via email to