[llvm] r178598 - This patch addresses PR15351 by explicitly checking for AVX support

Duncan Sands baldrick at free.fr
Wed Apr 3 02:32:00 PDT 2013


Hi Aaron,

On 03/04/13 02:33, Aaron Ballman wrote:
> Author: aaronballman
> Date: Tue Apr  2 19:33:32 2013
> New Revision: 178598
>
> URL: http://llvm.org/viewvc/llvm-project?rev=178598&view=rev
> Log:
> This patch addresses PR15351 by explicitly checking for AVX support
> when getting the host processor information.
>
> Modified:
>      llvm/trunk/lib/Support/Host.cpp
>
> Modified: llvm/trunk/lib/Support/Host.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Host.cpp?rev=178598&r1=178597&r2=178598&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Support/Host.cpp (original)
> +++ llvm/trunk/lib/Support/Host.cpp Tue Apr  2 19:33:32 2013
> @@ -112,6 +112,18 @@ static bool GetX86CpuIDAndInfo(unsigned
>   #endif
>   }
>
> +static bool OSHasAVXSupport() {
> +#if defined(__GNUC__)
> +  int rEAX, rEDX;
> +  __asm__ ("xgetbv" : "=a" (rEAX), "=d" (rEDX) : "c" (0));
> +#elif defined(_MSC_VER)
> +  unsigned long long rEAX = _xgetbv(_XCR_XFEATURE_ENABLED_MASK);
> +#else
> +  int rEAX = 0; // Ensures we return false
> +#endif
> +  return (rEAX & 6) == 6;
> +}
> +
>   static void DetectX86FamilyModel(unsigned EAX, unsigned &Family,
>                                    unsigned &Model) {
>     Family = (EAX >> 8) & 0xf; // Bits 8 - 11
> @@ -134,6 +146,10 @@ std::string sys::getHostCPUName() {
>     DetectX86FamilyModel(EAX, Family, Model);
>
>     bool HasSSE3 = (ECX & 0x1);
> +  // If CPUID indicates support for XSAVE, XRESTORE and AVX, and XGETBV
> +  // indicates that the AVX registers will be saved and restored on context
> +  // switch, when we have full AVX support.

when we have -> then we have

Ciao, Duncan.



More information about the llvm-commits mailing list