Hi James,
On 10/02/16 10:11, James Greenhalgh wrote:
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...
I did do it this way to avoid a string comparison (I try to avoid
manual string manipulations where I can as they're so easy to get wrong)
though this isn't on any hot path.
We don't really pass the structure around anywhere, we just keep one
instance. We'd have to do the same with a string i.e. keep a string
object around that we'd strcpy (or C++ equivalent) a string to every time
we wanted to update it, so I thought this approach is cleaner as the
architecture features are already fully described by a pointer to
an element in the static constant all_architectures table and an
unsigned long holding the ISA flags.
If you insist I can change it to a string, but I personally don't
think it's worth it.
Thanks,
Kyrill
Thanks,
James