// File: /workspace/github_cpp_makefile_star2_O3/devaigergely81[P]flex-bison-example/interpreter_implementation.cc
// Function: binop_expression::get_value() const
unsigned binop_expression::get_value() const {
    int left_value = left->get_value();
    int right_value = right->get_value();
    if(op == "+") {
        return left_value + right_value;
    } else if(op == "-") {
        return left_value - right_value;
    } else if(op == "*") {
        return left_value * right_value;
    } else if(op == "/") {
        return left_value / right_value;
    } else if(op == "%") {
        return left_value % right_value;
    } else if(op == "<") {
        return left_value < right_value;
    } else if(op == ">") {
        return left_value > right_value;
    } else if(op == "<=") {
        return left_value <= right_value;
    } else if(op == ">=") {
        return left_value >= right_value;
    } else if(op == "and") {
        return left_value && right_value;
    } else if(op == "or") {
        return left_value || right_value;
    } else if(op == "=") {
        return left_value == right_value;
    } else {
        error(line, std::string("Unknown operator: ") + op);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x40, %rsp
movq %rdi, %r12
movq 0x30(%rdi), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movl %eax, %r14d
movq 0x38(%r12), %rdi
movq (%rdi), %rax
callq *0x20(%rax)
movl %eax, %ebx
leaq 0x10(%r12), %r15
leaq 0x1add(%rip), %rsi      # 0xce01
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb43b
leaq 0x1ac8(%rip), %rsi      # 0xce03
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb440
leaq 0x1ab3(%rip), %rsi      # 0xce05
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb448
leaq 0x1a9e(%rip), %rsi      # 0xce07
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb44e
leaq 0x1a89(%rip), %rsi      # 0xce09
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb456
leaq 0x1a74(%rip), %rsi      # 0xce0b
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb460
leaq 0x1a5f(%rip), %rsi      # 0xce0d
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb46a
leaq 0x1a4a(%rip), %rsi      # 0xce0f
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb474
leaq 0x1a36(%rip), %rsi      # 0xce12
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb47e
leaq 0x1a22(%rip), %rsi      # 0xce15
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb488
leaq 0x1a1d(%rip), %rsi      # 0xce27
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
je 0xb49a
leaq 0x19ef(%rip), %rsi      # 0xce10
movq %r15, %rdi
callq 0x30b0
testl %eax, %eax
jne 0xb4b3
xorl %eax, %eax
cmpl %ebx, %r14d
sete %al
jmp 0xb4a2
addl %r14d, %ebx
jmp 0xb4a4
subl %ebx, %r14d
movl %r14d, %ebx
jmp 0xb4a4
imull %r14d, %ebx
jmp 0xb4a4
movl %r14d, %eax
cltd
idivl %ebx
jmp 0xb4a2
movl %r14d, %eax
cltd
idivl %ebx
movl %edx, %ebx
jmp 0xb4a4
xorl %eax, %eax
cmpl %ebx, %r14d
setl %al
jmp 0xb4a2
xorl %eax, %eax
cmpl %ebx, %r14d
setg %al
jmp 0xb4a2
xorl %eax, %eax
cmpl %ebx, %r14d
setle %al
jmp 0xb4a2
xorl %eax, %eax
cmpl %ebx, %r14d
setge %al
jmp 0xb4a2
testl %r14d, %r14d
setne %al
testl %ebx, %ebx
setne %cl
andb %al, %cl
movzbl %cl, %ebx
jmp 0xb4a4
xorl %eax, %eax
orl %r14d, %ebx
setne %al
movl %eax, %ebx
movl %ebx, %eax
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl 0x8(%r12), %ebx
leaq -0x30(%rbp), %r12
movq %r12, -0x10(%r12)
leaq 0x1e1f(%rip), %rsi      # 0xd2e7
leaq 0x1e2a(%rip), %rdx      # 0xd2f9
leaq -0x40(%rbp), %r14
movq %r14, %rdi
callq 0x51de
leaq -0x60(%rbp), %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0xb0a1
leaq -0x60(%rbp), %rsi
movl %ebx, %edi
callq 0x7274
leaq -0x60(%rbp), %rdi
callq 0x3120
leaq -0x40(%rbp), %rdi
callq 0x3120
movq %rax, %rbx
leaq -0x50(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xb528
movq -0x50(%rbp), %rsi
incq %rsi
callq 0x3240
jmp 0xb528
movq %rax, %rbx
movq -0x40(%rbp), %rdi
cmpq %r12, %rdi
je 0xb53d
movq -0x30(%rbp), %rsi
incq %rsi
callq 0x3240
movq %rbx, %rdi
callq 0x3380
nop