On Thu, Feb 04, 2016 at 01:50:31PM +0000, Kyrill Tkachov wrote: > Hi all, > > As part of the target attributes and pragmas support for GCC 6 I changed the > aarch64 port to emit a .arch assembly directive for each function that > describes the architectural features used by that function. This is a change > from GCC 5 behaviour where we output a single .arch directive at the > beginning of the assembly file corresponding to architectural features given > on the command line. <snip> > Bootstrapped and tested on aarch64-none-linux-gnu. With this patch I managed > to build a recent allyesconfig Linux kernel where before the build would fail > when assembling the LSE instructions. > > Ok for trunk?
One comment, that I'm willing to be convinced on... > > Thanks, > Kyrill > > 2016-02-04 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > * config/aarch64/aarch64.c (struct aarch64_output_asm_info): > New struct definition. > (aarch64_previous_asm_output): New variable. > (aarch64_declare_function_name): Only output .arch assembler > directive if it will be different from the previously output > directive. > (aarch64_start_file): New function. > (TARGET_ASM_FILE_START): Define. > > 2016-02-04 Kyrylo Tkachov <kyrylo.tkac...@arm.com> > > * gcc.target/aarch64/assembler_arch_1.c: Add -dA to dg-options. > Delete unneeded -save-temps. > * gcc.target/aarch64/assembler_arch_7.c: Likewise. > * gcc.target/aarch64/target_attr_15.c: Scan assembly for > .arch armv8-a\n. > * gcc.target/aarch64/assembler_arch_1.c: New test. > commit 2df0f24332e316b8d18d4571438f76726a0326e7 > Author: Kyrylo Tkachov <kyrylo.tkac...@arm.com> > Date: Wed Jan 27 12:54:54 2016 +0000 > > [AArch64] Only update assembler .arch directive when necessary > > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c > index 5ca2ae8..0751440 100644 > --- a/gcc/config/aarch64/aarch64.c > +++ b/gcc/config/aarch64/aarch64.c > @@ -11163,6 +11163,17 @@ aarch64_asm_preferred_eh_data_format (int code > ATTRIBUTE_UNUSED, int global) > return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | type; > } > > +struct aarch64_output_asm_info > +{ > + const struct processor *arch; > + const struct processor *cpu; > + unsigned long isa_flags; Why not just keep the last string you printed, and use a string compare to decide whether to print or not? Sure we'll end up doing a bit more work, but the logic becomes simpler to follow and we don't need to pass around another struct... Thanks, James