diff options
author | jgreenhalgh <jgreenhalgh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-04-11 10:14:59 +0000 |
---|---|---|
committer | jgreenhalgh <jgreenhalgh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-04-11 10:14:59 +0000 |
commit | a702492c9d098f1dde2c7cc106a7c5780a944c02 (patch) | |
tree | af54bbd8e515f6707e7b7eff6e5bfda5a7b48a79 | |
parent | fa9ec18a13690e9490291c65456f9f15fd2ddcc7 (diff) | |
download | gcc-a702492c9d098f1dde2c7cc106a7c5780a944c02.tar.gz |
[Patch AArch64 2/3] Rework the code to print extension strings (pr70133)
gcc/
PR target/70133
* config/aarch64/aarch64-common.c (aarch64_option_extension): Keep
track of a canonical flag name.
(all_extensions): Likewise.
(arch_to_arch_name): Also track extension flags enabled by the arch.
(all_architectures): Likewise.
(aarch64_parse_extension): Move to here.
(aarch64_get_extension_string_for_isa_flags): Take a new argument,
rework.
(aarch64_rewrite_selected_cpu): Update for above change.
* config/aarch64/aarch64-option-extensions.def: Rework the way flags
are handled, such that the single explicit value enabled by an
extension is kept seperate from the implicit values it also enables.
* config/aarch64/aarch64-protos.h (aarch64_parse_opt_result): Move
to here.
(aarch64_parse_extension): New.
* config/aarch64/aarch64.c (aarch64_parse_opt_result): Move from
here to config/aarch64/aarch64-protos.h.
(aarch64_parse_extension): Move from here to
common/config/aarch64/aarch64-common.c.
(aarch64_option_print): Update.
(aarch64_declare_function_name): Likewise.
(aarch64_start_file): Likewise.
* config/aarch64/driver-aarch64.c (arch_extension): Keep track of
the canonical flag for extensions.
* config.gcc (aarch64*-*-*): Extend regex for capturing extension
flags.
gcc/testsuite/
PR target/70133
* gcc.target/aarch64/mgeneral-regs_4.c: Fix expected output.
* gcc.target/aarch64/target_attr_15.c: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234876 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 30 | ||||
-rw-r--r-- | gcc/common/config/aarch64/aarch64-common.c | 116 | ||||
-rw-r--r-- | gcc/config.gcc | 14 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64-option-extensions.def | 36 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64-protos.h | 25 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 87 | ||||
-rw-r--r-- | gcc/config/aarch64/driver-aarch64.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/aarch64/target_attr_15.c | 2 |
10 files changed, 206 insertions, 117 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e30ddc38d2f..fe431824ca2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,35 @@ 2016-04-11 James Greenhalgh <james.greenhalgh@arm.com> + PR target/70133 + * config/aarch64/aarch64-common.c (aarch64_option_extension): Keep + track of a canonical flag name. + (all_extensions): Likewise. + (arch_to_arch_name): Also track extension flags enabled by the arch. + (all_architectures): Likewise. + (aarch64_parse_extension): Move to here. + (aarch64_get_extension_string_for_isa_flags): Take a new argument, + rework. + (aarch64_rewrite_selected_cpu): Update for above change. + * config/aarch64/aarch64-option-extensions.def: Rework the way flags + are handled, such that the single explicit value enabled by an + extension is kept seperate from the implicit values it also enables. + * config/aarch64/aarch64-protos.h (aarch64_parse_opt_result): Move + to here. + (aarch64_parse_extension): New. + * config/aarch64/aarch64.c (aarch64_parse_opt_result): Move from + here to config/aarch64/aarch64-protos.h. + (aarch64_parse_extension): Move from here to + common/config/aarch64/aarch64-common.c. + (aarch64_option_print): Update. + (aarch64_declare_function_name): Likewise. + (aarch64_start_file): Likewise. + * config/aarch64/driver-aarch64.c (arch_extension): Keep track of + the canonical flag for extensions. + * config.gcc (aarch64*-*-*): Extend regex for capturing extension + flags. + +2016-04-11 James Greenhalgh <james.greenhalgh@arm.com> + * config/aarch64/aarch64.h (AARCH64_FL_FOR_ARCH8_1): Also add AARCH64_FL_CRC. diff --git a/gcc/common/config/aarch64/aarch64-common.c b/gcc/common/config/aarch64/aarch64-common.c index 4969f07fef4..08e79593420 100644 --- a/gcc/common/config/aarch64/aarch64-common.c +++ b/gcc/common/config/aarch64/aarch64-common.c @@ -112,6 +112,7 @@ struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; struct aarch64_option_extension { const char *const name; + const unsigned long flag_canonical; const unsigned long flags_on; const unsigned long flags_off; }; @@ -119,11 +120,11 @@ struct aarch64_option_extension /* ISA extensions in AArch64. */ static const struct aarch64_option_extension all_extensions[] = { -#define AARCH64_OPT_EXTENSION(NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \ - {NAME, FLAGS_ON, FLAGS_OFF}, +#define AARCH64_OPT_EXTENSION(NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF, Z) \ + {NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF}, #include "config/aarch64/aarch64-option-extensions.def" #undef AARCH64_OPT_EXTENSION - {NULL, 0, 0} + {NULL, 0, 0, 0} }; struct processor_name_to_arch @@ -137,6 +138,7 @@ struct arch_to_arch_name { const enum aarch64_arch arch; const std::string arch_name; + const unsigned long flags; }; /* Map processor names to the architecture revision they implement and @@ -155,26 +157,111 @@ static const struct processor_name_to_arch all_cores[] = static const struct arch_to_arch_name all_architectures[] = { #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH, FLAGS) \ - {AARCH64_ARCH_##ARCH_IDENT, NAME}, + {AARCH64_ARCH_##ARCH_IDENT, NAME, FLAGS}, #include "config/aarch64/aarch64-arches.def" #undef AARCH64_ARCH - {aarch64_no_arch, ""} + {aarch64_no_arch, "", 0} }; -/* Return a string representation of ISA_FLAGS. */ +/* Parse the architecture extension string STR and update ISA_FLAGS + with the architecture features turned on or off. Return a + aarch64_parse_opt_result describing the result. */ + +enum aarch64_parse_opt_result +aarch64_parse_extension (const char *str, unsigned long *isa_flags) +{ + /* The extension string is parsed left to right. */ + const struct aarch64_option_extension *opt = NULL; + + /* Flag to say whether we are adding or removing an extension. */ + int adding_ext = -1; + + while (str != NULL && *str != 0) + { + const char *ext; + size_t len; + + str++; + ext = strchr (str, '+'); + + if (ext != NULL) + len = ext - str; + else + len = strlen (str); + + if (len >= 2 && strncmp (str, "no", 2) == 0) + { + adding_ext = 0; + len -= 2; + str += 2; + } + else if (len > 0) + adding_ext = 1; + + if (len == 0) + return AARCH64_PARSE_MISSING_ARG; + + + /* Scan over the extensions table trying to find an exact match. */ + for (opt = all_extensions; opt->name != NULL; opt++) + { + if (strlen (opt->name) == len && strncmp (opt->name, str, len) == 0) + { + /* Add or remove the extension. */ + if (adding_ext) + *isa_flags |= (opt->flags_on | opt->flag_canonical); + else + *isa_flags &= ~(opt->flags_off | opt->flag_canonical); + break; + } + } + + if (opt->name == NULL) + { + /* Extension not found in list. */ + return AARCH64_PARSE_INVALID_FEATURE; + } + + str = ext; + }; + + return AARCH64_PARSE_OK; +} + +/* Return a string representation of ISA_FLAGS. DEFAULT_ARCH_FLAGS + gives the default set of flags which are implied by whatever -march + we'd put out. Our job is to figure out the minimal set of "+" and + "+no" feature flags to put out, and to put them out grouped such + that all the "+" flags come before the "+no" flags. */ std::string -aarch64_get_extension_string_for_isa_flags (unsigned long isa_flags) +aarch64_get_extension_string_for_isa_flags (unsigned long isa_flags, + unsigned long default_arch_flags) { const struct aarch64_option_extension *opt = NULL; std::string outstr = ""; + /* Pass one: Find all the things we need to turn on. As a special case, + we always want to put out +crc if it is enabled. */ for (opt = all_extensions; opt->name != NULL; opt++) - if ((isa_flags & opt->flags_on) == opt->flags_on) + if ((isa_flags & opt->flag_canonical + && !(default_arch_flags & opt->flag_canonical)) + || (default_arch_flags & opt->flag_canonical + && opt->flag_canonical == AARCH64_ISA_CRC)) { outstr += "+"; outstr += opt->name; } + + /* Pass two: Find all the things we need to turn off. */ + for (opt = all_extensions; opt->name != NULL; opt++) + if ((~isa_flags) & opt->flag_canonical + && !((~default_arch_flags) & opt->flag_canonical)) + { + outstr += "+no"; + outstr += opt->name; + } + return outstr; } @@ -186,7 +273,7 @@ const char * aarch64_rewrite_selected_cpu (const char *name) { std::string original_string (name); - std::string extensions; + std::string extension_str; std::string processor; size_t extension_pos = original_string.find_first_of ('+'); @@ -194,8 +281,8 @@ aarch64_rewrite_selected_cpu (const char *name) if (extension_pos != std::string::npos) { processor = original_string.substr (0, extension_pos); - extensions = original_string.substr (extension_pos, - std::string::npos); + extension_str = original_string.substr (extension_pos, + std::string::npos); } else { @@ -227,9 +314,12 @@ aarch64_rewrite_selected_cpu (const char *name) || a_to_an->arch == aarch64_no_arch) fatal_error (input_location, "unknown value %qs for -mcpu", name); + unsigned long extensions = p_to_a->flags; + aarch64_parse_extension (extension_str.c_str (), &extensions); + std::string outstr = a_to_an->arch_name - + aarch64_get_extension_string_for_isa_flags (p_to_a->flags) - + extensions; + + aarch64_get_extension_string_for_isa_flags (extensions, + a_to_an->flags); /* We are going to memory leak here, nobody elsewhere in the callchain is going to clean up after us. The alternative is diff --git a/gcc/config.gcc b/gcc/config.gcc index 67222601e1c..f66e48cd1ca 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -3620,22 +3620,28 @@ case "${target}" in ${srcdir}/config/aarch64/aarch64-option-extensions.def \ > /dev/null; then - ext_on=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ + ext_canon=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ ${srcdir}/config/aarch64/aarch64-option-extensions.def | \ sed -e 's/^[^,]*,[ ]*//' | \ sed -e 's/,.*$//'` - ext_off=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ + ext_on=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ ${srcdir}/config/aarch64/aarch64-option-extensions.def | \ sed -e 's/^[^,]*,[ ]*[^,]*,[ ]*//' | \ sed -e 's/,.*$//' | \ sed -e 's/).*$//'` + ext_off=`grep "^AARCH64_OPT_EXTENSION(\"$base_ext\"," \ + ${srcdir}/config/aarch64/aarch64-option-extensions.def | \ + sed -e 's/^[^,]*,[ ]*[^,]*,[ ]*[^,]*,[ ]*//' | \ + sed -e 's/,.*$//' | \ + sed -e 's/).*$//'` + if [ $ext = $base_ext ]; then # Adding extension - ext_mask="("$ext_mask") | ("$ext_on")" + ext_mask="("$ext_mask") | ("$ext_on" | "$ext_canon")" else # Removing extension - ext_mask="("$ext_mask") & ~("$ext_off")" + ext_mask="("$ext_mask") & ~("$ext_off" | "$ext_canon")" fi true diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index fbf9a53283c..e8706d1c2e7 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -21,23 +21,37 @@ Before using #include to read this file, define a macro: - AARCH64_OPT_EXTENSION(EXT_NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) + AARCH64_OPT_EXTENSION(EXT_NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) EXT_NAME is the name of the extension, represented as a string constant. - FLAGS_ON are the bitwise-or of the features that the extension adds. - FLAGS_OFF are the bitwise-or of the features that the extension removes. + FLAGS_CANONICAL is the canonical internal name for this flag. + FLAGS_ON are the bitwise-or of the features that enabling the extension + adds, or zero if enabling this extension has no effect on other features. + FLAGS_OFF are the bitwise-or of the features that disabling the extension + removes, or zero if disabling this extension has no effect on other + features. FEAT_STRING is a string containing the entries in the 'Features' field of /proc/cpuinfo on a GNU/Linux system that correspond to this architecture extension being available. Sometimes multiple entries are needed to enable the extension (for example, the 'crypto' extension depends on four entries: aes, pmull, sha1, sha2 being present). In that case this field - should contain a whitespace-separated list of the strings in 'Features' + should contain a space (" ") separated list of the strings in 'Features' that are required. Their order is not important. */ -AARCH64_OPT_EXTENSION ("fp", AARCH64_FL_FP, - AARCH64_FL_FPSIMD | AARCH64_FL_CRYPTO, "fp") -AARCH64_OPT_EXTENSION ("simd", AARCH64_FL_FPSIMD, - AARCH64_FL_SIMD | AARCH64_FL_CRYPTO, "asimd") -AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO | AARCH64_FL_FPSIMD, AARCH64_FL_CRYPTO, "aes pmull sha1 sha2") -AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, AARCH64_FL_CRC, "crc32") -AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, AARCH64_FL_LSE, "atomics") +/* Enabling "fp" just enables "fp". + Disabling "fp" also disables "simd", "crypto". */ +AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO, "fp") + +/* Enabling "simd" also enables "fp". + Disabling "simd" also disables "crypto". */ +AARCH64_OPT_EXTENSION("simd", AARCH64_FL_SIMD, AARCH64_FL_FP, AARCH64_FL_CRYPTO, "asimd") + +/* Enabling "crypto" also enables "fp", "simd". + Disabling "crypto" just disables "crypto". */ +AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO, AARCH64_FL_FP | AARCH64_FL_SIMD, 0, "aes pmull sha1 sha2") + +/* Enabling or disabling "crc" only changes "crc". */ +AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, 0, 0, "crc32") + +/* Enabling or disabling "lse" only changes "lse". */ +AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, 0, 0, "atomics") diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index 58c9d0d01d8..f22a31c2830 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -263,6 +263,18 @@ enum aarch64_extra_tuning_flags }; #undef AARCH64_EXTRA_TUNING_OPTION +/* Enum describing the various ways that the + aarch64_parse_{arch,tune,cpu,extension} functions can fail. + This way their callers can choose what kind of error to give. */ + +enum aarch64_parse_opt_result +{ + AARCH64_PARSE_OK, /* Parsing was successful. */ + AARCH64_PARSE_MISSING_ARG, /* Missing argument. */ + AARCH64_PARSE_INVALID_FEATURE, /* Invalid feature modifier. */ + AARCH64_PARSE_INVALID_ARG /* Invalid arch, tune, cpu arg. */ +}; + extern struct tune_params aarch64_tune_params; HOST_WIDE_INT aarch64_initial_elimination_offset (unsigned, unsigned); @@ -280,8 +292,6 @@ bool aarch64_float_const_zero_rtx_p (rtx); bool aarch64_function_arg_regno_p (unsigned); bool aarch64_gen_movmemqi (rtx *); bool aarch64_gimple_fold_builtin (gimple_stmt_iterator *); -bool aarch64_handle_option (struct gcc_options *, struct gcc_options *, - const struct cl_decoded_option *, location_t); bool aarch64_is_extend_from_extract (machine_mode, rtx, rtx); bool aarch64_is_long_call_p (rtx); bool aarch64_is_noplt_call_p (rtx); @@ -315,7 +325,6 @@ bool aarch64_uimm12_shift (HOST_WIDE_INT); bool aarch64_use_return_insn_p (void); const char *aarch64_mangle_builtin_type (const_tree); const char *aarch64_output_casesi (rtx *); -const char *aarch64_rewrite_selected_cpu (const char *name); enum aarch64_symbol_type aarch64_classify_symbol (rtx, rtx); enum aarch64_symbol_type aarch64_classify_tls_symbol (rtx); @@ -338,7 +347,6 @@ rtx aarch64_simd_gen_const_vector_dup (machine_mode, int); bool aarch64_simd_mem_operand_p (rtx); rtx aarch64_simd_vect_par_cnst_half (machine_mode, bool); rtx aarch64_tls_get_addr (void); -std::string aarch64_get_extension_string_for_isa_flags (unsigned long); tree aarch64_fold_builtin (tree, int, tree *, bool); unsigned aarch64_dbx_register_number (unsigned); unsigned aarch64_trampoline_size (void); @@ -433,4 +441,13 @@ extern bool aarch64_nopcrelative_literal_loads; extern void aarch64_asm_output_pool_epilogue (FILE *, const char *, tree, HOST_WIDE_INT); +/* Defined in common/config/aarch64-common.c. */ +bool aarch64_handle_option (struct gcc_options *, struct gcc_options *, + const struct cl_decoded_option *, location_t); +const char *aarch64_rewrite_selected_cpu (const char *name); +enum aarch64_parse_opt_result aarch64_parse_extension (const char *, + unsigned long *); +std::string aarch64_get_extension_string_for_isa_flags (unsigned long, + unsigned long); + #endif /* GCC_AARCH64_PROTOS_H */ diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index b7086dd4667..999549426e6 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -666,7 +666,7 @@ struct aarch64_option_extension /* ISA extensions in AArch64. */ static const struct aarch64_option_extension all_extensions[] = { -#define AARCH64_OPT_EXTENSION(NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \ +#define AARCH64_OPT_EXTENSION(NAME, X, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \ {NAME, FLAGS_ON, FLAGS_OFF}, #include "aarch64-option-extensions.def" #undef AARCH64_OPT_EXTENSION @@ -7673,83 +7673,6 @@ aarch64_add_stmt_cost (void *data, int count, enum vect_cost_for_stmt kind, static void initialize_aarch64_code_model (struct gcc_options *); -/* Enum describing the various ways that the - aarch64_parse_{arch,tune,cpu,extension} functions can fail. - This way their callers can choose what kind of error to give. */ - -enum aarch64_parse_opt_result -{ - AARCH64_PARSE_OK, /* Parsing was successful. */ - AARCH64_PARSE_MISSING_ARG, /* Missing argument. */ - AARCH64_PARSE_INVALID_FEATURE, /* Invalid feature modifier. */ - AARCH64_PARSE_INVALID_ARG /* Invalid arch, tune, cpu arg. */ -}; - -/* Parse the architecture extension string STR and update ISA_FLAGS - with the architecture features turned on or off. Return a - aarch64_parse_opt_result describing the result. */ - -static enum aarch64_parse_opt_result -aarch64_parse_extension (char *str, unsigned long *isa_flags) -{ - /* The extension string is parsed left to right. */ - const struct aarch64_option_extension *opt = NULL; - - /* Flag to say whether we are adding or removing an extension. */ - int adding_ext = -1; - - while (str != NULL && *str != 0) - { - char *ext; - size_t len; - - str++; - ext = strchr (str, '+'); - - if (ext != NULL) - len = ext - str; - else - len = strlen (str); - - if (len >= 2 && strncmp (str, "no", 2) == 0) - { - adding_ext = 0; - len -= 2; - str += 2; - } - else if (len > 0) - adding_ext = 1; - - if (len == 0) - return AARCH64_PARSE_MISSING_ARG; - - - /* Scan over the extensions table trying to find an exact match. */ - for (opt = all_extensions; opt->name != NULL; opt++) - { - if (strlen (opt->name) == len && strncmp (opt->name, str, len) == 0) - { - /* Add or remove the extension. */ - if (adding_ext) - *isa_flags |= opt->flags_on; - else - *isa_flags &= ~(opt->flags_off); - break; - } - } - - if (opt->name == NULL) - { - /* Extension not found in list. */ - return AARCH64_PARSE_INVALID_FEATURE; - } - - str = ext; - }; - - return AARCH64_PARSE_OK; -} - /* Parse the TO_PARSE string and put the architecture struct that it selects into RES and the architectural features into ISA_FLAGS. Return an aarch64_parse_opt_result describing the parse result. @@ -8550,7 +8473,7 @@ aarch64_option_print (FILE *file, int indent, struct cl_target_option *ptr) unsigned long isa_flags = ptr->x_aarch64_isa_flags; const struct processor *arch = aarch64_get_arch (ptr->x_explicit_arch); std::string extension - = aarch64_get_extension_string_for_isa_flags (isa_flags); + = aarch64_get_extension_string_for_isa_flags (isa_flags, arch->flags); fprintf (file, "%*sselected tune = %s\n", indent, "", cpu->name); fprintf (file, "%*sselected arch = %s%s\n", indent, "", @@ -11213,7 +11136,8 @@ 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); + = aarch64_get_extension_string_for_isa_flags (isa_flags, + this_arch->flags); /* 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; @@ -11253,7 +11177,8 @@ aarch64_start_file (void) = 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_get_extension_string_for_isa_flags (default_isa_flags, + default_arch->flags); aarch64_last_printed_arch_string = default_arch->name + extension; aarch64_last_printed_tune_string = ""; diff --git a/gcc/config/aarch64/driver-aarch64.c b/gcc/config/aarch64/driver-aarch64.c index 317a8a9872e..8925ec12667 100644 --- a/gcc/config/aarch64/driver-aarch64.c +++ b/gcc/config/aarch64/driver-aarch64.c @@ -23,11 +23,12 @@ struct arch_extension { const char *ext; + unsigned int flag; const char *feat_string; }; -#define AARCH64_OPT_EXTENSION(EXT_NAME, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \ - { EXT_NAME, FEATURE_STRING }, +#define AARCH64_OPT_EXTENSION(EXT_NAME, FLAG_CANONICAL, FLAGS_ON, FLAGS_OFF, FEATURE_STRING) \ + { EXT_NAME, FLAG_CANONICAL, FEATURE_STRING }, static struct arch_extension ext_to_feat_string[] = { #include "aarch64-option-extensions.def" diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 77b614b2db7..3a0f142021b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-04-11 James Greenhalgh <james.greenhalgh@arm.com> + + PR target/70133 + * gcc.target/aarch64/mgeneral-regs_4.c: Fix expected output. + * gcc.target/aarch64/target_attr_15.c: Likewise. + 2016-04-10 Paolo Carlini <paolo.carlini@oracle.com> PR c++/69066 diff --git a/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c b/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c index 8eb50aafa2b..49b74d9e265 100644 --- a/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c +++ b/gcc/testsuite/gcc.target/aarch64/mgeneral-regs_4.c @@ -6,4 +6,4 @@ test (void) return 1; } -/* { dg-final { scan-assembler "\.arch.*fp.*simd" } } */ +/* { dg-final { scan-assembler-times "\\.arch armv8-a\n" 1 } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/target_attr_15.c b/gcc/testsuite/gcc.target/aarch64/target_attr_15.c index f72bec878bf..2d8c7b955ce 100644 --- a/gcc/testsuite/gcc.target/aarch64/target_attr_15.c +++ b/gcc/testsuite/gcc.target/aarch64/target_attr_15.c @@ -10,4 +10,4 @@ foo (int a) return a + 1; } -/* { dg-final { scan-assembler-times "\\.arch armv8-a\n" 1 } } */ +/* { dg-final { scan-assembler-times "\\.arch armv8-a\\+nofp\\+nosimd\n" 1 } } */ |