// File: /workspace/github_cpp_makefile_star2_O2/ArashPartow[P]exprtk/exprtk_simple_example_06.cpp
// Function: void vector_function<double>()
void vector_function()
{
   typedef exprtk::symbol_table<T> symbol_table_t;
   typedef exprtk::expression<T>   expression_t;
   typedef exprtk::parser<T>       parser_t;

   const std::string expression_string =
      " for (var i := 0; i < min(x[], y[], z[]); i += 1) "
      " {                                                "
      "    z[i] := 3sin(x[i]) + 2log(y[i]);              "
      " }                                                ";

   T x[] = { T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
   T y[] = { T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
   T z[] = { T(0.0), T(0.0), T(0.0), T(0.0), T(0.0) };

   symbol_table_t symbol_table;
   symbol_table.add_vector("x",x);
   symbol_table.add_vector("y",y);
   symbol_table.add_vector("z",z);

   expression_t expression;
   expression.register_symbol_table(symbol_table);

   parser_t parser;
   parser.compile(expression_string,expression);

   expression.value();
}

// Assembly:
pushq %rbx
subq $0xb50, %rsp            # imm = 0xB50
leaq 0x12ae33(%rip), %rsi    # 0x23b125
leaq 0x30(%rsp), %rdi
leaq 0x228(%rsp), %rdx
callq 0x1102a8
movaps 0x125d05(%rip), %xmm0   # 0x236010
movaps %xmm0, 0xb0(%rsp)
movaps 0x125d06(%rip), %xmm1   # 0x236020
movaps %xmm1, 0xc0(%rsp)
movabsq $0x4016000000000000, %rax # imm = 0x4016000000000000
movq %rax, 0xd0(%rsp)
movaps %xmm0, 0x80(%rsp)
movaps %xmm1, 0x90(%rsp)
movq %rax, 0xa0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
andq $0x0, 0x70(%rsp)
leaq 0x8(%rsp), %rdi
pushq $0x1
popq %rsi
callq 0x1105ee
leaq 0x12ad0a(%rip), %rsi    # 0x23b07d
leaq 0x228(%rsp), %rdi
leaq 0xd8(%rsp), %rdx
callq 0x1102a8
leaq 0x8(%rsp), %rdi
leaq 0x228(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
callq 0x110612
leaq 0x228(%rsp), %rdi
callq 0x10e5a8
leaq 0x12af17(%rip), %rsi    # 0x23b2cd
leaq 0x228(%rsp), %rdi
leaq 0xd8(%rsp), %rdx
callq 0x1102a8
leaq 0x8(%rsp), %rdi
leaq 0x228(%rsp), %rsi
leaq 0x80(%rsp), %rdx
callq 0x110612
leaq 0x228(%rsp), %rdi
callq 0x10e5a8
leaq 0x12adf5(%rip), %rsi    # 0x23b1ee
leaq 0x228(%rsp), %rdi
leaq 0xd8(%rsp), %rdx
callq 0x1102a8
leaq 0x8(%rsp), %rdi
leaq 0x228(%rsp), %rsi
leaq 0x50(%rsp), %rdx
callq 0x110612
leaq 0x228(%rsp), %rdi
callq 0x10e5a8
leaq 0x10(%rsp), %rdi
callq 0x110674
leaq 0x10(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1106d4
leaq 0xd8(%rsp), %rdi
pushq $0x7f
popq %rsi
callq 0x110730
leaq 0x228(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x110840
leaq 0xd8(%rsp), %rdi
callq 0x110e58
leaq 0x228(%rsp), %rdi
leaq 0x30(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x110ea0
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
movq (%rdi), %rax
callq *0x18(%rax)
leaq 0x228(%rsp), %rdi
callq 0x111322
leaq 0x10(%rsp), %rdi
callq 0x11145c
leaq 0x8(%rsp), %rdi
callq 0x111472
leaq 0x30(%rsp), %rdi
callq 0x10e5a8
addq $0xb50, %rsp            # imm = 0xB50
popq %rbx
retq
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
callq 0x110e58
jmp 0x110526
jmp 0x1104eb
movq %rax, %rbx
jmp 0x110526
jmp 0x11050c
jmp 0x1104fa
jmp 0x11050c
jmp 0x1104fa
jmp 0x11050c
movq %rax, %rbx
leaq 0x228(%rsp), %rdi
callq 0x10e5a8
jmp 0x110530
movq %rax, %rbx
jmp 0x110530
movq %rax, %rbx
jmp 0x11053a
movq %rax, %rbx
leaq 0x228(%rsp), %rdi
callq 0x111322
leaq 0x10(%rsp), %rdi
callq 0x11145c
leaq 0x8(%rsp), %rdi
callq 0x111472
leaq 0x30(%rsp), %rdi
callq 0x10e5a8
movq %rbx, %rdi
callq 0x10e300