B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSplitChild

char *__fastcall B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSplitChild(
        _QWORD *a1,
        __int64 a2){
  int v2; 
  __int64 v4; 
  void *v5; 
  __int64 v6; 
  char *v7; 
  char *v8; 
  __int64 v9; 
  UINT8 *v10; 
  int v11; 
  UINT8 *v12; 
  UINT8 *v13; 
  unsigned int v14; 
  __int64 v15; 
  int v16; 
  bool v17; 
  _BYTE *v19; 
  _BYTE *v20; 
  __int128 v21; 
  char *v23; 
  v2 = *(_DWORD *)(a2 + 24);
  DWORD1(v21) = 0;
  v4 = *(_QWORD *)a2 + 16i64 * (unsigned int)(v2 - 1);
  v5 = 0i64;
  v23 = 0i64;
  v6 = *(_QWORD *)v4;
  v7 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
         (__int64)a1,
         *(_BYTE *)(*(_QWORD *)v4 + 3i64),
         *(_BYTE *)(*(_QWORD *)v4 + 2i64));
  v8 = v7;
  if( !v7 )
    return v23;
  DWORD1(v21) = 0;
  *((_QWORD *)&v21 + 1) = v7;
  v9 = (*(_DWORD *)v6 >> 1) & 0x7FFF;
  if( *(_BYTE *)(v6 + 3) )
  {
    v10 = (UINT8 *)(v6 + 16 + 8 * v9);
    if( (*(_DWORD *)v6 & 1) != 0 && (unsigned __int64)(v10 + 8) < *(_QWORD *)(v4 + 8) )
    {
      v10 += 8;
      LODWORD(v9) = v9 + 1;
    }
    v11 = *(_DWORD *)v10;
    v12 = 0i64;
  }
  else
  {
    v10 = 0i64;
    v12 = (UINT8 *)(v6 + 16 * (((*(_DWORD *)v6 >> 1) & 0x7FFF) + 1i64));
    v11 = *(_DWORD *)v12;
  }
  LODWORD(v21) = v11;
  v13 = (UINT8 *)(v8 + 16);
  v14 = (unsigned __int16)*(_DWORD *)v6 - (_DWORD)v9;
  if( *(_BYTE *)(v6 + 3) )
  {
    *((_QWORD *)v8 + 1) = *(_QWORD *)(v6 + 8);
    memmove(v13, v10, 8i64 * v14);
  }
  else
  {
    memmove(v13, v12 + 16, 16i64 * --v14);
    *((_QWORD *)v8 + 1) = *((_QWORD *)v12 + 1);
  }
  *(_WORD *)v8 = v14;
  if( *a1 == v6 )
  {
    v19 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
            v15,
            0,
            *(_BYTE *)(v6 + 2) + 1);
    v5 = v19;
    if( v19 )
    {
      *((_QWORD *)v19 + 1) = v6;
      v20 = v19 + 16;
      *((_OWORD *)v19 + 1) = v21;
      *(_WORD *)v19 = 1;
      *a1 = v19;
      memmove((UINT8 *)(v4 + 16), (UINT8 *)v4, 16i64 * (unsigned int)(*(_DWORD *)(a2 + 28) - 1));
      *(_QWORD *)v4 = v5;
      *(_QWORD *)(v4 + 8) = v20;
      ++*(_DWORD *)(a2 + 24);
      goto LABEL_9;
    }
  }
  else
  {
    --*(_DWORD *)(a2 + 24);
    v16 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeInsertEx(
            (int **)a1,
            a2,
            &v21);
    ++*(_DWORD *)(a2 + 24);
    if( v16 >= 0 )
    {
LABEL_9:
      v17 = *(_BYTE *)(v6 + 3) == 0;
      *(_WORD *)v6 = v9;
      if( !v17 )
        *(_QWORD *)(v6 + 8) = v8;
      v23 = v8;
      v8 = 0i64;
      v5 = 0i64;
    }
  }
  if( v8 )
    ExFreePoolWithTag(v8, 0);
  if( v5 )
    ExFreePoolWithTag(v5, 0);
  return v23;
}

Referenced by:

No references.