// File: /workspace/github_c_makefile_star2_O2/mirth-lang[P]mirth/bin/mirth1.c
// Function: mw_mirth_type_StackType_forcezeconszyzx
static struct std_maybe_Maybe_1 mw_mirth_type_StackType_forcezeconszyzx (struct mirth_mirth_zaMirth* in_zaMirth_1, struct mirth_type_StackType in_StackType_2, struct mirth_mirth_zaMirth* *out_zaMirth_3) {
	struct mirth_mirth_zaMirth* v5;
	struct mirth_type_StackType v6 = mw_mirth_type_StackType_expand(in_zaMirth_1, in_StackType_2, &v5);
	struct mirth_mirth_zaMirth* branch_zaMirth_7;
	struct std_maybe_Maybe_1 branch_Maybe_8;
	switch ((v6).tag) {
		case mirth_type_StackType_Error: {
			struct mirth_type_StackType v9 = { .tag=mirth_type_StackType_Error };
			struct mirth_type_Type v10 = { .tag=mirth_type_Type_Error };
			PTUP r11 = PTRMK(0,tup_new(2),0);
			((TUP*)PTRPTR(r11))->size = 2;
			((TUP*)PTRPTR(r11))->cells[1] = MK_mirth_type_Type(v10);
			((TUP*)PTRPTR(r11))->cells[0] = MK_mirth_type_StackType(v9);
			struct std_maybe_Maybe_1 v12 = mtw_std_maybe_Maybe_1_Some(MKTUP(r11));
			branch_Maybe_8 = v12;
			branch_zaMirth_7 = v5;
		} break;
		case mirth_type_StackType_Ignore: {
			struct mirth_type_StackType v13 = { .tag=mirth_type_StackType_Ignore };
			struct mirth_type_Type v14 = { .tag=mirth_type_Type_Ignore };
			PTUP r15 = PTRMK(0,tup_new(2),0);
			((TUP*)PTRPTR(r15))->size = 2;
			((TUP*)PTRPTR(r15))->cells[1] = MK_mirth_type_Type(v14);
			((TUP*)PTRPTR(r15))->cells[0] = MK_mirth_type_StackType(v13);
			struct std_maybe_Maybe_1 v16 = mtw_std_maybe_Maybe_1_Some(MKTUP(r15));
			branch_Maybe_8 = v16;
			branch_zaMirth_7 = v5;
		} break;
		case mirth_type_StackType_Unit: {
			struct std_maybe_Maybe_1 v17 = { .tag=std_maybe_Maybe_1_None };
			branch_Maybe_8 = v17;
			branch_zaMirth_7 = v5;
		} break;
		case mirth_type_StackType_Var: {
			uint64_t v18 = mtp_mirth_type_StackType_Var(v6);
			struct std_maybe_Maybe_1 v19 = { .tag=std_maybe_Maybe_1_None };
			branch_Maybe_8 = v19;
			branch_zaMirth_7 = v5;
		} break;
		case mirth_type_StackType_Cons: {
			struct mirth_type_Type v20;
			struct mirth_type_StackType v21 = mtp_mirth_type_StackType_Cons(v6, &v20);
			PTUP r22 = PTRMK(0,tup_new(2),0);
			((TUP*)PTRPTR(r22))->size = 2;
			((TUP*)PTRPTR(r22))->cells[1] = MK_mirth_type_Type(v20);
			((TUP*)PTRPTR(r22))->cells[0] = MK_mirth_type_StackType(v21);
			struct std_maybe_Maybe_1 v23 = mtw_std_maybe_Maybe_1_Some(MKTUP(r22));
			branch_Maybe_8 = v23;
			branch_zaMirth_7 = v5;
		} break;
		case mirth_type_StackType_With: {
			struct mirth_type_Type v24;
			struct mirth_type_StackType v25 = mtp_mirth_type_StackType_With(v6, &v24);
			struct mirth_mirth_zaMirth* v26;
			struct std_maybe_Maybe_1 v27 = mw_mirth_type_StackType_forcezeconszyzx(v5, v25, &v26);
			struct std_maybe_Maybe_1 v28;
			struct mirth_type_Type v29 = mw_std_maybe_Maybe_1_map_1_sp12(v24, v27, &v28);
			decref(MK_mirth_type_Type(v29));
			branch_Maybe_8 = v28;
			branch_zaMirth_7 = v26;
		} break;
		case mirth_type_StackType_ConsLabel: {
			struct mirth_type_Type v30;
			uint64_t v31;
			struct mirth_type_StackType v32 = mtp_mirth_type_StackType_ConsLabel(v6, &v30, &v31);
			struct mirth_mirth_zaMirth* v33;
			struct std_maybe_Maybe_1 v34 = mw_mirth_type_StackType_forcezeconszyzx(v5, v32, &v33);
			struct mirth_mirth_zaMirth* branch_zaMirth_35;
			struct std_maybe_Maybe_1 branch_Maybe_36;
			switch ((v34).tag) {
				case std_maybe_Maybe_1_Some: {
					VAL v37 = mtp_std_maybe_Maybe_1_Some(v34);
					VAL v38 = ((TUP*)PTRPTR(value_tup(v37)))->cells[0];
					VAL v39 = ((TUP*)PTRPTR(value_tup(v37)))->cells[1];
					tup_decref_outer(value_tup(v37));
					struct mirth_type_StackType v40 = mtw_mirth_type_StackType_ConsLabel(V_mirth_type_StackType(v38), v30, v31);
					PTUP r41 = PTRMK(0,tup_new(2),0);
					((TUP*)PTRPTR(r41))->size = 2;
					((TUP*)PTRPTR(r41))->cells[1] = v39;
					((TUP*)PTRPTR(r41))->cells[0] = MK_mirth_type_StackType(v40);
					struct std_maybe_Maybe_1 v42 = mtw_std_maybe_Maybe_1_Some(MKTUP(r41));
					branch_Maybe_36 = v42;
					branch_zaMirth_35 = v33;
				} break;
				case std_maybe_Maybe_1_None: {
					decref(MK_mirth_type_Type(v30));
					struct std_maybe_Maybe_1 v43 = { .tag=std_maybe_Maybe_1_None };
					branch_Maybe_36 = v43;
					branch_zaMirth_35 = v33;
				} break;
				default: {
					do_panic(str_make("unexpected fallthrough in match\n", 32));
				}
			}
			branch_Maybe_8 = branch_Maybe_36;
			branch_zaMirth_7 = branch_zaMirth_35;
		} break;
		case mirth_type_StackType_WithLabel: {
			struct mirth_type_Type v44;
			uint64_t v45;
			struct mirth_type_StackType v46 = mtp_mirth_type_StackType_WithLabel(v6, &v44, &v45);
			struct mirth_mirth_zaMirth* v47;
			struct std_maybe_Maybe_1 v48 = mw_mirth_type_StackType_forcezeconszyzx(v5, v46, &v47);
			struct mirth_mirth_zaMirth* branch_zaMirth_49;
			struct std_maybe_Maybe_1 branch_Maybe_50;
			switch ((v48).tag) {
				case std_maybe_Maybe_1_Some: {
					VAL v51 = mtp_std_maybe_Maybe_1_Some(v48);
					VAL v52 = ((TUP*)PTRPTR(value_tup(v51)))->cells[0];
					VAL v53 = ((TUP*)PTRPTR(value_tup(v51)))->cells[1];
					tup_decref_outer(value_tup(v51));
					struct mirth_type_StackType v54 = mtw_mirth_type_StackType_WithLabel(V_mirth_type_StackType(v52), v44, v45);
					PTUP r55 = PTRMK(0,tup_new(2),0);
					((TUP*)PTRPTR(r55))->size = 2;
					((TUP*)PTRPTR(r55))->cells[1] = v53;
					((TUP*)PTRPTR(r55))->cells[0] = MK_mirth_type_StackType(v54);
					struct std_maybe_Maybe_1 v56 = mtw_std_maybe_Maybe_1_Some(MKTUP(r55));
					branch_Maybe_50 = v56;
					branch_zaMirth_49 = v47;
				} break;
				case std_maybe_Maybe_1_None: {
					decref(MK_mirth_type_Type(v44));
					struct std_maybe_Maybe_1 v57 = { .tag=std_maybe_Maybe_1_None };
					branch_Maybe_50 = v57;
					branch_zaMirth_49 = v47;
				} break;
				default: {
					do_panic(str_make("unexpected fallthrough in match\n", 32));
				}
			}
			branch_Maybe_8 = branch_Maybe_50;
			branch_zaMirth_7 = branch_zaMirth_49;
		} break;
		case mirth_type_StackType_Meta: {
			uint64_t v58 = mtp_mirth_type_StackType_Meta(v6);
			struct mirth_mirth_zaMirth* v59;
			struct mirth_type_StackType v60 = mw_mirth_type_StackType_Freshzx(v5, &v59);
			struct mirth_mirth_zaMirth* v61;
			struct mirth_type_Type v62 = mw_mirth_type_Type_Freshzx(v59, &v61);
			incref(MK_mirth_type_StackType(v60));
			incref(MK_mirth_type_Type(v62));
			struct mirth_type_StackType v63 = mtw_mirth_type_StackType_Cons(v60, v62);
			struct mirth_type_Type v64 = mw_mirth_type_StackType_zgType(v63);
			struct std_maybe_Maybe_1 v65 = mtw_std_maybe_Maybe_1_Some(MK_mirth_type_Type(v64));
			struct mirth_mirth_zaMirth* v66;
			mw_mirth_type_MetaVar_typezyzx(v61, v65, v58, &v66);
			PTUP r67 = PTRMK(0,tup_new(2),0);
			((TUP*)PTRPTR(r67))->size = 2;
			((TUP*)PTRPTR(r67))->cells[1] = MK_mirth_type_Type(v62);
			((TUP*)PTRPTR(r67))->cells[0] = MK_mirth_type_StackType(v60);
			struct std_maybe_Maybe_1 v68 = mtw_std_maybe_Maybe_1_Some(MKTUP(r67));
			branch_Maybe_8 = v68;
			branch_zaMirth_7 = v66;
		} break;
		default: {
			do_panic(str_make("unexpected fallthrough in match\n", 32));
		}
	}
	*out_zaMirth_3 = branch_zaMirth_7;
	return branch_Maybe_8;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x48, %rsp
movq %rcx, %rbx
leaq -0x30(%rbp), %rcx
callq 0x34dd2
cmpl $0x8, %eax
ja 0x38e88
movl %eax, %eax
leaq 0x9a148(%rip), %rcx     # 0xd2ae4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
pushq $0x2
popq %rdi
callq 0xd928
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rax, %rcx
movw $0x2, 0x6(%rcx)
leaq 0xd0122(%rip), %rdx     # 0x108ae9
andq $0x0, 0x18(%rcx)
movq %rdx, 0x20(%rcx)
andq $0x0, 0x8(%rcx)
leaq 0xd01e5(%rip), %rdx     # 0x108bc1
movq %rdx, 0x10(%rcx)
jmp 0x38bb8
movabsq $0xfffffffffffc, %r13   # imm = 0xFFFFFFFFFFFC
movq %rdx, %rdi
callq 0x34e20
movq %rax, -0x58(%rbp)
movq -0x30(%rbp), %rdi
leaq -0x48(%rbp), %r15
movq %r15, %rsi
callq 0x3a29b
movq %rax, %r12
movq (%r15), %rdi
leaq -0x70(%rbp), %rsi
callq 0x3a2e1
movq %rax, %rcx
movq %r12, %rdx
andq %r13, %rdx
sete %sil
testb $0x3, %r12b
setne %dil
orb %sil, %dil
jne 0x38a36
incl (%rdx)
movq %r12, %r15
btsq $0x32, %r15
movabsq $0x3000000000000, %r14  # imm = 0x3000000000000
orq %rax, %r14
andq %r13, %rax
sete %dl
testb $0x3, %cl
setne %sil
orb %dl, %sil
jne 0x38a5f
incl (%rax)
pushq $0x4
popq %rdi
pushq $0x3
popq %rdx
movq %r12, %rsi
callq 0x1e310
pushq $0x5
popq %rdi
movq %rdx, %rsi
callq 0x3883b
shlq $0x30, %rax
orq %rdx, %rax
movq %rax, %rdi
leaq 0xd0060(%rip), %r12     # 0x108ae9
movq %r12, %rsi
callq 0x8d0c
movq -0x70(%rbp), %rdi
leaq -0x38(%rbp), %rcx
movq %rdx, %rsi
movq -0x58(%rbp), %rdx
callq 0x2ab8f
pushq $0x2
popq %rdi
callq 0xd928
andq %rax, %r13
movw $0x2, 0x6(%r13)
movq %r14, 0x18(%r13)
movq %r12, 0x20(%r13)
movq %r15, 0x8(%r13)
leaq 0xd00f7(%rip), %rcx     # 0x108bc1
movq %rcx, 0x10(%r13)
leaq 0xcf8c4(%rip), %rsi     # 0x108399
movq %rax, %rdi
callq 0x8d0c
leaq -0x38(%rbp), %rax
movq (%rax), %rax
jmp 0x38c47
movq %rdx, %rdi
callq 0x34edb
xorl %r14d, %r14d
movq -0x30(%rbp), %rax
jmp 0x38e71
leaq -0x48(%rbp), %r14
movq %rdx, %rdi
movq %r14, %rsi
callq 0x34f7f
movq -0x30(%rbp), %rdi
leaq -0x38(%rbp), %rcx
movl %eax, %esi
callq 0x3896d
movq %rdx, %rcx
movl (%r14), %edi
movq 0x8(%r14), %rsi
leaq -0x70(%rbp), %r8
movl %eax, %edx
callq 0x3a149
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rdx, %rcx
sete %sil
testb $0x3, %dl
setne %dil
orb %sil, %dil
jne 0x38b67
decl (%rcx)
jne 0x38b67
shlq $0x30, %rax
orq %rdx, %rax
leaq 0xcff8a(%rip), %rsi     # 0x108ae9
movq %rax, %rdi
callq 0xce94
movl -0x70(%rbp), %r14d
movq -0x68(%rbp), %rdx
movq -0x38(%rbp), %rax
jmp 0x38e73
pushq $0x2
popq %rdi
callq 0xd928
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
movq %rax, %rdx
andq %rcx, %rdx
movw $0x2, 0x6(%rdx)
leaq 0xcff4c(%rip), %rsi     # 0x108ae9
addq $0x4, %rcx
movq %rcx, 0x18(%rdx)
movq %rsi, 0x20(%rdx)
leaq 0xd0011(%rip), %rsi     # 0x108bc1
movq %rcx, 0x8(%rdx)
movq %rsi, 0x10(%rdx)
leaq 0xcf7da(%rip), %rsi     # 0x108399
movq %rax, %rdi
callq 0x8d0c
pushq $0x1
popq %r14
movq -0x30(%rbp), %rax
jmp 0x38e73
leaq -0x48(%rbp), %r14
movq %rdx, %rdi
movq %r14, %rsi
callq 0x34ef8
movl %eax, %r15d
movq %rdx, %r12
pushq $0x2
popq %rdi
callq 0xd928
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rax, %rcx
movw $0x2, 0x6(%rcx)
movl (%r14), %edx
shlq $0x30, %rdx
orq 0x8(%r14), %rdx
leaq 0xcfed3(%rip), %rsi     # 0x108ae9
movq %rdx, 0x18(%rcx)
movq %rsi, 0x20(%rcx)
shlq $0x30, %r15
orq %r12, %r15
leaq 0xcff95(%rip), %rdx     # 0x108bc1
movq %r15, 0x8(%rcx)
movq %rdx, 0x10(%rcx)
leaq 0xcf75e(%rip), %rsi     # 0x108399
movq %rax, %rdi
callq 0x8d0c
movq -0x30(%rbp), %rax
pushq $0x1
popq %r14
jmp 0x38e73
leaq -0x48(%rbp), %rsi
leaq -0x38(%rbp), %rax
movq %rdx, %rdi
movq %rax, %rdx
callq 0x3502f
movq -0x30(%rbp), %rdi
leaq -0x60(%rbp), %rcx
movl %eax, %esi
callq 0x3896d
movl %eax, %r14d
testl %eax, %eax
je 0x38e34
movq %rbx, -0x58(%rbp)
cmpl $0x1, %r14d
jne 0x38e88
movq %rdx, %rdi
callq 0xd491
movq %rax, %r12
movq %rdx, -0x50(%rbp)
movq %rax, %rdi
movq %rdx, %rsi
callq 0x8a95
movabsq $0xfffffffffffc, %rbx   # imm = 0xFFFFFFFFFFFC
movq %r12, %r15
andq %rbx, %r15
movq 0x8(%r15), %r13
movq %r12, %rdi
movq -0x50(%rbp), %rsi
callq 0x8a95
movups 0x18(%r15), %xmm0
movaps %xmm0, -0x70(%rbp)
movq %r12, %rdi
movq -0x50(%rbp), %rsi
callq 0x8a95
movq %r12, %rdi
callq 0x8ae0
movq %r13, %rdi
shrq $0x30, %rdi
andq %rbx, %r13
movq -0x38(%rbp), %r8
movl -0x48(%rbp), %edx
movq -0x40(%rbp), %rcx
movq %r13, %rsi
callq 0x393fa
movq %rdx, %r15
pushq $0x2
popq %rdi
callq 0xd928
andq %rax, %rbx
movw $0x2, 0x6(%rbx)
movaps -0x70(%rbp), %xmm0
movups %xmm0, 0x18(%rbx)
movabsq $0x6000000000000, %rcx  # imm = 0x6000000000000
orq %r15, %rcx
leaq 0xcfe92(%rip), %rdx     # 0x108bc1
movq %rcx, 0x8(%rbx)
movq %rdx, 0x10(%rbx)
jmp 0x38e1b
leaq -0x48(%rbp), %rsi
leaq -0x38(%rbp), %rax
movq %rdx, %rdi
movq %rax, %rdx
callq 0x350d3
movq -0x30(%rbp), %rdi
leaq -0x60(%rbp), %rcx
movl %eax, %esi
callq 0x3896d
movl %eax, %r14d
testl %eax, %eax
je 0x38e34
movq %rbx, -0x58(%rbp)
cmpl $0x1, %r14d
jne 0x38e88
movq %rdx, %rdi
callq 0xd491
movq %rax, %r12
movq %rdx, -0x50(%rbp)
movq %rax, %rdi
movq %rdx, %rsi
callq 0x8a95
movabsq $0xfffffffffffc, %rbx   # imm = 0xFFFFFFFFFFFC
movq %r12, %r15
andq %rbx, %r15
movq 0x8(%r15), %r13
movq %r12, %rdi
movq -0x50(%rbp), %rsi
callq 0x8a95
movups 0x18(%r15), %xmm0
movaps %xmm0, -0x70(%rbp)
movq %r12, %rdi
movq -0x50(%rbp), %rsi
callq 0x8a95
movq %r12, %rdi
callq 0x8ae0
movq %r13, %rdi
shrq $0x30, %rdi
andq %rbx, %r13
movq -0x38(%rbp), %r8
movl -0x48(%rbp), %edx
movq -0x40(%rbp), %rcx
movq %r13, %rsi
callq 0x39a7a
movq %rdx, %r15
pushq $0x2
popq %rdi
callq 0xd928
andq %rax, %rbx
movw $0x2, 0x6(%rbx)
movaps -0x70(%rbp), %xmm0
movups %xmm0, 0x18(%rbx)
btsq $0x33, %r15
leaq 0xcfdae(%rip), %rcx     # 0x108bc1
movq %r15, 0x8(%rbx)
movq %rcx, 0x10(%rbx)
leaq 0xcf577(%rip), %rsi     # 0x108399
movq %rax, %rdi
callq 0x8d0c
movq -0x60(%rbp), %rax
movq -0x58(%rbp), %rbx
jmp 0x38e73
movq -0x40(%rbp), %rax
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rax, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x38e6d
movl -0x48(%rbp), %edi
decl (%rcx)
jne 0x38e6d
shlq $0x30, %rdi
orq %rax, %rdi
leaq 0xcfc81(%rip), %rsi     # 0x108ae9
callq 0xce94
movq -0x60(%rbp), %rax
xorl %edx, %edx
movq %rax, (%rbx)
movl %r14d, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x9b97e(%rip), %rdi     # 0xd480d
pushq $0x20
popq %rsi
callq 0x8a21
movq %rax, %rdi
callq 0x8cc6