// File: ArashPartow[P]exprtk/./exprtk.hpp
// Function: exprtk::parser<double>::expression_generator<double>::synthesize_vecarithmetic_operation_expression(exprtk::details::operator_type const&, exprtk::details::expression_node<double>* (&) [2])
inline expression_node_ptr synthesize_vecarithmetic_operation_expression(const details::operator_type& operation,
                                                                                  expression_node_ptr (&branch)[2])
         {
            const bool is_b0_ivec = details::is_ivector_node(branch[0]);
            const bool is_b1_ivec = details::is_ivector_node(branch[1]);

            #define vector_ops                          \
            case_stmt(details::e_add , details::add_op) \
            case_stmt(details::e_sub , details::sub_op) \
            case_stmt(details::e_mul , details::mul_op) \
            case_stmt(details::e_div , details::div_op) \
            case_stmt(details::e_mod , details::mod_op) \

            expression_node_ptr result = error_node();
            std::string node_name = "Unknown";

            if (is_b0_ivec && is_b1_ivec)
            {
               switch (operation)
               {
                  #define case_stmt(op0, op1)                                                                    \
                  case op0 : result = node_allocator_->                                                          \
                                template allocate_rrr<typename details::vec_binop_vecvec_node<Type,op1<Type> > > \
                                   (operation, branch[0], branch[1]);                                            \
                             node_name = "vec_binop_vecvec_node";                                                \
                             break;                                                                              \

                  vector_ops
                  case_stmt(details::e_pow,details:: pow_op)
                  #undef case_stmt
                  default : return error_node();
               }
            }
            else if (is_b0_ivec && !is_b1_ivec)
            {
               switch (operation)
               {
                  #define case_stmt(op0, op1)                                                                    \
                  case op0 : result = node_allocator_->                                                          \
                                template allocate_rrr<typename details::vec_binop_vecval_node<Type,op1<Type> > > \
                                   (operation, branch[0], branch[1]);                                            \
                             node_name = "vec_binop_vecval_node(b0ivec,!b1ivec)";                                \
                             break;                                                                              \

                  vector_ops
                  case_stmt(details::e_pow,details:: pow_op)
                  #undef case_stmt
                  default : return error_node();
               }
            }
            else if (!is_b0_ivec && is_b1_ivec)
            {
               switch (operation)
               {
                  #define case_stmt(op0, op1)                                                                    \
                  case op0 : result = node_allocator_->                                                          \
                                template allocate_rrr<typename details::vec_binop_valvec_node<Type,op1<Type> > > \
                                   (operation, branch[0], branch[1]);                                            \
                             node_name = "vec_binop_vecval_node(!b0ivec,b1ivec)";                                \
                             break;                                                                              \

                  vector_ops
                  #undef case_stmt
                  default : return error_node();
               }
            }
            else
               return error_node();

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

            parser_->set_error(parser_error::make_error(
               parser_error::e_synthesis,
               token_t(),
               "ERR279 - Failed to synthesize node: " + node_name,
               exprtk_error_location));

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

            #undef vector_ops
         }

// Assembly:
subq $0x268, %rsp            # imm = 0x268
movq %rdi, 0x258(%rsp)
movq %rsi, 0x250(%rsp)
movq %rdx, 0x248(%rsp)
movq 0x258(%rsp), %rax
movq %rax, 0xb8(%rsp)
movq 0x248(%rsp), %rax
movq (%rax), %rdi
callq 0x39f460
movb %al, 0x247(%rsp)
movq 0x248(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x39f460
movb %al, 0x246(%rsp)
callq 0x2821f0
movq %rax, 0x238(%rsp)
leaq 0x217(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x11b6f0
movq 0xc0(%rsp), %rdx
leaq 0x1c6fcb(%rip), %rsi    # 0x5a7c1a
leaq 0x218(%rsp), %rdi
callq 0x134520
jmp 0x3e0c5e
leaq 0x217(%rsp), %rdi
callq 0x11b820
testb $0x1, 0x247(%rsp)
je 0x3e0f48
testb $0x1, 0x246(%rsp)
je 0x3e0f48
movq 0x250(%rsp), %rax
movl (%rax), %eax
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, 0xb0(%rsp)
subl $0x5, %eax
ja 0x3e0f26
movq 0xb0(%rsp), %rax
leaq 0x1bc562(%rip), %rcx    # 0x59d218
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
leaq 0x217(%rsp), %rdi
callq 0x11b820
jmp 0x3e1648
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427720
movq %rax, 0xa8(%rsp)
jmp 0x3e0d17
movq 0xa8(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c7173(%rip), %rsi    # 0x5a7ea1
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e0d3d
jmp 0x3e0f43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0x3e163b
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x4277c0
movq %rax, 0xa0(%rsp)
jmp 0x3e0d8d
movq 0xa0(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c70fd(%rip), %rsi    # 0x5a7ea1
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e0db3
jmp 0x3e0f43
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427860
movq %rax, 0x98(%rsp)
jmp 0x3e0dea
movq 0x98(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c70a0(%rip), %rsi    # 0x5a7ea1
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e0e10
jmp 0x3e0f43
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427900
movq %rax, 0x90(%rsp)
jmp 0x3e0e47
movq 0x90(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c7043(%rip), %rsi    # 0x5a7ea1
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e0e6d
jmp 0x3e0f43
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x4279a0
movq %rax, 0x88(%rsp)
jmp 0x3e0ea4
movq 0x88(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6fe6(%rip), %rsi    # 0x5a7ea1
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e0eca
jmp 0x3e0f43
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427a40
movq %rax, 0x80(%rsp)
jmp 0x3e0efe
movq 0x80(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6f8c(%rip), %rsi    # 0x5a7ea1
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e0f24
jmp 0x3e0f43
callq 0x2821f0
movq %rax, 0x260(%rsp)
movl $0x1, 0x200(%rsp)
jmp 0x3e161e
jmp 0x3e13f7
testb $0x1, 0x247(%rsp)
je 0x3e11bc
testb $0x1, 0x246(%rsp)
jne 0x3e11bc
movq 0x250(%rsp), %rax
movl (%rax), %eax
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, 0x78(%rsp)
subl $0x5, %eax
ja 0x3e119a
movq 0x78(%rsp), %rax
leaq 0x1bc25f(%rip), %rcx    # 0x59d1ec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427ae0
movq %rax, 0x70(%rsp)
jmp 0x3e0fc5
movq 0x70(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6f2f(%rip), %rsi    # 0x5a7f08
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e0fe8
jmp 0x3e11b7
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427b80
movq %rax, 0x68(%rsp)
jmp 0x3e101c
movq 0x68(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6ed8(%rip), %rsi    # 0x5a7f08
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e103f
jmp 0x3e11b7
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427c20
movq %rax, 0x60(%rsp)
jmp 0x3e1073
movq 0x60(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6e81(%rip), %rsi    # 0x5a7f08
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e1096
jmp 0x3e11b7
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427cc0
movq %rax, 0x58(%rsp)
jmp 0x3e10ca
movq 0x58(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6e2a(%rip), %rsi    # 0x5a7f08
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e10ed
jmp 0x3e11b7
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427d60
movq %rax, 0x50(%rsp)
jmp 0x3e1121
movq 0x50(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6dd3(%rip), %rsi    # 0x5a7f08
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e1144
jmp 0x3e11b7
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427e00
movq %rax, 0x48(%rsp)
jmp 0x3e1175
movq 0x48(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6d7f(%rip), %rsi    # 0x5a7f08
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e1198
jmp 0x3e11b7
callq 0x2821f0
movq %rax, 0x260(%rsp)
movl $0x1, 0x200(%rsp)
jmp 0x3e161e
jmp 0x3e13f5
testb $0x1, 0x247(%rsp)
jne 0x3e13d6
testb $0x1, 0x246(%rsp)
je 0x3e13d6
movq 0x250(%rsp), %rax
movl (%rax), %eax
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, 0x40(%rsp)
subl $0x4, %eax
ja 0x3e13b7
movq 0x40(%rsp), %rax
leaq 0x1bc003(%rip), %rcx    # 0x59d204
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427ea0
movq %rax, 0x38(%rsp)
jmp 0x3e1239
movq 0x38(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6ce1(%rip), %rsi    # 0x5a7f2e
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e125c
jmp 0x3e13d4
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427f40
movq %rax, 0x30(%rsp)
jmp 0x3e1290
movq 0x30(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6c8a(%rip), %rsi    # 0x5a7f2e
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e12b3
jmp 0x3e13d4
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x427fe0
movq %rax, 0x28(%rsp)
jmp 0x3e12e7
movq 0x28(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6c33(%rip), %rsi    # 0x5a7f2e
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e130a
jmp 0x3e13d4
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x428080
movq %rax, 0x20(%rsp)
jmp 0x3e133e
movq 0x20(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6bdc(%rip), %rsi    # 0x5a7f2e
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e1361
jmp 0x3e13d4
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x250(%rsp), %rsi
movq 0x248(%rsp), %rdx
movq %rdx, %rcx
addq $0x8, %rcx
callq 0x428120
movq %rax, 0x18(%rsp)
jmp 0x3e1392
movq 0x18(%rsp), %rax
movq %rax, 0x238(%rsp)
leaq 0x1c6b88(%rip), %rsi    # 0x5a7f2e
leaq 0x218(%rsp), %rdi
callq 0x11b340
jmp 0x3e13b5
jmp 0x3e13d4
callq 0x2821f0
movq %rax, 0x260(%rsp)
movl $0x1, 0x200(%rsp)
jmp 0x3e161e
jmp 0x3e13f3
callq 0x2821f0
movq %rax, 0x260(%rsp)
movl $0x1, 0x200(%rsp)
jmp 0x3e161e
jmp 0x3e13f5
jmp 0x3e13f7
cmpq $0x0, 0x238(%rsp)
je 0x3e1443
movq 0x238(%rsp), %rdi
movq (%rdi), %rax
movq 0x30(%rax), %rax
callq *%rax
movb %al, 0x17(%rsp)
jmp 0x3e1419
movb 0x17(%rsp), %al
testb $0x1, %al
jne 0x3e1423
jmp 0x3e1443
movq 0x238(%rsp), %rax
movq %rax, 0x260(%rsp)
movl $0x1, 0x200(%rsp)
jmp 0x3e161e
movq 0xb8(%rsp), %rax
movq 0x68(%rax), %rax
movq %rax, 0x8(%rsp)
leaq 0x128(%rsp), %rdi
callq 0x251250
jmp 0x3e1463
leaq 0x1c6aea(%rip), %rsi    # 0x5a7f54
leaq 0x108(%rsp), %rdi
leaq 0x218(%rsp), %rdx
callq 0x3784f0
jmp 0x3e1481
leaq 0xc8(%rsp), %rdi
movl $0x8835, %esi           # imm = 0x8835
callq 0x371f20
jmp 0x3e1495
leaq 0x1c5a77(%rip), %rsi    # 0x5a6f13
leaq 0xe8(%rsp), %rdi
leaq 0xc8(%rsp), %rdx
callq 0x29dd70
jmp 0x3e14b3
leaq 0x158(%rsp), %rdi
movl $0x7, %esi
leaq 0x128(%rsp), %rdx
leaq 0x108(%rsp), %rcx
leaq 0xe8(%rsp), %r8
callq 0x3741e0
jmp 0x3e14df
movq 0x8(%rsp), %rdi
leaq 0x158(%rsp), %rsi
callq 0x371e40
jmp 0x3e14f3
leaq 0x158(%rsp), %rdi
callq 0x371330
leaq 0xe8(%rsp), %rdi
callq 0x11b838
leaq 0xc8(%rsp), %rdi
callq 0x11b838
leaq 0x108(%rsp), %rdi
callq 0x11b838
leaq 0x128(%rsp), %rdi
callq 0x2512e0
movq 0xb8(%rsp), %rax
movq 0x8(%rax), %rdi
leaq 0x238(%rsp), %rsi
callq 0x284bd0
jmp 0x3e154f
callq 0x2821f0
movq %rax, 0x260(%rsp)
movl $0x1, 0x200(%rsp)
jmp 0x3e161e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0x3e160f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0x3e1602
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0x3e15f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
jmp 0x3e15e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x208(%rsp)
movl %eax, 0x204(%rsp)
leaq 0x158(%rsp), %rdi
callq 0x371330
leaq 0xe8(%rsp), %rdi
callq 0x11b838
leaq 0xc8(%rsp), %rdi
callq 0x11b838
leaq 0x108(%rsp), %rdi
callq 0x11b838
leaq 0x128(%rsp), %rdi
callq 0x2512e0
jmp 0x3e163b
leaq 0x218(%rsp), %rdi
callq 0x11b838
movq 0x260(%rsp), %rax
addq $0x268, %rsp            # imm = 0x268
retq
leaq 0x218(%rsp), %rdi
callq 0x11b838
movq 0x208(%rsp), %rdi
callq 0x11b4e0
nopw %cs:(%rax,%rax)
nop