// File: /workspace/github_cpp_makefile_star2_O3/ArashPartow[P]exprtk/exprtk_benchmark.cpp
// Function: bool run_parse_benchmark<double>(exprtk::symbol_table<double>&)
bool run_parse_benchmark(exprtk::symbol_table<T>& symbol_table)
{
   static const std::size_t rounds = 100000;
   exprtk::parser<double>     parser;
   exprtk::expression<double> expression;

   expression.register_symbol_table(symbol_table);

   for (std::size_t i = 0; i < global_expression_list_size; ++i)
   {
      exprtk::timer timer;
      timer.start();

      for (std::size_t r = 0; r < rounds; ++r)
      {
         if (!parser.compile(global_expression_list[i],expression))
         {
            printf("[run_parse_benchmark] - Parser Error: %s\tExpression: %s\n",
                   parser.error().c_str(),
                   global_expression_list[i].c_str());

            return false;
         }
      }

      timer.stop();

      printf("[parse] Total Time:%12.8f  Rate:%14.3fparse/sec Expression: %s\n",
             timer.time(),
             rounds / timer.time(),
             global_expression_list[i].c_str());
   }

   return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xab8, %rsp            # imm = 0xAB8
movq %rdi, %rbx
leaq 0x40(%rsp), %r14
movl $0x7f, %esi
movq %r14, %rdi
callq 0x12049a
leaq 0x190(%rsp), %rdi
movq %r14, %rsi
callq 0x12059a
leaq 0x140(%rsp), %rdi
callq 0x12887c
leaq 0x110(%rsp), %rdi
callq 0x12887c
leaq 0xe0(%rsp), %rdi
callq 0x12887c
leaq 0xb0(%rsp), %rdi
callq 0x12887c
leaq 0x80(%rsp), %rdi
callq 0x12887c
leaq 0x50(%rsp), %rdi
callq 0x12887c
movq %rsp, %rdi
callq 0x120dbe
movq 0x8(%rsp), %rax
movq 0x10(%rsp), %rcx
subq %rax, %rcx
je 0x11f872
sarq $0x3, %rcx
movq (%rbx), %rdx
cmpq $0x1, %rcx
adcq $0x0, %rcx
cmpq %rbx, %rax
je 0x11f87f
cmpq (%rax), %rdx
je 0x11f87f
addq $0x8, %rax
decq %rcx
jne 0x11f85f
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
callq 0x18bcd4
leaq 0x48(%rsp), %rdi
xorl %ebx, %ebx
xorpd %xmm0, %xmm0
leaq 0x2fa59f(%rip), %r15    # 0x419e30
leaq 0x190(%rsp), %r13
movq %rsp, %rbp
xorl %r12d, %r12d
movupd %xmm0, 0x10(%rdi)
movupd %xmm0, (%rdi)
movb $0x1, 0x40(%rsp)
xorl %esi, %esi
callq 0x118280
movq %r12, %r14
shlq $0x5, %r14
addq %r15, %r14
movl $0x186a0, %r15d         # imm = 0x186A0
movq %r13, %rdi
movq %r14, %rsi
movq %rbp, %rdx
callq 0x120e4a
testb %al, %al
je 0x11f98b
decq %r15
jne 0x11f8c4
leaq 0x58(%rsp), %rdi
xorl %esi, %esi
callq 0x118280
movb $0x0, 0x40(%rsp)
movq 0x58(%rsp), %rax
movsd 0x192723(%rip), %xmm0   # 0x2b2020
subq 0x48(%rsp), %rax
jl 0x11f93e
imulq $0xf4240, %rax, %rax    # imm = 0xF4240
addq 0x60(%rsp), %rax
subq 0x50(%rsp), %rax
movq %rax, %xmm1
punpckldq 0x1928ae(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1928b6(%rip), %xmm1   # 0x2b21e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x1926ea(%rip), %xmm0   # 0x2b2028
movsd 0x192802(%rip), %xmm1   # 0x2b2148
divsd %xmm0, %xmm1
movq (%r14), %rsi
leaq 0x19778a(%rip), %rdi    # 0x2b70de
movb $0x2, %al
callq 0x118080
cmpq $0x10, %r12
leaq 0x1(%r12), %rax
setae %bl
movq %rax, %r12
cmpq $0x11, %rax
leaq 0x48(%rsp), %rdi
xorpd %xmm0, %xmm0
leaq 0x2fa4b2(%rip), %r15    # 0x419e30
jne 0x11f89f
movb $0x1, %bl
jmp 0x11fa7d
movq 0x4a8(%rsp), %rdi
cmpq %rdi, 0x4c8(%rsp)
je 0x11f9e6
movq 0x4c0(%rsp), %rsi
movq %rdi, %rcx
subq 0x4b0(%rsp), %rcx
movq %rcx, %rdx
sarq $0x3, %rdx
movabsq $-0x30c30c30c30c30c3, %rax # imm = 0xCF3CF3CF3CF3CF3D
imulq %rdx, %rax
cmpq $-0xa7, %rcx
jl 0x11fa0a
cmpq $0x3, %rax
jb 0x11fa2e
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x11fa20
leaq 0x30(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movabsq $0x726f727245206f4e, %rax # imm = 0x726F727245206F4E
movq %rax, (%rsi)
movq $0x8, -0x8(%rsi)
movb $0x0, 0x8(%rsi)
jmp 0x11fa51
notq %rax
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
notq %rdx
imulq $-0x1f8, %rdx, %rdi     # imm = 0xFE08
addq (%rsi,%rdx,8), %rdi
addq %rcx, %rdi
leaq 0x30(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x38(%rdi), %rsi
movq 0x40(%rdi), %rdx
addq %rsi, %rdx
leaq 0x20(%rsp), %rdi
callq 0x12260a
movq 0x20(%rsp), %rsi
movq (%r14), %rdx
leaq 0x19764a(%rip), %rdi    # 0x2b70a5
xorl %eax, %eax
callq 0x118080
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x11fa7d
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x1180c0
movq %rsp, %rdi
callq 0x121a34
leaq 0x190(%rsp), %rdi
callq 0x121a82
andb $0x1, %bl
movl %ebx, %eax
addq $0xab8, %rsp            # imm = 0xAB8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x11fac1
jmp 0x11fac1
movq %rax, %rbx
jmp 0x11facc
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x120d76
jmp 0x11fad9
movq %rax, %rbx
movq %rsp, %rdi
callq 0x121a34
leaq 0x190(%rsp), %rdi
callq 0x121a82
movq %rbx, %rdi
callq 0x118340
nop