HalpErrataApplyPerProcessor

CHAR __stdcall HalpErrataApplyPerProcessor(){
  unsigned __int64 v0; 
  UINT8 v2; 
  UINT8 v3; 
  CHAR v4; 
  UINT8 v5; 
  v4 = 0;
  v2 = 0;
  v5 = 0;
  v3 = 0;
  LOBYTE(v0) = -HalpGetCpuInfo(&v4, &v5, &v2, &v3);
  if( (v3 & (unsigned __int8)-((_BYTE)v0 != 0)) == 1 )
  {
    if( v4 == 15 )
    {
      v0 = __readmsr(0xC001001F) & 0xFFFFFFFEFFEFFFFFui64 | 0x100000000i64;
      __writemsr(0xC001001F, v0);
    }
    if( v4 == 18 )
    {
      v0 = __readmsr(0xC0011029) | 0x80000000;
      __writemsr(0xC0011029, v0);
    }
    if( v4 == 23 && v2 == 1 && v5 == 1 )
    {
      v0 = __readmsr(0xC0011023) | 0x100;
      __writemsr(0xC0011023, v0);
    }
    if( !*(_BYTE *)HalpHvCpuManager && v4 == 23 && v2 <= 0x2Fu )
    {
      v0 = __readmsr(0xC001102C) | 0x8000000000000i64;
      __writemsr(0xC001102C, v0);
    }
  }
  return v0;
}

Referenced by:

HalpErrataInitSystem
HalpPostSleepMP