// File: /workspace/github_c_makefile_star2_O2/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 %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
cmpl $0x15, %esi
ja 0x9cdb6
movq %rcx, %rbx
movq %rdi, %r14
movl %esi, %eax
leaq 0x3745d(%rip), %rcx     # 0xd3c44
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x1071d01(%rip), %rax   # 0x110e4f8
testq %rax, %rax
jne 0x9cc1e
leaq 0x3b300(%rip), %rdi     # 0xd7b07
pushq $0x4
popq %rsi
callq 0x8a21
movq %rax, 0x1071ce2(%rip)   # 0x110e4f8
jmp 0x9cc1e
movq 0x1071d4e(%rip), %rax   # 0x110e570
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e690(%rip), %rdi     # 0xdaec2
pushq $0x5
popq %rsi
callq 0x8a21
movq %rax, 0x1071d2f(%rip)   # 0x110e570
jmp 0x9cc1e
movq 0x1071d13(%rip), %rax   # 0x110e560
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e642(%rip), %rdi     # 0xdae9f
pushq $0x7
popq %rsi
callq 0x8a21
movq %rax, 0x1071cf4(%rip)   # 0x110e560
jmp 0x9cc1e
movq 0x1071cd0(%rip), %rax   # 0x110e548
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e631(%rip), %rdi     # 0xdaeb9
pushq $0x8
popq %rsi
callq 0x8a21
movq %rax, 0x1071cb1(%rip)   # 0x110e548
jmp 0x9cc1e
movq 0x1071ced(%rip), %rax   # 0x110e590
testq %rax, %rax
jne 0x9cc1e
leaq 0x51078(%rip), %rdi     # 0xed92b
pushq $0x4
popq %rsi
callq 0x8a21
movq %rax, 0x1071cce(%rip)   # 0x110e590
jmp 0x9cc1e
movq 0x1071c82(%rip), %rax   # 0x110e550
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e5d2(%rip), %rdi     # 0xdaeb0
pushq $0x8
popq %rsi
callq 0x8a21
movq %rax, 0x1071c63(%rip)   # 0x110e550
jmp 0x9cc1e
movq 0x1071c3f(%rip), %rax   # 0x110e538
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e59f(%rip), %rdi     # 0xdaea8
pushq $0x7
popq %rsi
callq 0x8a21
movq %rax, 0x1071c20(%rip)   # 0x110e538
jmp 0x9cc1e
movq 0x1071be4(%rip), %rax   # 0x110e508
testq %rax, %rax
jne 0x9cc1e
leaq 0x50fed(%rip), %rdi     # 0xed921
pushq $0x4
popq %rsi
callq 0x8a21
movq %rax, 0x1071bc5(%rip)   # 0x110e508
jmp 0x9cc1e
movq 0x1071c19(%rip), %rax   # 0x110e568
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e569(%rip), %rdi     # 0xdaec8
pushq $0x6
popq %rsi
callq 0x8a21
movq %rax, 0x1071bfa(%rip)   # 0x110e568
jmp 0x9cc1e
movq 0x1071b96(%rip), %rax   # 0x110e510
testq %rax, %rax
jne 0x9cc1e
leaq 0x50f9c(%rip), %rdi     # 0xed926
pushq $0x4
popq %rsi
callq 0x8a21
movq %rax, 0x1071b77(%rip)   # 0x110e510
jmp 0x9cc1e
movq 0x1071b83(%rip), %rax   # 0x110e528
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e505(%rip), %rdi     # 0xdaeba
pushq $0x7
popq %rsi
callq 0x8a21
movq %rax, 0x1071b64(%rip)   # 0x110e528
jmp 0x9cc1e
movq 0x1071b30(%rip), %rax   # 0x110e500
testq %rax, %rax
jne 0x9cc1e
leaq 0x521a0(%rip), %rdi     # 0xeeb80
pushq $0x3
popq %rsi
callq 0x8a21
movq %rax, 0x1071b11(%rip)   # 0x110e500
jmp 0x9cc1e
movq 0x1071b7d(%rip), %rax   # 0x110e578
testq %rax, %rax
jne 0x9cc1e
leaq 0x50d1d(%rip), %rdi     # 0xed728
pushq $0x4
popq %rsi
callq 0x8a21
movq %rax, 0x1071b5e(%rip)   # 0x110e578
jmp 0x9cc1e
movq %rdx, %rdi
callq 0x97e07
movq 0x1071b6a(%rip), %rax   # 0x110e598
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e47b(%rip), %rdi     # 0xdaeb9
pushq $0x8
popq %rsi
callq 0x8a21
movq %rax, 0x1071b4b(%rip)   # 0x110e598
jmp 0x9cc1e
movq 0x1071abf(%rip), %rax   # 0x110e518
testq %rax, %rax
jne 0x9cc1e
leaq 0x37e36(%rip), %rdi     # 0xd489f
pushq $0x3
popq %rsi
callq 0x8a21
movq %rax, 0x1071aa0(%rip)   # 0x110e518
jmp 0x9cc1e
movq %rdx, %rdi
callq 0x97e24
leaq -0x38(%rbp), %rdx
movq %r14, %rdi
movq %rax, %rsi
callq 0x8cba8
cmpl $0x4, %eax
ja 0x9cdb6
movq -0x38(%rbp), %r14
movl %eax, %eax
leaq 0x371f2(%rip), %rcx     # 0xd3c9c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movabsq $0xfffffffffffc, %r15   # imm = 0xFFFFFFFFFFFC
movq %rdx, %rdi
callq 0x94a52
movq %rax, %rcx
andq %r15, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x9caec
decl (%rcx)
jne 0x9caec
leaq 0x6d2dd(%rip), %rsi     # 0x109dc1
movq %rax, %rdi
callq 0xce94
movq 0x1071aad(%rip), %rdi   # 0x110e5a0
testq %rdi, %rdi
jne 0x9cb11
leaq 0x3b008(%rip), %rdi     # 0xd7b07
pushq $0x4
popq %rsi
callq 0x8a21
movq %rax, %rdi
movq %rax, 0x1071a8f(%rip)   # 0x110e5a0
andq %rdi, %r15
sete %al
testb $0x3, %dil
setne %cl
orb %al, %cl
jne 0x9cb25
incl (%r15)
leaq 0x6b62d(%rip), %rsi     # 0x108159
callq 0x8b55
jmp 0x9cc3b
movq 0x1071a1b(%rip), %rax   # 0x110e558
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e35a(%rip), %rdi     # 0xdaea7
pushq $0x8
popq %rsi
callq 0x8a21
movq %rax, 0x10719fc(%rip)   # 0x110e558
jmp 0x9cc1e
movq 0x10719b8(%rip), %rax   # 0x110e520
testq %rax, %rax
jne 0x9cc1e
leaq 0x37d27(%rip), %rdi     # 0xd489f
pushq $0x3
popq %rsi
callq 0x8a21
movq %rax, 0x1071999(%rip)   # 0x110e520
jmp 0x9cc1e
movq 0x10719ed(%rip), %rax   # 0x110e580
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e2f0(%rip), %rdi     # 0xdae93
pushq $0x5
popq %rsi
callq 0x8a21
movq %rax, 0x10719ce(%rip)   # 0x110e580
jmp 0x9cc1e
movq 0x1071985(%rip), %rax   # 0x110e540
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e2d9(%rip), %rdi     # 0xdaea0
pushq $0x6
popq %rsi
callq 0x8a21
movq %rax, 0x107196a(%rip)   # 0x110e540
jmp 0x9cc1e
movq 0x1071951(%rip), %rax   # 0x110e530
testq %rax, %rax
jne 0x9cc1e
leaq 0x3e2c6(%rip), %rdi     # 0xdaeb1
pushq $0x7
popq %rsi
callq 0x8a21
movq %rax, 0x1071936(%rip)   # 0x110e530
jmp 0x9cc1e
movq 0x1071985(%rip), %rax   # 0x110e588
testq %rax, %rax
jne 0x9cc1e
leaq 0x51fd5(%rip), %rdi     # 0xeebe4
pushq $0x5
popq %rsi
callq 0x8a21
movq %rax, 0x107196a(%rip)   # 0x110e588
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rax, %rcx
sete %dl
testb $0x3, %al
setne %sil
orb %dl, %sil
jne 0x9cc3b
incl (%rcx)
movq %r14, (%rbx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rdx, %rdi
callq 0x94b20
leaq -0x30(%rbp), %r15
movq %r14, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x98291
jmp 0x9ccfa
movabsq $0xfffffffffffc, %r13   # imm = 0xFFFFFFFFFFFC
movq %rdx, %rdi
callq 0x94aaa
movq %rax, %rdi
movl 0x30(%rax), %r15d
movq 0x38(%rax), %r12
movq %r12, %rcx
andq %r13, %rcx
sete %dl
testb $0x3, %r12b
setne %sil
orb %dl, %sil
jne 0x9cca1
incl (%rcx)
andq %r13, %rax
sete %cl
testb $0x3, %dil
setne %dl
orb %cl, %dl
jne 0x9ccc2
decl (%rax)
jne 0x9ccc2
leaq 0x6d194(%rip), %rsi     # 0x109e51
callq 0xce94
leaq -0x30(%rbp), %r13
movq %r14, %rdi
movl %r15d, %esi
movq %r12, %rdx
movq %r13, %rcx
callq 0x9c7be
movq (%r13), %r14
jmp 0x9cc3b
movq %rdx, %rdi
callq 0x94ae5
leaq -0x30(%rbp), %r15
movq %r14, %rdi
movq %rax, %rsi
movq %r15, %rdx
callq 0x9c022
movq (%r15), %r14
jmp 0x9cc3b
movq %rdx, %rdi
callq 0x94a8d
leaq -0x30(%rbp), %rdx
movq %r14, %rdi
movq %rax, %rsi
callq 0x973f9
movq %rax, %r14
movq 0x1071885(%rip), %r15   # 0x110e5a8
testq %r15, %r15
jne 0x9cd40
leaq 0x3f9c6(%rip), %rdi     # 0xdc6f5
xorl %esi, %esi
callq 0x8a21
movq %rax, %r15
movq %rax, 0x1071868(%rip)   # 0x110e5a8
movabsq $0xfffffffffffc, %r12   # imm = 0xFFFFFFFFFFFC
movq %r15, %rax
andq %r12, %rax
sete %cl
testb $0x3, %r15b
setne %dl
orb %cl, %dl
jne 0x9cd60
incl (%rax)
movq 0x1071849(%rip), %rsi   # 0x110e5b0
testq %rsi, %rsi
jne 0x9cd85
leaq 0x50793(%rip), %rdi     # 0xed506
pushq $0x5
popq %rsi
callq 0x8a21
movq %rax, %rsi
movq %rax, 0x107182b(%rip)   # 0x110e5b0
andq %rsi, %r12
sete %al
testb $0x3, %sil
setne %cl
orb %al, %cl
jne 0x9cd9a
incl (%r12)
movq %r15, %rdi
callq 0xd8b0
movq %rax, %rdi
movq %r14, %rsi
callq 0xd8b0
movq -0x30(%rbp), %r14
jmp 0x9cc3b
leaq 0x37a50(%rip), %rdi     # 0xd480d
pushq $0x20
popq %rsi
callq 0x8a21
movq %rax, %rdi
callq 0x8cc6