// File: /workspace/github_c_makefile_star2_O3/mirth-lang[P]mirth/bin/mirth1.c
// Function: mw_mirth_token_Token_prev
static uint64_t mw_mirth_token_Token_prev (struct mirth_mirth_zaMirth* in_zaMirth_1, uint64_t in_Token_2, struct mirth_mirth_zaMirth* *out_zaMirth_3) {
	struct mirth_mirth_zaMirth* v5;
	uint64_t v6 = mw_mirth_token_Token_pred(in_zaMirth_1, in_Token_2, &v5);
	struct mirth_mirth_zaMirth* v7;
	struct mirth_token_TokenValue v8 = mw_mirth_token_Token_value(v5, v6, &v7);
	struct mirth_mirth_zaMirth* branch_zaMirth_9;
	uint64_t branch_Token_10;
	switch ((v8).tag) {
		case mirth_token_TokenValue_RSquare: {
			uint64_t v11 = mtp_mirth_token_TokenValue_RSquare(v8);
			branch_Token_10 = v11;
			branch_zaMirth_9 = v7;
		} break;
		case mirth_token_TokenValue_RCurly: {
			uint64_t v12 = mtp_mirth_token_TokenValue_RCurly(v8);
			branch_Token_10 = v12;
			branch_zaMirth_9 = v7;
		} break;
		case mirth_token_TokenValue_RParen: {
			uint64_t v13 = mtp_mirth_token_TokenValue_RParen(v8);
			struct mirth_mirth_zaMirth* v14;
			uint64_t v15 = mw_mirth_token_Token_pred(v7, v13, &v14);
			struct mirth_mirth_zaMirth* v16;
			bool v17 = mw_mirth_token_Token_canzetakezeargszy(v14, v15, &v16);
			struct mirth_mirth_zaMirth* branch_zaMirth_18;
			uint64_t branch_Token_19;
			if (v17) {
				struct mirth_mirth_zaMirth* v20;
				uint64_t v21 = mw_mirth_token_Token_pred(v16, v13, &v20);
				branch_Token_19 = v21;
				branch_zaMirth_18 = v20;
			} else {
				branch_Token_19 = v13;
				branch_zaMirth_18 = v16;
			}
			branch_Token_10 = branch_Token_19;
			branch_zaMirth_9 = branch_zaMirth_18;
		} break;
		case mirth_token_TokenValue_RColon: {
			uint64_t v22 = mtp_mirth_token_TokenValue_RColon(v8);
			struct mirth_mirth_zaMirth* v23;
			uint64_t v24 = mw_mirth_token_Token_pred(v7, v22, &v23);
			struct mirth_mirth_zaMirth* v25;
			bool v26 = mw_mirth_token_Token_canzetakezeargszy(v23, v24, &v25);
			struct mirth_mirth_zaMirth* branch_zaMirth_27;
			uint64_t branch_Token_28;
			if (v26) {
				struct mirth_mirth_zaMirth* v29;
				uint64_t v30 = mw_mirth_token_Token_pred(v25, v22, &v29);
				branch_Token_28 = v30;
				branch_zaMirth_27 = v29;
			} else {
				branch_Token_28 = v22;
				branch_zaMirth_27 = v25;
			}
			branch_Token_10 = branch_Token_28;
			branch_zaMirth_9 = branch_zaMirth_27;
		} break;
		default: {
			decref(MK_mirth_token_TokenValue(v8));
			branch_Token_10 = v6;
			branch_zaMirth_9 = v7;
		} break;
	}
	*out_zaMirth_3 = branch_zaMirth_9;
	return branch_Token_10;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rdi, %r14
xorl %r15d, %r15d
subq $0x1, %rsi
cmovaeq %rsi, %r15
leaq 0x10c8029(%rip), %rdi   # 0x11153e8
movq %r15, %rsi
callq 0x13c85
movq %rax, %rdi
callq 0x13d82
movq %rax, %rcx
shrq $0x30, %rcx
movabsq $0xfffffffffffc, %rdi   # imm = 0xFFFFFFFFFFFC
andq %rax, %rdi
addl $-0x7, %ecx
cmpl $0x6, %ecx
ja 0x4d443
leaq 0x919ce(%rip), %rdx     # 0xdedc0
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq 0x8(%rdi), %r13
decl (%rdi)
jne 0x4d408
callq 0x5030
xorl %r15d, %r15d
movq %r13, %rax
subq $0x1, %rax
cmovaeq %rax, %r15
leaq -0x30(%rbp), %r12
movq %r14, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x27d4c
movq (%r12), %r14
testb %al, %al
cmoveq %r13, %r15
jmp 0x4d45f
movq 0x8(%rdi), %r15
decl (%rdi)
jne 0x4d45f
callq 0x5030
jmp 0x4d45f
testq %rdi, %rdi
je 0x4d45f
decl (%rdi)
jne 0x4d45f
andq $-0x4, %rax
leaq 0xc4a82(%rip), %rsi     # 0x111ed9
movq %rax, %rdi
callq 0xd13d
movq %r14, (%rbx)
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq