re PR target/77756 (__get_cpuid() returns wrong values for level 7 (extended features))

PR target/77756
	* config/i386/cpuid.h (__get_cpuid): Handle CPUID level >= 7.

testsuite/ChangeLog:

	PR target/77756
	* gcc.target/i386/pr77756.c: New test.

From-SVN: r240597
This commit is contained in:
Uros Bizjak 2016-09-28 23:29:47 +02:00
parent 88000fd1dc
commit 12a813c16f
4 changed files with 81 additions and 67 deletions

View File

@ -1,3 +1,8 @@
2016-09-28 Uros Bizjak <ubizjak@gmail.com>
PR target/77756
* config/i386/cpuid.h (__get_cpuid): Handle CPUID level >= 7.
2016-09-28 Jakub Jelinek <jakub@redhat.com>
* gimple-ssa-sprintf.c: Fix comment formatting.
@ -248,8 +253,8 @@
2016-09-26 Kugan Vivekanandarajah <kuganv@linaro.org>
PR middle-end/77719
* tree-ssa-reassoc.c (make_new_ssa_for_def): Use gimple_get_lhs to get lhs
instead of gimple_assign_lhs as stmt can be builtins too.
* tree-ssa-reassoc.c (make_new_ssa_for_def): Use gimple_get_lhs
to get lhs instead of gimple_assign_lhs as stmt can be builtins too.
2016-09-26 Thomas Preud'homme <thomas.preudhomme@arm.com>
@ -314,7 +319,7 @@
* tsan.c (instrument_memory_accesses): Likewise.
2016-09-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
Alexander Monakov <amonakov@ispras.ru>
Alexander Monakov <amonakov@ispras.ru>
* regrename.c (rename_chains): Check
HARD_FRAME_POINTER_IS_FRAME_POINTER rather than
@ -333,10 +338,8 @@
2016-09-26 Martin Liska <mliska@suse.cz>
PR gcov-profile/23332
* profile.c (instrument_values): Do not handle
HIST_TYPE_CONST_DELTA.
* tree-profile.c (gimple_gen_const_delta_profiler):
Remove.
* profile.c (instrument_values): Do not handle HIST_TYPE_CONST_DELTA.
* tree-profile.c (gimple_gen_const_delta_profiler): Remove.
* value-prof.c (dump_histogram_value): Do not handle
HIST_TYPE_CONST_DELTA.
(stream_in_histogram_value): Likewise.
@ -360,8 +363,7 @@
2016-09-26 Andre Vieira <andre.simoesdiasvieira@arm.com>
* target.def(elf_flags_numeric): Change documentation to
present tense.
* target.def(elf_flags_numeric): Change documentation to present tense.
* doc/tm.texi: Regenerate.
2016-09-26 Marek Polacek <polacek@redhat.com>
@ -906,13 +908,13 @@
2016-09-23 Dominik Vogt <vogt@linux.vnet.ibm.com>
* config/s390/predicates.md ("contiguous_bitmask_operand"): Adapt to new
interface of s390_contiguous_bitmask_p.
* config/s390/predicates.md ("contiguous_bitmask_operand"): Adapt to
new interface of s390_contiguous_bitmask_p.
("contiguous_bitmask_nowrap_operand"): New predicate.
* ("*anddi3_cc", "*anddi3_cconly", "*anddi3"): Replace NxxDq with NxxDw.
("*anddi3_cc", "*anddi3_cconly", "*anddi3"): Replace NxxDq with NxxDw.
* config/s390/constraints.md ("NxxDw", "NxxSq"): Adapt to new interface
of s390_contiguous_bitmask_p.
* ("NxxDw"): Rename NxxDq constraint to NxxDw.
("NxxDw"): Rename NxxDq constraint to NxxDw.
("NxxSw"): New constraint.
* config/s390/s390.md ("*andsi3_zarch"): Enable bitmask wraparound.
* config/s390/s390-protos.h (s390_contiguous_bitmask_p): Updated
@ -1023,8 +1025,7 @@
2016-09-23 Jakub Jelinek <jakub@redhat.com>
* ipa-cp.c (ipcp_store_vr_results): Avoid static local
var zero.
* ipa-cp.c (ipcp_store_vr_results): Avoid static local var zero.
* sreal.h (sreal::min, sreal::max): Avoid static local vars,
construct values without normalization.
* tree-ssa-sccvn.c (vn_reference_lookup_3): Don't initialize
@ -1051,8 +1052,7 @@
(*arm_movhi_fp16): New.
(*thumb2_movhi_fp16): New.
(*movhf_vfp_fp16): New.
(*movhf_vfp_neon): Disable when VFP FP16 instructions are
available.
(*movhf_vfp_neon): Disable when VFP FP16 instructions are available.
(*movhf_vfp): Likewise.
(extendhfsf2): Enable when VFP FP16 instructions are available.
(truncsfhf2): Enable when VFP FP16 instructions are available.
@ -1108,8 +1108,7 @@
2016-09-23 Jiong Wang <jiong.wang@arm.com>
Matthew Wahab <matthew.wahab@arm.com>
* config/arm/arm.c (output_move_vfp): Weaken assert to allow
HImode.
* config/arm/arm.c (output_move_vfp): Weaken assert to allow HImode.
(arm_hard_regno_mode_ok): Allow HImode values in VFP registers.
* config/arm/arm.md (*movhi_bytes): Disable when VFP registers are
available. Also fix some white-space.
@ -1138,8 +1137,7 @@
2016-09-23 Martin Liska <mliska@suse.cz>
* ipa-icf.c (sem_variable::merge): Replace adress
with address.
* ipa-icf.c (sem_variable::merge): Replace adress with address.
2016-09-23 Matthew Wahab <matthew.wahab@arm.com>
@ -1167,8 +1165,7 @@
2016-09-23 Martin Liska <mliska@suse.cz>
* doc/extend.texi: Remove fused-madd from i386 target
options.
* doc/extend.texi: Remove fused-madd from i386 target options.
2016-09-23 Martin Liska <mliska@suse.cz>
@ -1260,8 +1257,7 @@
2016-09-22 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* emit-rtl.c (next_active_insn): Change argument type to
rtx_insn *.
* emit-rtl.c (next_active_insn): Change argument type to rtx_insn *.
(prev_active_insn): Likewise.
(active_insn_p): Likewise.
* rtl.h: Adjust prototypes.
@ -1297,8 +1293,7 @@
2016-09-22 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* emit-rtl.c (next_nondebug_insn): Change argument type to
rtx_insn *.
* emit-rtl.c (next_nondebug_insn): Change argument type to rtx_insn *.
(prev_nondebug_insn): Likewise.
* loop-doloop.c (doloop_condition_get): Likewise.
* rtl.h: Adjust prototype.
@ -1306,8 +1301,7 @@
2016-09-22 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* emit-rtl.c (next_nonnote_insn): Change argument type to
rtx_insn *.
* emit-rtl.c (next_nonnote_insn): Change argument type to rtx_insn *.
(prev_nonnote_insn): Likewise.
* jump.c (reversed_comparison_code_parts): Likewise.
(reversed_comparison): Likewise.
@ -1343,8 +1337,7 @@
* config/m32r/m32r.c (m32r_expand_epilogue): Likewise.
* config/nds32/nds32-protos.h (nds32_target_alignment): Likewise.
* config/nds32/nds32.c (nds32_target_alignment): Likewise.
* config/rl78/rl78.c (rl78_alloc_physical_registers_op2):
* Likewise.
* config/rl78/rl78.c (rl78_alloc_physical_registers_op2): Likewise.
(rl78_alloc_physical_registers_cmp): Likewise.
(rl78_alloc_physical_registers_umul): Likewise.
(rl78_calculate_death_notes): Likewise.
@ -1527,7 +1520,7 @@
(handle_pure_call): Likewise.
2016-09-21 Richard Biener <rguenther@suse.de>
Jakub Jelinek <jakub@redhat.com>
Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/77621
* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Split
@ -1569,8 +1562,7 @@
2016-09-21 Kugan Vivekanandarajah <kuganv@linaro.org>
* tree-vrp.c (get_value_range): Teach PARM_DECL to use ipa-vrp
results.
* tree-vrp.c (get_value_range): Teach PARM_DECL to use ipa-vrp results.
2016-09-21 Kugan Vivekanandarajah <kuganv@linaro.org>
@ -1632,8 +1624,7 @@
(evrp_dom_walker::push_value_range): Likewise.
(evrp_dom_walker::pop_value_range): Likewise.
(execute_early_vrp): Likewise.
(execute_vrp): Call vrp_initialize_lattice and
vrp_free_lattice.
(execute_vrp): Call vrp_initialize_lattice and vrp_free_lattice.
(make_pass_early_vrp): New.
2016-09-20 Uros Bizjak <ubizjak@gmail.com>

View File

@ -244,6 +244,16 @@ __get_cpuid (unsigned int __level,
if (__get_cpuid_max (__ext, 0) < __level)
return 0;
__cpuid (__level, *__eax, *__ebx, *__ecx, *__edx);
if (__ext)
__cpuid (__level, *__eax, *__ebx, *__ecx, *__edx);
else
{
if (__level >= 13)
__cpuid_count (__level, 1, *__eax, *__ebx, *__ecx, *__edx);
else if (__level >= 7)
__cpuid_count (__level, 0, *__eax, *__ebx, *__ecx, *__edx);
else
__cpuid (__level, *__eax, *__ebx, *__ecx, *__edx);
}
return 1;
}

View File

@ -1,3 +1,8 @@
2016-09-28 Uros Bizjak <ubizjak@gmail.com>
PR target/77756
* gcc.target/i386/pr77756.c: New test.
2016-09-28 Martin Sebor <msebor@redhat.com>
PR middle-end/77721
@ -115,7 +120,7 @@
2016-09-26 Thomas Preud'homme <thomas.preudhomme@arm.com>
* gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Adjust regex to accept
singular form of byte when quantity is unknown.
singular form of byte when quantity is unknown.
2016-09-26 Marek Polacek <polacek@redhat.com>
@ -169,7 +174,7 @@
2016-09-25 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/77429
PR fortran/77429
* gfortran.dg/pr77429.f90: New test.
2016-09-25 Steven G. Kargl <kargl@gcc.gnu.org>
@ -339,38 +344,24 @@
tests, enabled if macro __ARM_FEATURE_FP16_VECTOR_ARITHMETIC is
defined.
* gcc.target/aarch64/advsimd-intrinsics/vmul_lane.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vmul_n.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vneg.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vmul_n.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vneg.c: Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vpXXX.inc: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vpadd.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vpmax.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vpmin.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrecpe.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrecps.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrnd.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vpadd.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vpmax.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vpmin.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrecpe.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrecps.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrnd.c: Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vrndX.inc: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrnda.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndm.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndn.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndp.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndx.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrnda.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndm.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndn.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndp.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vrndx.c: Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vrsqrte.c: Likewise.
* gcc.target/aarch64/advsimd-intrinsics/vrsqrts.c: Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vsub.c:
Likewise.
* gcc.target/gcc.target/aarch64/advsimd-intrinsics/vsub.c: Likewise.
2016-09-23 Jiong Wang <jiong.wang@arm.com>
Matthew Wahab <matthew.wahab@arm.com>

View File

@ -0,0 +1,22 @@
/* { dg-do run } */
#include "cpuid.h"
int
main ()
{
__builtin_cpu_init ();
if (__builtin_cpu_supports ("avx2"))
{
unsigned int eax, ebx, ecx, edx;
if (!__get_cpuid (7, &eax, &ebx, &ecx, &edx))
__builtin_abort ();
if (!(ebx & bit_AVX2))
__builtin_abort ();
}
return 0;
}