HalpMceRecoveryMemoryErrorIntel

INT64 __fastcall HalpMceRecoveryMemoryErrorIntel(INT64 a1){
  __int64 v1; 
  __int64 v2; 
  bool v3; 
  unsigned int v5; 
  __int64 v6; 
  char v7; 
  __int64 v8; 
  v1 = *(_QWORD *)(a1 + 20);
  v2 = *(_QWORD *)(a1 + 40);
  v3 = 0;
  v5 = -1073741637;
  if( (v1 & 3) == 1 )
    return v5;
  if( (unsigned __int8)v2 >> 4 != 3 )
  {
    if( (unsigned __int8)v2 >> 4 == 5 && (((unsigned __int8)v2 >> 2) & 3) == 0 )
      v3 = (v2 & 3) == 0;
LABEL_9:
    if( !v3 )
      return v5;
    goto LABEL_10;
  }
  if( (((unsigned __int8)v2 >> 2) & 3) != 1 || (v2 & 3) != 0 )
    goto LABEL_9;
  v3 = 1;
LABEL_10:
  if( (v2 & 0x800000000000000i64) != 0 && (v2 & 0x400000000000000i64) != 0 )
  {
    v6 = *(_QWORD *)(a1 + 56);
    if( (*(_QWORD *)(a1 + 56) & 0x1C0i64) == 128 )
    {
      v7 = v6 & 0x3F;
      v8 = HalpMcaPhysicalAddressMask & *(_QWORD *)(a1 + 48) & ~((1i64 << v7) - 1);
      if( !HalpHvWheaEnlightenedCpuManager )
        return(unsigned int)HalpMceMemoryErrorRecovery(v3, 1, v8);
      v5 = HalpHvMceConsumedMemoryErrorRecovery(
             *(unsigned int *)(a1 + 16),
             HalpMcaPhysicalAddressMask & *(_QWORD *)(a1 + 48) & ~((1i64 << v7) - 1),
             v2,
             (v1 & 2) != 0,
             v1 & 1);
      if( (v5 & 0x80000000) != 0 )
        return(unsigned int)HalpMceMemoryErrorRecovery(v3, 1, v8);
    }
  }
  return v5;
}

Referenced by:

HalpMceRecoveryRequired