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 <[email protected]>
>>
>> * 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();
>>
>