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.