// File: ArashPartow[P]exprtk/exprtk_benchmark.cpp
// Function: pgo_primer()
double pgo_primer()
{
   static const double lower_bound_x = -50.0;
   static const double lower_bound_y = -50.0;
   static const double upper_bound_x = +50.0;
   static const double upper_bound_y = +50.0;
   static const double delta = 0.07;

   double total = 0.0;

   for (double x = lower_bound_x; x <= upper_bound_x; x += delta)
   {
      for (double y = lower_bound_y; y <= upper_bound_y; y += delta)
      {
         total += native<double>::func00(x,y);
         total += native<double>::func01(x,y);
         total += native<double>::func02(x,y);
         total += native<double>::func03(x,y);
         total += native<double>::func04(x,y);
         total += native<double>::func05(x,y);
         total += native<double>::func06(x,y);
         total += native<double>::func07(x,y);
         total += native<double>::func08(x,y);
         total += native<double>::func09(x,y);
         total += native<double>::func10(x,y);
         total += native<double>::func11(x,y);
         total += native<double>::func12(x,y);
         total += native<double>::func13(x,y);
         total += native<double>::func14(x,y);
         total += native<double>::func15(x,y);
         total += native<double>::func16(x,y);
      }
   }

   return total;
}

// Assembly:
subq $0x18, %rsp
xorps %xmm0, %xmm0
movsd %xmm0, 0x10(%rsp)
movsd 0x340033(%rip), %xmm0   # 0x45f058
movsd %xmm0, 0x8(%rsp)
movsd 0x34002d(%rip), %xmm0   # 0x45f060
ucomisd 0x8(%rsp), %xmm0
jb 0x11f23a
movsd 0x340011(%rip), %xmm0   # 0x45f058
movsd %xmm0, (%rsp)
movsd 0x34000c(%rip), %xmm0   # 0x45f060
ucomisd (%rsp), %xmm0
jb 0x11f21f
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fbe0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fc00
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fc30
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fc60
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fca0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fcf0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fd40
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fd90
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11fe30
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11ff60
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x11ffb0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x120010
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x120080
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x1200f0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x1201c0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x120260
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x8(%rsp), %rdi
movq %rsp, %rsi
callq 0x120320
addsd 0x10(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
movsd 0x33fe58(%rip), %xmm0   # 0x45f068
addsd (%rsp), %xmm0
movsd %xmm0, (%rsp)
jmp 0x11f04c
jmp 0x11f221
movsd 0x33fe3f(%rip), %xmm0   # 0x45f068
addsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
jmp 0x11f02b
movsd 0x10(%rsp), %xmm0
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)