XmDivOp

_WORD *__fastcall XmDivOp(INT64 a1, INT64 a2, VOID *a3){
  unsigned __int64 v3; 
  int v4; 
  _DWORD *v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 v8; 
  INT64 v9; 
  __int64 v10; 
  unsigned __int64 v12; 

  v3 = *(unsigned int *)(a1 + 108);
  if( !(_DWORD)v3 )
    longjmp((unsigned __int64 *)(a1 + 160), (VOID *)2, a3);
  v4 = *(_DWORD *)(a1 + 120);
  if( v4 )
  {
    v5 = (_DWORD *)(a1 + 32);
    if( v4 == 1 )
    {
      LODWORD(v7) = (*(unsigned __int16 *)(a1 + 24) | (unsigned __int64)(*(unsigned __int16 *)v5 << 16))
                  / (unsigned int)v3;
      v6 = (unsigned int)(*(unsigned __int16 *)(a1 + 24) | (*(unsigned __int16 *)v5 << 16)) >> 16;
      LODWORD(v8) = (*(unsigned __int16 *)(a1 + 24) | (unsigned __int64)(*(unsigned __int16 *)v5 << 16))
                  % (unsigned int)v3;
    }
    else
    {
      v6 = (unsigned int)*v5;
      LODWORD(v12) = *(_DWORD *)(a1 + 24);
      HIDWORD(v12) = *v5;
      v7 = v12 / v3;
      v8 = v12 % v3;
    }
  }
  else
  {
    LODWORD(v7) = *(unsigned __int16 *)(a1 + 24) / (unsigned int)v3;
    v6 = HIBYTE(*(unsigned __int16 *)(a1 + 24));
    LODWORD(v8) = *(unsigned __int16 *)(a1 + 24) % (unsigned int)v3;
  }
  if( (unsigned int)v6 >= (unsigned int)v3 )
    longjmp((unsigned __int64 *)(a1 + 160), (VOID *)3, (VOID *)v6);
  XmStoreResult(a1, (unsigned int)v7);
  *(_QWORD *)(v9 + 88) = v10;
  return XmStoreResult(v9, (unsigned int)v8);
}

Referenced by:

No references.