XmCompareOperands
NTSTATUS __stdcall XmCompareOperands(INT64 a1){
int v1;
int v2;
int v4;
unsigned int v5;
unsigned int v6;
unsigned int v7;
int v8;
unsigned int v9;
unsigned int v10;
bool v11;
unsigned int v12;
unsigned __int16 v13;
unsigned int v14;
NTSTATUS result;
v1 = *(_DWORD *)(a1 + 120);
v2 = 0;
v4 = 0;
v5 = 0;
v6 = 0;
LOBYTE(v7) = 0;
if( !v1 )
{
v14 = *(unsigned __int8 *)(a1 + 104);
LOBYTE(v7) = *(_BYTE *)(a1 + 108) - v14;
v5 = (((unsigned __int8)v7 ^ (unsigned int)*(unsigned __int8 *)(a1 + 108)) >> 7) & (((unsigned __int8)v7 ^ v14) >> 7);
v6 = (unsigned __int8)v7 >> 7;
LOBYTE(v4) = *(_BYTE *)(a1 + 108) < (unsigned __int8)v14;
v11 = *(_BYTE *)(a1 + 108) == (unsigned __int8)v14;
goto LABEL_7;
}
v8 = v1 - 1;
if( !v8 )
{
v12 = *(unsigned __int16 *)(a1 + 104);
v13 = *(_WORD *)(a1 + 108);
v7 = (unsigned __int16)(v13 - v12);
v5 = ((v7 ^ v13) >> 15) & ((v7 ^ v12) >> 15);
v6 = v7 >> 15;
LOBYTE(v4) = v13 < (unsigned __int16)v12;
v11 = v13 == (unsigned __int16)v12;
goto LABEL_7;
}
if( v8 == 2 )
{
v9 = *(_DWORD *)(a1 + 108);
v10 = *(_DWORD *)(a1 + 104);
v7 = v9 - v10;
v5 = ((v7 ^ v10) >> 31) & ((v9 ^ v7) >> 31);
v6 = (v9 - v10) >> 31;
LOBYTE(v4) = v9 < v10;
v11 = v9 == v10;
LABEL_7:
LOBYTE(v2) = v11;
}
result = *((unsigned __int8 *)XmBitCount + (v7 & 0xF));
*(_DWORD *)(a1 + 16) = (4
* ((v5 << 9) | ((((_BYTE)result + *((_BYTE *)XmBitCount + ((unsigned __int8)v7 >> 4))) & 1) == 0))) | v4 & 0xFFFFF72B | *(_DWORD *)(a1 + 16) & 0xFFFFF72A | (((2 * v6) | v2 & 0xFFFFFFFD) << 6) & 0xFFFFF7FF | ((*(_BYTE *)(a1 + 104) & 0xF) + (*(_BYTE *)(a1 + 108) & 0xF)) & 0xFFFFF730;
return result;
}Referenced by:
XmCmpsOp
XmScasOp