// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/src/../foreign/lzhuf.h
// Function: lzhuf_Decode_init
static void lzhuf_Decode_init(struct lzahuf_ctx *cctx)
{
	UI rb_size; // LZHUF_N

	// Defaults, for standard LHarc -lh1-:
	// codes 0-255 = literals 0x00-0xff
	// codes 256-313 = match lengths 3-60
	cctx->num_special_codes = 0;
	cctx->num_length_codes = 58;
	cctx->match_length_bias = 253;
	cctx->dpparam_dcode_shift = 6;
	cctx->dpparam_dlen_bias = 2;
	cctx->dpparam_mask = 0x3f;
	rb_size = 4096;

	if(cctx->lh1p.is_crlzh11 || cctx->lh1p.is_crlzh20) {
		// codes 0-255 = literals 0x00-0xff
		// code 256 = "stop"
		// codes 257-314 = match lengths 3-60
		cctx->num_special_codes = 1;
		cctx->num_length_codes = 58;
		cctx->match_length_bias = 254;
		rb_size = 2048;
		if(cctx->lh1p.is_crlzh20) {
			cctx->dpparam_dcode_shift = 5;
			cctx->dpparam_dlen_bias = 3;
			cctx->dpparam_mask = 0x1f;
		}
	}
	else if(cctx->lh1p.is_arc_trimmed) {
		// codes 0-255 = literals 0x00-0xff
		// code 256 = "stop"
		// codes 257-313 = match lengths 3-59
		cctx->num_special_codes = 1;
		cctx->num_length_codes = 57;
		cctx->match_length_bias = 254;
	}
	else if(cctx->lh1p.is_dms_deep) {
		rb_size = 16*1024;
		cctx->dpparam_dcode_shift = 8;
		cctx->dpparam_dlen_bias = 0;
		cctx->dpparam_mask = 0xff;
	}

	cctx->lzhuf_N_CHAR = 256 + cctx->num_special_codes + cctx->num_length_codes;
	if(cctx->lzhuf_N_CHAR > LZHUF_MAX_N_CHAR) {
		cctx->errflag = 1;
		goto done;
	}
	cctx->lzhuf_T = cctx->lzhuf_N_CHAR * 2 - 1;
	cctx->lzhuf_R = cctx->lzhuf_T  - 1;

	cctx->ringbuf = de_lz77buffer_create(cctx->c, rb_size);
	cctx->ringbuf->userdata = (void*)cctx;
	cctx->ringbuf->writebyte_cb = lzah_lz77buf_writebytecb;
	if(cctx->lh1p.history_fill_val!=0) {
		de_lz77buffer_clear(cctx->ringbuf, cctx->lh1p.history_fill_val);
	}

	cctx->bbll.is_lsb = 0;
	de_bitbuf_lowlevel_empty(&cctx->bbll);

	lzhuf_StartHuff(cctx);

	if(cctx->dbg_mode) {
		lzhuf_dumptree(cctx);
	}

done:
	;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movl $0x0, 0x44(%rax)
movq -0x8(%rbp), %rax
movl $0x3a, 0x30(%rax)
movq -0x8(%rbp), %rax
movl $0xfd, 0x34(%rax)
movq -0x8(%rbp), %rax
movl $0x6, 0x48(%rax)
movq -0x8(%rbp), %rax
movl $0x2, 0x4c(%rax)
movq -0x8(%rbp), %rax
movl $0x3f, 0x50(%rax)
movl $0x1000, -0xc(%rbp)     # imm = 0x1000
movq -0x8(%rbp), %rax
movzbl 0x11(%rax), %eax
cmpl $0x0, %eax
jne 0x18b78f
movq -0x8(%rbp), %rax
movzbl 0x12(%rax), %eax
cmpl $0x0, %eax
je 0x18b7e4
movq -0x8(%rbp), %rax
movl $0x1, 0x44(%rax)
movq -0x8(%rbp), %rax
movl $0x3a, 0x30(%rax)
movq -0x8(%rbp), %rax
movl $0xfe, 0x34(%rax)
movl $0x800, -0xc(%rbp)      # imm = 0x800
movq -0x8(%rbp), %rax
cmpb $0x0, 0x12(%rax)
je 0x18b7e2
movq -0x8(%rbp), %rax
movl $0x5, 0x48(%rax)
movq -0x8(%rbp), %rax
movl $0x3, 0x4c(%rax)
movq -0x8(%rbp), %rax
movl $0x1f, 0x50(%rax)
jmp 0x18b847
movq -0x8(%rbp), %rax
cmpb $0x0, 0x13(%rax)
je 0x18b811
movq -0x8(%rbp), %rax
movl $0x1, 0x44(%rax)
movq -0x8(%rbp), %rax
movl $0x39, 0x30(%rax)
movq -0x8(%rbp), %rax
movl $0xfe, 0x34(%rax)
jmp 0x18b845
movq -0x8(%rbp), %rax
cmpb $0x0, 0x14(%rax)
je 0x18b843
movl $0x4000, -0xc(%rbp)     # imm = 0x4000
movq -0x8(%rbp), %rax
movl $0x8, 0x48(%rax)
movq -0x8(%rbp), %rax
movl $0x0, 0x4c(%rax)
movq -0x8(%rbp), %rax
movl $0xff, 0x50(%rax)
jmp 0x18b845
jmp 0x18b847
movq -0x8(%rbp), %rax
movl 0x44(%rax), %ecx
addl $0x100, %ecx            # imm = 0x100
movq -0x8(%rbp), %rax
addl 0x30(%rax), %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x38(%rax)
movq -0x8(%rbp), %rax
cmpl $0x13c, 0x38(%rax)      # imm = 0x13C
jbe 0x18b87f
movq -0x8(%rbp), %rax
movl $0x1, 0x54(%rax)
jmp 0x18b934
movq -0x8(%rbp), %rax
movl 0x38(%rax), %ecx
shll %ecx
subl $0x1, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x3c(%rax)
movq -0x8(%rbp), %rax
movl 0x3c(%rax), %ecx
subl $0x1, %ecx
movq -0x8(%rbp), %rax
movl %ecx, 0x40(%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x1785d0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x68(%rax)
movq -0x8(%rbp), %rcx
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rax
leaq 0xc25(%rip), %rcx       # 0x18c500
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rax
movzbl 0x15(%rax), %eax
cmpl $0x0, %eax
je 0x18b901
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rdi
movq -0x8(%rbp), %rax
movzbl 0x15(%rax), %esi
callq 0x1787d0
movq -0x8(%rbp), %rax
movb $0x0, 0x70(%rax)
movq -0x8(%rbp), %rdi
addq $0x70, %rdi
callq 0x16a360
movq -0x8(%rbp), %rdi
callq 0x18c560
movq -0x8(%rbp), %rax
cmpb $0x0, 0x10(%rax)
je 0x18b932
movq -0x8(%rbp), %rdi
callq 0x18c6c0
jmp 0x18b934
addq $0x10, %rsp
popq %rbp
retq
nopw (%rax,%rax)