# HG changeset patch # User moel.mich # Date 1370794243 0 # Node ID c7e2a6aa4f964ee021101f486f4425bd03aa266b # Parent d1f25b504845faad4c98b626ed332cd386370fa6 Added experimental support for Intel Haswell CPUs. diff -r d1f25b504845 -r c7e2a6aa4f96 Hardware/CPU/IntelCPU.cs --- a/Hardware/CPU/IntelCPU.cs Sun Jun 09 16:08:59 2013 +0000 +++ b/Hardware/CPU/IntelCPU.cs Sun Jun 09 16:10:43 2013 +0000 @@ -4,7 +4,7 @@ License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. - Copyright (C) 2009-2012 Michael Möller + Copyright (C) 2009-2013 Michael Möller */ @@ -22,7 +22,8 @@ Atom, Nehalem, SandyBridge, - IvyBridge + IvyBridge, + Haswell } private readonly Sensor[] coreTemperatures; @@ -134,6 +135,12 @@ microarchitecture = Microarchitecture.IvyBridge; tjMax = GetTjMaxFromMSR(); break; + case 0x3C: // Intel Core i5, i7 4xxx LGA1150 (22nm) + case 0x45: + case 0x46: + microarchitecture = Microarchitecture.Haswell; + tjMax = GetTjMaxFromMSR(); + break; default: microarchitecture = Microarchitecture.Unknown; tjMax = Floats(100); @@ -176,7 +183,8 @@ } break; case Microarchitecture.Nehalem: case Microarchitecture.SandyBridge: - case Microarchitecture.IvyBridge: { + case Microarchitecture.IvyBridge: + case Microarchitecture.Haswell: { uint eax, edx; if (Ring0.Rdmsr(MSR_PLATFORM_INFO, out eax, out edx)) { timeStampCounterMultiplier = (eax >> 8) & 0xff; @@ -234,7 +242,8 @@ } if (microarchitecture == Microarchitecture.SandyBridge || - microarchitecture == Microarchitecture.IvyBridge) + microarchitecture == Microarchitecture.IvyBridge || + microarchitecture == Microarchitecture.Haswell) { powerSensors = new Sensor[energyStatusMSRs.Length]; lastEnergyTime = new DateTime[energyStatusMSRs.Length]; @@ -341,7 +350,8 @@ coreClocks[i].Value = (float)(multiplier * newBusClock); } break; case Microarchitecture.SandyBridge: - case Microarchitecture.IvyBridge: { + case Microarchitecture.IvyBridge: + case Microarchitecture.Haswell: { uint multiplier = (eax >> 8) & 0xff; coreClocks[i].Value = (float)(multiplier * newBusClock); } break;