// File: /workspace/github_cpp_makefile_star2_O3/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 %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq (%rdx), %r12
testq %r12, %r12
je 0x29addd
movq (%r12), %rax
movq %r12, %rdi
callq *0x28(%rax)
cmpl $0x2, %eax
je 0x29ad5a
movq (%r12), %rax
movq %r12, %rdi
callq *0x28(%rax)
cmpl $0x13, %eax
jne 0x29addd
movl (%r14), %eax
cmpl $0x1e, %eax
jne 0x29ad7a
movq (%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x29ad77
jnp 0x29ad9c
movl (%r14), %eax
cmpl $0x1f, %eax
jne 0x29addd
movq (%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x29ad94
jnp 0x29addd
movsd 0xee284(%rip), %xmm1    # 0x389020
movsd %xmm1, (%rsp)
movl $0x28, %edi
callq 0x11e0f0
movq %rax, %r13
movb $0x0, 0x10(%rax)
movq $0x0, 0x18(%rax)
leaq 0x23cef7(%rip), %rax    # 0x4d7cb8
movq %rax, (%r13)
leaq 0x23cf34(%rip), %rax    # 0x4d7d00
movq %rax, 0x8(%r13)
movsd (%rsp), %xmm0
movsd %xmm0, 0x20(%r13)
jmp 0x29ade0
xorl %r13d, %r13d
leaq 0x8(%rbx), %r12
movq 0x8(%rbx), %rbp
testq %rbp, %rbp
je 0x29aeb0
movq (%rbp), %rax
movq %rbp, %rdi
callq *0x28(%rax)
movb $0x1, %cl
cmpl $0x2, %eax
je 0x29ae12
movq (%rbp), %rax
movq %rbp, %rdi
callq *0x28(%rax)
cmpl $0x13, %eax
sete %cl
testq %r13, %r13
jne 0x29aeb0
testb %cl, %cl
je 0x29aeb0
movl (%r14), %eax
cmpl $0x1e, %eax
jne 0x29ae44
movq (%r12), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x29ae41
jnp 0x29ae6f
movl (%r14), %eax
cmpl $0x1f, %eax
jne 0x29af15
movq (%r12), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x29ae67
jnp 0x29af15
movsd 0xee1b1(%rip), %xmm1    # 0x389020
movsd %xmm1, (%rsp)
movl $0x28, %edi
callq 0x11e0f0
movq %rax, %r13
movb $0x0, 0x10(%rax)
movq $0x0, 0x18(%rax)
leaq 0x23ce24(%rip), %rax    # 0x4d7cb8
movq %rax, (%r13)
leaq 0x23ce61(%rip), %rax    # 0x4d7d00
movq %rax, 0x8(%r13)
movsd (%rsp), %xmm0
movsd %xmm0, 0x20(%r13)
jmp 0x29aeb5
testq %r13, %r13
je 0x29af15
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29aee3
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x29aee3
movq (%rbx), %rdi
testq %rdi, %rdi
je 0x29aedb
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x29aee3
movq %rbx, %rdi
callq 0x1ea63e
movq (%r12), %rdi
testq %rdi, %rdi
je 0x29af5d
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x11, %eax
je 0x29af5d
movq (%r12), %rdi
testq %rdi, %rdi
je 0x29af0b
movq (%rdi), %rax
callq *0x28(%rax)
cmpl $0x12, %eax
je 0x29af5d
movq %r12, %rdi
callq 0x1ea63e
jmp 0x29af5d
movl (%r14), %eax
cmpl $0x1f, %eax
je 0x29af3e
cmpl $0x1e, %eax
jne 0x29af5a
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d0234
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d082e
xorl %r13d, %r13d
movq %r13, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop