Invalid CPUID instructions should return zero in EBX/ECX/EDX. Fixes CPU type test and subsequent invalid 3DNow! instruction execution in NFL Blitz 2000.

This commit is contained in:
SarahW 2018-04-08 17:16:04 +01:00
commit 031f64c1a3

View file

@ -1239,7 +1239,7 @@ void cpu_CPUID()
EDX = CPUID_FPU; /*FPU*/ EDX = CPUID_FPU; /*FPU*/
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
case CPU_iDX4: case CPU_iDX4:
@ -1257,7 +1257,7 @@ void cpu_CPUID()
EDX = CPUID_FPU | CPUID_VME; EDX = CPUID_FPU | CPUID_VME;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
case CPU_Am486SX: case CPU_Am486SX:
@ -1274,7 +1274,7 @@ void cpu_CPUID()
EBX = ECX = EDX = 0; /*No FPU*/ EBX = ECX = EDX = 0; /*No FPU*/
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
case CPU_Am486DX: case CPU_Am486DX:
@ -1292,7 +1292,7 @@ void cpu_CPUID()
EDX = CPUID_FPU; /*FPU*/ EDX = CPUID_FPU; /*FPU*/
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
case CPU_WINCHIP: case CPU_WINCHIP:
@ -1323,7 +1323,7 @@ void cpu_CPUID()
EDX |= CPUID_MMX; EDX |= CPUID_MMX;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
case CPU_PENTIUM: case CPU_PENTIUM:
@ -1341,7 +1341,7 @@ void cpu_CPUID()
EDX = CPUID_FPU | CPUID_VME | CPUID_PSE | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B; EDX = CPUID_FPU | CPUID_VME | CPUID_PSE | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
case CPU_PENTIUMMMX: case CPU_PENTIUMMMX:
@ -1359,7 +1359,7 @@ void cpu_CPUID()
EDX = CPUID_FPU | CPUID_VME | CPUID_PSE | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B | CPUID_MMX; EDX = CPUID_FPU | CPUID_VME | CPUID_PSE | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B | CPUID_MMX;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
@ -1378,7 +1378,7 @@ void cpu_CPUID()
EDX = CPUID_FPU; EDX = CPUID_FPU;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
@ -1397,7 +1397,7 @@ void cpu_CPUID()
EDX = CPUID_FPU | CPUID_CMPXCHG8B; EDX = CPUID_FPU | CPUID_CMPXCHG8B;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
@ -1416,7 +1416,7 @@ void cpu_CPUID()
EDX = CPUID_FPU | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B; EDX = CPUID_FPU | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
@ -1436,7 +1436,7 @@ void cpu_CPUID()
EDX = CPUID_FPU | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B | CPUID_CMOV | CPUID_MMX; EDX = CPUID_FPU | CPUID_TSC | CPUID_MSR | CPUID_CMPXCHG8B | CPUID_CMOV | CPUID_MMX;
} }
else else
EAX = 0; EAX = EBX = ECX = EDX = 0;
break; break;
} }