// File: /workspace/github_c_makefile_star2_O2/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 %r12
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
xorl %r14d, %r14d
subq $0x1, %rsi
cmovaeq %rsi, %r14
leaq -0x28(%rbp), %rdx
movq %r14, %rsi
callq 0x252f3
leal -0x7(%rax), %ecx
cmpl $0x6, %ecx
ja 0x48db7
leaq 0x8a07d(%rip), %rsi     # 0xd2dc0
movslq (%rsi,%rcx,4), %rcx
addq %rsi, %rcx
jmpq *%rcx
movq %rdx, %rdi
callq 0x2586e
jmp 0x48d79
movq %rdx, %rdi
callq 0x258a8
jmp 0x48d68
movq %rdx, %rdi
callq 0x2588b
movq %rax, %r14
movq -0x28(%rbp), %rcx
jmp 0x48da4
movq %rdx, %rdi
callq 0x258c5
movq %rax, %r15
movq -0x28(%rbp), %rdi
xorl %r14d, %r14d
subq $0x1, %rax
cmovaeq %rax, %r14
leaq -0x30(%rbp), %r12
movq %r14, %rsi
movq %r12, %rdx
callq 0x25235
movq (%r12), %rcx
testb %al, %al
cmoveq %r15, %r14
movq %rcx, (%rbx)
movq %r14, %rax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movabsq $0xfffffffffffc, %rcx   # imm = 0xFFFFFFFFFFFC
andq %rdx, %rcx
sete %sil
testb $0x3, %dl
setne %dil
orb %sil, %dil
jne 0x48d6b
decl (%rcx)
jne 0x48d6b
shlq $0x30, %rax
orq %rdx, %rax
leaq 0xc00f3(%rip), %rsi     # 0x108ed9
movq %rax, %rdi
callq 0xce94
jmp 0x48d6b