// File: /workspace/github_c_makefile_star2_O3/mirth-lang[P]mirth/bin/mirth1.c
// Function: mw_mirth_c99_C99ReprType_underlyingzec99zetype
static STR* mw_mirth_c99_C99ReprType_underlyingzec99zetype (struct mirth_mirth_zaMirth* in_zaMirth_1, struct mirth_c99_C99ReprType in_C99ReprType_2, struct mirth_mirth_zaMirth* *out_zaMirth_3) {
	struct mirth_mirth_zaMirth* branch_zaMirth_5;
	STR* branch_Str_6;
	switch ((in_C99ReprType_2).tag) {
		case mirth_c99_C99ReprType_Void: {
			STR* v7;
			STRLIT(v7, "void", 4);
			branch_Str_6 = v7;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_VAL: {
			STR* v8;
			STRLIT(v8, "VAL", 3);
			branch_Str_6 = v8;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_STR: {
			STR* v9;
			STRLIT(v9, "STR*", 4);
			branch_Str_6 = v9;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_ARR: {
			STR* v10;
			STRLIT(v10, "ARR*", 4);
			branch_Str_6 = v10;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_Int: {
			STR* v11;
			STRLIT(v11, "INT", 3);
			branch_Str_6 = v11;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_Nat: {
			STR* v12;
			STRLIT(v12, "INT", 3);
			branch_Str_6 = v12;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_I64: {
			STR* v13;
			STRLIT(v13, "int64_t", 7);
			branch_Str_6 = v13;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_I32: {
			STR* v14;
			STRLIT(v14, "int32_t", 7);
			branch_Str_6 = v14;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_I16: {
			STR* v15;
			STRLIT(v15, "int16_t", 7);
			branch_Str_6 = v15;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_I8: {
			STR* v16;
			STRLIT(v16, "int8_t", 6);
			branch_Str_6 = v16;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_U64: {
			STR* v17;
			STRLIT(v17, "uint64_t", 8);
			branch_Str_6 = v17;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_U32: {
			STR* v18;
			STRLIT(v18, "uint32_t", 8);
			branch_Str_6 = v18;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_U16: {
			STR* v19;
			STRLIT(v19, "uint16_t", 8);
			branch_Str_6 = v19;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_U8: {
			STR* v20;
			STRLIT(v20, "uint8_t", 7);
			branch_Str_6 = v20;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_F64: {
			STR* v21;
			STRLIT(v21, "double", 6);
			branch_Str_6 = v21;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_F32: {
			STR* v22;
			STRLIT(v22, "float", 5);
			branch_Str_6 = v22;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_Bool: {
			STR* v23;
			STRLIT(v23, "bool", 4);
			branch_Str_6 = v23;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_PTR: {
			STR* v24;
			STRLIT(v24, "void*", 5);
			branch_Str_6 = v24;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_FNPTR: {
			STR* v25;
			STRLIT(v25, "FNPTR", 5);
			branch_Str_6 = v25;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_TUP: {
			STR* v26;
			STRLIT(v26, "PTUP", 4);
			branch_Str_6 = v26;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_Table: {
			uint64_t v27 = mtp_mirth_c99_C99ReprType_Table(in_C99ReprType_2);
			STR* v28;
			STRLIT(v28, "uint64_t", 8);
			branch_Str_6 = v28;
			branch_zaMirth_5 = in_zaMirth_1;
		} break;
		case mirth_c99_C99ReprType_Data: {
			uint64_t v29 = mtp_mirth_c99_C99ReprType_Data(in_C99ReprType_2);
			struct mirth_mirth_zaMirth* v30;
			struct mirth_c99_C99DataRepr v31 = mw_mirth_data_Data_c99zerepr(in_zaMirth_1, v29, &v30);
			struct mirth_mirth_zaMirth* v32;
			STR* v33 = mw_mirth_c99_C99DataRepr_underlyingzec99zetype(v30, v31, &v32);
			branch_Str_6 = v33;
			branch_zaMirth_5 = v32;
		} break;
		default: {
			do_panic(str_make("unexpected fallthrough in match\n", 32));
		}
	}
	*out_zaMirth_3 = branch_zaMirth_5;
	return branch_Str_6;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
cmpl $0x15, %esi
ja 0xa5fb9
movq %rcx, %rbx
movq %rdi, %r14
movl %esi, %eax
leaq 0x3a22c(%rip), %rcx     # 0xdfc24
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x1071ae8(%rip), %rax   # 0x11174f0
testq %rax, %rax
jne 0xa5f0a
movl $0x4, %edi
callq 0xf5e4
movq $0x4, 0x10(%rax)
movl $0x64696f76, 0x18(%rax) # imm = 0x64696F76
movq %rax, 0x1071abf(%rip)   # 0x11174f0
jmp 0xa5f0a
movq 0x1071b2b(%rip), %rax   # 0x1117568
testq %rax, %rax
jne 0xa5f0a
movl $0x5, %edi
callq 0xf5e4
movq $0x5, 0x10(%rax)
movl $0x616f6c66, 0x18(%rax) # imm = 0x616F6C66
movb $0x74, 0x1c(%rax)
movq %rax, 0x1071afe(%rip)   # 0x1117568
jmp 0xa5f0a
movq 0x1071ae2(%rip), %rax   # 0x1117558
testq %rax, %rax
jne 0xa5f0a
movl $0x7, %edi
callq 0xf5e4
movq $0x7, 0x10(%rax)
movl $0x746e6975, 0x18(%rax) # imm = 0x746E6975
movl $0x745f3874, 0x1b(%rax) # imm = 0x745F3874
movq %rax, 0x1071ab2(%rip)   # 0x1117558
jmp 0xa5f0a
movq 0x1071a8e(%rip), %rax   # 0x1117540
testq %rax, %rax
jne 0xa5f0a
movl $0x8, %edi
callq 0xf5e4
movq $0x8, 0x10(%rax)
movabsq $0x745f3436746e6975, %rcx # imm = 0x745F3436746E6975
movq %rcx, 0x18(%rax)
movq %rax, 0x1071a5e(%rip)   # 0x1117540
jmp 0xa5f0a
movq 0x1071a9a(%rip), %rax   # 0x1117588
testq %rax, %rax
jne 0xa5f0a
movl $0x4, %edi
callq 0xf5e4
movq $0x4, 0x10(%rax)
movl $0x50555450, 0x18(%rax) # imm = 0x50555450
movq %rax, 0x1071a71(%rip)   # 0x1117588
jmp 0xa5f0a
movq 0x1071a25(%rip), %rax   # 0x1117548
testq %rax, %rax
jne 0xa5f0a
movl $0x8, %edi
callq 0xf5e4
movq $0x8, 0x10(%rax)
movabsq $0x745f3233746e6975, %rcx # imm = 0x745F3233746E6975
movq %rcx, 0x18(%rax)
movq %rax, 0x10719f5(%rip)   # 0x1117548
jmp 0xa5f0a
movq 0x10719d1(%rip), %rax   # 0x1117530
testq %rax, %rax
jne 0xa5f0a
movl $0x7, %edi
callq 0xf5e4
movq $0x7, 0x10(%rax)
movl $0x31746e69, 0x18(%rax) # imm = 0x31746E69
movl $0x745f3631, 0x1b(%rax) # imm = 0x745F3631
movq %rax, 0x10719a1(%rip)   # 0x1117530
jmp 0xa5f0a
movq 0x1071965(%rip), %rax   # 0x1117500
testq %rax, %rax
jne 0xa5f0a
movl $0x4, %edi
callq 0xf5e4
movq $0x4, 0x10(%rax)
movl $0x2a525453, 0x18(%rax) # imm = 0x2A525453
movq %rax, 0x107193c(%rip)   # 0x1117500
jmp 0xa5f0a
movq 0x1071990(%rip), %rax   # 0x1117560
testq %rax, %rax
jne 0xa5f0a
movl $0x6, %edi
callq 0xf5e4
movq $0x6, 0x10(%rax)
movl $0x62756f64, 0x18(%rax) # imm = 0x62756F64
movw $0x656c, 0x1c(%rax)     # imm = 0x656C
movq %rax, 0x1071961(%rip)   # 0x1117560
jmp 0xa5f0a
movq 0x10718fd(%rip), %rax   # 0x1117508
testq %rax, %rax
jne 0xa5f0a
movl $0x4, %edi
callq 0xf5e4
movq $0x4, 0x10(%rax)
movl $0x2a525241, 0x18(%rax) # imm = 0x2A525241
movq %rax, 0x10718d4(%rip)   # 0x1117508
jmp 0xa5f0a
movq 0x10718e0(%rip), %rax   # 0x1117520
testq %rax, %rax
jne 0xa5f0a
movl $0x7, %edi
callq 0xf5e4
movq $0x7, 0x10(%rax)
movl $0x36746e69, 0x18(%rax) # imm = 0x36746E69
movl $0x745f3436, 0x1b(%rax) # imm = 0x745F3436
movq %rax, 0x10718b0(%rip)   # 0x1117520
jmp 0xa5f0a
movq 0x107187c(%rip), %rax   # 0x11174f8
testq %rax, %rax
jne 0xa5f0a
movl $0x3, %edi
callq 0xf5e4
movq $0x3, 0x10(%rax)
movw $0x4156, 0x18(%rax)     # imm = 0x4156
movb $0x4c, 0x1a(%rax)
movq %rax, 0x1071850(%rip)   # 0x11174f8
jmp 0xa5f0a
movq 0x10718bc(%rip), %rax   # 0x1117570
testq %rax, %rax
jne 0xa5f0a
movl $0x4, %edi
callq 0xf5e4
movq $0x4, 0x10(%rax)
movl $0x6c6f6f62, 0x18(%rax) # imm = 0x6C6F6F62
movq %rax, 0x1071893(%rip)   # 0x1117570
jmp 0xa5f0a
decl (%rdx)
jne 0xa5cee
movq %rdx, %rdi
callq 0x5030
movq 0x107189b(%rip), %rax   # 0x1117590
testq %rax, %rax
jne 0xa5f0a
movl $0x8, %edi
callq 0xf5e4
movq $0x8, 0x10(%rax)
movabsq $0x745f3436746e6975, %rcx # imm = 0x745F3436746E6975
movq %rcx, 0x18(%rax)
movq %rax, 0x107186b(%rip)   # 0x1117590
jmp 0xa5f0a
movq 0x10717df(%rip), %rax   # 0x1117510
testq %rax, %rax
jne 0xa5f0a
movl $0x3, %edi
callq 0xf5e4
movq $0x3, 0x10(%rax)
movw $0x4e49, 0x18(%rax)     # imm = 0x4E49
movb $0x54, 0x1a(%rax)
movq %rax, 0x10717b3(%rip)   # 0x1117510
jmp 0xa5f0a
movq 0x8(%rdx), %r15
decl (%rdx)
jne 0xa5d72
movq %rdx, %rdi
callq 0x5030
leaq -0x30(%rbp), %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x946d0
cmpl $0x4, %eax
ja 0xa5fb9
movq -0x30(%rbp), %r14
movl %eax, %eax
leaq 0x39ee5(%rip), %rcx     # 0xdfc7c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rdx, %rdi
callq 0x9cf01
movq %rax, %rdi
callq 0xa722a
movq %rax, %rdi
movq %rdx, %rsi
callq 0x9189
jmp 0xa5f27
movq 0x1071789(%rip), %rax   # 0x1117550
testq %rax, %rax
jne 0xa5f0a
movl $0x8, %edi
callq 0xf5e4
movq $0x8, 0x10(%rax)
movabsq $0x745f3631746e6975, %rcx # imm = 0x745F3631746E6975
movq %rcx, 0x18(%rax)
movq %rax, 0x1071759(%rip)   # 0x1117550
jmp 0xa5f0a
movq 0x1071715(%rip), %rax   # 0x1117518
testq %rax, %rax
jne 0xa5f0a
movl $0x3, %edi
callq 0xf5e4
movq $0x3, 0x10(%rax)
movw $0x4e49, 0x18(%rax)     # imm = 0x4E49
movb $0x54, 0x1a(%rax)
movq %rax, 0x10716e9(%rip)   # 0x1117518
jmp 0xa5f0a
movq 0x107173d(%rip), %rax   # 0x1117578
testq %rax, %rax
jne 0xa5f0a
movl $0x5, %edi
callq 0xf5e4
movq $0x5, 0x10(%rax)
movl $0x64696f76, 0x18(%rax) # imm = 0x64696F76
movb $0x2a, 0x1c(%rax)
movq %rax, 0x1071710(%rip)   # 0x1117578
jmp 0xa5f0a
movq 0x10716c4(%rip), %rax   # 0x1117538
testq %rax, %rax
jne 0xa5f0a
movl $0x6, %edi
callq 0xf5e4
movq $0x6, 0x10(%rax)
movl $0x38746e69, 0x18(%rax) # imm = 0x38746E69
movw $0x745f, 0x1c(%rax)     # imm = 0x745F
movq %rax, 0x1071695(%rip)   # 0x1117538
jmp 0xa5f0a
movq 0x107167c(%rip), %rax   # 0x1117528
testq %rax, %rax
jne 0xa5f0a
movl $0x7, %edi
callq 0xf5e4
movq $0x7, 0x10(%rax)
movl $0x33746e69, 0x18(%rax) # imm = 0x33746E69
movl $0x745f3233, 0x1b(%rax) # imm = 0x745F3233
movq %rax, 0x1071650(%rip)   # 0x1117528
jmp 0xa5f0a
movq 0x107169f(%rip), %rax   # 0x1117580
testq %rax, %rax
jne 0xa5f0a
movl $0x5, %edi
callq 0xf5e4
movq $0x5, 0x10(%rax)
movl $0x54504e46, 0x18(%rax) # imm = 0x54504E46
movb $0x52, 0x1c(%rax)
movq %rax, 0x1071676(%rip)   # 0x1117580
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rax, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0xa5f27
incl (%rcx)
movq %r14, (%rbx)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rdx, %rdi
callq 0x9cfb2
leaq -0x28(%rbp), %r15
movq %r14, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0xa0dcd
jmp 0xa5f89
movq %rdx, %rdi
callq 0x9cf3c
leaq -0x28(%rbp), %r15
movq %r14, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0xa737e
jmp 0xa5f89
movq %rdx, %rdi
callq 0x9cf77
leaq -0x28(%rbp), %r15
movq %r14, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0xa51b0
movq (%r15), %r14
jmp 0xa5f27
movq 0x8(%rdx), %r15
decl (%rdx)
jne 0xa5f9e
movq %rdx, %rdi
callq 0x5030
leaq -0x28(%rbp), %r12
movq %r14, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0xa72a9
movq (%r12), %r14
jmp 0xa5f27
movl $0x20, %edi
callq 0xf5e4
movq $0x20, 0x10(%rax)
movups 0x3a6fb(%rip), %xmm0    # 0xe06cd
movups %xmm0, 0x18(%rax)
movups 0x3a700(%rip), %xmm0    # 0xe06dd
movups %xmm0, 0x28(%rax)
movq %rax, %rdi
callq 0x9302