// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/src/../foreign/lzhuf.h
// Function: lzhuf_update
static void lzhuf_update(struct lzahuf_ctx *cctx, UI c)
{
	UI i, j, l;
	UI k;
	UI counter = 0;
	UI r_freq;

	r_freq = get_freq(cctx, cctx->lzhuf_R);
	if(r_freq > LZHUF_MAX_FREQ) {
		cctx->errflag = 1;
		return;
	}
	if (r_freq == LZHUF_MAX_FREQ) {
		lzhuf_reconst(cctx);
		if(cctx->errflag) return;
	}
	c = get_prnt(cctx, c + cctx->lzhuf_T);
	do {
		if(counter > (UI)DE_ARRAYCOUNT(cctx->prnt)) { // infinite loop?
			cctx->errflag = 1;
			return;
		}
		counter++;

		set_freq(cctx, c, get_freq(cctx, c)+1);
		k = get_freq(cctx, c);

		/* if the order is disturbed, exchange nodes */
		l = c + 1;
		if (k > get_freq(cctx, l)) {

			do {
				l++;
			} while(k > get_freq(cctx, l));

			l--;
			set_freq(cctx, c, get_freq(cctx, l));
			set_freq(cctx, l, k);

			i = get_son(cctx, c);
			set_prnt(cctx, i, l);
			if (i < cctx->lzhuf_T) set_prnt(cctx, i + 1, l);

			j = get_son(cctx, l);
			set_son(cctx, l, i);

			set_prnt(cctx, j, c);
			if (j < cctx->lzhuf_T) set_prnt(cctx, j + 1, c);
			set_son(cctx, c, j);

			c = l;
		}
		c = get_prnt(cctx, c);
	} while (c != 0);   /* repeat up to root */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movl $0x0, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movl 0x40(%rax), %esi
callq 0x18c0a0
movzwl %ax, %eax
movl %eax, -0x24(%rbp)
cmpl $0x8000, -0x24(%rbp)    # imm = 0x8000
jbe 0x18be85
movq -0x8(%rbp), %rax
movl $0x1, 0x54(%rax)
jmp 0x18c08e
cmpl $0x8000, -0x24(%rbp)    # imm = 0x8000
jne 0x18bea8
movq -0x8(%rbp), %rdi
callq 0x18c0e0
movq -0x8(%rbp), %rax
cmpl $0x0, 0x54(%rax)
je 0x18bea6
jmp 0x18c08e
jmp 0x18bea8
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movq -0x8(%rbp), %rax
addl 0x3c(%rax), %esi
callq 0x18c400
movzwl %ax, %eax
movl %eax, -0xc(%rbp)
cmpl $0x3b3, -0x20(%rbp)     # imm = 0x3B3
jbe 0x18beda
movq -0x8(%rbp), %rax
movl $0x1, 0x54(%rax)
jmp 0x18c08e
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x38(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0x2c(%rbp)
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
callq 0x18c0a0
movq -0x38(%rbp), %rdi
movl -0x2c(%rbp), %esi
movzwl %ax, %eax
addl $0x1, %eax
movzwl %ax, %edx
callq 0x18c440
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
callq 0x18c0a0
movzwl %ax, %eax
movl %eax, -0x1c(%rbp)
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x18c0a0
movw %ax, %cx
movl -0x28(%rbp), %eax
movzwl %cx, %ecx
cmpl %ecx, %eax
jbe 0x18c072
jmp 0x18bf52
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movl -0x1c(%rbp), %eax
movl %eax, -0x3c(%rbp)
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x18c0a0
movw %ax, %cx
movl -0x3c(%rbp), %eax
movzwl %cx, %ecx
cmpl %ecx, %eax
ja 0x18bf52
movl -0x18(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
movl -0xc(%rbp), %eax
movl %eax, -0x40(%rbp)
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x18c0a0
movq -0x48(%rbp), %rdi
movl -0x40(%rbp), %esi
movzwl %ax, %edx
callq 0x18c440
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
movl -0x1c(%rbp), %eax
movzwl %ax, %edx
callq 0x18c440
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
callq 0x18bdb0
movzwl %ax, %eax
movl %eax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movl -0x10(%rbp), %esi
movl -0x18(%rbp), %eax
movzwl %ax, %edx
callq 0x18c480
movl -0x10(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl 0x3c(%rcx), %eax
jae 0x18c003
movq -0x8(%rbp), %rdi
movl -0x10(%rbp), %esi
addl $0x1, %esi
movl -0x18(%rbp), %eax
movzwl %ax, %edx
callq 0x18c480
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
callq 0x18bdb0
movzwl %ax, %eax
movl %eax, -0x14(%rbp)
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
movl -0x10(%rbp), %eax
movzwl %ax, %edx
callq 0x18c4c0
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0xc(%rbp), %eax
movzwl %ax, %edx
callq 0x18c480
movl -0x14(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpl 0x3c(%rcx), %eax
jae 0x18c05a
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
addl $0x1, %esi
movl -0xc(%rbp), %eax
movzwl %ax, %edx
callq 0x18c480
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movl -0x14(%rbp), %eax
movzwl %ax, %edx
callq 0x18c4c0
movl -0x18(%rbp), %eax
movl %eax, -0xc(%rbp)
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
callq 0x18c400
movzwl %ax, %eax
movl %eax, -0xc(%rbp)
cmpl $0x0, -0xc(%rbp)
jne 0x18bec1
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)