diff --git a/src/arch/x86/cpuid.cc b/src/arch/x86/cpuid.cc index f06ba04d8..4ac7a5d19 100644 --- a/src/arch/x86/cpuid.cc +++ b/src/arch/x86/cpuid.cc @@ -89,7 +89,7 @@ namespace X86ISA { case VendorAndLargestExtFunc: assert(vendorStringSize >= 12); result = CpuidResult( - NumExtendedCpuidFuncs - 1, + 0x80000000 + NumExtendedCpuidFuncs - 1, stringToRegister(vendorString), stringToRegister(vendorString + 4), stringToRegister(vendorString + 8)); @@ -149,7 +149,7 @@ namespace X86ISA { break; case FamilyModelStepping: result = CpuidResult(0x00020f51, 0000000405, - 0xe3d3fbff, 0x00000001); + 0xe7d3fbff, 0x00000001); break; default: return false; diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa index 1ee62142a..0f6d59f3d 100644 --- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa +++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa @@ -813,7 +813,7 @@ 0x1: pop_fs(); 0x2: CPUIDInst::CPUID({{ CpuidResult result; - success = doCpuid(xc->tcBase(), Rax, result); + success = doCpuid(xc->tcBase(), bits(Rax, 31, 0), result); Rax = result.rax; Rbx = result.rbx; Rcx = result.rcx;