// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/src/fmtutil-lzh.c
// Function: decompress_lh5x_internal
static void decompress_lh5x_internal(struct lzh_ctx *cctx, struct de_lh5x_params *lzhp)
{
	int blk_idx = 0;
	UI rb_size;

	cctx->lh5x_literals_tree_max_codes = 510;

	if(lzhp->fmt==DE_LH5X_FMT_LH5) {
		rb_size = 8192;
		cctx->lh5x_offsets_tree_fields_nbits = 4;
		cctx->lh5x_offsets_tree_max_codes = 14;
	}
	else if(lzhp->fmt==DE_LH5X_FMT_LH6) {
		rb_size = 32768;
		cctx->lh5x_offsets_tree_fields_nbits = 5;
		cctx->lh5x_offsets_tree_max_codes = 16;
	}
	else if(lzhp->fmt==DE_LH5X_FMT_LH7) {
		rb_size = 65536;
		cctx->lh5x_offsets_tree_fields_nbits = 5;
		cctx->lh5x_offsets_tree_max_codes = 17;
	}
	else if(lzhp->fmt==DE_LH5X_FMT_LHARK) {
		cctx->is_lhark_lh7 = 1;
		rb_size = 65536;
		cctx->lh5x_literals_tree_max_codes = 289;
		cctx->lh5x_offsets_tree_fields_nbits = 6;
		cctx->lh5x_offsets_tree_max_codes = 32;
	}
	else {
		de_dfilter_set_errorf(cctx->c, cctx->dres, cctx->modname,
			"Don't know how to decompress this LZH format");
		goto done;
	}

	cctx->zero_codes_block_behavior = lzhp->zero_codes_block_behavior;
	cctx->warn_about_zero_codes_block = lzhp->warn_about_zero_codes_block;

	cctx->ringbuf = de_lz77buffer_create(cctx->c, rb_size);
	cctx->ringbuf->userdata = (void*)cctx;
	cctx->ringbuf->writebyte_cb = lzh_lz77buf_writebytecb;
	if(lzhp->history_fill_val!=0x00) {
		de_lz77buffer_clear(cctx->ringbuf, lzhp->history_fill_val);
	}

	while(1) {
		if(cctx->bitrd.eof_flag) break;
		if(lzh_have_enough_output(cctx)) break;

		lh5x_do_lzh_block(cctx, blk_idx);
		blk_idx++;
	}

done:
	lzhp->max_offset_used = cctx->max_offset_used;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
movq -0x8(%rbp), %rax
movl $0x1fe, 0x80(%rax)      # imm = 0x1FE
movq -0x10(%rbp), %rax
cmpl $0x5, (%rax)
jne 0x17ee56
movl $0x2000, -0x18(%rbp)    # imm = 0x2000
movq -0x8(%rbp), %rax
movl $0x4, 0x84(%rax)
movq -0x8(%rbp), %rax
movl $0xe, 0x88(%rax)
jmp 0x17ef29
movq -0x10(%rbp), %rax
cmpl $0x6, (%rax)
jne 0x17ee87
movl $0x8000, -0x18(%rbp)    # imm = 0x8000
movq -0x8(%rbp), %rax
movl $0x5, 0x84(%rax)
movq -0x8(%rbp), %rax
movl $0x10, 0x88(%rax)
jmp 0x17ef27
movq -0x10(%rbp), %rax
cmpl $0x7, (%rax)
jne 0x17eeb5
movl $0x10000, -0x18(%rbp)   # imm = 0x10000
movq -0x8(%rbp), %rax
movl $0x5, 0x84(%rax)
movq -0x8(%rbp), %rax
movl $0x11, 0x88(%rax)
jmp 0x17ef25
movq -0x10(%rbp), %rax
cmpl $0x64, (%rax)
jne 0x17eef9
movq -0x8(%rbp), %rax
movb $0x1, 0x7d(%rax)
movl $0x10000, -0x18(%rbp)   # imm = 0x10000
movq -0x8(%rbp), %rax
movl $0x121, 0x80(%rax)      # imm = 0x121
movq -0x8(%rbp), %rax
movl $0x6, 0x84(%rax)
movq -0x8(%rbp), %rax
movl $0x20, 0x88(%rax)
jmp 0x17ef23
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdx
leaq 0x57e36(%rip), %rcx     # 0x1d6d4d
movb $0x0, %al
callq 0x177450
jmp 0x17efda
jmp 0x17ef25
jmp 0x17ef27
jmp 0x17ef29
movq -0x10(%rbp), %rax
movb 0x4(%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x68(%rax)
movq -0x10(%rbp), %rax
movb 0x5(%rax), %cl
movq -0x8(%rbp), %rax
movb %cl, 0x69(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movl -0x18(%rbp), %esi
callq 0x1785d0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x70(%rax)
movq -0x8(%rbp), %rcx
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rax
leaq 0x1233(%rip), %rcx      # 0x1801b0
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movzbl 0x6(%rax), %eax
cmpl $0x0, %eax
je 0x17efa3
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rdi
movq -0x10(%rbp), %rax
movzbl 0x6(%rax), %esi
callq 0x1787d0
jmp 0x17efa5
movq -0x8(%rbp), %rax
cmpb $0x0, 0x50(%rax)
je 0x17efb1
jmp 0x17efd8
movq -0x8(%rbp), %rdi
callq 0x181570
cmpl $0x0, %eax
je 0x17efc1
jmp 0x17efd8
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x1815c0
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0x17efa5
jmp 0x17efda
movq -0x8(%rbp), %rax
movq 0xc8(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)