[PATCH] Implement __readeflags and __writeeflags intrinsics

Reid Kleckner rnk at google.com
Fri Feb 28 15:13:37 PST 2014


lgtm


On Fri, Feb 28, 2014 at 2:11 AM, Alexey Volkov <avolkov.intel at gmail.com>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__
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140228/88fd93ab/attachment.html>


More information about the cfe-commits mailing list