Commit a6c78ea3 by Uros Bizjak

re PR target/68491 (libgcc calls __get_cpuid with 0 level breaks on early 486)

	PR target/68491
	* config/i386/cpuid.h (__get_cpuid): Always return 0 when
	__get_cpuid_max returns 0.
	(__get_cpuid_count): Ditto.

From-SVN: r247439
parent 723f4140
2017-05-01 Uros Bizjak <ubizjak@gmail.com>
PR target/68491
* config/i386/cpuid.h (__get_cpuid): Always return 0 when
__get_cpuid_max returns 0.
(__get_cpuid_count): Ditto.
2017-05-01 Eric Botcazou <ebotcazou@adacore.com> 2017-05-01 Eric Botcazou <ebotcazou@adacore.com>
* tree.c (substitute_in_expr) <tcc_vl_exp>: Also inline a call if the * tree.c (substitute_in_expr) <tcc_vl_exp>: Also inline a call if the
...@@ -79,7 +86,7 @@ ...@@ -79,7 +86,7 @@
(init_target_to_host_charmap, target_to_host, target_strtol10): New (init_target_to_host_charmap, target_to_host, target_strtol10): New
functions. functions.
(maybe_warn, format_directive, parse_directive): Use new functions. (maybe_warn, format_directive, parse_directive): Use new functions.
(pass_sprintf_length::execute): Call init_target_to_host_charmap. (pass_sprintf_length::execute): Call init_target_to_host_charmap.
2017-04-28 Marc Glisse <marc.glisse@inria.fr> 2017-04-28 Marc Glisse <marc.glisse@inria.fr>
...@@ -106,7 +113,7 @@ ...@@ -106,7 +113,7 @@
* ipa-inline-analysis.c (estimate_node_size_and_time, * ipa-inline-analysis.c (estimate_node_size_and_time,
estimate_ipcp_clone_size_and_time, do_estimate_edge_time): Likewise. estimate_ipcp_clone_size_and_time, do_estimate_edge_time): Likewise.
(estimate_time_after_inlining): Remove. (estimate_time_after_inlining): Remove.
2017-04-28 Martin Liska <mliska@suse.cz> 2017-04-28 Martin Liska <mliska@suse.cz>
* doc/gcov.texi: Enhance documentation of gcov. * doc/gcov.texi: Enhance documentation of gcov.
......
...@@ -246,8 +246,9 @@ __get_cpuid (unsigned int __leaf, ...@@ -246,8 +246,9 @@ __get_cpuid (unsigned int __leaf,
unsigned int *__ecx, unsigned int *__edx) unsigned int *__ecx, unsigned int *__edx)
{ {
unsigned int __ext = __leaf & 0x80000000; unsigned int __ext = __leaf & 0x80000000;
unsigned int __maxlevel = __get_cpuid_max (__ext, 0);
if (__get_cpuid_max (__ext, 0) < __leaf) if (__maxlevel == 0 || __maxlevel < __leaf)
return 0; return 0;
__cpuid (__leaf, *__eax, *__ebx, *__ecx, *__edx); __cpuid (__leaf, *__eax, *__ebx, *__ecx, *__edx);
...@@ -262,8 +263,9 @@ __get_cpuid_count (unsigned int __leaf, unsigned int __subleaf, ...@@ -262,8 +263,9 @@ __get_cpuid_count (unsigned int __leaf, unsigned int __subleaf,
unsigned int *__ecx, unsigned int *__edx) unsigned int *__ecx, unsigned int *__edx)
{ {
unsigned int __ext = __leaf & 0x80000000; unsigned int __ext = __leaf & 0x80000000;
unsigned int __maxlevel = __get_cpuid_max (__ext, 0);
if (__get_cpuid_max (__ext, 0) < __leaf) if (__maxlevel == 0 || __maxlevel < __leaf)
return 0; return 0;
__cpuid_count (__leaf, __subleaf, *__eax, *__ebx, *__ecx, *__edx); __cpuid_count (__leaf, __subleaf, *__eax, *__ebx, *__ecx, *__edx);
......
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