XmIdivOp

NTSTATUS __stdcall XmIdivOp(_DMA_TRANSFER_INFO *a1, _DMA_TRANSFER_INFO *a2){
  unsigned __int64 ScatterGatherElementCount_low; 
  __int64 ScatterGatherElementCount; 
  unsigned int Version; 
  int v6; 
  unsigned __int64 v7; 
  unsigned int v8; 
  __int64 v9; 
  __int64 v10; 
  INT64 v11; 
  unsigned int *p_ScatterGatherListSize; 
  int v14; 
  __int64 v15; 

  ScatterGatherElementCount = (int)a1[5].V1.ScatterGatherElementCount;
  if( !(_DWORD)ScatterGatherElementCount )
    longjmp((unsigned __int64 *)&a1[8].Version, (VOID *)2, (VOID *)ScatterGatherElementCount_low);
  Version = a1[6].Version;
  if( Version )
  {
    p_ScatterGatherListSize = &a1[1].V1.ScatterGatherListSize;
    if( Version == 1 )
    {
      ScatterGatherElementCount_low = (unsigned int)SLOWORD(a1[5].V2.ScatterGatherElementCount);
      v14 = (LOWORD(a1[1].V1.MapRegisterCount) | (*(unsigned __int16 *)p_ScatterGatherListSize << 16))
          / SLOWORD(a1[5].V2.ScatterGatherElementCount);
      if( ((v14 ^ (v14 << 16 >> 15)) & 0xFFFF0000) == 0 )
      {
        LODWORD(v7) = (unsigned __int16)v14;
        goto LABEL_6;
      }
    }
    else
    {
      HIDWORD(v15) = *p_ScatterGatherListSize;
      LODWORD(v15) = a1[1].V1.MapRegisterCount;
      v7 = v15 / ScatterGatherElementCount;
      ScatterGatherElementCount_low = HIDWORD(v7);
      if( HIDWORD(v7) == (int)v7 >> 31 )
        goto LABEL_6;
    }
LABEL_11:
    longjmp((unsigned __int64 *)&a1[8].Version, (VOID *)3, (VOID *)ScatterGatherElementCount_low);
  }
  v6 = SLOWORD(a1[1].V1.MapRegisterCount) / SLOBYTE(a1[5].V2.ScatterGatherElementCount);
  if( ((v6 ^ (v6 << 24 >> 23)) & 0xFFFFFF00) != 0 )
    goto LABEL_11;
  LODWORD(v7) = (unsigned __int8)v6;
LABEL_6:
  XmStoreResult((INT64)a1, (unsigned int)v7);
  *(_QWORD *)(v9 + 88) = v10;
  return(unsigned int)XmStoreResult(v11, v8);
}

Referenced by:

No references.