raise_exc_ex

__int64 __fastcall raise_exc_ex(
        unsigned int *a1,
        unsigned __int64 *a2,
        char a3,
        int a4,
        unsigned int *a5,
        unsigned int *a6,
        int a7){
  unsigned int v7; 
  unsigned int v11; 
  int v12; 
  int v13; 
  char v14; 
  __int64 v15; 
  unsigned int v16; 
  unsigned int v17; 
  unsigned int *v18; 
  _DWORD *v19; 
  int v20; 
  unsigned __int64 v21; 
  __int64 result; 
  UINT64 Arguments; 

  Arguments = (UINT64)a1;
  v7 = 0;
  a1[1] = 0;
  a1[2] = 0;
  a1[3] = 0;
  if( (a3 & 0x10) != 0 )
  {
    a1[1] |= 1u;
    v7 = -1073741681;
  }
  if( (a3 & 2) != 0 )
  {
    a1[1] |= 2u;
    v7 = -1073741677;
  }
  if( (a3 & 1) != 0 )
  {
    a1[1] |= 4u;
    v7 = -1073741679;
  }
  if( (a3 & 4) != 0 )
  {
    a1[1] |= 8u;
    v7 = -1073741682;
  }
  if( (a3 & 8) != 0 )
  {
    a1[1] |= 0x10u;
    v7 = -1073741680;
  }
  a1[2] ^= (a1[2] ^ ~(16 * (*a2 >> 7))) & 0x10;
  v11 = a1[2] ^ ((unsigned __int8)a1[2] ^ (unsigned __int8)~(8 * (*a2 >> 9))) & 8;
  a1[2] = v11;
  v12 = v11 ^ ((unsigned __int8)v11 ^ (unsigned __int8)~(4 * (*a2 >> 10))) & 4;
  a1[2] = v12;
  v13 = v12 ^ ((unsigned __int8)v12 ^ (unsigned __int8)~(2 * (*a2 >> 11))) & 2;
  a1[2] = v13;
  a1[2] = v13 ^ ((unsigned __int8)v13 ^ (unsigned __int8)~(unsigned __int8)((unsigned __int64)*(unsigned int *)a2 >> 12)) & 1;
  v14 = statfp();
  if( (v14 & 1) != 0 )
    a1[3] |= 0x10u;
  if( (v14 & 4) != 0 )
    a1[3] |= 8u;
  if( (v14 & 8) != 0 )
    a1[3] |= 4u;
  if( (v14 & 0x10) != 0 )
    a1[3] |= 2u;
  if( (v14 & 0x20) != 0 )
    a1[3] |= 1u;
  v15 = *(_DWORD *)a2 & 0x6000i64;
  switch( v15 )
  {
    case 0i64:
      *a1 &= 0xFFFFFFFC;
      break;
    case 8192i64:
      v16 = *a1 & 0xFFFFFFFC | 1;
      goto LABEL_27;
    case 16384i64:
      v16 = *a1 & 0xFFFFFFFC | 2;
LABEL_27:
      *a1 = v16;
      break;
    case 24576i64:
      *a1 |= 3u;
      break;
  }
  *a1 ^= (*a1 ^ (32 * a4)) & 0x1FFE0;
  v17 = a1[8];
  v18 = a6;
  if( a7 )
  {
    a1[8] = v17 & 0xFFFFFFE0 | 1;
    a1[4] = *a5;
    a1[24] = a1[24] & 0xFFFFFFE0 | 1;
    a1[20] = *v18;
  }
  else
  {
    a1[8] = v17 & 0xFFFFFFE0 | 3;
    *((_QWORD *)a1 + 2) = *(_QWORD *)a5;
    a1[24] = a1[24] & 0xFFFFFFE0 | 3;
    *((_QWORD *)a1 + 10) = *(_QWORD *)v18;
  }
  clrfp();
  RaiseException(v7, 0i64, 1ui64, &Arguments);
  v19 = (_DWORD *)Arguments;
  v20 = *(_DWORD *)(Arguments + 8);
  if( (v20 & 0x10) != 0 )
  {
    *a2 &= ~0x80ui64;
    v20 = v19[2];
  }
  if( (v20 & 8) != 0 )
  {
    *a2 &= ~0x200ui64;
    v20 = v19[2];
  }
  if( (v20 & 4) != 0 )
  {
    *a2 &= ~0x400ui64;
    v20 = v19[2];
  }
  if( (v20 & 2) != 0 )
  {
    *a2 &= ~0x800ui64;
    v20 = v19[2];
  }
  if( (v20 & 1) != 0 )
    *a2 &= ~0x1000ui64;
  switch( *v19 & 3 )
  {
    case 0:
      *a2 &= 0xFFFFFFFFFFFF9FFFui64;
      break;
    case 1:
      v21 = *a2 & 0xFFFFFFFFFFFF9FFFui64 | 0x2000;
      goto LABEL_49;
    case 2:
      v21 = *a2 & 0xFFFFFFFFFFFF9FFFui64 | 0x4000;
LABEL_49:
      *a2 = v21;
      break;
    case 3:
      *a2 |= 0x6000ui64;
      break;
  }
  if( a7 )
  {
    result = (unsigned int)v19[20];
    *v18 = result;
  }
  else
  {
    result = *((_QWORD *)v19 + 10);
    *(_QWORD *)v18 = result;
  }
  return result;
}

Referenced by:

No references.