// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::details::expression_node<double>* exprtk::parser<double>::expression_generator<double>::function<3ul>(exprtk::ifunction<double>*, exprtk::details::expression_node<double>* (&) [3ul])
inline expression_node_ptr function(ifunction_t* f, expression_node_ptr (&b)[N])
         {
            typedef typename details::function_N_node<T,ifunction_t,N> function_N_node_t;
            expression_node_ptr result = synthesize_expression<function_N_node_t,N>(f,b);

            if (0 == result)
               return error_node();
            else
            {
               // Can the function call be completely optimised?
               if (details::is_constant_node(result))
                  return result;
               else if (!all_nodes_valid(b))
               {
                  details::free_node(*node_allocator_,result);
                  std::fill_n(b, N, reinterpret_cast<expression_node_ptr>(0));

                  return error_node();
               }
               else if (N != f->param_count)
               {
                  details::free_node(*node_allocator_,result);
                  std::fill_n(b, N, reinterpret_cast<expression_node_ptr>(0));

                  return error_node();
               }

               function_N_node_t* func_node_ptr = reinterpret_cast<function_N_node_t*>(result);

               if (!func_node_ptr->init_branches(b))
               {
                  details::free_node(*node_allocator_,result);
                  std::fill_n(b, N, reinterpret_cast<expression_node_ptr>(0));

                  return error_node();
               }

               if (result && result->valid())
               {
                  return result;
               }

               parser_->set_error(parser_error::make_error(
                  parser_error::e_synthesis,
                  token_t(),
                  "ERR264 - Failed to synthesize node: function_N_node_t",
                  exprtk_error_location));

               details::free_node(*node_allocator_, result);
               return error_node();
            }
         }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rdx, %r15
movq %rsi, %r12
movq %rdi, %rbx
callq 0x2ae194
movq %rax, 0x8(%rsp)
testq %rax, %rax
je 0x2ae0bf
movq %rax, %r14
movq %rax, %rdi
callq 0x208267
testb %al, %al
jne 0x2ae0c2
movq %r15, %rdi
callq 0x288189
testb %al, %al
je 0x2ae0d4
cmpq $0x3, 0x20(%r12)
jne 0x2ae0f8
movq %r14, %rdi
movq %r15, %rsi
callq 0x2ae288
testb %al, %al
je 0x2ae11c
movq (%r14), %rax
movq %r14, %rdi
callq *0x30(%rax)
testb %al, %al
jne 0x2ae0c2
movq 0x68(%rbx), %r14
leaq 0x70(%rsp), %rdi
callq 0x19e4ae
leaq 0x2f60b(%rip), %rsi     # 0x2dd61d
leaq 0x50(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x127016
leaq 0x10(%rsp), %rdi
movl $0x83d6, %esi           # imm = 0x83D6
callq 0x1f7a3c
leaq 0x2bbc4(%rip), %rsi     # 0x2d9bfb
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1b4349
leaq 0xa0(%rsp), %rdi
pushq $0x7
popq %rsi
leaq 0x70(%rsp), %rdx
leaq 0x50(%rsp), %rcx
leaq 0x30(%rsp), %r8
callq 0x1f7341
addq $0x308, %r14            # imm = 0x308
leaq 0xa0(%rsp), %rsi
movq %r14, %rdi
callq 0x1f76ce
leaq 0xa0(%rsp), %rdi
callq 0x1f5c4c
leaq 0x30(%rsp), %rdi
callq 0x118648
leaq 0x10(%rsp), %rdi
callq 0x118648
leaq 0x50(%rsp), %rdi
callq 0x118648
leaq 0x78(%rsp), %rdi
callq 0x118648
movq 0x8(%rbx), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1ad9c8
xorl %r14d, %r14d
movq %r14, %rax
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq 0x8(%rbx), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1ad9c8
xorl %r14d, %r14d
xorl %eax, %eax
cmpq $0x18, %rax
je 0x2ae0c2
andq $0x0, (%r15,%rax)
addq $0x8, %rax
jmp 0x2ae0e7
movq 0x8(%rbx), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1ad9c8
xorl %r14d, %r14d
xorl %eax, %eax
cmpq $0x18, %rax
je 0x2ae0c2
andq $0x0, (%r15,%rax)
addq $0x8, %rax
jmp 0x2ae10b
movq 0x8(%rbx), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1ad9c8
xorl %r14d, %r14d
xorl %eax, %eax
cmpq $0x18, %rax
je 0x2ae0c2
andq $0x0, (%r15,%rax)
addq $0x8, %rax
jmp 0x2ae12f
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x1f5c4c
jmp 0x2ae155
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x118648
jmp 0x2ae164
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x118648
jmp 0x2ae173
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x118648
jmp 0x2ae182
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x118648
movq %rbx, %rdi
callq 0x118360