// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::parse_special_function()
inline expression_node_ptr parse_special_function()
      {
         const std::string sf_name = current_token().value;

         // Expect: $fDD(expr0,expr1,expr2) or $fDD(expr0,expr1,expr2,expr3)
         if (
              !details::is_digit(sf_name[2]) ||
              !details::is_digit(sf_name[3])
            )
         {
            set_error(make_error(
               parser_error::e_token,
               current_token(),
               "ERR149 - Invalid special function[1]: " + sf_name,
               exprtk_error_location));

            return error_node();
         }

         const int id = (sf_name[2] - '0') * 10 +
                        (sf_name[3] - '0');

         if (id >= details::e_sffinal)
         {
            set_error(make_error(
               parser_error::e_token,
               current_token(),
               "ERR150 - Invalid special function[2]: " + sf_name,
               exprtk_error_location));

            return error_node();
         }

         const int sf_3_to_4                   = details::e_sf48;
         const details::operator_type opt_type = details::operator_type(id + 1000);
         const std::size_t NumberOfParameters  = (id < (sf_3_to_4 - 1000)) ? 3U : 4U;

         switch (NumberOfParameters)
         {
            case 3  : return parse_special_function_impl<T,3>::process((*this), opt_type, sf_name);
            case 4  : return parse_special_function_impl<T,4>::process((*this), opt_type, sf_name);
            default : return error_node();
         }
      }

// Assembly:
pushq %r14
pushq %rbx
subq $0x128, %rsp            # imm = 0x128
movq %rdi, %rbx
leaq 0x78(%rdi), %rsi
movq %rsp, %r14
movq %r14, %rdi
callq 0x1182f0
movq (%r14), %rcx
movzbl 0x2(%rcx), %eax
leal -0x30(%rax), %edx
cmpb $0x9, %dl
ja 0x201c7a
movzbl 0x3(%rcx), %ecx
leal -0x30(%rcx), %edx
cmpb $0xa, %dl
jae 0x201c7a
imull $0xa, %eax, %eax
leal (%rax,%rcx), %edx
leal (%rax,%rcx), %esi
addl $0x1d8, %esi            # imm = 0x1D8
cmpl $0x23f, %edx            # imm = 0x23F
ja 0x201d17
movq %rsp, %rdx
movq %rbx, %rdi
callq 0x28eec4
jmp 0x201d22
leaq 0xd9eb0(%rip), %rsi     # 0x2dbb31
leaq 0x60(%rsp), %rdi
movq %rsp, %rdx
callq 0x1f8aab
leaq 0x20(%rsp), %rdi
movl $0x719d, %esi           # imm = 0x719D
callq 0x1f7a3c
leaq 0xd7f57(%rip), %rsi     # 0x2d9bfb
leaq 0x40(%rsp), %rdi
leaq 0x20(%rsp), %rdx
callq 0x1b4349
leaq 0x70(%rbx), %rdx
leaq 0x80(%rsp), %rdi
pushq $0x2
popq %rsi
leaq 0x60(%rsp), %rcx
leaq 0x40(%rsp), %r8
callq 0x1f7341
addq $0x308, %rbx            # imm = 0x308
leaq 0x80(%rsp), %rsi
movq %rbx, %rdi
callq 0x1f76ce
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
leaq 0x40(%rsp), %rdi
callq 0x118648
leaq 0x20(%rsp), %rdi
callq 0x118648
leaq 0x60(%rsp), %rdi
callq 0x118648
xorl %ebx, %ebx
jmp 0x201d25
movq %rsp, %rdx
movq %rbx, %rdi
callq 0x28f25e
movq %rax, %rbx
movq %rsp, %rdi
callq 0x118648
movq %rbx, %rax
addq $0x128, %rsp            # imm = 0x128
popq %rbx
popq %r14
retq
jmp 0x201d7c
movq %rax, %rbx
leaq 0x80(%rsp), %rdi
callq 0x1f5c4c
jmp 0x201d52
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x118648
jmp 0x201d61
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x118648
jmp 0x201d70
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x118648
jmp 0x201d7f
movq %rax, %rbx
movq %rsp, %rdi
callq 0x118648
movq %rbx, %rdi
callq 0x118360
nop