// File: /workspace/github_c_makefile_star2_O0/lh3[P]fermi-lite/bfc.c
// Function: buf_update
static void buf_update(bfc_ec1buf_t *e, const echeap1_t *prev, bfc_penalty_t pen, int cnt)
{
	ecstack1_t *q;
	echeap1_t *r;
	const bfc_opt_t *o = e->opt;
	int b = pen.b;
	// update stack
	kv_pushp(ecstack1_t, e->stack, &q);
	q->parent = prev->k;
	q->i = prev->i;
	q->b = b;
	q->pen = pen;
	q->cnt = cnt > 0? cnt&0xff : 0;
	q->tot_pen = prev->tot_pen + weighted_penalty(o, pen);
	// update heap
	kv_pushp(echeap1_t, e->heap, &r);
	r->i = prev->i + 1;
	r->k = e->stack.n - 1;
	r->x = prev->x;
	if (pen.ec_high) {
		memcpy(r->ecpos_high + 1, prev->ecpos_high, (BFC_EC_HIST_HIGH - 1) * 4);
		r->ecpos_high[0] = prev->i;
	} else memcpy(r->ecpos_high, prev->ecpos_high, BFC_EC_HIST_HIGH * 4);
	if (pen.ec) {
		memcpy(r->ecpos + 1, prev->ecpos, (BFC_EC_HIST - 1) * 4);
		r->ecpos[0] = prev->i;
	} else memcpy(r->ecpos, prev->ecpos, BFC_EC_HIST * 4);
	r->tot_pen = q->tot_pen;
	bfc_kmer_append(e->opt->k, r->x.x, b);
	ks_heapup_ec(e->heap.n, e->heap.a);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movb %dl, %al
movb %al, -0x1(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x38(%rbp)
movb -0x1(%rbp), %al
shrb $0x4, %al
movzbl %al, %eax
movl %eax, -0x3c(%rbp)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x30(%rcx), %rax
jne 0x9488
movq -0x10(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x944d
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rax
shlq %rax
movq %rax, -0x48(%rbp)
jmp 0x9458
movl $0x2, %eax
movq %rax, -0x48(%rbp)
jmp 0x9458
movq -0x48(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rsi
shlq $0x4, %rsi
callq 0x21e0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x10(%rbp), %rdx
movq 0x28(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x28(%rdx)
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movl 0x8(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, (%rax)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x4(%rax)
movl -0x3c(%rbp), %eax
movb %al, %cl
movq -0x28(%rbp), %rax
movb %cl, 0xc(%rax)
movq -0x28(%rbp), %rax
movb -0x1(%rbp), %cl
movb %cl, 0xd(%rax)
cmpl $0x0, -0x1c(%rbp)
jle 0x94f2
movl -0x1c(%rbp), %eax
andl $0xff, %eax
movl %eax, -0x4c(%rbp)
jmp 0x94f9
xorl %eax, %eax
movl %eax, -0x4c(%rbp)
jmp 0x94f9
movl -0x4c(%rbp), %eax
movw %ax, %cx
movq -0x28(%rbp), %rax
movw %cx, 0xe(%rax)
movq -0x18(%rbp), %rax
movl (%rax), %ecx
movq -0x38(%rbp), %rax
movl 0x20(%rax), %eax
movb -0x1(%rbp), %dl
andb $0x1, %dl
movzbl %dl, %edx
imull %edx, %eax
movq -0x38(%rbp), %rdx
movl 0x24(%rdx), %edx
movb -0x1(%rbp), %sil
shrb %sil
andb $0x1, %sil
movzbl %sil, %esi
imull %esi, %edx
addl %edx, %eax
movq -0x38(%rbp), %rdx
movl 0x28(%rdx), %edx
movb -0x1(%rbp), %sil
shrb $0x2, %sil
andb $0x1, %sil
movzbl %sil, %esi
imull %esi, %edx
addl %edx, %eax
movq -0x38(%rbp), %rdx
movl 0x2c(%rdx), %edx
movb -0x1(%rbp), %sil
shrb $0x3, %sil
andb $0x1, %sil
movzbl %sil, %esi
imull %esi, %edx
addl %edx, %eax
addl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jne 0x95e2
movq -0x10(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x95aa
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
shlq %rax
movq %rax, -0x58(%rbp)
jmp 0x95b5
movl $0x2, %eax
movq %rax, -0x58(%rbp)
jmp 0x95b5
movq -0x58(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rax
imulq $0x48, 0x18(%rax), %rsi
callq 0x21e0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x10(%rbp), %rdx
movq 0x10(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x10(%rdx)
imulq $0x48, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %ecx
addl $0x1, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
subq $0x1, %rax
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x28(%rcx), %rdx
movq %rdx, 0x28(%rax)
movq 0x30(%rcx), %rdx
movq %rdx, 0x30(%rax)
movq 0x38(%rcx), %rdx
movq %rdx, 0x38(%rax)
movq 0x40(%rcx), %rcx
movq %rcx, 0x40(%rax)
movb -0x1(%rbp), %al
shrb %al
andb $0x1, %al
cmpb $0x0, %al
je 0x967f
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0xc(%rcx), %ecx
movl %ecx, 0x10(%rax)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0xc(%rax)
jmp 0x968f
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0xc(%rcx), %rcx
movq %rcx, 0xc(%rax)
movb -0x1(%rbp), %al
andb $0x1, %al
cmpb $0x0, %al
je 0x96c0
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x14(%rcx), %rdx
movq %rdx, 0x18(%rax)
movq 0x1c(%rcx), %rcx
movq %rcx, 0x20(%rax)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x14(%rax)
jmp 0x96de
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x14(%rcx), %rdx
movq %rdx, 0x14(%rax)
movq 0x1c(%rcx), %rdx
movq %rdx, 0x1c(%rax)
movl 0x24(%rcx), %ecx
movl %ecx, 0x24(%rax)
movq -0x28(%rbp), %rax
movl 0x8(%rax), %ecx
movq -0x30(%rbp), %rax
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movl 0x8(%rax), %edi
movq -0x30(%rbp), %rsi
addq $0x28, %rsi
movl -0x3c(%rbp), %edx
callq 0x5550
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0x5f00
addq $0x60, %rsp
popq %rbp
retq