diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2764dda5aba6226725c0f81d010a8285f8d7e5b3..3299cdea1ac603fef7a3acc1bbd7860f9a9e730e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2017-06-16 Richard Earnshaw <rearnsha@arm.com> + + * config.gcc (arm*-*-fucshia*): Set target_cpu_cname to the real + cpu name. + (arm*-*-*): Set target_cpu_default2 to a quoted string. + * config/arm/parsecpu.awk (check_cpu): Validate any extension + options. + (check_arch): Likewise. + * config/arm/arm.c (arm_configure_build_target): Handle + TARGET_CPU_DEFAULT being a string constant. Scan any feature + options in the default. + 2017-06-16 Richard Earnshaw <rearnsha@arm.com> * config/arm/arm-protos.h (cpu_arch_extension): Add field to record diff --git a/gcc/config.gcc b/gcc/config.gcc index 8b00e663a53bf6c632169c4c1e889647a52391ac..620a5b2360e69339b48e533441acb36685aa870a 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1161,7 +1161,7 @@ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems* | arm*-*-fuchsia*) arm*-*-fuchsia*) tm_file="${tm_file} fuchsia.h arm/fuchsia-elf.h glibc-stdint.h" tmake_file="${tmake_file} arm/t-bpabi" - target_cpu_cname="genericv7a" + target_cpu_cname="generic-armv7-a" ;; arm*-*-rtems*) tm_file="${tm_file} rtems.h arm/rtems.h newlib-stdint.h" @@ -4496,9 +4496,9 @@ case ${target} in arm*-*-*) if test x$target_cpu_cname = x then - target_cpu_default2=TARGET_CPU_arm6 + target_cpu_default2="\\\"arm6\\\"" else - target_cpu_default2=TARGET_CPU_$target_cpu_cname + target_cpu_default2="\\\"$target_cpu_cname\\\"" fi ;; diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 55ea22e75f472310683a96c1f3b5bd5f054731a6..9e857a2b011d89b21c98bda7a3cfefd0d7664d7b 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -3143,7 +3143,9 @@ arm_configure_build_target (struct arm_build_target *target, bitmap_clear (sought_isa); auto_sbitmap default_isa (isa_num_bits); - arm_selected_cpu = &all_cores[TARGET_CPU_DEFAULT]; + arm_selected_cpu = arm_parse_cpu_option_name (all_cores, "default CPU", + TARGET_CPU_DEFAULT); + cpu_opts = strchr (TARGET_CPU_DEFAULT, '+'); gcc_assert (arm_selected_cpu->common.name); /* RWE: All of the selection logic below (to the end of this @@ -3154,6 +3156,8 @@ arm_configure_build_target (struct arm_build_target *target, support for the pre-thumb era cores is removed. */ sel = arm_selected_cpu; arm_initialize_isa (default_isa, sel->common.isa_bits); + arm_parse_option_features (default_isa, &arm_selected_cpu->common, + cpu_opts); /* Now check to see if the user has specified any command line switches that require certain abilities from the cpu. */ @@ -3241,6 +3245,8 @@ arm_configure_build_target (struct arm_build_target *target, structure. */ target->core_name = arm_selected_cpu->common.name; arm_initialize_isa (target->isa, arm_selected_cpu->common.isa_bits); + arm_parse_option_features (target->isa, &arm_selected_cpu->common, + cpu_opts); arm_selected_arch = all_architectures + arm_selected_cpu->arch; } diff --git a/gcc/config/arm/parsecpu.awk b/gcc/config/arm/parsecpu.awk index 61e8bc24ea41aff5e5e9e05d7d9bf2f4bac808f7..b6e50932ddc77d069b99b3352f286c2c000be5af 100644 --- a/gcc/config/arm/parsecpu.awk +++ b/gcc/config/arm/parsecpu.awk @@ -393,9 +393,19 @@ function gen_opt () { } function check_cpu (name) { - if (name in cpu_cnames) { - print cpu_cnames[name] - } else print "error" + exts = split (name, extensions, "+") + + if (! extensions[1] in cpu_cnames) { + return "error" + } + + for (n = 2; n <= exts; n++) { + if (!((extensions[1], extensions[n]) in cpu_opt_remove) \ + && !((extensions[1], extensions[n]) in cpu_optaliases)) { + return "error" + } + } + return name } function check_fpu (name) { @@ -405,9 +415,19 @@ function check_fpu (name) { } function check_arch (name) { - if (name in arch_isa) { - print name - } else print "error" + exts = split (name, extensions, "+") + + if (! extensions[1] in arch_isa) { + return "error" + } + + for (n = 2; n <= exts; n++) { + if (!((extensions[1], extensions[n]) in arch_opt_remove) \ + && !((extensions[1], extensions[n]) in arch_optaliases)) { + return "error" + } + } + return name } BEGIN { @@ -614,10 +634,10 @@ END { gen_opt() } else if (cmd ~ /^chk(cpu|tune) /) { split (cmd, target) - check_cpu(target[2]) + print check_cpu(target[2]) } else if (cmd ~ /^chkarch /) { split (cmd, target) - check_arch(target[2]) + print check_arch(target[2]) } else if (cmd ~ /^chkfpu /) { split (cmd, target) check_fpu(target[2])