diff mbox

[i386,testsuite] Fix for PR49547, new tescases for lzcnt instruction

Message ID CAMe9rOoRysfCb-ZHnQnF=YisgEq9Mbn_yqRqdDgLmv4eWFRCEQ@mail.gmail.com
State New
Headers show

Commit Message

H.J. Lu Aug. 2, 2011, 12:32 a.m. UTC
On Mon, Aug 1, 2011 at 6:13 AM, Kirill Yukhin <kirill.yukhin@gmail.com> wrote:
> Done.
> Updated patch is attached.
>
> Thanks, K
>
> On Mon, Aug 1, 2011 at 4:49 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>> On Mon, Aug 1, 2011 at 5:36 AM, Kirill Yukhin <kirill.yukhin@gmail.com> wrote:
>>> Hi HJ,
>>> Thanks for input. I've missed it.
>>> Done. Updated patch is attached.
>>
>> Compiler may still optimize it away.  You need to replace 0 with
>> a function parameter.  Please see:
>>
>> http://gcc.gnu.org/ml/gcc-patches/2011-07/msg02463.html
>>
>>
>> H.J.
>> ---
>>> Thanks, K
>>>
>>> On Mon, Aug 1, 2011 at 4:26 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>>>> On Mon, Aug 1, 2011 at 5:20 AM, Kirill Yukhin <kirill.yukhin@gmail.com> wrote:
>>>>> I've merged my changes with trunk (there was a conflict) and fixed typo.
>>>>> Updated patch is attached. Waiting for commit...
>>>>>
>>>>> Thanks, K
>>>>>
>>>>> On Mon, Aug 1, 2011 at 1:03 PM, Kirill Yukhin <kirill.yukhin@gmail.com> wrote:
>>>>>> Thanks!
>>>>>> Guys with waa rights, could anybody commit my fix?
>>>>>>
>>>>>> Thanks, K
>>>>>>
>>>>>>>
>>>>>>> OK for mainline.
>>>>>>>
>>>>>>> Uros.
>>>>>>>
>>>>>>
>>>>
>>>>
>>>> +# Return 1 if lzcnt instruction can be compiled.
>>>> +proc check_effective_target_lzcnt { } {
>>>> +    return [check_no_compiler_messages lzcnt object {
>>>> +       void _lzcnt (void)
>>>> +       {
>>>> +          __builtin_clzs (0);
>>>> +       }
>>>> +    } "-O2 -mlzcnt" ]
>>>> +}
>>>>
>>>> GCC may optimize this away.  Please fix it similar to:
>>>>
>>>> http://gcc.gnu.org/ml/gcc-patches/2011-07/msg02463.html
>>>>
>>>
>>
>

We should use long long on 64bit intrinsic.  I checked
in this as an obvious fix.
diff mbox

Patch

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 177080)
+++ ChangeLog	(working copy)
@@ -1,3 +1,8 @@ 
+2011-08-01  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/i386/lzcntintrin.h (__lzcnt64): Replace long with
+	long long.
+
 2011-08-01  Sebastian Pop  <sebastian.pop@amd.com>
 	    Joseph Myers  <joseph@codesourcery.com>

Index: config/i386/lzcntintrin.h
===================================================================
--- config/i386/lzcntintrin.h	(revision 177080)
+++ config/i386/lzcntintrin.h	(working copy)
@@ -45,10 +45,10 @@  __lzcnt32 (unsigned int __X)
 }

 #ifdef __x86_64__
-extern __inline unsigned long __attribute__((__gnu_inline__, __always_inline__,
 __artificial__))
-__lzcnt64 (unsigned long __X)
+extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inli
ne__, __artificial__))
+__lzcnt64 (unsigned long long __X)
 {
-  return __builtin_clzl (__X);
+  return __builtin_clzll (__X);
 }