HalpInterruptUpdateLinesPostSwap

INT64 __fastcall HalpInterruptUpdateLinesPostSwap(INT64 a1, INT64 a2, INT64 a3, _DWORD *a4, _DWORD *a5){
  int v5; 
  int v7; 
  int v8; 
  __int64 v10; 
  __int64 i; 
  __int64 v12; 
  __int64 v13; 
  int v14; 
  int v15; 
  int v16; 
  int v17; 
  int v18; 
  int v19; 
  int v20; 
  bool v21; 
  v5 = 0;
  v7 = a3;
  v8 = a2;
  if( *(_DWORD *)(a1 + 24) - *(_DWORD *)(a1 + 20) > 0 )
  {
    v10 = 0i64;
    for( i = 0i64; ; i += 56i64 )
    {
      v12 = *(_QWORD *)(a1 + 40);
      v13 = *(_QWORD *)(a1 + 48);
      v14 = *(_DWORD *)(i + v12 + 24);
      if( v14 != 4 )
        goto LABEL_6;
      if( *(_DWORD *)(i + v12 + 32) == v8 )
        break;
LABEL_11:
      if( *a4 == 6 && v14 == 6 )
      {
        v18 = a4[2];
        if( *(_BYTE *)(v10 + v13 + 2) )
        {
          if( *(_DWORD *)(v10 + v13 + 4) == v18 && (*(_DWORD *)(v10 + v13 + 8) & a4[3]) != 0 )
          {
            *(_DWORD *)(i + v12 + 36) |= a5[3];
            v20 = ~a4[3];
            v21 = (v20 & *(_DWORD *)(v10 + v13 + 8)) == 0;
            *(_DWORD *)(v10 + v13 + 8) &= v20;
            if( v21 )
              *(_BYTE *)(v10 + v13 + 2) = 0;
          }
        }
        else if( v18 == *(_DWORD *)(i + v12 + 32) )
        {
          if( v18 == a5[2] )
          {
            *(_DWORD *)(i + v12 + 36) &= ~a4[3];
            *(_DWORD *)(i + v12 + 36) |= a5[3];
          }
          else
          {
            *(_BYTE *)(v10 + v13 + 2) = 1;
            *(_DWORD *)(v10 + v13 + 4) = *(_DWORD *)(i + v12 + 32);
            v19 = *(_DWORD *)(i + v12 + 36) & ~a4[3];
            *(_DWORD *)(v10 + v13 + 8) = v19;
            *(_BYTE *)(v10 + v13 + 2) &= -(v19 != 0);
            *(_DWORD *)(i + v12 + 32) = a5[2];
            *(_DWORD *)(i + v12 + 36) = a5[3];
          }
        }
      }
      ++v5;
      v10 += 16i64;
      if( v5 >= *(_DWORD *)(a1 + 24) - *(_DWORD *)(a1 + 20) )
        return 0i64;
    }
    *(_DWORD *)(i + v12 + 32) = v7;
LABEL_6:
    if( v14 == 5 && *a4 == 5 )
    {
      v15 = *(_DWORD *)(i + v12 + 32);
      v16 = a4[2];
      if( (v16 & v15) != 0 )
      {
        v17 = v15 & ~v16;
        *(_DWORD *)(i + v12 + 32) = v17;
        if( *a5 == 5 )
          *(_DWORD *)(i + v12 + 32) = v17 | a5[2];
      }
    }
    goto LABEL_11;
  }
  return 0i64;
}

Referenced by:

HalpInterruptSwapProcessorIdentifiers