Okay,
Uros, thanks for correcting me. Here is updated Changelogs and patch.

ChangeLog entry:
2011-07-27  Kirill Yukhin  <kirill.yuk...@intel.com>

        PR target/49547
        * config/i386/abmintrin.h (head): Check if __LZCNT__ is defined.
        (__lzcnt): Rename to ...
        (__lzcnt32): ... this.
        * config/i386/bmiintrin.h (head): Update copyright year.
        (__lzcnt_u16): Removed.
        (__lzcnt_u32): Removed.
        (__lzcnt_u64): Likewise.
        * config/i386/cpuid.h: New define.
        * 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 option -mlzcnt.
        (ix86_option_override_internal): Handle LZCNT option.
        (ix86_valid_target_attribute_inner_p): Likewise.
        (struct builtin_description bdesc_args) <IX86_BUILTIN_CLZS>: Update.
        * config/i386/i386.h (TARGET_LZCNT): New.
        (CLZ_DEFINED_VALUE_AT_ZERO): Update.
        * config/i386/i386.md (clz<mode>2): Update insn constraint.
        (clz<mode>2_lzcnt): Likewise.
        * doc/invoke.texi: Mention -mlzcnt option.
        * doc/extend.texi: Likewise.

testsuite/ChangeLog entry:
2011-07-27  Kirill Yukhin  <kirill.yuk...@intel.com>

        * gcc.target/i386/i386.exp (check_effective_target_lzcnt): New.
        * 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: Likewise.
        * 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: Likewise.
        * gcc.target/i386/sse-12.c (dg-compile): Add -mlzcnt.
        * gcc.target/i386/sse-13.c: Likewise.
        * gcc.target/i386/sse-14.c: Likewise.
        * g++.dg/other/i386-2.C: Likewise.
        * g++.dg/other/i386-3.C: Likewise.

Harsha, is it OK for trunk?

Thanks, K


On Wed, Jul 27, 2011 at 3:23 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
> On Wed, Jul 27, 2011 at 12:56 PM, Kirill Yukhin <kirill.yuk...@gmail.com> 
> wrote:
>> Sorry, for misunderstanding I've introduced with error in my comment.
>> Your inputs are fixed. Since they don't touch sources, just testsuite,
>> I am posting only tesuite/ChangeLog updated entry.
>
>> tesuite/ChangeLog entry:
>> 2011-07-27  Kirill Yukhin  <kirill.yuk...@intel.com>
>>
>>        * gcc.target/i386/i386.exp (check_effective_target_lzcnt): New.
>>        * 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.
>
> New.
>
>>        * gcc.target/i386/sse-12.c: Added -mlzcnt switch.
>
> * gcc.target/i386/sse-12.c (dg-compile): Add -mlzcnt.
>
>>        * gcc.target/i386/sse-13.c: Likewise.
>>        * gcc.target/i386/sse-14.c: Likewise.
>>        * g++.dg/other/i386-2.C: Likewise.
>>        * g++.dg/other/i386-3.C: Likewise.
>>
>>
>> Patch attached.
>
> Patch also includes non-testsuite changes, please update ChangeLog
> entry as follows:
>
>> 2011-07-26  Kirill Yukhin  <kirill.yuk...@intel.com>
>>
>>        PR target/49547
>>       * config/i386/abmintrin.h (head): Added check if __LZCNT__ is defined.
>
> Check if __LZCNT__ is defined.
>
>>       (__lzcnt32): Fixed name according to Spec.
>
> Rename to ...
>
>>       * config/i386/bmiintrin.h (head): Updated year for Copyright.
>
> Update copyright year.
>
>>       (__lzcnt_u16): Removed.
>>       (__lzcnt_u32): Removed.
>>       (__lzcnt_u64): Likewise.
>>       * config/i386/cpuid.h: New bit defined.
>
> * config/i386/cpuid.h (__bit_LZCNT): New define.
>
>>       * 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.
>
> New option -mlzcnt.
>
>>       (ix86_option_override_internal): Handling LZCNT option.
>
> Handle ...
>
>>       (ix86_valid_target_attribute_inner_p): Likewise.
>>       (bdesc_args): built-in for LZCNT is extended to work under
>>       another flag.
>
> (struct builtin_description bdesc_args) <IX86_BUILTIN_CLZS>: Update.
>
>>       * config/i386/i386.h (TARGET_LZCNT): New.
>>       (CLZ_DEFINED_VALUE_AT_ZERO): Updated flag name.
>
> ... : Update.
>
>>       * config/i386/i386.md (clz<mode>2): Target fixed.
>
> ... : Update insn constraint.
>
>>       (clz<mode>2_lzcnt): Likewise.
>>       * doc/invoke.texi: Added mention of -mlzcnt option.
>
> Mention  -mlzcnt option.
>
>>       * doc/extend.texi: Likewise.
>
>> Changes were bootstrapped and make-check-ed (lzcnt ones under simulator).
>> Is it OK for now?
>
> Testsuite changes are OK, with a few nits, see below. The patch is OK
> in principle, but since it touches public header, we need also OK from
> AMD (CC'd).
>
> +++ b/gcc/testsuite/gcc.target/i386/lzcnt-2.c
> +  while ( (res<16) && (((src>>(15-res))&1) == 0))
>
> Please watch whitespace.
>
> +++ b/gcc/testsuite/gcc.target/i386/lzcnt-4.c
> +  while ( (res<32) && (((src>>(31-res))&1) == 0))
>
> Same here.
>
> +++ b/gcc/testsuite/gcc.target/i386/lzcnt-6.c
> +  while ( (res<64) && (((src>>(63-res))&1) == 0))
>
> And here.
>
> Uros.
>

Attachment: lzcnt-3.gcc.patch
Description: Binary data

Reply via email to