Commit bd5849af by Andrew Pinski Committed by Andrew Pinski

driver-aarch64.c (host_detect_local_cpu): Rewrite handling of part num to handle…

driver-aarch64.c (host_detect_local_cpu): Rewrite handling of part num to handle the case where multiple implementers...

2016-10-31  Andrew Pinski  <apinski@cavium.com>

        * config/aarch64/driver-aarch64.c (host_detect_local_cpu):
        Rewrite handling of part num to handle the case where
        multiple implementers share the same part num.

From-SVN: r241726
parent 8628bc67
2016-10-31 Andrew Pinski <apinski@cavium.com>
* config/aarch64/driver-aarch64.c (host_detect_local_cpu):
Rewrite handling of part num to handle the case where
multiple implementers share the same part num.
2016-10-31 Jan Kratochvil <jan.kratochvil@redhat.com> 2016-10-31 Jan Kratochvil <jan.kratochvil@redhat.com>
Jakub Jelinek <jakub@redhat.com> Jakub Jelinek <jakub@redhat.com>
...@@ -169,7 +169,6 @@ host_detect_local_cpu (int argc, const char **argv) ...@@ -169,7 +169,6 @@ host_detect_local_cpu (int argc, const char **argv)
bool tune = false; bool tune = false;
bool cpu = false; bool cpu = false;
unsigned int i = 0; unsigned int i = 0;
unsigned int core_idx = 0;
unsigned char imp = INVALID_IMP; unsigned char imp = INVALID_IMP;
unsigned int cores[2] = { INVALID_CORE, INVALID_CORE }; unsigned int cores[2] = { INVALID_CORE, INVALID_CORE };
unsigned int n_cores = 0; unsigned int n_cores = 0;
...@@ -219,18 +218,13 @@ host_detect_local_cpu (int argc, const char **argv) ...@@ -219,18 +218,13 @@ host_detect_local_cpu (int argc, const char **argv)
if (strstr (buf, "part") != NULL) if (strstr (buf, "part") != NULL)
{ {
unsigned ccore = parse_field (buf); unsigned ccore = parse_field (buf);
for (i = 0; aarch64_cpu_data[i].name != NULL; i++) if (!contains_core_p (cores, ccore))
if (ccore == aarch64_cpu_data[i].part_no {
&& !contains_core_p (cores, ccore)) if (n_cores == 2)
{ goto not_found;
if (n_cores == 2)
goto not_found; cores[n_cores++] = ccore;
}
cores[n_cores++] = ccore;
core_idx = i;
arch_id = aarch64_cpu_data[i].arch;
break;
}
continue; continue;
} }
if (!tune && !processed_exts && strstr (buf, "Features") != NULL) if (!tune && !processed_exts && strstr (buf, "Features") != NULL)
...@@ -276,11 +270,19 @@ host_detect_local_cpu (int argc, const char **argv) ...@@ -276,11 +270,19 @@ host_detect_local_cpu (int argc, const char **argv)
if (n_cores == 0 || n_cores > 2 || imp == INVALID_IMP) if (n_cores == 0 || n_cores > 2 || imp == INVALID_IMP)
goto not_found; goto not_found;
if (arch && !arch_id)
goto not_found;
if (arch) if (arch)
{ {
/* Search for one of the cores in the list. */
for (i = 0; aarch64_cpu_data[i].name != NULL; i++)
if (aarch64_cpu_data[i].implementer_id == imp
&& contains_core_p (cores, aarch64_cpu_data[i].part_no))
{
arch_id = aarch64_cpu_data[i].arch;
break;
}
if (!arch_id)
goto not_found;
struct aarch64_arch_driver_info* arch_info = get_arch_from_id (arch_id); struct aarch64_arch_driver_info* arch_info = get_arch_from_id (arch_id);
/* We got some arch indentifier that's not in aarch64-arches.def? */ /* We got some arch indentifier that's not in aarch64-arches.def? */
...@@ -312,7 +314,15 @@ host_detect_local_cpu (int argc, const char **argv) ...@@ -312,7 +314,15 @@ host_detect_local_cpu (int argc, const char **argv)
/* The simple, non-big.LITTLE case. */ /* The simple, non-big.LITTLE case. */
else else
{ {
if (aarch64_cpu_data[core_idx].implementer_id != imp) int core_idx = -1;
for (i = 0; aarch64_cpu_data[i].name != NULL; i++)
if (cores[0] == aarch64_cpu_data[i].part_no
&& aarch64_cpu_data[i].implementer_id == imp)
{
core_idx = i;
break;
}
if (core_idx == -1)
goto not_found; goto not_found;
res = concat ("-m", cpu ? "cpu" : "tune", "=", res = concat ("-m", cpu ? "cpu" : "tune", "=",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment