HalpMceRecoveryMemoryErrorAmd

INT64 __fastcall HalpMceRecoveryMemoryErrorAmd(INT64 a1){
  __int64 v1; 
  CHAR v2; 
  __int64 v3; 
  __int64 v4; 
  int v5; 
  v1 = *(_QWORD *)(a1 + 20);
  v2 = 0;
  v3 = *(_QWORD *)(a1 + 40);
  v4 = 0i64;
  v5 = -1073741637;
  if( (v1 & 3) != 1 && ((v3 & 0x80000000000i64) != 0 || (v1 & 3) == 0) )
  {
    if( (v3 & 0x400000000000000i64) != 0 )
    {
      v2 = 1;
      v4 = *(_QWORD *)(a1 + 48) & ~((1i64 << (HIBYTE(*(_QWORD *)(a1 + 48)) & 0x3F)) - 1) & 0xFFFFFFFFFFFFFFi64;
    }
    if( !HalpHvWheaEnlightenedCpuManager )
      return(unsigned int)HalpMceMemoryErrorRecovery(1, v2, v4);
    v5 = HalpHvMceConsumedMemoryErrorRecovery(*(unsigned int *)(a1 + 16), v4, v3, (v1 & 2) != 0, v1 & 1);
    if( v5 < 0 )
      return(unsigned int)HalpMceMemoryErrorRecovery(1, v2, v4);
  }
  return(unsigned int)v5;
}

Referenced by:

HalpMceRecoveryRequired