// File: jvanns[P]verbatim/sub/lmdb/libraries/liblmdb/mdb.c
// Function: mdb_xcursor_init1
static void
mdb_xcursor_init1(MDB_cursor *mc, MDB_node *node)
{
	MDB_xcursor *mx = mc->mc_xcursor;

	if (node->mn_flags & F_SUBDATA) {
		memcpy(&mx->mx_db, NODEDATA(node), sizeof(MDB_db));
		mx->mx_cursor.mc_pg[0] = 0;
		mx->mx_cursor.mc_snum = 0;
		mx->mx_cursor.mc_top = 0;
		mx->mx_cursor.mc_flags = C_SUB;
	} else {
		MDB_page *fp = NODEDATA(node);
		mx->mx_db.md_pad = 0;
		mx->mx_db.md_flags = 0;
		mx->mx_db.md_depth = 1;
		mx->mx_db.md_branch_pages = 0;
		mx->mx_db.md_leaf_pages = 1;
		mx->mx_db.md_overflow_pages = 0;
		mx->mx_db.md_entries = NUMKEYS(fp);
		COPY_PGNO(mx->mx_db.md_root, fp->mp_pgno);
		mx->mx_cursor.mc_snum = 1;
		mx->mx_cursor.mc_top = 0;
		mx->mx_cursor.mc_flags = C_INITIALIZED|C_SUB;
		mx->mx_cursor.mc_pg[0] = fp;
		mx->mx_cursor.mc_ki[0] = 0;
		if (mc->mc_db->md_flags & MDB_DUPFIXED) {
			mx->mx_db.md_flags = MDB_DUPFIXED;
			mx->mx_db.md_pad = fp->mp_pad;
			if (mc->mc_db->md_flags & MDB_INTEGERDUP)
				mx->mx_db.md_flags |= MDB_INTEGERKEY;
		}
	}
	DPRINTF(("Sub-db -%u root page %"Z"u", mx->mx_cursor.mc_dbi,
		mx->mx_db.md_root));
	mx->mx_dbflag = DB_VALID|DB_USRVALID|DB_DIRTY; /* DB_DIRTY guides mdb_cursor_touch */
#if UINT_MAX < SIZE_MAX
	if (mx->mx_dbx.md_cmp == mdb_cmp_int && mx->mx_db.md_pad == sizeof(size_t))
		mx->mx_dbx.md_cmp = mdb_cmp_clong;
#endif
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movzwl 0x4(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x8886
movq -0x18(%rbp), %rdi
addq $0x188, %rdi            # imm = 0x188
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
movq -0x10(%rbp), %rax
movzwl 0x6(%rax), %eax
cltq
addq %rax, %rsi
movl $0x30, %edx
callq 0x2230
movq -0x18(%rbp), %rax
movq $0x0, 0x48(%rax)
movq -0x18(%rbp), %rax
movw $0x0, 0x40(%rax)
movq -0x18(%rbp), %rax
movw $0x0, 0x42(%rax)
movq -0x18(%rbp), %rax
movl $0x4, 0x44(%rax)
jmp 0x89bb
movq -0x10(%rbp), %rax
addq $0x8, %rax
movq -0x10(%rbp), %rcx
movzwl 0x6(%rcx), %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movl $0x0, 0x188(%rax)
movq -0x18(%rbp), %rax
movw $0x0, 0x18c(%rax)
movq -0x18(%rbp), %rax
movw $0x1, 0x18e(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x190(%rax)
movq -0x18(%rbp), %rax
movq $0x1, 0x198(%rax)
movq -0x18(%rbp), %rax
movq $0x0, 0x1a0(%rax)
movq -0x20(%rbp), %rax
movzwl 0xc(%rax), %eax
subl $0x10, %eax
shrl %eax
movl %eax, %eax
movl %eax, %ecx
movq -0x18(%rbp), %rax
movq %rcx, 0x1a8(%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x1b0(%rax)
movq -0x18(%rbp), %rax
movw $0x1, 0x40(%rax)
movq -0x18(%rbp), %rax
movw $0x0, 0x42(%rax)
movq -0x18(%rbp), %rax
movl $0x5, 0x44(%rax)
movq -0x20(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x18(%rbp), %rax
movw $0x0, 0x148(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movzwl 0x4(%rax), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x89b9
movq -0x18(%rbp), %rax
movw $0x10, 0x18c(%rax)
movq -0x20(%rbp), %rax
movzwl 0x8(%rax), %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0x188(%rax)
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movzwl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x89b7
movq -0x18(%rbp), %rax
movzwl 0x18c(%rax), %ecx
orl $0x8, %ecx
movw %cx, 0x18c(%rax)
jmp 0x89b9
jmp 0x89bb
movq -0x18(%rbp), %rax
movb $0x19, 0x1e8(%rax)
movq -0x18(%rbp), %rax
leaq -0x5741(%rip), %rcx     # 0x3290
cmpq %rcx, 0x1c8(%rax)
jne 0x89fc
movq -0x18(%rbp), %rax
movl 0x188(%rax), %eax
cmpq $0x8, %rax
jne 0x89fc
movq -0x18(%rbp), %rax
leaq -0x5715(%rip), %rcx     # 0x32e0
movq %rcx, 0x1c8(%rax)
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)