lgtm
On Fri, Feb 28, 2014 at 2:11 AM, Alexey Volkov <[email protected]>wrote: > I added ia32intrin.h file with __readeflags and __writeeflags intrinsics. > > Hi echristo, rnk, whunt, > > http://llvm-reviews.chandlerc.com/D2468 > > CHANGE SINCE LAST DIFF > http://llvm-reviews.chandlerc.com/D2468?vs=6965&id=7427#toc > > Files: > lib/Headers/ia32intrin.h > lib/Headers/x86intrin.h > > Index: lib/Headers/ia32intrin.h > =================================================================== > --- /dev/null > +++ lib/Headers/ia32intrin.h > @@ -0,0 +1,82 @@ > +/* ===-------- ia32intrin.h > ---------------------------------------------------=== > + * > + * Permission is hereby granted, free of charge, to any person obtaining > a copy > + * of this software and associated documentation files (the "Software"), > to deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or > sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be > included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT > SHALL THE > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > ARISING FROM, > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS > IN > + * THE SOFTWARE. > + * > + > *===-----------------------------------------------------------------------=== > + */ > + > +#ifndef __X86INTRIN_H > +#error "Never use <ia32intrin.h> directly; include <x86intrin.h> instead." > +#endif > + > +#ifndef __IA32INTRIN_H > +#define __IA32INTRIN_H > + > +#ifdef __x86_64__ > +static __inline__ unsigned long long __attribute__((__always_inline__, > __nodebug__)) > +__readeflags(void) > +{ > + unsigned long long res = 0; > + __asm__ __volatile__ ("pushf\n\t" > + "popq %0\n" > + :"=r"(res) > + : > + : > + ); > + return res; > +} > + > +static __inline__ void __attribute__((__always_inline__, __nodebug__)) > +__writeeflags(unsigned long long __f) > +{ > + __asm__ __volatile__ ("pushq %0\n\t" > + "popf\n" > + : > + :"r"(__f) > + :"flags" > + ); > +} > + > +#else /* !__x86_64__ */ > +static __inline__ unsigned int __attribute__((__always_inline__, > __nodebug__)) > +__readeflags(void) > +{ > + unsigned int res = 0; > + __asm__ __volatile__ ("pushf\n\t" > + "popl %0\n" > + :"=r"(res) > + : > + : > + ); > + return res; > +} > + > +static __inline__ void __attribute__((__always_inline__, __nodebug__)) > +__writeeflags(unsigned int __f) > +{ > + __asm__ __volatile__ ("pushl %0\n\t" > + "popf\n" > + : > + :"r"(__f) > + :"flags" > + ); > +} > +#endif /* !__x86_64__ */ > + > +#endif /* __IA32INTRIN_H */ > Index: lib/Headers/x86intrin.h > =================================================================== > --- lib/Headers/x86intrin.h > +++ lib/Headers/x86intrin.h > @@ -24,6 +24,8 @@ > #ifndef __X86INTRIN_H > #define __X86INTRIN_H > > +#include <ia32intrin.h> > + > #include <immintrin.h> > > #ifdef __3dNOW__ >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
