Add support for BMI.
authorQuentin Neill <quentin.neill.gnu@gmail.com>
Wed, 10 Nov 2010 22:02:23 +0000 (22:02 +0000)
committerSebastian Pop <spop@gcc.gnu.org>
Wed, 10 Nov 2010 22:02:23 +0000 (22:02 +0000)
commit91afcfa30c1a15d759f8f59c9d1df403f196a5b6
tree1f178cf8d96294aacd58f3b1cf640290e554a0d2
parent6d24de8354b32e9958fa662497525844886b18c2
Add support for BMI.

2010-11-10 Quentin Neill <quentin.neill.gnu@gmail.com>

gcc/
* config.gcc (i[34567]86-*-*): Include bmiintrin.h.
(x86_64-*-*): Likewise.
* config/i386/cpuid.h: Define BMI bit.
* config/i386/driver-i386.c (host_detect_local_cpu): Define
and set has_bmi.
* config/i386/i386-c.c (ix86_target_macros_internal): Check
isa_flag for BMI.
* config/i386/i386.c (OPTION_MASK_ISA_BMI_SET): New.
(OPTION_MASK_ISA_BMI_UNSET): New.
(ix86_handle_option): Handle -mbmi.
(isa_opts): Add -mbmi.
(enum pta_flags): Add PTA_BMI.
(ix86_option_override_internal): Add BMI support.
(ix86_valid_target_attribute_inner_p): Handle -mbmi.
(IX86_BUILTIN_BEXTR32): New for BMI intrinsic.
(IX86_BUILTIN_BEXTR64): Likewise.
(IX86_BUILTIN_CTZS): Likewise.
(bdesc_args): Add BMI intrinsics.
(ix86_expand_args_builtin): Add BMI specific cases.
* config/i386/i386.h (TARGET_BMI): New for BMI.
(CTZ_DEFINED_VALUE_AT_ZERO): Likewise.
(CLZ_DEFINED_VALUE_AT_ZERO): Likewise.
* config/i386/i386.md (UNSPEC_BEXTR): New for BMI.
(UNSPEC_TZCNT): Likewise.
(ctz<mode>2): Add tzcnt, and handle 16 bit operands.
(bmi_andn_<mode>): New for BMI.
(bmi_bextr_<mode>): Likewise.
(bmi_blsi_<mode>): Likewise.
(bmi_blsmsk_<mode>): Likewise.
(bmi_blsr_<mode>): Likewise.
* config/i386/i386.opt: Add -mbmi.
* config/i386/x86intrin.h: Add BMI check and bmiintrin.h.
* config/i386/bmiintrin.h (__lzcnt_u16): New.
(__tzcnt_u16): Likewise.
(__andn_u32): Likewise.
(__bextr_u32): Likewise.
(__blsi_u32): Likewise.
(__blsmsk_u32): Likewise.
(__blsr_u32): Likewise.
(__lzcnt_u32): Likewise.
(__tzcnt_u32): Likewise.
(__andn_u64): Likewise.
(__bextr_u64): Likewise.
(__blsi_u64): Likewise.
(__blsmsk_u64): Likewise.
(__blsr_u64): Likewise.
(__lzcnt_u64): Likewise.
(__tzcnt_u64): Likewise.
* doc/invoke.texi: Document -mbmi and -mno-bmi.
* doc/extend.texi: Document BMI built-in functions.

gcc/testsuite/
* g++.dg/other/i386-2.C: Add -mbmi.
* g++.dg/other/i386-3.C: Likewise.
* gcc.target/i386/funcspec-5.c: Add bmi and no-bmi targets.
* gcc.target/i386/funcspec-6.c: Likewise.
* gcc.target/i386/sse-12.c: Add -mbmi.
* gcc.target/i386/bmi-1.c: New file.
* gcc.target/i386/bmi-2.c: Likewise.
* gcc.target/i386/bmi-3.c: Likewise.
* gcc.target/i386/bmi-4.c: Likewise.
* gcc.target/i386/bmi-5.c: Likewise.
* gcc.target/i386/bmi-6.c: Likewise.

From-SVN: r166561
25 files changed:
gcc/ChangeLog
gcc/config.gcc
gcc/config/i386/bmiintrin.h [new file with mode: 0644]
gcc/config/i386/cpuid.h
gcc/config/i386/driver-i386.c
gcc/config/i386/i386-c.c
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/i386.md
gcc/config/i386/i386.opt
gcc/config/i386/x86intrin.h
gcc/doc/extend.texi
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/other/i386-2.C
gcc/testsuite/g++.dg/other/i386-3.C
gcc/testsuite/gcc.target/i386/bmi-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/bmi-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/bmi-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/bmi-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/bmi-5.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/bmi-6.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/funcspec-5.c
gcc/testsuite/gcc.target/i386/funcspec-6.c
gcc/testsuite/gcc.target/i386/sse-12.c