IvtUpdateSingleTargetExtendedDestination

INT64 __fastcall IvtUpdateSingleTargetExtendedDestination(UINT64 a1, CHAR a2, _DWORD *a3, INT64 a4, UINT64 a5){
  unsigned int v5; 
  unsigned __int64 v6; 
  __int64 v7; 
  v5 = a1;
  if( a2 )
  {
    v6 = (unsigned int)(unsigned __int16)a1
       - 1
       - (((unsigned __int64)((unsigned int)(unsigned __int16)a1 - 1) >> 1) & 0x5555555555555555i64);
    v5 = ((unsigned int)a1 >> 12) & 0xFFFF0 | ((unsigned int)((0x101010101010101i64
                                                             * (((v6 & 0x3333333333333333i64)
                                                               + ((v6 >> 2) & 0x3333333333333333i64)
                                                               + (((v6 & 0x3333333333333333i64)
                                                                 + ((v6 >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24);
  }
  v7 = 0i64;
  if( (_DWORD)a5 )
  {
    while( v5 != *a3 )
    {
      v7 = (unsigned int)(v7 + 1);
      ++a3;
      if( (unsigned int)v7 >= (unsigned int)a5 )
        goto LABEL_8;
    }
    v5 = *(_DWORD *)(a4 + 4 * v7);
  }
LABEL_8:
  if( a2 )
    return((v5 & 0xFFFFFFF0) << 12) | (1 << (v5 & 0xF));
  return v5;
}

Referenced by:

IvtUpdateExtendedDestination