// File: /workspace/github_c_makefile_star2_O0/mirth-lang[P]mirth/bin/mirth1.c
// Function: mw_mirth_elab_zaTypeElab_elabzetypezeargszx
static struct mirth_type_Type mw_mirth_elab_zaTypeElab_elabzetypezeargszx (struct mirth_mirth_zaMirth* in_zaMirth_1, struct mirth_elab_zaTypeElab* in_zaTypeElab_2, struct mirth_type_Type in_Type_3, struct std_list_List_1 in_List_4, struct mirth_mirth_zaMirth* *out_zaMirth_5, struct mirth_elab_zaTypeElab* *out_zaTypeElab_6, struct std_list_List_1 *out_Subst_8) {
	struct std_list_List_1 v9 = mw_mirth_type_Subst_Nil();
	uint64_t v10 = in_zaTypeElab_2->mtoken;
	struct mirth_mirth_zaMirth* v11;
	struct std_list_List_1 v12 = mw_mirth_token_Token_args(in_zaMirth_1, v10, &v11);
	bool v13 = true;
	struct mirth_type_Type v14 = in_Type_3;
	uint64_t v15 = v10;
	struct std_list_List_1 v16 = v9;
	struct std_list_List_1 v17 = in_List_4;
	struct mirth_elab_zaTypeElab* r18 = in_zaTypeElab_2;
	struct mirth_mirth_zaMirth* r19 = v11;
	struct std_list_List_1 v20 = v12;
	bool v21 = v13;
	bool v22 = v13;
	while (v22) {
		struct mirth_type_Type v23 = v14;
		uint64_t v24 = v15;
		struct std_list_List_1 v25 = v16;
		struct std_list_List_1 v26 = v17;
		struct mirth_elab_zaTypeElab* r27 = r18;
		struct mirth_mirth_zaMirth* r28 = r19;
		struct std_list_List_1 v29 = v20;
		bool v30 = v21;
		struct mirth_type_Type branch_Type_31;
		uint64_t branch_Token_32;
		struct std_list_List_1 branch_Subst_33;
		struct std_list_List_1 branch_List_34;
		struct mirth_elab_zaTypeElab* branch_zaTypeElab_35;
		struct mirth_mirth_zaMirth* branch_zaMirth_36;
		struct std_list_List_1 branch_List_37;
		bool branch_Bool_38;
		switch ((v29).tag) {
			case std_list_List_1_Cons: {
				struct std_list_List_1 v39;
				VAL v40 = mtp_std_list_List_1_Cons(v29, &v39);
				uint64_t v41 = r27->mtoken;
				r27->mtoken = V_mirth_token_Token(v40);
				struct mirth_mirth_zaMirth* v42;
				struct mirth_elab_zaTypeElab* v43;
				struct mirth_type_Type v44;
				uint64_t v45;
				struct std_list_List_1 v46;
				struct std_list_List_1 v47;
				mw_mirth_elab_zaTypeElab_elabzetypezeappzx(r28, r27, v23, v24, v25, v26, &v42, &v43, &v44, &v45, &v46, &v47);
				v43->mtoken = v41;
				bool v48 = true;
				branch_Bool_38 = v48;
				branch_List_37 = v39;
				branch_zaMirth_36 = v42;
				branch_zaTypeElab_35 = v43;
				branch_List_34 = v47;
				branch_Subst_33 = v46;
				branch_Token_32 = v45;
				branch_Type_31 = v44;
			} break;
			case std_list_List_1_Nil: {
				struct std_list_List_1 v49 = { .tag=std_list_List_1_Nil };
				bool v50 = false;
				branch_Bool_38 = v50;
				branch_List_37 = v49;
				branch_zaMirth_36 = r28;
				branch_zaTypeElab_35 = r27;
				branch_List_34 = v26;
				branch_Subst_33 = v25;
				branch_Token_32 = v24;
				branch_Type_31 = v23;
			} break;
			default: {
				do_panic(str_make("unexpected fallthrough in match\n", 32));
			}
		}
		v22 = branch_Bool_38;
		v21 = branch_Bool_38;
		v20 = branch_List_37;
		r19 = branch_zaMirth_36;
		r18 = branch_zaTypeElab_35;
		v17 = branch_List_34;
		v16 = branch_Subst_33;
		v15 = branch_Token_32;
		v14 = branch_Type_31;
	}
	decref(MK_std_list_List_1(v20));
	decref(MK_std_list_List_1(v17));
	*out_Subst_8 = v16;
	*out_zaTypeElab_6 = r18;
	*out_zaMirth_5 = r19;
	return v14;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x318, %rsp            # imm = 0x318
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movl %edx, -0x48(%rbp)
movq %rcx, -0x40(%rbp)
movl %r8d, -0x58(%rbp)
movq %r9, -0x50(%rbp)
movq %rdi, -0x60(%rbp)
movq %rsi, -0x68(%rbp)
callq 0xd8f40
movl %eax, -0x78(%rbp)
movq %rdx, -0x70(%rbp)
movq -0x68(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x80(%rbp)
movq -0x60(%rbp), %rdi
movq -0x80(%rbp), %rsi
leaq -0x88(%rbp), %rdx
callq 0xa5a80
movl %eax, -0x98(%rbp)
movq %rdx, -0x90(%rbp)
movb $0x1, -0x99(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x78(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x50(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x88(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x98(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0xe0(%rbp)
movb -0x99(%rbp), %al
andb $0x1, %al
movb %al, -0xe9(%rbp)
movb -0x99(%rbp), %al
andb $0x1, %al
movb %al, -0xea(%rbp)
testb $0x1, -0xea(%rbp)
je 0xd633e
movups -0x38(%rbp), %xmm0
movaps %xmm0, -0x100(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x108(%rbp)
movups -0xb8(%rbp), %xmm0
movaps %xmm0, -0x120(%rbp)
movups -0xc8(%rbp), %xmm0
movaps %xmm0, -0x130(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, -0x140(%rbp)
movups -0xe8(%rbp), %xmm0
movaps %xmm0, -0x150(%rbp)
movb -0xe9(%rbp), %al
andb $0x1, %al
movb %al, -0x151(%rbp)
movl -0x150(%rbp), %eax
movl %eax, -0x2ec(%rbp)
testl %eax, %eax
je 0xd61ac
jmp 0xd5fef
movl -0x2ec(%rbp), %eax
subl $0x1, %eax
jne 0xd6270
jmp 0xd6000
movl -0x150(%rbp), %edi
movq -0x148(%rbp), %rsi
leaq -0x1c8(%rbp), %rdx
callq 0x125e0
movq %rax, -0x1d8(%rbp)
movq %rdx, -0x1d0(%rbp)
movq -0x138(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x1e0(%rbp)
movq -0x1d8(%rbp), %rcx
movq -0x138(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x140(%rbp), %rdi
movq -0x138(%rbp), %rsi
movq -0x108(%rbp), %r8
movl -0x100(%rbp), %edx
movq -0xf8(%rbp), %rcx
leaq -0x120(%rbp), %r12
leaq -0x130(%rbp), %r15
leaq -0x1e8(%rbp), %r9
leaq -0x1f0(%rbp), %r14
leaq -0x200(%rbp), %rbx
leaq -0x208(%rbp), %r11
leaq -0x218(%rbp), %r10
leaq -0x228(%rbp), %rax
movq (%r12), %r13
movq %r13, (%rsp)
movq 0x8(%r12), %r12
movq %r12, 0x8(%rsp)
movq (%r15), %r12
movq %r12, 0x10(%rsp)
movq 0x8(%r15), %r15
movq %r15, 0x18(%rsp)
movq %r14, 0x20(%rsp)
movq %rbx, 0x28(%rsp)
movq %r11, 0x30(%rsp)
movq %r10, 0x38(%rsp)
movq %rax, 0x40(%rsp)
callq 0xd8f70
movq -0x1e0(%rbp), %rcx
movq -0x1f0(%rbp), %rax
movq %rcx, 0x10(%rax)
movb $0x1, -0x229(%rbp)
movb -0x229(%rbp), %al
andb $0x1, %al
movb %al, -0x1b1(%rbp)
movq -0x1c8(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x1e8(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x1f0(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x228(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x220(%rbp), %rax
movq %rax, -0x188(%rbp)
movq -0x218(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x210(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x208(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x200(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0x1f8(%rbp), %rax
movq %rax, -0x160(%rbp)
jmp 0xd6289
leaq -0x240(%rbp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x5080
movb $0x0, -0x241(%rbp)
movb -0x241(%rbp), %al
andb $0x1, %al
movb %al, -0x1b1(%rbp)
movq -0x240(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq -0x238(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x140(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x130(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x128(%rbp), %rax
movq %rax, -0x188(%rbp)
movq -0x120(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x118(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x170(%rbp)
movq -0x100(%rbp), %rax
movq %rax, -0x168(%rbp)
movq -0xf8(%rbp), %rax
movq %rax, -0x160(%rbp)
jmp 0xd6289
leaq 0x27dc0a(%rip), %rdi    # 0x353e81
movl $0x20, %esi
callq 0xb6c0
movq %rax, %rdi
callq 0xc620
movb -0x1b1(%rbp), %al
andb $0x1, %al
movb %al, -0xea(%rbp)
movb -0x1b1(%rbp), %al
andb $0x1, %al
movb %al, -0xe9(%rbp)
movq -0x1b0(%rbp), %rax
movq %rax, -0xe8(%rbp)
movq -0x1a8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x1a0(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x198(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0x190(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0x188(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0x180(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x178(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0x170(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x160(%rbp), %rax
movq %rax, -0x30(%rbp)
jmp 0xd5f5f
jmp 0xd6340
movl -0xe8(%rbp), %edi
movq -0xe0(%rbp), %rsi
callq 0x12780
movq %rax, -0x258(%rbp)
movq %rdx, -0x250(%rbp)
movq -0x250(%rbp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0xd6453
movl -0xe8(%rbp), %edi
movq -0xe0(%rbp), %rsi
callq 0x12780
movq %rax, -0x268(%rbp)
movq %rdx, -0x260(%rbp)
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq -0x268(%rbp), %rax
cmpq $0x0, %rax
je 0xd6453
movl -0xe8(%rbp), %edi
movq -0xe0(%rbp), %rsi
callq 0x12780
movq %rax, -0x278(%rbp)
movq %rdx, -0x270(%rbp)
movq -0x278(%rbp), %rax
andq $0x3, %rax
cmpq $0x0, %rax
jne 0xd6453
movl -0xe8(%rbp), %edi
movq -0xe0(%rbp), %rsi
callq 0x12780
movq %rax, -0x288(%rbp)
movq %rdx, -0x280(%rbp)
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq -0x288(%rbp), %rcx
movl (%rcx), %eax
addl $-0x1, %eax
movl %eax, (%rcx)
cmpl $0x0, %eax
jne 0xd6451
movl -0xe8(%rbp), %edi
movq -0xe0(%rbp), %rsi
callq 0x12780
movq %rax, -0x298(%rbp)
movq %rdx, -0x290(%rbp)
movq -0x298(%rbp), %rdi
movq -0x290(%rbp), %rsi
callq 0x127c0
jmp 0xd6453
jmp 0xd6455
jmp 0xd6457
movl -0xc8(%rbp), %edi
movq -0xc0(%rbp), %rsi
callq 0x12780
movq %rax, -0x2a8(%rbp)
movq %rdx, -0x2a0(%rbp)
movq -0x2a0(%rbp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0xd656a
movl -0xc8(%rbp), %edi
movq -0xc0(%rbp), %rsi
callq 0x12780
movq %rax, -0x2b8(%rbp)
movq %rdx, -0x2b0(%rbp)
movabsq $0xfffffffffffc, %rax   # imm = 0xFFFFFFFFFFFC
andq -0x2b8(%rbp), %rax
cmpq $0x0, %rax
je 0xd656a
movl -0xc8(%rbp), %edi
movq -0xc0(%rbp), %rsi
callq 0x12780
movq %rax, -0x2c8(%rbp)
movq %rdx, -0x2c0(%rbp)
movq -0x2c8(%rbp), %rax
andq $0x3, %rax
cmpq $0x0, %rax
jne 0xd656a
movl -0xc8(%rbp), %edi
movq -0xc0(%rbp), %rsi
callq 0x12780
movq %rax, -0x2d8(%rbp)
movq %rdx, -0x2d0(%rbp)
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq -0x2d8(%rbp), %rcx
movl (%rcx), %eax
addl $-0x1, %eax
movl %eax, (%rcx)
cmpl $0x0, %eax
jne 0xd6568
movl -0xc8(%rbp), %edi
movq -0xc0(%rbp), %rsi
callq 0x12780
movq %rax, -0x2e8(%rbp)
movq %rdx, -0x2e0(%rbp)
movq -0x2e8(%rbp), %rdi
movq -0x2e0(%rbp), %rsi
callq 0x127c0
jmp 0xd656a
jmp 0xd656c
movq 0x20(%rbp), %rax
movups -0xb8(%rbp), %xmm0
movups %xmm0, (%rax)
movq -0xd0(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0xd8(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, (%rax)
movl -0x38(%rbp), %eax
movq -0x30(%rbp), %rdx
addq $0x318, %rsp            # imm = 0x318
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop