r221066 - Add _lzcnt_u32 and _lzcnt_u64 to lzcntintrin.h to match Intel documentation names for these intrinsics.

Robinson, Paul Paul_Robinson at playstation.sony.com
Sun Nov 2 16:31:28 PST 2014


Intrin.h does contain definitions (farther down the file), among others it has _lzcnt_u32 (~line 550), and under __x86_64__ it has _lzcnt_u64 (~line 615).
These definitions have correct zero guards.

Cribbing from clang/test/Headers/ms-intrin.cpp, I can get multiple-definition errors running on Linux with the following.

$ cat try-intrin.c
typedef __SIZE_TYPE__ size_t;
#include <Intrin.h>
$ clang -c try-intrin.c -target x86_64-pc-win32 -march=bdver1 -ffreestanding

If there aren't any Windows bots catching this, then it looks like clang/test/Headers/ms-intrin.cpp needs to be beefed up.
--paulr

From: Craig Topper [mailto:craig.topper at gmail.com]
Sent: Sunday, November 02, 2014 11:59 AM
To: Alex Rosenberg
Cc: Robinson, Paul; cfe-commits at cs.uiuc.edu
Subject: Re: r221066 - Add _lzcnt_u32 and _lzcnt_u64 to lzcntintrin.h to match Intel documentation names for these intrinsics.

Where do the definitions for the things in Intrin.h live? It's just declarations.

On Sun, Nov 2, 2014 at 10:16 AM, Alex Rosenberg <alexr at leftfield.org<mailto:alexr at leftfield.org>> wrote:
Intrin.h is the MSVC-compatibility header. lzcntintrin.h is the GCC/ICC,etc. style header as well as MSVC's vendor-specific header in some cases.

Alex

> On Nov 1, 2014, at 7:20 PM, Robinson, Paul <Paul_Robinson at playstation.sony.com<mailto:Paul_Robinson at playstation.sony.com>> wrote:
>
> I thought these were already defined in Intrin.h?  Except only for Windows I guess.
> Still can't reach my work systems so checking it myself might have to wait until
> Monday.
> --paulr
>
>> -----Original Message-----
>> From: cfe-commits-bounces at cs.uiuc.edu<mailto:cfe-commits-bounces at cs.uiuc.edu> [mailto:cfe-commits-<mailto:cfe-commits->
>> bounces at cs.uiuc.edu<mailto:bounces at cs.uiuc.edu>] On Behalf Of Craig Topper
>> Sent: Saturday, November 01, 2014 3:51 PM
>> To: cfe-commits at cs.uiuc.edu<mailto:cfe-commits at cs.uiuc.edu>
>> Subject: r221066 - Add _lzcnt_u32 and _lzcnt_u64 to lzcntintrin.h to match
>> Intel documentation names for these intrinsics.
>>
>> Author: ctopper
>> Date: Sat Nov  1 17:50:57 2014
>> New Revision: 221066
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=221066&view=rev
>> Log:
>> Add _lzcnt_u32 and _lzcnt_u64 to lzcntintrin.h to match Intel
>> documentation names for these intrinsics.
>>
>> Modified:
>>    cfe/trunk/lib/Headers/lzcntintrin.h
>>    cfe/trunk/test/CodeGen/lzcnt-builtins.c
>>
>> Modified: cfe/trunk/lib/Headers/lzcntintrin.h
>> URL: http://llvm.org/viewvc/llvm-
>> project/cfe/trunk/lib/Headers/lzcntintrin.h?rev=221066&r1=221065&r2=221066
>> &view=diff
>> ==========================================================================
>> ====
>> --- cfe/trunk/lib/Headers/lzcntintrin.h (original)
>> +++ cfe/trunk/lib/Headers/lzcntintrin.h Sat Nov  1 17:50:57 2014
>> @@ -44,12 +44,24 @@ __lzcnt32(unsigned int __X)
>>   return __X ? __builtin_clz(__X) : 32;
>> }
>>
>> +static __inline__ unsigned int __attribute__((__always_inline__,
>> __nodebug__))
>> +_lzcnt_u32(unsigned int __X)
>> +{
>> +  return __X ? __builtin_clz(__X) : 32;
>> +}
>> +
>> #ifdef __x86_64__
>> static __inline__ unsigned long long __attribute__((__always_inline__,
>> __nodebug__))
>> __lzcnt64(unsigned long long __X)
>> {
>>   return __X ? __builtin_clzll(__X) : 64;
>> }
>> +
>> +static __inline__ unsigned long long __attribute__((__always_inline__,
>> __nodebug__))
>> +_lzcnt_u64(unsigned long long __X)
>> +{
>> +  return __X ? __builtin_clzll(__X) : 64;
>> +}
>> #endif
>>
>> #endif /* __LZCNTINTRIN_H */
>>
>> Modified: cfe/trunk/test/CodeGen/lzcnt-builtins.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/lzcnt-
>> builtins.c?rev=221066&r1=221065&r2=221066&view=diff
>> ==========================================================================
>> ====
>> --- cfe/trunk/test/CodeGen/lzcnt-builtins.c (original)
>> +++ cfe/trunk/test/CodeGen/lzcnt-builtins.c Sat Nov  1 17:50:57 2014
>> @@ -22,3 +22,15 @@ unsigned long long test__lzcnt64(unsigne
>>   // CHECK: @llvm.ctlz.i64
>>   return __lzcnt64(__X);
>> }
>> +
>> +unsigned int test_lzcnt_u32(unsigned int __X)
>> +{
>> +  // CHECK: @llvm.ctlz.i32
>> +  return _lzcnt_u32(__X);
>> +}
>> +
>> +unsigned long long test__lzcnt_u64(unsigned long long __X)
>> +{
>> +  // CHECK: @llvm.ctlz.i64
>> +  return _lzcnt_u64(__X);
>> +}
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu<mailto:cfe-commits at cs.uiuc.edu>
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu<mailto:cfe-commits at cs.uiuc.edu>
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



--
~Craig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141103/f36fe5ed/attachment.html>


More information about the cfe-commits mailing list