Message ID | m3d3ebl9sp.fsf@redhat.com |
---|---|
State | New |
Headers | show |
> 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(); >
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(); >> >
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();