// File: /workspace/github_cpp_makefile_star2_O1/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::synthesize_shortcircuit_expression(exprtk::details::operator_type const&, exprtk::details::expression_node<double>* (&) [2])
inline expression_node_ptr synthesize_shortcircuit_expression(const details::operator_type& operation, expression_node_ptr (&branch)[2])
         {
            expression_node_ptr result = error_node();

            if (details::is_constant_node(branch[0]))
            {
               if (
                    (details::e_scand == operation) &&
                    std::equal_to<T>()(T(0),branch[0]->value())
                  )
                  result = node_allocator_->allocate_c<literal_node_t>(T(0));
               else if (
                         (details::e_scor == operation) &&
                         std::not_equal_to<T>()(T(0),branch[0]->value())
                       )
                  result = node_allocator_->allocate_c<literal_node_t>(T(1));
            }

            if (details::is_constant_node(branch[1]) && (0 == result))
            {
               if (
                    (details::e_scand == operation) &&
                    std::equal_to<T>()(T(0),branch[1]->value())
                  )
                  result = node_allocator_->allocate_c<literal_node_t>(T(0));
               else if (
                         (details::e_scor == operation) &&
                         std::not_equal_to<T>()(T(0),branch[1]->value())
                       )
                  result = node_allocator_->allocate_c<literal_node_t>(T(1));
            }

            if (result)
            {
               details::free_node(*node_allocator_, branch[0]);
               details::free_node(*node_allocator_, branch[1]);

               return result;
            }
            else if (details::e_scand == operation)
            {
               return synthesize_expression<scand_node_t,2>(operation, branch);
            }
            else if (details::e_scor == operation)
            {
               return synthesize_expression<scor_node_t,2>(operation, branch);
            }
            else
               return error_node();
         }

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rdx), %r12
testq %r12, %r12
je 0x2b7d25
movq (%r12), %rax
movq %r12, %rdi
callq *0x28(%rax)
cmpl $0x2, %eax
je 0x2b7ca2
movq (%r12), %rax
movq %r12, %rdi
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x2b7d25
cmpl $0x1e, (%r14)
jne 0x2b7cbd
movq (%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2b7cbd
jnp 0x2b7ce0
cmpl $0x1f, (%r14)
jne 0x2b7d25
movq (%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2b7cd8
jnp 0x2b7d25
movsd 0xfa340(%rip), %xmm1    # 0x3b2020
movsd %xmm1, 0x8(%rsp)
movl $0x28, %edi
callq 0x1200f0
movq %rax, %r12
movb $0x0, 0x10(%rax)
movq $0x0, 0x18(%rax)
leaq 0x259582(%rip), %rax    # 0x511288
movq %rax, (%r12)
leaq 0x2595bf(%rip), %rax    # 0x5112d0
movq %rax, 0x8(%r12)
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x20(%r12)
jmp 0x2b7d28
xorl %r12d, %r12d
movq 0x8(%rbx), %r13
testq %r13, %r13
je 0x2b7d54
movq (%r13), %rax
movq %r13, %rdi
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x2, %eax
je 0x2b7d56
movq (%r13), %rax
movq %r13, %rdi
callq *0x28(%rax)
cmpl $0x13, %eax
sete %cl
jmp 0x2b7d56
xorl %ecx, %ecx
leaq 0x8(%rbx), %r13
testq %r12, %r12
jne 0x2b7df3
testb %cl, %cl
je 0x2b7df3
cmpl $0x1e, (%r14)
jne 0x2b7d87
movq (%r13), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2b7d87
jnp 0x2b7dab
cmpl $0x1f, (%r14)
jne 0x2b7df0
movq (%r13), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2b7da3
jnp 0x2b7df0
movsd 0xfa275(%rip), %xmm1    # 0x3b2020
movsd %xmm1, 0x8(%rsp)
movl $0x28, %edi
callq 0x1200f0
movq %rax, %r12
movb $0x0, 0x10(%rax)
movq $0x0, 0x18(%rax)
leaq 0x2594b7(%rip), %rax    # 0x511288
movq %rax, (%r12)
leaq 0x2594f4(%rip), %rax    # 0x5112d0
movq %rax, 0x8(%r12)
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x20(%r12)
jmp 0x2b7df3
xorl %r12d, %r12d
testq %r12, %r12
je 0x2b7e58
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b7e26
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x2b7e26
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x2b7e1e
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x2b7e26
movq %rbx, %rdi
callq 0x1f1690
movq (%r13), %rdi
testq %rdi, %rdi
je 0x2b7e9e
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x2b7e9e
movq (%r13), %rdi
testq %rdi, %rdi
je 0x2b7e4e
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x2b7e9e
movq %r13, %rdi
callq 0x1f1690
jmp 0x2b7e9e
movl (%r14), %eax
cmpl $0x1f, %eax
je 0x2b7e80
cmpl $0x1e, %eax
jne 0x2b7e9b
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x2eb2ac
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
jmp 0x2eb8da
xorl %r12d, %r12d
movq %r12, %rax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
nop