mirror of
https://github.com/php/php-src.git
synced 2024-11-23 18:04:36 +08:00
Possible fix for bug #77357
Don't invoke CPUID with feature levels above the supported maximum. In this case CPUID will return the highest supported basic information leaf, which will have unrelated bits in the relevant positions.
This commit is contained in:
parent
349dbb7938
commit
5a361c3a54
@ -77,16 +77,24 @@ void zend_cpu_startup(void)
|
||||
{
|
||||
if (!cpuinfo.initialized) {
|
||||
zend_cpu_info ebx;
|
||||
int max_feature;
|
||||
|
||||
cpuinfo.initialized = 1;
|
||||
__zend_cpuid(0, 0, &cpuinfo);
|
||||
if (cpuinfo.eax == 0) {
|
||||
max_feature = cpuinfo.eax;
|
||||
if (max_feature == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
__zend_cpuid(1, 0, &cpuinfo);
|
||||
|
||||
/* for avx2 */
|
||||
__zend_cpuid(7, 0, &ebx);
|
||||
cpuinfo.ebx = ebx.ebx;
|
||||
if (max_feature >= 7) {
|
||||
__zend_cpuid(7, 0, &ebx);
|
||||
cpuinfo.ebx = ebx.ebx;
|
||||
} else {
|
||||
cpuinfo.ebx = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user