diff mbox

RFC: ARM: Add comments to emitted .eabi_attribute directives

Message ID m3d3ebl9sp.fsf@redhat.com
State New
Headers show

Commit Message

Nick Clifton Oct. 5, 2011, 3:47 p.m. UTC
Hi Richard, Hi Paul, Hi Ramana,

  Well my idea to have a header file containing all of the possible
  binary file attributes does not seem to have taken off, so here is a
  much simpler patch for the GCC ARM backend.  It just adds comments to
  the .eabi_directives (when -dA or -fverbose-asm are in effect) emitted
  by GCC.  It does not have any dependencies upon header files, nor does
  it attempt to make use of the symbolic names in the actual
  .eabi_directives.

  Any objections to this version of the patch ?

Cheers
  Nick

gcc/ChangeLog
2011-10-05  Nick Clifton  <nickc@redhat.com>

	* config/arm/arm.c (EMIT_EABI_ATTRIBUTE): New macro.  Used to
	emit a .eabi_attribute assembler directive, possibly with a
	comment attached.
        (asm_file_start): Use the new macro.

Comments

Ramana Radhakrishnan Oct. 12, 2011, 12:48 a.m. UTC | #1
>  Any objections to this version of the patch ?

Fine with me though I think it's worthwhile to have such comments
without -dA but that's my personal impression. I don't care either
way.

cheers
Ramana

>
> Cheers
>  Nick
>
> gcc/ChangeLog
> 2011-10-05  Nick Clifton  <nickc@redhat.com>
>
>        * config/arm/arm.c (EMIT_EABI_ATTRIBUTE): New macro.  Used to
>        emit a .eabi_attribute assembler directive, possibly with a
>        comment attached.
>        (asm_file_start): Use the new macro.
>
>
> Index: gcc/config/arm/arm.c
> ===================================================================
> --- gcc/config/arm/arm.c        (revision 179554)
> +++ gcc/config/arm/arm.c        (working copy)
> @@ -22243,6 +22243,21 @@
>     asm_fprintf (stream, "%U%s", name);
>  }
>
> +/* This macro is used to emit an EABI tag and its associated value.
> +   We emit the numerical value of the tag in case the assembler does not
> +   support textual tags.  (Eg gas prior to 2.20).  If requested we include
> +   the tag name in a comment so that anyone reading the assembler output
> +   will know which tag is being set.  */
> +#define EMIT_EABI_ATTRIBUTE(NAME,NUM,VAL)                              \
> +  do                                                                   \
> +    {                                                                  \
> +      asm_fprintf (asm_out_file, "\t.eabi_attribute %d, %d", NUM, VAL); \
> +      if (flag_verbose_asm || flag_debug_asm)                          \
> +       asm_fprintf (asm_out_file, "\t%s " #NAME, ASM_COMMENT_START);   \
> +      asm_fprintf (asm_out_file, "\n");                                        \
> +    }                                                                  \
> +  while (0)
> +
>  static void
>  arm_file_start (void)
>  {
> @@ -22274,9 +22289,9 @@
>          if (arm_fpu_desc->model == ARM_FP_MODEL_VFP)
>            {
>              if (TARGET_HARD_FLOAT)
> -               asm_fprintf (asm_out_file, "\t.eabi_attribute 27, 3\n");
> +               EMIT_EABI_ATTRIBUTE (Tag_ABI_HardFP_use, 27, 3);
>              if (TARGET_HARD_FLOAT_ABI)
> -               asm_fprintf (asm_out_file, "\t.eabi_attribute 28, 1\n");
> +               EMIT_EABI_ATTRIBUTE (Tag_ABI_VFP_args, 28, 1);
>            }
>        }
>       asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_name);
> @@ -22285,31 +22300,24 @@
>          are used.  However we don't have any easy way of figuring this out.
>         Conservatively record the setting that would have been used.  */
>
> -      /* Tag_ABI_FP_rounding.  */
>       if (flag_rounding_math)
> -       asm_fprintf (asm_out_file, "\t.eabi_attribute 19, 1\n");
> +       EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_rounding, 19, 1);
> +
>       if (!flag_unsafe_math_optimizations)
>        {
> -         /* Tag_ABI_FP_denomal.  */
> -         asm_fprintf (asm_out_file, "\t.eabi_attribute 20, 1\n");
> -         /* Tag_ABI_FP_exceptions.  */
> -         asm_fprintf (asm_out_file, "\t.eabi_attribute 21, 1\n");
> +         EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_denormal, 20, 1);
> +         EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_exceptions, 21, 1);
>        }
> -      /* Tag_ABI_FP_user_exceptions.  */
>       if (flag_signaling_nans)
> -       asm_fprintf (asm_out_file, "\t.eabi_attribute 22, 1\n");
> -      /* Tag_ABI_FP_number_model.  */
> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 23, %d\n",
> -                  flag_finite_math_only ? 1 : 3);
> +       EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_user_exceptions, 22, 1);
>
> -      /* Tag_ABI_align8_needed.  */
> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 24, 1\n");
> -      /* Tag_ABI_align8_preserved.  */
> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 25, 1\n");
> -      /* Tag_ABI_enum_size.  */
> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 26, %d\n",
> -                  flag_short_enums ? 1 : 2);
> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_number_model, 23,
> +                          flag_finite_math_only ? 1 : 3);
>
> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_needed, 24, 1);
> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_preserved, 25, 1);
> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_enum_size, 26, flag_short_enums ? 1 : 2);
> +
>       /* Tag_ABI_optimization_goals.  */
>       if (optimize_size)
>        val = 4;
> @@ -22319,16 +22327,12 @@
>        val = 1;
>       else
>        val = 6;
> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 30, %d\n", val);
> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_optimization_goals, 30, val);
>
> -      /* Tag_CPU_unaligned_access.  */
> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 34, %d\n",
> -                  unaligned_access);
> +      EMIT_EABI_ATTRIBUTE (Tag_CPU_unaligned_access, 34, unaligned_access);
>
> -      /* Tag_ABI_FP_16bit_format.  */
>       if (arm_fp16_format)
> -       asm_fprintf (asm_out_file, "\t.eabi_attribute 38, %d\n",
> -                    (int)arm_fp16_format);
> +       EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_16bit_format, 38, (int) arm_fp16_format);
>
>       if (arm_lang_output_object_attributes_hook)
>        arm_lang_output_object_attributes_hook();
>
Richard Earnshaw Oct. 12, 2011, 8:54 a.m. UTC | #2
On 12/10/11 01:48, Ramana Radhakrishnan wrote:
>>  Any objections to this version of the patch ?
> 
> Fine with me though I think it's worthwhile to have such comments
> without -dA but that's my personal impression. I don't care either
> way.
> 
> cheers
> Ramana
> 

Why not define an enum in arm.h with the EABI attributes, then you can write

#define EMIT_EABI_ATTRIBUTE(NAME,VAL)                                 \
  do                                                                  \
    {                                                                 \
      asm_fprintf (asm_out_file, "\t.eabi_attribute %d, %d", NAME, VAL); \
      if (flag_verbose_asm || flag_debug_asm)                         \
        asm_fprintf (asm_out_file, "\t%s " #NAME, ASM_COMMENT_START); \
        asm_fprintf (asm_out_file, "\n");                             \
    }                                                                 \
  while (0)

>>
>> Cheers
>>  Nick
>>
>> gcc/ChangeLog
>> 2011-10-05  Nick Clifton  <nickc@redhat.com>
>>
>>        * config/arm/arm.c (EMIT_EABI_ATTRIBUTE): New macro.  Used to
>>        emit a .eabi_attribute assembler directive, possibly with a
>>        comment attached.
>>        (asm_file_start): Use the new macro.
>>
>>
>> Index: gcc/config/arm/arm.c
>> ===================================================================
>> --- gcc/config/arm/arm.c        (revision 179554)
>> +++ gcc/config/arm/arm.c        (working copy)
>> @@ -22243,6 +22243,21 @@
>>     asm_fprintf (stream, "%U%s", name);
>>  }
>>
>> +/* This macro is used to emit an EABI tag and its associated value.
>> +   We emit the numerical value of the tag in case the assembler does not
>> +   support textual tags.  (Eg gas prior to 2.20).  If requested we include
>> +   the tag name in a comment so that anyone reading the assembler output
>> +   will know which tag is being set.  */
>> +#define EMIT_EABI_ATTRIBUTE(NAME,NUM,VAL)                              \
>> +  do                                                                   \
>> +    {                                                                  \
>> +      asm_fprintf (asm_out_file, "\t.eabi_attribute %d, %d", NUM, VAL); \
>> +      if (flag_verbose_asm || flag_debug_asm)                          \
>> +       asm_fprintf (asm_out_file, "\t%s " #NAME, ASM_COMMENT_START);   \
>> +      asm_fprintf (asm_out_file, "\n");                                        \
>> +    }                                                                  \
>> +  while (0)
>> +
>>  static void
>>  arm_file_start (void)
>>  {
>> @@ -22274,9 +22289,9 @@
>>          if (arm_fpu_desc->model == ARM_FP_MODEL_VFP)
>>            {
>>              if (TARGET_HARD_FLOAT)
>> -               asm_fprintf (asm_out_file, "\t.eabi_attribute 27, 3\n");
>> +               EMIT_EABI_ATTRIBUTE (Tag_ABI_HardFP_use, 27, 3);
>>              if (TARGET_HARD_FLOAT_ABI)
>> -               asm_fprintf (asm_out_file, "\t.eabi_attribute 28, 1\n");
>> +               EMIT_EABI_ATTRIBUTE (Tag_ABI_VFP_args, 28, 1);
>>            }
>>        }
>>       asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_name);
>> @@ -22285,31 +22300,24 @@
>>          are used.  However we don't have any easy way of figuring this out.
>>         Conservatively record the setting that would have been used.  */
>>
>> -      /* Tag_ABI_FP_rounding.  */
>>       if (flag_rounding_math)
>> -       asm_fprintf (asm_out_file, "\t.eabi_attribute 19, 1\n");
>> +       EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_rounding, 19, 1);
>> +
>>       if (!flag_unsafe_math_optimizations)
>>        {
>> -         /* Tag_ABI_FP_denomal.  */
>> -         asm_fprintf (asm_out_file, "\t.eabi_attribute 20, 1\n");
>> -         /* Tag_ABI_FP_exceptions.  */
>> -         asm_fprintf (asm_out_file, "\t.eabi_attribute 21, 1\n");
>> +         EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_denormal, 20, 1);
>> +         EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_exceptions, 21, 1);
>>        }
>> -      /* Tag_ABI_FP_user_exceptions.  */
>>       if (flag_signaling_nans)
>> -       asm_fprintf (asm_out_file, "\t.eabi_attribute 22, 1\n");
>> -      /* Tag_ABI_FP_number_model.  */
>> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 23, %d\n",
>> -                  flag_finite_math_only ? 1 : 3);
>> +       EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_user_exceptions, 22, 1);
>>
>> -      /* Tag_ABI_align8_needed.  */
>> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 24, 1\n");
>> -      /* Tag_ABI_align8_preserved.  */
>> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 25, 1\n");
>> -      /* Tag_ABI_enum_size.  */
>> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 26, %d\n",
>> -                  flag_short_enums ? 1 : 2);
>> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_number_model, 23,
>> +                          flag_finite_math_only ? 1 : 3);
>>
>> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_needed, 24, 1);
>> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_preserved, 25, 1);
>> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_enum_size, 26, flag_short_enums ? 1 : 2);
>> +
>>       /* Tag_ABI_optimization_goals.  */
>>       if (optimize_size)
>>        val = 4;
>> @@ -22319,16 +22327,12 @@
>>        val = 1;
>>       else
>>        val = 6;
>> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 30, %d\n", val);
>> +      EMIT_EABI_ATTRIBUTE (Tag_ABI_optimization_goals, 30, val);
>>
>> -      /* Tag_CPU_unaligned_access.  */
>> -      asm_fprintf (asm_out_file, "\t.eabi_attribute 34, %d\n",
>> -                  unaligned_access);
>> +      EMIT_EABI_ATTRIBUTE (Tag_CPU_unaligned_access, 34, unaligned_access);
>>
>> -      /* Tag_ABI_FP_16bit_format.  */
>>       if (arm_fp16_format)
>> -       asm_fprintf (asm_out_file, "\t.eabi_attribute 38, %d\n",
>> -                    (int)arm_fp16_format);
>> +       EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_16bit_format, 38, (int) arm_fp16_format);
>>
>>       if (arm_lang_output_object_attributes_hook)
>>        arm_lang_output_object_attributes_hook();
>>
>
diff mbox

Patch

Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c	(revision 179554)
+++ gcc/config/arm/arm.c	(working copy)
@@ -22243,6 +22243,21 @@ 
     asm_fprintf (stream, "%U%s", name);
 }
 
+/* This macro is used to emit an EABI tag and its associated value.
+   We emit the numerical value of the tag in case the assembler does not
+   support textual tags.  (Eg gas prior to 2.20).  If requested we include
+   the tag name in a comment so that anyone reading the assembler output
+   will know which tag is being set.  */
+#define EMIT_EABI_ATTRIBUTE(NAME,NUM,VAL)				\
+  do									\
+    {									\
+      asm_fprintf (asm_out_file, "\t.eabi_attribute %d, %d", NUM, VAL); \
+      if (flag_verbose_asm || flag_debug_asm)				\
+	asm_fprintf (asm_out_file, "\t%s " #NAME, ASM_COMMENT_START);	\
+      asm_fprintf (asm_out_file, "\n");					\
+    }									\
+  while (0)
+
 static void
 arm_file_start (void)
 {
@@ -22274,9 +22289,9 @@ 
 	  if (arm_fpu_desc->model == ARM_FP_MODEL_VFP)
 	    {
 	      if (TARGET_HARD_FLOAT)
-		asm_fprintf (asm_out_file, "\t.eabi_attribute 27, 3\n");
+		EMIT_EABI_ATTRIBUTE (Tag_ABI_HardFP_use, 27, 3);
 	      if (TARGET_HARD_FLOAT_ABI)
-		asm_fprintf (asm_out_file, "\t.eabi_attribute 28, 1\n");
+		EMIT_EABI_ATTRIBUTE (Tag_ABI_VFP_args, 28, 1);
 	    }
 	}
       asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_name);
@@ -22285,31 +22300,24 @@ 
          are used.  However we don't have any easy way of figuring this out.
 	 Conservatively record the setting that would have been used.  */
 
-      /* Tag_ABI_FP_rounding.  */
       if (flag_rounding_math)
-	asm_fprintf (asm_out_file, "\t.eabi_attribute 19, 1\n");
+	EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_rounding, 19, 1);
+
       if (!flag_unsafe_math_optimizations)
 	{
-	  /* Tag_ABI_FP_denomal.  */
-	  asm_fprintf (asm_out_file, "\t.eabi_attribute 20, 1\n");
-	  /* Tag_ABI_FP_exceptions.  */
-	  asm_fprintf (asm_out_file, "\t.eabi_attribute 21, 1\n");
+	  EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_denormal, 20, 1);
+	  EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_exceptions, 21, 1);
 	}
-      /* Tag_ABI_FP_user_exceptions.  */
       if (flag_signaling_nans)
-	asm_fprintf (asm_out_file, "\t.eabi_attribute 22, 1\n");
-      /* Tag_ABI_FP_number_model.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 23, %d\n", 
-		   flag_finite_math_only ? 1 : 3);
+	EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_user_exceptions, 22, 1);
 
-      /* Tag_ABI_align8_needed.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 24, 1\n");
-      /* Tag_ABI_align8_preserved.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 25, 1\n");
-      /* Tag_ABI_enum_size.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 26, %d\n",
-		   flag_short_enums ? 1 : 2);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_number_model, 23,
+			   flag_finite_math_only ? 1 : 3);
 
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_needed, 24, 1);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_align8_preserved, 25, 1);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_enum_size, 26, flag_short_enums ? 1 : 2);
+
       /* Tag_ABI_optimization_goals.  */
       if (optimize_size)
 	val = 4;
@@ -22319,16 +22327,12 @@ 
 	val = 1;
       else
 	val = 6;
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 30, %d\n", val);
+      EMIT_EABI_ATTRIBUTE (Tag_ABI_optimization_goals, 30, val);
 
-      /* Tag_CPU_unaligned_access.  */
-      asm_fprintf (asm_out_file, "\t.eabi_attribute 34, %d\n",
-		   unaligned_access);
+      EMIT_EABI_ATTRIBUTE (Tag_CPU_unaligned_access, 34, unaligned_access);
 
-      /* Tag_ABI_FP_16bit_format.  */
       if (arm_fp16_format)
-	asm_fprintf (asm_out_file, "\t.eabi_attribute 38, %d\n",
-		     (int)arm_fp16_format);
+	EMIT_EABI_ATTRIBUTE (Tag_ABI_FP_16bit_format, 38, (int) arm_fp16_format);
 
       if (arm_lang_output_object_attributes_hook)
 	arm_lang_output_object_attributes_hook();