blob: e8e8a70591b1a7fba56ef97522c1597378353dec [file] [log] [blame]
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#if defined(__i386__)
int __mingw_has_sse (void);
static int __has_sse = -1;
int __mingw_has_sse(void)
{
int cpuInfo[4], infoType = 1;
int o_flag, n_flag;
if (__has_sse != -1)
return __has_sse;
__asm__ volatile ("pushfl\n\tpopl %0" : "=mr" (o_flag));
n_flag = o_flag ^ 0x200000;
__asm__ volatile ("pushl %0\n\tpopfl" : : "g" (n_flag));
__asm__ volatile ("pushfl\n\tpopl %0" : "=mr" (n_flag));
if (n_flag == o_flag)
{
__has_sse = 0;
return 0;
}
__asm__ __volatile__ (
"cpuid"
: "=a" (cpuInfo[0]), "=b" (cpuInfo[1]), "=c" (cpuInfo[2]),
"=d" (cpuInfo[3])
: "a" (infoType));
__has_sse = (cpuInfo[3] & 0x2000000);
return __has_sse;
}
#endif /* __i386__ */