// File: /workspace/github_c_makefile_star2_O0/Ihsoh[P]ilang/compiler/frontend/irgen_llvmir.c
// Function: ir_func_type_params
static void _ir_func_type_params(
	IRGeneratorLlvmirContext *ctx,
	ResizableString *rstr,
	ParserASTNode *node_func_type_params
) {
	assert(ctx);
	assert(rstr);
	assert(node_func_type_params);
	assert(node_func_type_params->type == FE_NODE_FUNC_PARAMS);

	if (node_func_type_params->nchilds > 0) {
		ParserASTNode *node_param = node_func_type_params->childs[0];
		assert(node_param->type == FE_NODE_FUNC_PARAMS_ITEM);

		#define _NODE_PARAM	\
			switch (node_param->type) {	\
				case FE_NODE_FUNC_PARAMS_ELLIPSIS_ITEM: {	\
					rstr_append_with_cstr(rstr, "...");	\
					break;	\
				}	\
				case FE_NODE_FUNC_PARAMS_ITEM: {	\
					assert(node_param->nchilds == 2);	\
					ParserASTNode *node_t = node_param->childs[1];	\
						\
					ResizableString rstr_tmp;	\
					rstr_init(&rstr_tmp);	\
					_ir_type(ctx, &rstr_tmp, node_t);	\
					rstr_append_with_rstr(rstr, &rstr_tmp);	\
					rstr_free(&rstr_tmp);	\
					break;	\
				}	\
				default: {	\
					assert(0);	\
					break;	\
				}	\
			}

		_NODE_PARAM

		for (int i = 1; i < node_func_type_params->nchilds; i++) {
			node_param = node_func_type_params->childs[i];
			assert(node_param->type == FE_NODE_FUNC_PARAMS_ITEM
					|| node_param->type == FE_NODE_FUNC_PARAMS_ELLIPSIS_ITEM);

			rstr_append_with_cstr(rstr, ", ");

			_NODE_PARAM
		}

		#undef	_NODE_PARAM
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x2c75d
jmp 0x2c77c
leaq 0x4fdf2(%rip), %rdi     # 0x7c556
leaq 0x4b965(%rip), %rsi     # 0x780d0
movl $0x234, %edx            # imm = 0x234
leaq 0x4bc8f(%rip), %rcx     # 0x78406
callq 0x30a0
cmpq $0x0, -0x10(%rbp)
je 0x2c785
jmp 0x2c7a4
leaq 0x46382(%rip), %rdi     # 0x72b0e
leaq 0x4b93d(%rip), %rsi     # 0x780d0
movl $0x235, %edx            # imm = 0x235
leaq 0x4bc67(%rip), %rcx     # 0x78406
callq 0x30a0
cmpq $0x0, -0x18(%rbp)
je 0x2c7ad
jmp 0x2c7cc
leaq 0x48132(%rip), %rdi     # 0x748e6
leaq 0x4b915(%rip), %rsi     # 0x780d0
movl $0x236, %edx            # imm = 0x236
leaq 0x4bc3f(%rip), %rcx     # 0x78406
callq 0x30a0
movq -0x18(%rbp), %rax
cmpl $0xa01, (%rax)          # imm = 0xA01
jne 0x2c7da
jmp 0x2c7f9
leaq 0x4811b(%rip), %rdi     # 0x748fc
leaq 0x4b8e8(%rip), %rsi     # 0x780d0
movl $0x237, %edx            # imm = 0x237
leaq 0x4bc12(%rip), %rcx     # 0x78406
callq 0x30a0
movq -0x18(%rbp), %rax
cmpl $0x0, 0x44(%rax)
jle 0x2ca4f
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0xa02, (%rax)          # imm = 0xA02
jne 0x2c824
jmp 0x2c843
leaq 0x48104(%rip), %rdi     # 0x7492f
leaq 0x4b89e(%rip), %rsi     # 0x780d0
movl $0x23b, %edx            # imm = 0x23B
leaq 0x4bbc8(%rip), %rcx     # 0x78406
callq 0x30a0
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x5c(%rbp)
subl $0xa02, %eax            # imm = 0xA02
je 0x2c87a
jmp 0x2c855
movl -0x5c(%rbp), %eax
subl $0xa03, %eax            # imm = 0xA03
jne 0x2c8e7
jmp 0x2c865
movq -0x10(%rbp), %rdi
leaq 0x480ec(%rip), %rsi     # 0x7495c
callq 0x8d70
jmp 0x2c906
movq -0x20(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2c886
jmp 0x2c8a5
leaq 0x480d3(%rip), %rdi     # 0x74960
leaq 0x4b83c(%rip), %rsi     # 0x780d0
movl $0x254, %edx            # imm = 0x254
leaq 0x4bb66(%rip), %rcx     # 0x78406
callq 0x30a0
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x28(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x8c90
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rdx
leaq -0x38(%rbp), %rsi
callq 0x299e0
movq -0x10(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x9100
leaq -0x38(%rbp), %rdi
callq 0x9310
jmp 0x2c906
leaq 0x45b6d(%rip), %rdi     # 0x7245b
leaq 0x4b7db(%rip), %rsi     # 0x780d0
movl $0x254, %edx            # imm = 0x254
leaq 0x4bb05(%rip), %rcx     # 0x78406
callq 0x30a0
movl $0x1, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
movq -0x18(%rbp), %rcx
cmpl 0x44(%rcx), %eax
jge 0x2ca4d
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movslq -0x3c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
cmpl $0xa02, (%rax)          # imm = 0xA02
je 0x2c949
movq -0x20(%rbp), %rax
cmpl $0xa03, (%rax)          # imm = 0xA03
jne 0x2c94b
jmp 0x2c96a
leaq 0x48027(%rip), %rdi     # 0x74979
leaq 0x4b777(%rip), %rsi     # 0x780d0
movl $0x259, %edx            # imm = 0x259
leaq 0x4baa1(%rip), %rcx     # 0x78406
callq 0x30a0
movq -0x10(%rbp), %rdi
leaq 0x48854(%rip), %rsi     # 0x751c9
callq 0x8d70
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x60(%rbp)
subl $0xa02, %eax            # imm = 0xA02
je 0x2c9b1
jmp 0x2c98c
movl -0x60(%rbp), %eax
subl $0xa03, %eax            # imm = 0xA03
jne 0x2ca1e
jmp 0x2c99c
movq -0x10(%rbp), %rdi
leaq 0x47fb5(%rip), %rsi     # 0x7495c
callq 0x8d70
jmp 0x2ca3d
movq -0x20(%rbp), %rax
cmpl $0x2, 0x44(%rax)
jne 0x2c9bd
jmp 0x2c9dc
leaq 0x47f9c(%rip), %rdi     # 0x74960
leaq 0x4b705(%rip), %rsi     # 0x780d0
movl $0x25d, %edx            # imm = 0x25D
leaq 0x4ba2f(%rip), %rcx     # 0x78406
callq 0x30a0
movq -0x20(%rbp), %rax
movq 0x48(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x8c90
movq -0x8(%rbp), %rdi
movq -0x48(%rbp), %rdx
leaq -0x58(%rbp), %rsi
callq 0x299e0
movq -0x10(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x9100
leaq -0x58(%rbp), %rdi
callq 0x9310
jmp 0x2ca3d
leaq 0x45a36(%rip), %rdi     # 0x7245b
leaq 0x4b6a4(%rip), %rsi     # 0x780d0
movl $0x25d, %edx            # imm = 0x25D
leaq 0x4b9ce(%rip), %rcx     # 0x78406
callq 0x30a0
jmp 0x2ca3f
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x2c90d
jmp 0x2ca4f
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)