XmSubOperands
INT64 __fastcall XmSubOperands(_DWORD *a1, UINT64 a2){
int v2;
int v3;
char v4;
_DWORD *v5;
int v6;
int v7;
char v8;
unsigned __int8 v9;
int v10;
INT64 v11;
int v12;
int v13;
unsigned int v14;
INT64 result;
unsigned int v16;
unsigned __int16 v17;
unsigned __int16 v18;
unsigned int v19;
unsigned int v20;
unsigned int v21;
v2 = a1[30];
v3 = 0;
v21 = 0;
v4 = a2;
v5 = a1;
v6 = 0;
if( v2 )
{
if( v2 == 3 )
{
v19 = a1[26];
v8 = 31;
v20 = a1[27];
LOBYTE(v6) = v19 - (unsigned int)a2 < v20;
LOBYTE(v3) = v19 < (unsigned int)a2;
v10 = v3 | v6;
v11 = v19 - (_DWORD)a2 - v20;
goto LABEL_4;
}
v17 = *((_WORD *)a1 + 52);
v8 = 15;
v18 = *((_WORD *)a1 + 54);
LOBYTE(v6) = (unsigned __int16)(v17 - a2) < v18;
LOBYTE(v3) = v17 < (unsigned __int16)a2;
v10 = v3 | v6;
LOWORD(v21) = v17 - a2 - v18;
}
else
{
v7 = *((unsigned __int8 *)a1 + 104);
v8 = 7;
v9 = *((_BYTE *)a1 + 108);
LOBYTE(v6) = (unsigned __int8)(v7 - a2) < v9;
LOBYTE(v3) = (unsigned __int8)v7 < (unsigned __int8)a2;
v10 = v3 | v6;
LOBYTE(v21) = v7 - a2 - v9;
}
v11 = v21;
LABEL_4:
v12 = v5[31];
v13 = v12;
if( v12 != 13 && v12 != 87 )
{
XmStoreResult((INT64)v5, v11);
v13 = v5[31];
}
v14 = v5[4];
if( v13 != 31 )
v14 = v10 | v14 & 0xFFFFFFFE;
result = v5[27] & 0xF;
v16 = v14 & 0xFFFFFFEB | ((v5[26] & 0xF) - (_BYTE)result - v4) & 0x10 | (4
* (((*((_BYTE *)XmBitCount + (v11 & 0xF))
+ *((_BYTE *)XmBitCount
+ ((unsigned __int8)v11 >> 4))) & 1) == 0));
if( v13 != 87 )
{
result = (unsigned int)-(int)v11;
v16 = ((_DWORD)v11 == 0 ? 0x40 : 0) | v16 & 0xFFFFFFBF;
}
v5[4] = v16 & 0xFFFFF77F | ((((unsigned int)v11 >> v8) & 1 | (16
* (((unsigned __int8)v10 ^ (unsigned __int8)(((unsigned int)v11 ^ v5[26] ^ v5[27]) >> v8)) & 1))) << 7);
return result;
}Referenced by:
XmCmpxchgOp
XmDecOp
XmNegOp
XmSbbOp
XmSubOp