driver-i386.c (host_detect_local_cpu): Detect lack of zmm/k regs support.
gcc/ 2014-09-16 Ilya Tocar <ilya.tocar@intel.com> * config/i386/driver-i386.c (host_detect_local_cpu): Detect lack of zmm/k regs support. testsuite/ 2014-09-16 Ilya Tocar <ilya.tocar@intel.com> * gcc.target/i386/avx512f-os-support.h: Remove magic number. From-SVN: r215297
This commit is contained in:
parent
0774c1603b
commit
2c12f2f4d4
|
@ -1,3 +1,8 @@
|
|||
2014-09-16 Ilya Tocar <ilya.tocar@intel.com>
|
||||
|
||||
* config/i386/driver-i386.c (host_detect_local_cpu): Detect lack of
|
||||
zmm/k regs support.
|
||||
|
||||
2014-09-16 Alexander Ivchenko <alexander.ivchenko@intel.com>
|
||||
Maxim Kuznetsov <maxim.kuznetsov@intel.com>
|
||||
Anna Tikhonova <anna.tikhonova@intel.com>
|
||||
|
|
|
@ -533,6 +533,9 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
|||
#define XSTATE_FP 0x1
|
||||
#define XSTATE_SSE 0x2
|
||||
#define XSTATE_YMM 0x4
|
||||
#define XSTATE_OPMASK 0x20
|
||||
#define XSTATE_ZMM 0x40
|
||||
#define XSTATE_HI_ZMM 0x80
|
||||
if (has_osxsave)
|
||||
asm (".byte 0x0f; .byte 0x01; .byte 0xd0"
|
||||
: "=a" (eax), "=d" (edx)
|
||||
|
@ -554,6 +557,20 @@ const char *host_detect_local_cpu (int argc, const char **argv)
|
|||
has_xsavec = 0;
|
||||
}
|
||||
|
||||
if (!has_osxsave
|
||||
|| (eax &
|
||||
(XSTATE_SSE | XSTATE_YMM | XSTATE_OPMASK | XSTATE_ZMM | XSTATE_HI_ZMM))
|
||||
!= (XSTATE_SSE | XSTATE_YMM | XSTATE_OPMASK | XSTATE_ZMM | XSTATE_HI_ZMM))
|
||||
{
|
||||
has_avx512f = 0;
|
||||
has_avx512er = 0;
|
||||
has_avx512pf = 0;
|
||||
has_avx512cd = 0;
|
||||
has_avx512dq = 0;
|
||||
has_avx512bw = 0;
|
||||
has_avx512vl = 0;
|
||||
}
|
||||
|
||||
if (!arch)
|
||||
{
|
||||
if (vendor == signature_AMD_ebx
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2014-09-16 Ilya Tocar <ilya.tocar@intel.com>
|
||||
|
||||
* gcc.target/i386/avx512f-os-support.h: Remove magic number.
|
||||
|
||||
2014-09-16 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/56408
|
||||
|
|
|
@ -1,10 +1,23 @@
|
|||
/* Check if the OS supports executing AVX512F instructions. */
|
||||
|
||||
#define XCR_XFEATURE_ENABLED_MASK 0x0
|
||||
|
||||
#define XSTATE_FP 0x1
|
||||
#define XSTATE_SSE 0x2
|
||||
#define XSTATE_YMM 0x4
|
||||
#define XSTATE_OPMASK 0x20
|
||||
#define XSTATE_ZMM 0x40
|
||||
#define XSTATE_HI_ZMM 0x80
|
||||
|
||||
static int
|
||||
avx512f_os_support (void)
|
||||
{
|
||||
unsigned int eax, edx;
|
||||
unsigned int ecx = XCR_XFEATURE_ENABLED_MASK;
|
||||
unsigned int mask = XSTATE_SSE | XSTATE_YMM | XSTATE_OPMASK
|
||||
| XSTATE_ZMM | XSTATE_HI_ZMM;
|
||||
|
||||
__asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
|
||||
return (eax & 230) == 230;
|
||||
__asm__ ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (ecx));
|
||||
|
||||
return ((eax & mask) == mask);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue