r241053 - [X86] Add FXSR intrinsics

David Majnemer david.majnemer at gmail.com
Tue Jun 30 02:54:03 PDT 2015


On Tue, Jun 30, 2015 at 2:45 AM, Michael Kuperstein <
michael.m.kuperstein at intel.com> wrote:

> Author: mkuper
> Date: Tue Jun 30 04:45:38 2015
> New Revision: 241053
>
> URL: http://llvm.org/viewvc/llvm-project?rev=241053&view=rev
> Log:
> [X86] Add FXSR intrinsics
>
> Add intrinsics for the FXSR instructions
> (FXSAVE/FXSAVE64/FXRSTOR/FXRSTOR64)
>
> These were previously declared in Intrin.h for MSVC compatibility, but now
> that we have them implemented, these declarations can be removed.
>
> Added:
>     cfe/trunk/lib/Headers/fxsrintrin.h   (with props)
> Modified:
>     cfe/trunk/include/clang/Basic/BuiltinsX86.def
>     cfe/trunk/lib/Headers/CMakeLists.txt
>     cfe/trunk/lib/Headers/Intrin.h
>     cfe/trunk/lib/Headers/immintrin.h
>     cfe/trunk/test/CodeGen/builtins-x86.c
>
> Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=241053&r1=241052&r2=241053&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original)
> +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Tue Jun 30 04:45:38 2015
> @@ -656,6 +656,12 @@ BUILTIN(__builtin_ia32_wrfsbase64, "vULL
>  BUILTIN(__builtin_ia32_wrgsbase32, "vUi", "")
>  BUILTIN(__builtin_ia32_wrgsbase64, "vULLi", "")
>
> +// FXSR
> +BUILTIN(__builtin_ia32_fxrstor, "vv*", "")
> +BUILTIN(__builtin_ia32_fxrstor64, "vv*", "")
> +BUILTIN(__builtin_ia32_fxsave, "vv*", "")
> +BUILTIN(__builtin_ia32_fxsave64, "vv*", "")
> +
>  // ADX
>  BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "")
>  BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "")
>
> Modified: cfe/trunk/lib/Headers/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/CMakeLists.txt?rev=241053&r1=241052&r2=241053&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Headers/CMakeLists.txt (original)
> +++ cfe/trunk/lib/Headers/CMakeLists.txt Tue Jun 30 04:45:38 2015
> @@ -22,6 +22,7 @@ set(files
>    float.h
>    fma4intrin.h
>    fmaintrin.h
> +  fxsrintrin.h
>    htmintrin.h
>    htmxlintrin.h
>    ia32intrin.h
>
> Modified: cfe/trunk/lib/Headers/Intrin.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/Intrin.h?rev=241053&r1=241052&r2=241053&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Headers/Intrin.h (original)
> +++ cfe/trunk/lib/Headers/Intrin.h Tue Jun 30 04:45:38 2015
> @@ -180,8 +180,6 @@ unsigned long __cdecl _byteswap_ulong(un
>  unsigned short __cdecl _byteswap_ushort(unsigned short);
>  void __cdecl _disable(void);
>  void __cdecl _enable(void);
> -void __cdecl _fxrstor(void const *);
> -void __cdecl _fxsave(void *);
>  long _InterlockedAddLargeStatistic(__int64 volatile *_Addend, long
> _Value);
>  static __inline__
>  long _InterlockedAnd(long volatile *_Value, long _Mask);
> @@ -358,8 +356,6 @@ unsigned char _bittestandreset64(__int64
>  static __inline__
>  unsigned char _bittestandset64(__int64 *, __int64);
>  unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64);
> -void __cdecl _fxrstor64(void const *);
> -void __cdecl _fxsave64(void *);
>  long _InterlockedAnd_np(long volatile *_Value, long _Mask);
>  short _InterlockedAnd16_np(short volatile *_Value, short _Mask);
>  __int64 _InterlockedAnd64_np(__int64 volatile *_Value, __int64 _Mask);
>
> Added: cfe/trunk/lib/Headers/fxsrintrin.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/fxsrintrin.h?rev=241053&view=auto
>
> ==============================================================================
> --- cfe/trunk/lib/Headers/fxsrintrin.h (added)
> +++ cfe/trunk/lib/Headers/fxsrintrin.h Tue Jun 30 04:45:38 2015
> @@ -0,0 +1,53 @@
> +/*===---- fxsrintrin.h - FXSR intrinsic
> ------------------------------------===
> + *
> + * 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 __IMMINTRIN_H
> +#error "Never use <fxsrintrin.h> directly; include <immintrin.h> instead."
> +#endif
> +
> +#ifndef __FXSRINTRIN_H
> +#define __FXSRINTRIN_H
> +
> +#define DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__))
>

I think you need to name this __DEFAULT_FN_ATTRS as DEFAULT_FN_ATTRS is not
in the implementors namespace.  Also, it looks like the other header files
undef it once they are done using it.


> +
> +static __inline__ void DEFAULT_FN_ATTRS
> +_fxsave(void *__p) {
> +  return __builtin_ia32_fxsave(__p);
> +}
> +
> +static __inline__ void DEFAULT_FN_ATTRS
> +_fxsave64(void *__p) {
> +  return __builtin_ia32_fxsave64(__p);
> +}
> +
> +static __inline__ void DEFAULT_FN_ATTRS
> +_fxrstor(void *__p) {
> +  return __builtin_ia32_fxrstor(__p);
> +}
> +
> +static __inline__ void DEFAULT_FN_ATTRS
> +_fxrstor64(void *__p) {
> +  return __builtin_ia32_fxrstor64(__p);
> +}
> +
> +#endif
>
> Propchange: cfe/trunk/lib/Headers/fxsrintrin.h
>
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Propchange: cfe/trunk/lib/Headers/fxsrintrin.h
>
> ------------------------------------------------------------------------------
>     svn:keywords = Author Date Id Rev URL
>
> Propchange: cfe/trunk/lib/Headers/fxsrintrin.h
>
> ------------------------------------------------------------------------------
>     svn:mime-type = text/plain
>
> Modified: cfe/trunk/lib/Headers/immintrin.h
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/immintrin.h?rev=241053&r1=241052&r2=241053&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Headers/immintrin.h (original)
> +++ cfe/trunk/lib/Headers/immintrin.h Tue Jun 30 04:45:38 2015
> @@ -142,6 +142,8 @@ _writegsbase_u64(unsigned long long __V)
>
>  #include <shaintrin.h>
>
> +#include <fxsrintrin.h>
> +
>  /* Some intrinsics inside adxintrin.h are available only on processors
> with ADX,
>   * whereas others are also available at all times. */
>  #include <adxintrin.h>
>
> Modified: cfe/trunk/test/CodeGen/builtins-x86.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtins-x86.c?rev=241053&r1=241052&r2=241053&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/builtins-x86.c (original)
> +++ cfe/trunk/test/CodeGen/builtins-x86.c Tue Jun 30 04:45:38 2015
> @@ -260,6 +260,10 @@ void f0() {
>
>    (void) __builtin_ia32_ldmxcsr(tmp_Ui);
>    tmp_Ui = __builtin_ia32_stmxcsr();
> +  (void)__builtin_ia32_fxsave(tmp_vp);
> +  (void)__builtin_ia32_fxsave64(tmp_vp);
> +  (void)__builtin_ia32_fxrstor(tmp_vp);
> +  (void)__builtin_ia32_fxrstor64(tmp_vp);
>    tmp_V4f = __builtin_ia32_cvtpi2ps(tmp_V4f, tmp_V2i);
>    tmp_V2i = __builtin_ia32_cvtps2pi(tmp_V4f);
>    tmp_i = __builtin_ia32_cvtss2si(tmp_V4f);
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150630/09b60081/attachment.html>


More information about the cfe-commits mailing list