HalpVerifyHmatEntryValidity

BOOL __stdcall HalpVerifyHmatEntryValidity(INT64 a1){
  signed int v1; 
  unsigned int v2; 
  int v3; 
  unsigned __int64 v4; 
  unsigned __int64 v5; 
  unsigned int v6; 
  unsigned __int64 v7; 
  unsigned int v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 

  v1 = 0;
  v2 = 8;
  switch( *(_WORD *)a1 )
  {
    case 0:
      v2 = 40;
      goto LABEL_23;
    case 1:
      v2 = 32;
      if( *(_DWORD *)(a1 + 4) < 0x20u )
        break;
      v2 = -1;
      v5 = 4i64 * *(unsigned int *)(a1 + 12);
      if( v5 > 0xFFFFFFFF )
        goto LABEL_21;
      v6 = v5 + 32;
      if( v6 < 0x20 )
        goto LABEL_21;
      v7 = 4i64 * *(unsigned int *)(a1 + 16);
      if( v7 > 0xFFFFFFFF )
        goto LABEL_21;
      v8 = v6 + v7;
      if( v6 + (unsigned int)v7 < v6 )
        goto LABEL_21;
      v9 = *(unsigned int *)(a1 + 16) * (unsigned __int64)*(unsigned int *)(a1 + 12);
      if( v9 > 0xFFFFFFFF )
        goto LABEL_21;
      v10 = 2i64 * (unsigned int)v9;
      if( v10 > 0xFFFFFFFF )
        goto LABEL_21;
      if( v8 + (unsigned int)v10 >= v8 )
        v2 = v8 + v10;
      v1 = v8 + (unsigned int)v10 < v8 ? 0xC0000095 : 0;
LABEL_23:
      if( v1 < 0 )
        return v1 >= 0;
      break;
    case 2:
      v2 = 32;
      if( *(_DWORD *)(a1 + 4) >= 0x20u )
      {
        v3 = *(unsigned __int16 *)(a1 + 30);
        v2 = 2 * v3 + 32;
        if( (unsigned int)(2 * v3) < 0xFFFFFFE0 )
        {
          if( *(_QWORD *)(a1 + 16) >> 12 > *(&CmpDummyThreadEvent + 871)
            || (v4 = *(unsigned __int16 *)(a1 + 26), *(_QWORD *)(a1 + 16) < v4)
            || !(_WORD)v4 )
          {
            v1 = -1073741216;
            return v1 >= 0;
          }
          goto LABEL_23;
        }
LABEL_21:
        v1 = -1073741675;
        return v1 >= 0;
      }
      break;
  }
  if( *(_DWORD *)(a1 + 4) < v2 )
    v1 = -1073741811;
  return v1 >= 0;
}

Referenced by:

HalpNumaParseHmat