Hi,
This patch changes the compiler to correctly generate .arch and .cpu
assembly directives in order to support the inline assembly of
instructions that are part of a feature, e.g. crypto.
OK for the trunk?
Thanks,
Yufeng
gcc/
* config/aarch64/aarch64.c (aarch64_print_extension): New function.
(aarch64_start_file): Use the new function.
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 827b8df..49016c1 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -7080,12 +7080,30 @@ aarch64_split_atomic_op (enum rtx_code code, rtx
old_out, rtx new_out, rtx mem,
}
static void
+aarch64_print_extension (void)
+{
+ const struct aarch64_option_extension *opt = NULL;
+
+ for (opt = all_extensions; opt->name != NULL; opt++)
+ if ((aarch64_isa_flags & opt->flags_on) == opt->flags_on)
+ asm_fprintf (asm_out_file, "+%s", opt->name);
+
+ asm_fprintf (asm_out_file, "\n");
+}
+
+static void
aarch64_start_file (void)
{
if (selected_arch)
- asm_fprintf (asm_out_file, "\t.arch %s\n", selected_arch->name);
+ {
+ asm_fprintf (asm_out_file, "\t.arch %s", selected_arch->name);
+ aarch64_print_extension ();
+ }
else if (selected_cpu)
- asm_fprintf (asm_out_file, "\t.cpu %s\n", selected_cpu->name);
+ {
+ asm_fprintf (asm_out_file, "\t.cpu %s", selected_cpu->name);
+ aarch64_print_extension ();
+ }
default_file_start();
}