XmImulxOp

INT64 __fastcall XmImulxOp(INT64 *a1){
  int v1; 
  unsigned __int16 v2; 
  __int64 v3; 
  int v4; 
  __int64 v5; 
  bool v6; 
  INT64 *v7; 
  INT64 v8; 
  int v9; 
  int v10; 
  unsigned int v11; 
  INT64 v12; 
  __int64 v13; 
  INT64 result; 
  INT64 v15; 
  v1 = *((_DWORD *)a1 + 30);
  if( v1 )
  {
    v7 = a1 + 4;
    if( v1 == 3 )
    {
      v15 = *((int *)a1 + 26) * (__int64)*((int *)a1 + 27);
      XmStoreResult((INT64)a1, (unsigned int)(*((_DWORD *)a1 + 26) * *((_DWORD *)a1 + 27)));
      *(_QWORD *)(v8 + 88) = v7;
      XmStoreResult(v8, HIDWORD(v15));
      v6 = v10 == v9 >> 31;
    }
    else
    {
      XmStoreResult((INT64)a1, (unsigned __int16)(*((_WORD *)a1 + 52) * *((_WORD *)a1 + 54)));
      *(_QWORD *)(v12 + 88) = v7;
      XmStoreResult(v12, HIWORD(v11));
      v6 = *(_WORD *)v7 == (unsigned __int16)(*(__int16 *)(v13 + 24) >> 15);
    }
  }
  else
  {
    v2 = *((char *)a1 + 104) * *((char *)a1 + 108);
    *((_DWORD *)a1 + 30) = 1;
    XmStoreResult((INT64)a1, v2);
    v6 = *(_BYTE *)(v3 + 25) == (unsigned __int8)(*(char *)(v5 + 24) >> 7);
  }
  LOBYTE(v4) = !v6;
  result = (v4 << 11) | v4 & 0xFFFFF7FF | *(_DWORD *)(v3 + 16) & 0xFFFFF7FE;
  *(_DWORD *)(v3 + 16) = result;
  return result;
}

Referenced by:

No references.