// File: /workspace/github_cpp_makefile_star2_O2/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, %r15
movq %rdi, %r14
movq (%rdx), %rdi
callq 0x208267
movabsq $0x3ff0000000000000, %rbp # imm = 0x3FF0000000000000
testb %al, %al
je 0x22746b
movl (%r15), %eax
cmpl $0x1e, %eax
jne 0x22743d
movq (%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x22743a
jp 0x22743a
movq 0x8(%r14), %rdi
movq %rsp, %rsi
andq $0x0, (%rsi)
jmp 0x227461
movl (%r15), %eax
cmpl $0x1f, %eax
jne 0x22746b
movq (%rbx), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x227457
jnp 0x22746b
movq 0x8(%r14), %rdi
movq %rsp, %rsi
movq %rbp, (%rsi)
callq 0x1ae9f6
movq %rax, %r13
jmp 0x22746e
xorl %r13d, %r13d
leaq 0x8(%rbx), %r12
movq 0x8(%rbx), %rdi
callq 0x208267
testq %r13, %r13
jne 0x2274df
testb %al, %al
je 0x2274df
movl (%r15), %eax
cmpl $0x1e, %eax
jne 0x2274b2
movq (%r12), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2274af
jp 0x2274af
movq 0x8(%r14), %rdi
movq %rsp, %rsi
andq $0x0, (%rsi)
jmp 0x2274d7
movl (%r15), %eax
cmpl $0x1f, %eax
jne 0x2274fe
movq (%r12), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2274cd
jnp 0x2274fe
movq 0x8(%r14), %rdi
movq %rsp, %rsi
movq %rbp, (%rsi)
callq 0x1ae9f6
movq %rax, %r13
testq %r13, %r13
je 0x2274fe
movq 0x8(%r14), %rdi
movq %rbx, %rsi
callq 0x1ad9c8
movq 0x8(%r14), %rdi
movq %r12, %rsi
callq 0x1ad9c8
jmp 0x227531
movl (%r15), %eax
cmpl $0x1f, %eax
je 0x22751b
cmpl $0x1e, %eax
jne 0x22752e
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x251002
jmp 0x227529
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x2511de
movq %rax, %r13
jmp 0x227531
xorl %r13d, %r13d
movq %r13, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop