Hi, I've prepared a patch for http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49547
I've also prepared a bunch of tests for lzcnt instuction generation. ChangeLog entry: 2011-07-26 Kirill Yukhin <kirill.yuk...@intel.com> PR target/49547 * config/i386/abmintrin.h (head): Added check if __LZCNT__ is defined. (__lzcnt32): Fixed name according to Spec. * config/i386/bmiintrin.h (head): Updated year for Copyright. (__lzcnt_u16): Removed. (__lzcnt_u32): Removed. (__lzcnt_u64): Likewise. * config/i386/cpuid.h: New bit defined. * config/i386/driver-i386.c (host_detect_local_cpu): Detect LZCNT feature. * config/i386/i386-c.c (ix86_target_macros_internal): Define __LZCNT__ if needed. * config/i386/i386.c (ix86_target_string): New entry to array. (ix86_option_override_internal): Handling LZCNT option. (ix86_valid_target_attribute_inner_p): Likewise. (bdesc_args): built-in for LZCNT is extended to work under another flag. * config/i386/i386.h (TARGET_LZCNT): New. (CLZ_DEFINED_VALUE_AT_ZERO): Updated flag name. * config/i386/i386.md (clz<mode>2): Target fixed. (clz<mode>2_lzcnt): Likewise. * doc/invoke.texi: Added mention of -mlzcnt option. * doc/extend.texi: Likewise. testsuite/ChangeLog entry: 2011-07-26 Kirill Yukhin <kirill.yuk...@intel.com> * lib/target-supports.exp (check_lzcnt_hw_available): New. (check_effective_target_lzcnt_runtime): Likewise. (check_effective_target_lzcnt): Likewise. * gcc.target/i386/lzcnt-1.c: New test. * gcc.target/i386/lzcnt-2.c: Likewise. * gcc.target/i386/lzcnt-2a.c: Likewise. * gcc.target/i386/lzcnt-3.c: New test. * gcc.target/i386/lzcnt-4.c: Likewise. * gcc.target/i386/lzcnt-4a.c: Likewise. * gcc.target/i386/lzcnt-5.c: Likewise. * gcc.target/i386/lzcnt-6.c: Likewise. * gcc.target/i386/lzcnt-6a.c: Likewise. * gcc.target/i386/lzcnt-check.h: New driver to run LZCNT-* tests only if HW available. Bootstrapped, make-check-ed. No new fails. OK for trunk? Thanks, K
lzcnt.gcc.patch
Description: Binary data