// File: /workspace/github_c_makefile_star2_O1/mirth-lang[P]mirth/bin/mirth1.c
// Function: mw_mirth_c99_zaC99_cnamezetypezetozec99zeapi
static struct mirth_c99_C99API* mw_mirth_c99_zaC99_cnamezetypezetozec99zeapi (struct mirth_mirth_zaMirth* in_zaMirth_1, struct mirth_c99_zaC99* in_zaC99_2, STR* in_Str_3, struct mirth_type_ArrowType* in_ArrowType_4, struct mirth_mirth_zaMirth* *out_zaMirth_5, struct mirth_c99_zaC99* *out_zaC99_6) {
	INT v8 = WRAP_I63(1LL);
	INT v9 = in_zaC99_2->mfreshzecounter;
	incref(MKNAT(v9));
	INT v10 = in_zaC99_2->mfreshzecounter;
	decref(MKNAT(v10));
	in_zaC99_2->mfreshzecounter = v8;
	incref(MK_mirth_type_ArrowType(in_ArrowType_4));
	struct mirth_type_StackType v11 = in_ArrowType_4->mdom;
	incref(MK_mirth_type_StackType(v11));
	decref(MK_mirth_type_ArrowType(in_ArrowType_4));
	enum mirth_c99_C99APIArgMode v12 = mirth_c99_C99APIArgMode_In;
	struct mirth_mirth_zaMirth* v13;
	struct mirth_c99_zaC99* v14;
	bool v15;
	struct std_list_List_1 v16 = mw_mirth_c99_zaC99_stackzetypezetozec99zeapizeparams(in_zaMirth_1, in_zaC99_2, v11, v12, &v13, &v14, &v15);
	incref(MK_mirth_type_ArrowType(in_ArrowType_4));
	struct mirth_type_StackType v17 = in_ArrowType_4->mcod;
	incref(MK_mirth_type_StackType(v17));
	decref(MK_mirth_type_ArrowType(in_ArrowType_4));
	enum mirth_c99_C99APIArgMode v18 = mirth_c99_C99APIArgMode_Out;
	struct mirth_mirth_zaMirth* v19;
	struct mirth_c99_zaC99* v20;
	bool v21;
	struct std_list_List_1 v22 = mw_mirth_c99_zaC99_stackzetypezetozec99zeapizeparams(v13, v14, v17, v18, &v19, &v20, &v21);
	struct std_list_List_1 v23 = { .tag=std_list_List_1_Nil };
	struct std_list_List_1 v24;
	mw_std_list_List_1_buildzx(v23, &v24);
	bool v25 = true;
	struct mirth_mirth_zaMirth* r26 = v19;
	struct mirth_c99_zaC99* r27 = v20;
	struct std_list_List_1 r28 = v24;
	struct std_list_List_1 v29 = v22;
	bool v30 = v25;
	bool v31 = v25;
	while (v31) {
		struct mirth_mirth_zaMirth* r32 = r26;
		struct mirth_c99_zaC99* r33 = r27;
		struct std_list_List_1 r34 = r28;
		struct std_list_List_1 v35 = v29;
		bool v36 = v30;
		struct mirth_mirth_zaMirth* branch_zaMirth_37;
		VAL branch_zux1_38;
		struct std_list_List_1 branch_zaLister_39;
		struct std_list_List_1 branch_List_40;
		bool branch_Bool_41;
		switch ((v35).tag) {
			case std_list_List_1_Cons: {
				struct std_list_List_1 v42;
				VAL v43 = mtp_std_list_List_1_Cons(v35, &v42);
				incref(v43);
				struct mirth_mirth_zaMirth* v44;
				bool v45 = mw_mirth_c99_C99APIArg_iszephysicalzevaluezy(r32, V_mirth_c99_C99APIArg(v43), &v44);
				struct mirth_mirth_zaMirth* branch_zaMirth_46;
				VAL branch_zux1_47;
				struct std_list_List_1 branch_zaLister_48;
				struct std_list_List_1 branch_List_49;
				bool branch_Bool_50;
				if (v45) {
					struct std_list_List_1 v51 = mw_std_list_List_1_cons(v43, v42);
					bool v52 = false;
					branch_Bool_50 = v52;
					branch_List_49 = v51;
					branch_zaLister_48 = r34;
					branch_zux1_47 = MK_mirth_c99_zaC99(r33);
					branch_zaMirth_46 = v44;
				} else {
					struct std_list_List_1 v53;
					mw_std_list_zaLister_1_pushzx(v43, r34, &v53);
					bool v54 = true;
					branch_Bool_50 = v54;
					branch_List_49 = v42;
					branch_zaLister_48 = v53;
					branch_zux1_47 = MK_mirth_c99_zaC99(r33);
					branch_zaMirth_46 = v44;
				}
				branch_Bool_41 = branch_Bool_50;
				branch_List_40 = branch_List_49;
				branch_zaLister_39 = branch_zaLister_48;
				branch_zux1_38 = branch_zux1_47;
				branch_zaMirth_37 = branch_zaMirth_46;
			} break;
			case std_list_List_1_Nil: {
				struct std_list_List_1 v55 = { .tag=std_list_List_1_Nil };
				bool v56 = false;
				branch_Bool_41 = v56;
				branch_List_40 = v55;
				branch_zaLister_39 = r34;
				branch_zux1_38 = MK_mirth_c99_zaC99(r33);
				branch_zaMirth_37 = r32;
			} break;
			default: {
				do_panic(str_make("unexpected fallthrough in match\n", 32));
			}
		}
		v31 = branch_Bool_41;
		v30 = branch_Bool_41;
		v29 = branch_List_40;
		r28 = branch_zaLister_39;
		r27 = V_mirth_c99_zaC99(branch_zux1_38);
		r26 = branch_zaMirth_37;
	}
	struct std_list_List_1 v57 = mw_std_list_zaLister_1_donezx(r28);
	struct std_list_List_1 v58;
	struct std_maybe_Maybe_1 v59 = mw_std_list_List_1_uncons(v29, &v58);
	INT v60 = r27->mfreshzecounter;
	incref(MKNAT(v60));
	INT v61 = r27->mfreshzecounter;
	decref(MKNAT(v61));
	r27->mfreshzecounter = v9;
	decref(MKNAT(v60));
	bool v62 = (v21 || v15);
	incref(MK_mirth_type_ArrowType(in_ArrowType_4));
	struct mirth_type_StackType v63 = in_ArrowType_4->mcod;
	incref(MK_mirth_type_StackType(v63));
	decref(MK_mirth_type_ArrowType(in_ArrowType_4));
	struct mirth_mirth_zaMirth* v64;
	struct std_maybe_Maybe_1 v65 = mw_mirth_type_StackType_linearzebasezevarzy(r26, v63, &v64);
	struct mirth_type_ArrowType* branch_ArrowType_66;
	struct mirth_mirth_zaMirth* branch_zaMirth_67;
	bool branch_Bool_68;
	switch ((v65).tag) {
		case std_maybe_Maybe_1_Some: {
			VAL v69 = mtp_std_maybe_Maybe_1_Some(v65);
			incref(MK_mirth_type_ArrowType(in_ArrowType_4));
			struct mirth_type_StackType v70 = in_ArrowType_4->mdom;
			incref(MK_mirth_type_StackType(v70));
			decref(MK_mirth_type_ArrowType(in_ArrowType_4));
			struct mirth_mirth_zaMirth* v71;
			struct std_maybe_Maybe_1 v72 = mw_mirth_type_StackType_linearzebasezevarzy(v64, v70, &v71);
			bool branch_Bool_73;
			switch ((v72).tag) {
				case std_maybe_Maybe_1_Some: {
					VAL v74 = mtp_std_maybe_Maybe_1_Some(v72);
					uint64_t v75 = V_mirth_var_Var(v74);
					uint64_t v76 = V_mirth_var_Var(v69);
					bool v77 = (v75 == v76);
					bool v78 = !v77;
					branch_Bool_73 = v78;
				} break;
				case std_maybe_Maybe_1_None: {
					decref(v69);
					bool v79 = false;
					branch_Bool_73 = v79;
				} break;
				default: {
					do_panic(str_make("unexpected fallthrough in match\n", 32));
				}
			}
			branch_Bool_68 = branch_Bool_73;
			branch_zaMirth_67 = v71;
			branch_ArrowType_66 = in_ArrowType_4;
		} break;
		case std_maybe_Maybe_1_None: {
			bool v80 = false;
			branch_Bool_68 = v80;
			branch_zaMirth_67 = v64;
			branch_ArrowType_66 = in_ArrowType_4;
		} break;
		default: {
			do_panic(str_make("unexpected fallthrough in match\n", 32));
		}
	}
	bool v81 = !branch_Bool_68;
	bool v82 = (v81 && v62);
	struct mirth_c99_C99API* v83 = mtw_mirth_c99_C99API_C99API(in_Str_3, branch_ArrowType_66, v16, v57, v59, v58, v82, branch_Bool_68);
	*out_zaC99_6 = r27;
	*out_zaMirth_5 = branch_zaMirth_67;
	return v83;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xc8, %rsp
movq %r9, -0xb0(%rbp)
movq %r8, -0xb8(%rbp)
movq %rcx, %r13
movq %rdx, -0xa8(%rbp)
movq %rsi, %rbx
movq %rdi, %r14
movabsq $0xfffffffffffc, %r15   # imm = 0xFFFFFFFFFFFC
movq 0x10(%rsi), %r12
leaq 0x67758(%rip), %rsi     # 0x115111
movq %r12, %rax
andq %r15, %rax
sete %cl
testb $0x3, %r12b
setne %dl
orb %cl, %dl
jne 0xad9da
cmpl $0x0, (%rax)
jne 0xad9da
movq %r12, %rdi
callq 0xd4e3
movq %r12, -0x40(%rbp)
movq $0x3, 0x10(%rbx)
movq %r13, %rax
andq %r15, %rax
movq %rax, -0x38(%rbp)
setne %al
testb $0x3, %r13b
sete %sil
andb %al, %sil
cmpb $0x1, %sil
jne 0xada0a
movq -0x38(%rbp), %rax
incl (%rax)
movl 0x8(%r13), %r15d
movq 0x10(%r13), %r12
movq %r12, %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rcx, %rax
sete %cl
testb $0x3, %r12b
setne %dl
orb %cl, %dl
jne 0xada32
incl (%rax)
movb %sil, -0x29(%rbp)
testb %sil, %sil
je 0xada52
movq -0x38(%rbp), %rax
decl (%rax)
jne 0xada52
movq %r13, %rdi
leaq 0x6812c(%rip), %rsi     # 0x115b79
callq 0xd4e3
leaq -0x2b(%rbp), %rax
leaq -0xc0(%rbp), %r10
leaq -0xc8(%rbp), %r9
movq %r14, %rdi
movq %rbx, %rsi
movl %r15d, %edx
movq %r12, %rcx
xorl %r8d, %r8d
pushq %rax
pushq %r10
callq 0xae028
addq $0x10, %rsp
movl %eax, -0x7c(%rbp)
movq %rdx, -0xa0(%rbp)
movb -0x29(%rbp), %sil
testb %sil, %sil
je 0xada98
movq -0x38(%rbp), %rax
incl (%rax)
movl 0x18(%r13), %ebx
movq 0x20(%r13), %r14
movq %r14, %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rcx, %rax
sete %cl
testb $0x3, %r14b
setne %dl
orb %cl, %dl
jne 0xadac0
incl (%rax)
testb %sil, %sil
je 0xadadc
movq -0x38(%rbp), %rax
decl (%rax)
jne 0xadadc
movq %r13, %rdi
leaq 0x680a2(%rip), %rsi     # 0x115b79
callq 0xd4e3
movq %r13, -0x48(%rbp)
movq -0xc8(%rbp), %rdi
movq -0xc0(%rbp), %rsi
leaq -0x2a(%rbp), %rax
leaq -0xe0(%rbp), %r10
leaq -0xe8(%rbp), %r15
movl %ebx, %edx
movq %r14, %rcx
movl $0x1, %r8d
movq %r15, %r9
pushq %rax
pushq %r10
movq %r10, %rbx
callq 0xae028
addq $0x10, %rsp
movl %eax, %r14d
movq %rdx, %r13
xorl %edi, %edi
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0xd37c
movl %eax, -0x58(%rbp)
movq %rdx, -0x60(%rbp)
movq (%r15), %r12
movq (%rbx), %rax
movq %rax, -0x68(%rbp)
testl %r14d, %r14d
je 0xadc2d
cmpl $0x1, %r14d
movabsq $0xfffffffffffc, %r15   # imm = 0xFFFFFFFFFFFC
jne 0xadfc0
movq %r13, %rdi
leaq -0x78(%rbp), %rsi
callq 0xd450
movq %rax, %r14
movq %rdx, %r13
movq %rax, %rbx
testb $0x1, %r13b
je 0xadb8e
movq %r14, %rax
andq %r15, %rax
sete %cl
testb $0x3, %bl
setne %dl
orb %cl, %dl
jne 0xadb8e
incl (%rax)
andq %r15, %r14
setne %al
testb $0x3, %bl
sete %r15b
andb %al, %r15b
cmpb $0x1, %r15b
jne 0xadba7
incl (%r14)
movq %r12, %rdi
movq %rbx, %rsi
leaq -0x90(%rbp), %rdx
callq 0xaf87a
testb %al, %al
je 0xadc38
movq %r13, -0x50(%rbp)
movl 0x8(%rbx), %ecx
movq 0x10(%rbx), %rdi
movq %rdi, %r12
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq %rax, %r12
setne %al
testb $0x3, %dil
sete %r13b
andb %al, %r13b
cmpb $0x1, %r13b
jne 0xadbf0
incl (%r12)
testb %r15b, %r15b
je 0xadc15
decl (%r14)
jne 0xadc15
movq %rdi, %r14
movq %rbx, %rdi
leaq 0x6948a(%rip), %rsi     # 0x117091
movq %rcx, %r15
callq 0xd4e3
movq %r15, %rcx
movq %r14, %rdi
testl %ecx, %ecx
je 0xadc4e
cmpl $0x1, %ecx
jne 0xadc53
decl (%rdi)
movq -0x50(%rbp), %r13
jne 0xadc78
callq 0x5030
jmp 0xadc78
xorl %r15d, %r15d
xorl %r13d, %r13d
jmp 0xadce6
testb %r15b, %r15b
je 0xadc78
decl (%r14)
jne 0xadc78
movq %rbx, %rdi
leaq 0x69445(%rip), %rsi     # 0x117091
jmp 0xadc73
movb $0x1, %r15b
jmp 0xadc80
testb %r13b, %r13b
je 0xadc7d
decl (%r12)
movq -0x50(%rbp), %r13
jne 0xadc78
shlq $0x30, %rcx
orq %rdi, %rcx
movq %rcx, %rdi
leaq 0x69466(%rip), %rsi     # 0x1170d9
callq 0xd4e3
xorl %r15d, %r15d
jmp 0xadc84
xorl %r15d, %r15d
movq -0x50(%rbp), %r13
movq -0x90(%rbp), %r12
testb %r15b, %r15b
je 0xadcad
movl -0x78(%rbp), %edx
movq -0x70(%rbp), %rcx
movq %rbx, %rdi
movq %r13, %rsi
callq 0xd592
movq %rdx, %r13
movl $0x1, %r14d
jmp 0xadce2
movq %rbx, %rdi
movq %r13, %rsi
movl -0x58(%rbp), %edx
movq -0x60(%rbp), %rcx
leaq -0x90(%rbp), %r8
callq 0x9741
movl -0x78(%rbp), %r14d
movq -0x70(%rbp), %r13
movl -0x90(%rbp), %eax
movl %eax, -0x58(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0x60(%rbp)
xorb $0x1, %r15b
testb %r15b, %r15b
jne 0xadb41
xorl %edi, %edi
xorl %esi, %esi
movl -0x58(%rbp), %edx
movq -0x60(%rbp), %rcx
callq 0xd37c
movl %eax, -0x60(%rbp)
movq %rdx, -0x58(%rbp)
leaq -0xd8(%rbp), %rdx
movl %r14d, %edi
movq %r13, %rsi
callq 0x115ef
movl %eax, -0x50(%rbp)
movq %rdx, -0x98(%rbp)
movq -0x68(%rbp), %rcx
movq 0x10(%rcx), %rbx
movq %rbx, %r14
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq %rax, %r14
setne %al
testb $0x3, %bl
sete %r15b
andb %al, %r15b
cmpb $0x1, %r15b
jne 0xadd95
cmpl $0x0, (%r14)
movq -0x48(%rbp), %r13
movb -0x29(%rbp), %sil
jne 0xadd72
movq %rbx, %rdi
leaq 0x673ac(%rip), %rsi     # 0x115111
callq 0xd4e3
movb -0x29(%rbp), %sil
movq -0x68(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rax, 0x10(%rcx)
testb %r15b, %r15b
je 0xadda5
decl (%r14)
jne 0xadda5
movq %rbx, %rdi
leaq 0x67383(%rip), %rsi     # 0x115111
callq 0xd4e3
jmp 0xadda1
movq -0x40(%rbp), %rax
movq %rax, 0x10(%rcx)
movq -0x48(%rbp), %r13
movb -0x29(%rbp), %sil
testb %sil, %sil
je 0xaddb0
movq -0x38(%rbp), %rax
incl (%rax)
movl 0x18(%r13), %ebx
movq 0x20(%r13), %r15
movq %r15, %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rcx, %rax
sete %cl
testb $0x3, %r15b
setne %dl
orb %cl, %dl
jne 0xaddd8
incl (%rax)
movb -0x2a(%rbp), %r13b
movb -0x2b(%rbp), %r14b
testb %sil, %sil
je 0xaddfd
movq -0x38(%rbp), %rax
decl (%rax)
jne 0xaddfd
movq -0x48(%rbp), %rdi
leaq 0x67d81(%rip), %rsi     # 0x115b79
callq 0xd4e3
leaq -0x78(%rbp), %rcx
movq %r12, %rdi
movl %ebx, %esi
movq %r15, %rdx
callq 0xae0a6
testl %eax, %eax
je 0xadec2
cmpl $0x1, %eax
jne 0xae015
movl %r14d, %r12d
movq %rdx, %rdi
callq 0xdaeb
movq %rax, %rdi
movq %rdx, %rbx
movb -0x29(%rbp), %sil
testb %sil, %sil
je 0xade3f
movq -0x38(%rbp), %rax
incl (%rax)
movb %r13b, -0x40(%rbp)
movq -0x48(%rbp), %rax
movl 0x8(%rax), %r15d
movq 0x10(%rax), %r14
movq %r14, %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rcx, %rax
sete %cl
testb $0x3, %r14b
setne %dl
orb %cl, %dl
jne 0xade6f
incl (%rax)
movq %rdi, %r13
testb %sil, %sil
je 0xade8f
movq -0x38(%rbp), %rax
decl (%rax)
jne 0xade8f
movq -0x48(%rbp), %rdi
leaq 0x67cef(%rip), %rsi     # 0x115b79
callq 0xd4e3
movq -0x78(%rbp), %rdi
leaq -0x90(%rbp), %rcx
movl %r15d, %esi
movq %r14, %rdx
callq 0xae0a6
testl %eax, %eax
je 0xadecd
cmpl $0x1, %eax
jne 0xadfc0
movq %rdx, %rdi
callq 0xdaeb
cmpq %r13, %rax
setne %bl
jmp 0xadf06
movl %r14d, %r12d
movq -0x78(%rbp), %r14
xorl %ebx, %ebx
jmp 0xadf11
testb $0x1, %bl
je 0xadf04
movabsq $0xfffffffffffc, %rdx   # imm = 0xFFFFFFFFFFFC
movq %r13, %rdi
andq %r13, %rdx
sete %al
testb $0x3, %dil
setne %cl
orb %al, %cl
jne 0xadf04
decl (%rdx)
movb -0x40(%rbp), %r13b
jne 0xadf00
movq %rbx, %rsi
callq 0xd4e3
xorl %ebx, %ebx
jmp 0xadf0a
xorl %ebx, %ebx
movb -0x40(%rbp), %r13b
movq -0x90(%rbp), %r14
movl $0x1, %edi
movl $0x60, %esi
callq 0x50c0
testq %rax, %rax
je 0xadff0
testb %r13b, %r13b
movzbl %r12b, %ecx
movl $0x1, %edx
cmovnel %edx, %ecx
xorl %esi, %esi
testb %bl, %bl
cmovel %ecx, %esi
movl %edx, (%rax)
movb %bl, 0x59(%rax)
movb %sil, 0x58(%rax)
movups -0xd8(%rbp), %xmm0
movups %xmm0, 0x48(%rax)
movl -0x50(%rbp), %ecx
movl %ecx, 0x38(%rax)
movq -0x98(%rbp), %rcx
movq %rcx, 0x40(%rax)
movl -0x60(%rbp), %ecx
movl %ecx, 0x28(%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x30(%rax)
movl -0x7c(%rbp), %ecx
movl %ecx, 0x18(%rax)
movq -0xa0(%rbp), %rcx
movq %rcx, 0x20(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0xa8(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0xb0(%rbp), %rcx
movq -0x68(%rbp), %rdx
movq %rdx, (%rcx)
movq -0xb8(%rbp), %rcx
movq %r14, (%rcx)
addq $0xc8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl $0x20, %edi
callq 0xf9f7
movq $0x20, 0x10(%rax)
movups 0x36774(%rip), %xmm0    # 0xe474d
movups %xmm0, 0x18(%rax)
movups 0x36779(%rip), %xmm0    # 0xe475d
movups %xmm0, 0x28(%rax)
movq %rax, %rdi
callq 0x95a5
leaq 0x4f9a9(%rip), %rsi     # 0xfd9a0
movl $0x32, %edx
movl $0x2, %edi
callq 0x5060
callq 0x52be
movl $0x1, %edi
callq 0x5130
leaq 0x36731(%rip), %rdi     # 0xe474d
movl $0x20, %esi
callq 0x92e9
jmp 0xadfe8