diff options
Diffstat (limited to 'gcc/config/arm/parsecpu.awk')
-rw-r--r-- | gcc/config/arm/parsecpu.awk | 57 |
1 files changed, 53 insertions, 4 deletions
diff --git a/gcc/config/arm/parsecpu.awk b/gcc/config/arm/parsecpu.awk index 3d6ca4d36ba..61e8bc24ea4 100644 --- a/gcc/config/arm/parsecpu.awk +++ b/gcc/config/arm/parsecpu.awk @@ -171,11 +171,28 @@ function gen_comm_data () { for (opt = 1; opt <= nopts; opt++) { print " {" print " \"" opts[opt] "\", " \ - cpu_opt_remove[cpus[n],opts[opt]] "," + cpu_opt_remove[cpus[n],opts[opt]] ", false," print " { " cpu_opt_isa[cpus[n],opts[opt]] ", isa_nobit }" print " }," } - print " { NULL, false, {isa_nobit}}" + if (cpus[n] in cpu_optaliases) { + naliases = split (cpu_optaliases[cpus[n]], aliases) + for (alias = 1; alias <= naliases; alias++) { + if (! ((cpus[n], \ + cpu_opt_alias[cpus[n],aliases[alias]]) in \ + cpu_opt_isa)) { + fatal("Alias " aliases[alias] " target not defined " \ + "for CPU " cpus[n]) + } + equiv=cpu_opt_alias[cpus[n],aliases[alias]] + print " {" + print " \"" aliases[alias] "\", " \ + cpu_opt_remove[cpus[n],equiv] ", true, " + print " { " cpu_opt_isa[cpus[n],equiv] ", isa_nobit }" + print " }," + } + } + print " { NULL, false, false, {isa_nobit}}" print "};\n" } } @@ -231,12 +248,31 @@ function gen_comm_data () { for (opt = 1; opt <= nopts; opt++) { print " {" print " \"" opts[opt] "\", " \ - arch_opt_remove[archs[n],opts[opt]] "," + arch_opt_remove[archs[n],opts[opt]] ", false," print " { " arch_opt_isa[archs[n],opts[opt]] ", isa_nobit }" print " }," } - print " { NULL, false, {isa_nobit}}" + if (archs[n] in arch_optaliases) { + naliases = split (arch_optaliases[archs[n]], aliases) + for (alias = 1; alias <= naliases; alias++) { + if (! ((archs[n], \ + arch_opt_alias[archs[n],aliases[alias]]) in \ + arch_opt_isa)) { + fatal("Alias " aliases[alias] " target not defined " \ + "for architecture " archs[n]) + } + equiv=arch_opt_alias[archs[n],aliases[alias]] + print " {" + print " \"" aliases[alias] "\", " \ + arch_opt_remove[archs[n],equiv] ", true, " + print " { " arch_opt_isa[archs[n],equiv] ", isa_nobit }" + print " }," + } + } + print " { NULL, false, false, {isa_nobit}}" print "};\n" + } else if (archs[n] in arch_optaliases) { + fatal("Architecture " archs[n] " has option aliases but no options") } } @@ -529,6 +565,19 @@ BEGIN { parse_ok = 1 } +/^[ ]*optalias / { + name=$2 + alias=$3 + if (cpu_name != "") { + cpu_optaliases[cpu_name] = cpu_optaliases[cpu_name] " " name + cpu_opt_alias[cpu_name,name] = alias + } else if (arch_name != "") { + arch_optaliases[arch_name] = arch_optaliases[arch_name] " " name + arch_opt_alias[arch_name,name] = alias + } else fatal("\"optalias\" outside of cpu or arch block") + parse_ok = 1 +} + /^[ ]*costs / { if (cpu_name == "") fatal("\"costs\" outside of cpu block") cpu_cost[cpu_name] = $2 |