// File: /workspace/github_cpp_makefile_star2_O1/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 $0xac8, %rsp            # imm = 0xAC8
movq %rdi, %rbx
leaq 0x50(%rsp), %r14
movl $0x7f, %esi
movq %r14, %rdi
callq 0x122cc6
leaq 0x1a0(%rsp), %rdi
movq %r14, %rsi
callq 0x122dc6
leaq 0x150(%rsp), %rdi
callq 0x12aefe
leaq 0x120(%rsp), %rdi
callq 0x12aefe
leaq 0xf0(%rsp), %rdi
callq 0x12aefe
leaq 0xc0(%rsp), %rdi
callq 0x12aefe
leaq 0x90(%rsp), %rdi
callq 0x12aefe
leaq 0x60(%rsp), %rdi
callq 0x12aefe
leaq 0x10(%rsp), %rdi
callq 0x1235ea
movq 0x18(%rsp), %rcx
movq 0x20(%rsp), %rax
subq %rcx, %rax
je 0x122010
sarq $0x3, %rax
cmpq $0x1, %rax
movq %rax, %rsi
adcq $0x0, %rsi
cmpq %rbx, %rcx
je 0x12201d
movq (%rbx), %rdx
cmpq (%rcx), %rdx
je 0x12201d
addq $0x8, %rcx
movl $0x1, %edi
subq %rsi, %rdi
xorl %esi, %esi
cmpq %rsi, %rdi
je 0x122010
decq %rsi
cmpq %rbx, %rcx
je 0x122008
leaq 0x8(%rcx), %r8
cmpq (%rcx), %rdx
movq %r8, %rcx
jne 0x121fef
negq %rsi
cmpq %rax, %rsi
jb 0x12201d
leaq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x1a600c
leaq 0x58(%rsp), %rdi
movq $0x0, 0x8(%rsp)
xorpd %xmm0, %xmm0
leaq 0x32ddfa(%rip), %r15    # 0x44fe30
leaq 0x1a0(%rsp), %r12
leaq 0x10(%rsp), %r13
xorl %ebx, %ebx
movupd %xmm0, 0x10(%rdi)
movupd %xmm0, (%rdi)
movb $0x1, 0x50(%rsp)
xorl %esi, %esi
callq 0x11a280
movq %rbx, %rbp
shlq $0x5, %rbp
addq %rbp, %r15
movq $-0x1, %r14
movq %r12, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x123684
testb %al, %al
je 0x122198
incq %r14
cmpq $0x1869f, %r14          # imm = 0x1869F
jne 0x12206b
leaq 0x68(%rsp), %rdi
xorl %esi, %esi
callq 0x11a280
movb $0x0, 0x50(%rsp)
movq 0x68(%rsp), %rax
movsd 0x1b4f75(%rip), %xmm0   # 0x2d7020
subq 0x58(%rsp), %rax
jl 0x1220ec
imulq $0xf4240, %rax, %rax    # imm = 0xF4240
addq 0x70(%rsp), %rax
subq 0x60(%rsp), %rax
movq %rax, %xmm1
punpckldq 0x1b5100(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1b5108(%rip), %xmm1   # 0x2d71e0
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
mulsd 0x1b4f3c(%rip), %xmm0   # 0x2d7028
movq 0x68(%rsp), %rax
movsd 0x1b4f27(%rip), %xmm2   # 0x2d7020
subq 0x58(%rsp), %rax
leaq 0x32dd2b(%rip), %r15    # 0x44fe30
jl 0x122141
imulq $0xf4240, %rax, %rax    # imm = 0xF4240
addq 0x70(%rsp), %rax
subq 0x60(%rsp), %rax
movq %rax, %xmm1
punpckldq 0x1b50ab(%rip), %xmm1 # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x1b50b3(%rip), %xmm1   # 0x2d71e0
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
mulsd 0x1b4ee7(%rip), %xmm2   # 0x2d7028
movsd 0x1b4fff(%rip), %xmm1   # 0x2d7148
divsd %xmm2, %xmm1
movq (%rbp,%r15), %rsi
leaq 0x1b9f1d(%rip), %rdi    # 0x2dc076
movb $0x2, %al
callq 0x11a080
cmpq $0x1869e, %r14          # imm = 0x1869E
leaq 0x58(%rsp), %rdi
xorpd %xmm0, %xmm0
jbe 0x122285
cmpq $0x10, %rbx
leaq 0x1(%rbx), %rax
setae %cl
movq %rcx, 0x8(%rsp)
movq %rax, %rbx
cmpq $0x11, %rax
jne 0x122045
jmp 0x122285
movq 0x4b8(%rsp), %rdi
cmpq %rdi, 0x4d8(%rsp)
je 0x1221ef
movq %rdi, %rcx
subq 0x4c0(%rsp), %rcx
movq %rcx, %rdx
sarq $0x3, %rdx
movabsq $-0x30c30c30c30c30c3, %rax # imm = 0xCF3CF3CF3CF3CF3D
imulq %rdx, %rax
cmpq $0x3, %rax
jb 0x122237
movq 0x4d0(%rsp), %rsi
testq %rcx, %rcx
jle 0x122213
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rdx
shrq %rdx
jmp 0x122229
leaq 0x40(%rsp), %rax
movq %rax, -0x10(%rax)
movabsq $0x726f727245206f4e, %rcx # imm = 0x726F727245206F4E
movq %rcx, (%rax)
movq $0x8, -0x8(%rax)
movb $0x0, 0x8(%rax)
jmp 0x122255
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 0x40(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x38(%rdi), %rsi
movq 0x40(%rdi), %rdx
addq %rsi, %rdx
leaq 0x30(%rsp), %rdi
callq 0x124c7a
leaq 0x40(%rsp), %rbx
movq -0x10(%rbx), %rsi
movq (%r15), %rdx
leaq 0x1b9dd5(%rip), %rdi    # 0x2dc03d
xorl %eax, %eax
callq 0x11a080
movq -0x10(%rbx), %rdi
cmpq %rbx, %rdi
je 0x122285
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x11a0c0
leaq 0x10(%rsp), %rdi
callq 0x1240a4
leaq 0x1a0(%rsp), %rdi
callq 0x1240f2
movq 0x8(%rsp), %rax
andb $0x1, %al
addq $0xac8, %rsp            # imm = 0xAC8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1222cd
jmp 0x1222cd
movq %rax, %rbx
jmp 0x1222da
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x1235a2
jmp 0x1222e7
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x1240a4
leaq 0x1a0(%rsp), %rdi
callq 0x1240f2
movq %rbx, %rdi
callq 0x11a340
nop