// File: /workspace/github_c_makefile_star2_O0/Yamsman[P]scc/src/eval.c
// Function: do_op
long long do_op(int op, int lhs, int rhs, int trs) {
	switch (op) {
		case TOK_QMK:		return (lhs) ? rhs : trs;
		case TOK_NOT:		return !lhs;
		case TOK_TLD:		return ~lhs;
		case TOK_ASR:		return lhs * rhs;
		case TOK_DIV:		return lhs / rhs;
		case TOK_MOD:		return lhs % rhs;
		case TOK_ADD:		return lhs + rhs;
		case TOK_SUB:		return lhs - rhs;
		case TOK_LSHIFT:	return lhs << rhs;
		case TOK_RSHIFT:	return lhs >> rhs;
		case TOK_GTH:		return lhs > rhs;
		case TOK_LTH:		return lhs < rhs;
		case TOK_GEQ:		return lhs >= rhs;
		case TOK_LEQ:		return lhs <= rhs;
		case TOK_EQ: 		return lhs == rhs;
		case TOK_NEQ:		return lhs != rhs;
		case TOK_AND:		return lhs & rhs;
		case TOK_XOR:		return lhs ^ rhs;
		case TOK_OR:		return lhs | rhs;
		case TOK_LOGIC_AND:	return lhs && rhs;
		case TOK_LOGIC_OR:	return lhs || rhs;
		case TOK_CMM:		return lhs, rhs;
	}
	return -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movl %edi, -0xc(%rbp)
movl %esi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl %ecx, -0x18(%rbp)
movl -0xc(%rbp), %eax
addl $-0x3, %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0x23, %eax
ja 0x3d88
movq -0x20(%rbp), %rax
leaq 0xd5e0(%rip), %rcx      # 0x11180
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x0, -0x10(%rbp)
je 0x3bb7
movl -0x14(%rbp), %eax
movl %eax, -0x24(%rbp)
jmp 0x3bbd
movl -0x18(%rbp), %eax
movl %eax, -0x24(%rbp)
movl -0x24(%rbp), %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
cmpl $0x0, -0x10(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
xorl $-0x1, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
imull -0x14(%rbp), %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cltd
idivl -0x14(%rbp)
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cltd
idivl -0x14(%rbp)
movslq %edx, %rax
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
addl -0x14(%rbp), %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
subl -0x14(%rbp), %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
movl -0x14(%rbp), %ecx
shll %cl, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
movl -0x14(%rbp), %ecx
sarl %cl, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cmpl -0x14(%rbp), %eax
setg %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cmpl -0x14(%rbp), %eax
setl %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cmpl -0x14(%rbp), %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cmpl -0x14(%rbp), %eax
setle %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cmpl -0x14(%rbp), %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
cmpl -0x14(%rbp), %eax
setne %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
andl -0x14(%rbp), %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
xorl -0x14(%rbp), %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movl -0x10(%rbp), %eax
orl -0x14(%rbp), %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
xorl %eax, %eax
cmpl $0x0, -0x10(%rbp)
movb %al, -0x25(%rbp)
je 0x3d49
cmpl $0x0, -0x14(%rbp)
setne %al
movb %al, -0x25(%rbp)
movb -0x25(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movb $0x1, %al
cmpl $0x0, -0x10(%rbp)
movb %al, -0x26(%rbp)
jne 0x3d6e
cmpl $0x0, -0x14(%rbp)
setne %al
movb %al, -0x26(%rbp)
movb -0x26(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cltq
movq %rax, -0x8(%rbp)
jmp 0x3d90
movslq -0x14(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x3d90
movq $-0x1, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nopw %cs:(%rax,%rax)