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  <ni...@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();
>>
> 


Reply via email to