From 7524fdda6a85e2b22ebdbcb7a84ddd40b5411e98 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sun, 2 May 2010 00:40:17 -0700 Subject: X86: Sometimes CPUID depends on ecx, so pass that in. --- src/arch/x86/cpuid.cc | 3 ++- src/arch/x86/cpuid.hh | 3 ++- src/arch/x86/isa/decoder/two_byte_opcodes.isa | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) (limited to 'src/arch') diff --git a/src/arch/x86/cpuid.cc b/src/arch/x86/cpuid.cc index cbd1defee..6b686f38a 100644 --- a/src/arch/x86/cpuid.cc +++ b/src/arch/x86/cpuid.cc @@ -79,7 +79,8 @@ namespace X86ISA { } bool - doCpuid(ThreadContext * tc, uint32_t function, CpuidResult &result) + doCpuid(ThreadContext * tc, uint32_t function, + uint32_t index, CpuidResult &result) { uint16_t family = bits(function, 31, 16); uint16_t funcNum = bits(function, 15, 0); diff --git a/src/arch/x86/cpuid.hh b/src/arch/x86/cpuid.hh index d8b013ba1..8d3181819 100644 --- a/src/arch/x86/cpuid.hh +++ b/src/arch/x86/cpuid.hh @@ -55,7 +55,8 @@ namespace X86ISA {} }; - bool doCpuid(ThreadContext * tc, uint32_t function, CpuidResult &result); + bool doCpuid(ThreadContext * tc, uint32_t function, + uint32_t index, CpuidResult &result); } // namespace X86ISA #endif diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa index 288c5e5a8..4b892cda2 100644 --- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa +++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa @@ -767,7 +767,8 @@ 0x1: pop_fs(); 0x2: CPUIDInst::CPUID({{ CpuidResult result; - success = doCpuid(xc->tcBase(), bits(Rax, 31, 0), result); + success = doCpuid(xc->tcBase(), bits(Rax, 31, 0), + bits(Rcx, 31, 0), result); Rax = result.rax; Rbx = result.rbx; Rcx = result.rcx; -- cgit v1.2.3