r191590 - Implements some of the more commonly used intrinsics in Intrin.h

Warren Hunt whunt at google.com
Tue Oct 1 12:07:10 PDT 2013


Yes, we're not presently supporting the usage model where you can simply
declare the intrinsics like you would for cl.exe.  We had a pretty
extensive discussion about what constitutes a "builtin" versus what
constitutes an "intrinsic" and the requirements for headers.  Weirdly in MS
world you have to declare most "builtins" before you can use them but there
are exceptions like __debugbreak().  Ultimately we have an agreement that
it would be nice to support the microsoft intrinsics as builtins (i.e. not
require the header, and potentially not even a definition) but that will
take more work plumbing somewhat redundant builtins through clang and it
was decided that the current approach is both reasonable and expedient.
 Did you find a case in chrome where they are declaring an intrinsic
without including "intrin.h"?


On Tue, Oct 1, 2013 at 6:44 AM, Timur Iskhodzhanov <timurrrr at google.com>wrote:

> Please see the comment at
> http://llvm.org/bugs/show_bug.cgi?id=13283#c5 for the details.
>
> For some reason, the value of *_Addend at the end of the function is
> wrong if we include <intrin.h>;
> also, it fails to compile if we declare the function without including
> the header.
>
> 2013/10/1 Warren Hunt <whunt at google.com>:
> > I've tested them under a variety cases.  Are you concerned about the (-
> > _Value) clause?
> >
> > -Warren
> >
> >
> > On Mon, Sep 30, 2013 at 3:58 AM, Timur Iskhodzhanov <timurrrr at google.com
> >
> > wrote:
> >>
> >> 2013/9/28 Warren Hunt <whunt at google.com>:
> >> > +static __inline__
> >> >  long __cdecl _InterlockedExchangeAdd(long volatile *_Addend, long
> >> > _Value);
> >> > ...
> >> > +static __inline__ short __attribute__((__always_inline__,
> __nodebug__))
> >> > +_InterlockedExchangeAdd16(short volatile *_Addend, short _Value) {
> >> > +  return __atomic_add_fetch(_Addend, _Value, 0) - _Value;
> >> > +}
> >> > +static __inline__ long __attribute__((__always_inline__,
> __nodebug__))
> >> > +_InterlockedExchangeAdd(long volatile *_Addend, long _Value) {
> >> > +  return __atomic_add_fetch(_Addend, _Value, 0) - _Value;
> >> > +}
> >>
> >> Are you sure this is a correct/complete implementation?
> >> http://llvm.org/bugs/show_bug.cgi?id=13283#c5
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131001/d6f4af92/attachment.html>


More information about the cfe-commits mailing list