// File: /workspace/github_c_makefile_star2_O0/nilyang[P]redis-tdd-annotation/src/ziplist.c
// Function: zipEntry
static zlentry zipEntry(unsigned char *p) {
    zlentry e;

    // e.prevrawlensize 保存着编码前一个节点的长度所需的字节数
    // e.prevrawlen 保存着前一个节点的长度
    // T = O(1)
    ZIP_DECODE_PREVLEN(p, e.prevrawlensize, e.prevrawlen);

    // p + e.prevrawlensize 将指针移动到列表节点本身
    // e.encoding 保存着节点值的编码类型
    // e.lensize 保存着编码节点值长度所需的字节数
    // e.len 保存着节点值的长度
    // T = O(1)
    ZIP_DECODE_LENGTH(p + e.prevrawlensize, e.encoding, e.lensize, e.len);

    // 计算头结点的字节数
    e.headersize = e.prevrawlensize + e.lensize;

    // 记录指针
    e.p = p;

    return e;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x18(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x8(%rbp)
jmp 0x32fe6
movq -0x8(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xfe, %eax
jge 0x33000
movq -0x18(%rbp), %rax
movl $0x1, (%rax)
jmp 0x3300a
movq -0x18(%rbp), %rax
movl $0x5, (%rax)
jmp 0x3300c
movq -0x18(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x33025
movq -0x18(%rbp), %rax
movq -0x8(%rbp), %rcx
movzbl (%rcx), %ecx
movl %ecx, 0x4(%rax)
jmp 0x3303e
movq -0x18(%rbp), %rax
cmpl $0x5, (%rax)
jne 0x3303c
movq -0x18(%rbp), %rax
movq -0x8(%rbp), %rcx
movl 0x1(%rcx), %ecx
movl %ecx, 0x4(%rax)
jmp 0x3303e
jmp 0x33040
jmp 0x33042
jmp 0x33044
movq -0x18(%rbp), %rax
movq -0x8(%rbp), %rcx
movl (%rax), %edx
movb (%rcx,%rdx), %cl
movb %cl, 0x14(%rax)
movzbl 0x14(%rax), %eax
cmpl $0xc0, %eax
jge 0x33070
movq -0x18(%rbp), %rax
movzbl 0x14(%rax), %ecx
andl $0xc0, %ecx
movb %cl, 0x14(%rax)
jmp 0x33072
movq -0x18(%rbp), %rax
movzbl 0x14(%rax), %eax
cmpl $0xc0, %eax
jge 0x3317d
movq -0x18(%rbp), %rax
movzbl 0x14(%rax), %eax
cmpl $0x0, %eax
jne 0x330b2
movq -0x18(%rbp), %rax
movl $0x1, 0x8(%rax)
movq -0x8(%rbp), %rcx
movl (%rax), %edx
movzbl (%rcx,%rdx), %ecx
andl $0x3f, %ecx
movl %ecx, 0xc(%rax)
jmp 0x3317b
movq -0x18(%rbp), %rax
movzbl 0x14(%rax), %eax
cmpl $0x40, %eax
jne 0x330ef
movq -0x18(%rbp), %rax
movl $0x2, 0x8(%rax)
movq -0x8(%rbp), %rcx
movl (%rax), %edx
movzbl (%rcx,%rdx), %ecx
andl $0x3f, %ecx
shll $0x8, %ecx
movq -0x8(%rbp), %rdx
movl (%rax), %esi
movzbl 0x1(%rdx,%rsi), %edx
orl %edx, %ecx
movl %ecx, 0xc(%rax)
jmp 0x33179
movq -0x18(%rbp), %rax
movzbl 0x14(%rax), %eax
cmpl $0x80, %eax
jne 0x33149
movq -0x18(%rbp), %rax
movl $0x5, 0x8(%rax)
movq -0x8(%rbp), %rcx
movl (%rax), %edx
movzbl 0x1(%rcx,%rdx), %ecx
shll $0x18, %ecx
movq -0x8(%rbp), %rdx
movl (%rax), %esi
movzbl 0x2(%rdx,%rsi), %edx
shll $0x10, %edx
orl %edx, %ecx
movq -0x8(%rbp), %rdx
movl (%rax), %esi
movzbl 0x3(%rdx,%rsi), %edx
shll $0x8, %edx
orl %edx, %ecx
movq -0x8(%rbp), %rdx
movl (%rax), %esi
movzbl 0x4(%rdx,%rsi), %edx
orl %edx, %ecx
movl %ecx, 0xc(%rax)
jmp 0x33177
xorl %eax, %eax
testb $0x1, %al
jne 0x33151
jmp 0x33153
jmp 0x33175
leaq 0xb0231(%rip), %rdi     # 0xe338b
leaq 0xadbfc(%rip), %rsi     # 0xe0d5d
movl $0x2e9, %edx            # imm = 0x2E9
callq 0x63ca0
movl $0x1, %edi
callq 0x1f3b0
jmp 0x33177
jmp 0x33179
jmp 0x3317b
jmp 0x3319a
movq -0x18(%rbp), %rax
movl $0x1, 0x8(%rax)
movzbl 0x14(%rax), %edi
callq 0x33ee0
movl %eax, %ecx
movq -0x18(%rbp), %rax
movl %ecx, 0xc(%rax)
jmp 0x3319c
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movl (%rcx), %edx
addl 0x8(%rcx), %edx
movl %edx, 0x10(%rcx)
movq -0x8(%rbp), %rdx
movq %rdx, 0x18(%rcx)
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)