[AArch64] Only update assembler .arch directive when necessary
* config/aarch64/aarch64.c (aarch64_last_printed_arch_string): New variable. (aarch64_last_printed_tune_string): Likewise. (aarch64_declare_function_name): Only output .arch assembler directive if it will be different from the previously output directive. Same for .tune comment but only if -dA is set. (aarch64_start_file): New function. (TARGET_ASM_FILE_START): Define. * gcc.target/aarch64/target_attr_15.c: Scan assembly for .arch armv8-a\n. Add -dA to dg-options. * gcc.target/aarch64/assembler_arch_1.c: New test. * gcc.target/aarch64/target_attr_7.c: Add -dA to dg-options. From-SVN: r233342
This commit is contained in:
parent
4146b7b8c4
commit
e1c1ecb0fe
|
@ -1,3 +1,14 @@
|
|||
2016-02-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* config/aarch64/aarch64.c (aarch64_last_printed_arch_string):
|
||||
New variable.
|
||||
(aarch64_last_printed_tune_string): Likewise.
|
||||
(aarch64_declare_function_name): Only output .arch assembler
|
||||
directive if it will be different from the previously output
|
||||
directive. Same for .tune comment but only if -dA is set.
|
||||
(aarch64_start_file): New function.
|
||||
(TARGET_ASM_FILE_START): Define.
|
||||
|
||||
2016-02-11 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
PR plugins/69758
|
||||
|
|
|
@ -11181,6 +11181,10 @@ aarch64_asm_preferred_eh_data_format (int code ATTRIBUTE_UNUSED, int global)
|
|||
return (global ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | type;
|
||||
}
|
||||
|
||||
/* The last .arch and .tune assembly strings that we printed. */
|
||||
static std::string aarch64_last_printed_arch_string;
|
||||
static std::string aarch64_last_printed_tune_string;
|
||||
|
||||
/* Implement ASM_DECLARE_FUNCTION_NAME. Output the ISA features used
|
||||
by the function fndecl. */
|
||||
|
||||
|
@ -11203,23 +11207,55 @@ aarch64_declare_function_name (FILE *stream, const char* name,
|
|||
unsigned long isa_flags = targ_options->x_aarch64_isa_flags;
|
||||
std::string extension
|
||||
= aarch64_get_extension_string_for_isa_flags (isa_flags);
|
||||
asm_fprintf (asm_out_file, "\t.arch %s%s\n",
|
||||
this_arch->name, extension.c_str ());
|
||||
/* Only update the assembler .arch string if it is distinct from the last
|
||||
such string we printed. */
|
||||
std::string to_print = this_arch->name + extension;
|
||||
if (to_print != aarch64_last_printed_arch_string)
|
||||
{
|
||||
asm_fprintf (asm_out_file, "\t.arch %s\n", to_print.c_str ());
|
||||
aarch64_last_printed_arch_string = to_print;
|
||||
}
|
||||
|
||||
/* Print the cpu name we're tuning for in the comments, might be
|
||||
useful to readers of the generated asm. */
|
||||
|
||||
useful to readers of the generated asm. Do it only when it changes
|
||||
from function to function and verbose assembly is requested. */
|
||||
const struct processor *this_tune
|
||||
= aarch64_get_tune_cpu (targ_options->x_explicit_tune_core);
|
||||
|
||||
asm_fprintf (asm_out_file, "\t" ASM_COMMENT_START ".tune %s\n",
|
||||
this_tune->name);
|
||||
if (flag_debug_asm && aarch64_last_printed_tune_string != this_tune->name)
|
||||
{
|
||||
asm_fprintf (asm_out_file, "\t" ASM_COMMENT_START ".tune %s\n",
|
||||
this_tune->name);
|
||||
aarch64_last_printed_tune_string = this_tune->name;
|
||||
}
|
||||
|
||||
/* Don't forget the type directive for ELF. */
|
||||
ASM_OUTPUT_TYPE_DIRECTIVE (stream, name, "function");
|
||||
ASM_OUTPUT_LABEL (stream, name);
|
||||
}
|
||||
|
||||
/* Implements TARGET_ASM_FILE_START. Output the assembly header. */
|
||||
|
||||
static void
|
||||
aarch64_start_file (void)
|
||||
{
|
||||
struct cl_target_option *default_options
|
||||
= TREE_TARGET_OPTION (target_option_default_node);
|
||||
|
||||
const struct processor *default_arch
|
||||
= aarch64_get_arch (default_options->x_explicit_arch);
|
||||
unsigned long default_isa_flags = default_options->x_aarch64_isa_flags;
|
||||
std::string extension
|
||||
= aarch64_get_extension_string_for_isa_flags (default_isa_flags);
|
||||
|
||||
aarch64_last_printed_arch_string = default_arch->name + extension;
|
||||
aarch64_last_printed_tune_string = "";
|
||||
asm_fprintf (asm_out_file, "\t.arch %s\n",
|
||||
aarch64_last_printed_arch_string.c_str ());
|
||||
|
||||
default_file_start ();
|
||||
}
|
||||
|
||||
/* Emit load exclusive. */
|
||||
|
||||
static void
|
||||
|
@ -13957,6 +13993,9 @@ aarch64_optab_supported_p (int op, machine_mode, machine_mode,
|
|||
#define TARGET_ASM_CAN_OUTPUT_MI_THUNK \
|
||||
hook_bool_const_tree_hwi_hwi_const_tree_true
|
||||
|
||||
#undef TARGET_ASM_FILE_START
|
||||
#define TARGET_ASM_FILE_START aarch64_start_file
|
||||
|
||||
#undef TARGET_ASM_OUTPUT_MI_THUNK
|
||||
#define TARGET_ASM_OUTPUT_MI_THUNK aarch64_output_mi_thunk
|
||||
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2016-02-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* gcc.target/aarch64/target_attr_15.c: Scan assembly for
|
||||
.arch armv8-a\n. Add -dA to dg-options.
|
||||
* gcc.target/aarch64/assembler_arch_1.c: New test.
|
||||
* gcc.target/aarch64/target_attr_7.c: Add -dA to dg-options.
|
||||
|
||||
2016-02-11 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/68726
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
/* { dg-do assemble } */
|
||||
/* { dg-options "-march=armv8-a" } */
|
||||
|
||||
/* Make sure that the function header in assembly doesn't override
|
||||
user asm arch_extension directives. */
|
||||
|
||||
__asm__ (".arch_extension lse");
|
||||
|
||||
void
|
||||
foo (int i, int *v)
|
||||
{
|
||||
register int w0 asm ("w0") = i;
|
||||
register int *x1 asm ("x1") = v;
|
||||
|
||||
asm volatile (
|
||||
"\tstset %w[i], %[v]\n"
|
||||
: [i] "+r" (w0), [v] "+Q" (v)
|
||||
: "r" (x1)
|
||||
: "x30");
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mcpu=thunderx -save-temps" } */
|
||||
/* { dg-options "-O2 -mcpu=thunderx -dA" } */
|
||||
|
||||
/* Test that cpu attribute overrides the command-line -mcpu. */
|
||||
|
||||
|
|
|
@ -10,6 +10,4 @@ foo (int a)
|
|||
return a + 1;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler-not "\\+fp" } } */
|
||||
/* { dg-final { scan-assembler-not "\\+crypto" } } */
|
||||
/* { dg-final { scan-assembler-not "\\+simd" } } */
|
||||
/* { dg-final { scan-assembler-times "\\.arch armv8-a\n" 1 } } */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -mcpu=thunderx -save-temps" } */
|
||||
/* { dg-options "-O2 -mcpu=thunderx -dA" } */
|
||||
|
||||
/* Make sure that #pragma overrides command line option and
|
||||
target attribute overrides the pragma. */
|
||||
|
|
Loading…
Reference in New Issue