// File: ArashPartow[P]exprtk-extras/exprtk_funcall_benchmark.cpp
// Function: void function_call_benchmark01<double>()
void function_call_benchmark01()
{
   typedef exprtk::symbol_table<T>         symbol_table_t;
   typedef exprtk::expression<T>           expression_t;
   typedef exprtk::parser<T>               parser_t;
   typedef exprtk::function_compositor<T>  compositor_t;
   typedef typename compositor_t::function function_t;

   T v1 = T(1);
   T v2 = T(2);

   func0<T> f0;

   symbol_table_t symbol_table;

   symbol_table.add_constants();

   symbol_table.add_variable("v1"   , v1           );
   symbol_table.add_variable("v2"   , v2           );
   symbol_table.add_function("func0", f0           );
   symbol_table.add_function("func1", func1<double>);

   compositor_t compositor(symbol_table);

   compositor.add(
      function_t("func2")
      .var("v1").var("v2")
      .expression(" 1 + cos(v1 * v2) / 3;"));

   const std::string program0 = "func0(v1,v2);";
   const std::string program1 = "func1(v1,v2);";
   const std::string program2 = "func2(v1,v2);";

   expression_t expression0(symbol_table);
   expression_t expression1(symbol_table);
   expression_t expression2(symbol_table);

   parser_t parser;

   if (!parser.compile(program0,expression0))
   {
      printf("Error: %s\tExpression: %s\n",
             parser.error().c_str(),
             program0.c_str());

      return;
   }

   if (!parser.compile(program1,expression1))
   {
      printf("Error: %s\tExpression: %s\n",
             parser.error().c_str(),
             program1.c_str());

      return;
   }

   if (!parser.compile(program2,expression2))
   {
      printf("Error: %s\tExpression: %s\n",
             parser.error().c_str(),
             program1.c_str());

      return;
   }

   const std::size_t rounds = 100000000;

   {
      T total = T(0);

      exprtk::timer timer;
      timer.start();

      for (std::size_t r = 0; r < rounds; ++r)
      {
         total += expression0.value();
         std::swap(v1,v2);
      }

      timer.stop();

      printf("[custom function]  Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",
             timer.time(),
             rounds / timer.time(),
             total);
   }

   {
      T total = T(0);

      exprtk::timer timer;
      timer.start();

      for (std::size_t r = 0; r < rounds; ++r)
      {
         total += expression1.value();
         std::swap(v1,v2);
      }

      timer.stop();

      printf("[free function  ]  Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",
             timer.time(),
             rounds / timer.time(),
             total);
   }

   {
      T total = T(0);

      exprtk::timer timer;
      timer.start();

      for (std::size_t r = 0; r < rounds; ++r)
      {
         total += expression2.value();
         std::swap(v1,v2);
      }

      timer.stop();

      printf("[compositor     ]  Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",
             timer.time(),
             rounds / timer.time(),
             total);
   }

   {
      T total = T(0);

      exprtk::timer timer;
      timer.start();

      for (std::size_t r = 0; r < rounds; ++r)
      {
         total += func1<T>(v1,v2);
         std::swap(v1,v2);
      }

      timer.stop();

      printf("[native         ]  Total time: %8.3fsec\tRate: %15.3f\tTotal:%20.5f\n",
             timer.time(),
             rounds / timer.time(),
             total);
   }
}

// Assembly:
subq $0x19a8, %rsp           # imm = 0x19A8
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0x19a0(%rsp)
movabsq $0x4000000000000000, %rax # imm = 0x4000000000000000
movq %rax, 0x1998(%rsp)
leaq 0x1970(%rsp), %rdi
callq 0x11cb50
leaq 0x1968(%rsp), %rdi
movl $0x1, %esi
callq 0x11cb90
jmp 0x11b87c
leaq 0x1968(%rsp), %rdi
callq 0x11cbd0
jmp 0x11b88b
leaq 0x1937(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0x114670
movq 0xf8(%rsp), %rdx
leaq 0x348cc6(%rip), %rsi    # 0x464575
leaq 0x1938(%rsp), %rdi
callq 0x11b770
jmp 0x11b8be
leaq 0x1968(%rsp), %rdi
leaq 0x1938(%rsp), %rsi
leaq 0x19a0(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11cc30
jmp 0x11b8df
leaq 0x1938(%rsp), %rdi
callq 0x1147a8
leaq 0x1937(%rsp), %rdi
callq 0x114790
leaq 0x190f(%rsp), %rdi
movq %rdi, 0xf0(%rsp)
callq 0x114670
movq 0xf0(%rsp), %rdx
leaq 0x348c5b(%rip), %rsi    # 0x464578
leaq 0x1910(%rsp), %rdi
callq 0x11b770
jmp 0x11b92c
leaq 0x1968(%rsp), %rdi
leaq 0x1910(%rsp), %rsi
leaq 0x1998(%rsp), %rdx
xorl %ecx, %ecx
callq 0x11cc30
jmp 0x11b94d
leaq 0x1910(%rsp), %rdi
callq 0x1147a8
leaq 0x190f(%rsp), %rdi
callq 0x114790
leaq 0x18e7(%rsp), %rdi
movq %rdi, 0xe8(%rsp)
callq 0x114670
movq 0xe8(%rsp), %rdx
leaq 0x348bf0(%rip), %rsi    # 0x46457b
leaq 0x18e8(%rsp), %rdi
callq 0x11b770
jmp 0x11b99a
leaq 0x1968(%rsp), %rdi
leaq 0x18e8(%rsp), %rsi
leaq 0x1970(%rsp), %rdx
callq 0x11cce0
jmp 0x11b9b9
leaq 0x18e8(%rsp), %rdi
callq 0x1147a8
leaq 0x18e7(%rsp), %rdi
callq 0x114790
leaq 0x18bf(%rsp), %rdi
movq %rdi, 0xe0(%rsp)
callq 0x114670
movq 0xe0(%rsp), %rdx
leaq 0x348b8a(%rip), %rsi    # 0x464581
leaq 0x18c0(%rsp), %rdi
callq 0x11b770
jmp 0x11ba06
leaq 0x14a3(%rip), %rdx      # 0x11ceb0
leaq 0x1968(%rsp), %rdi
leaq 0x18c0(%rsp), %rsi
callq 0x11cd80
jmp 0x11ba24
leaq 0x18c0(%rsp), %rdi
callq 0x1147a8
leaq 0x18bf(%rsp), %rdi
callq 0x114790
leaq 0xed0(%rsp), %rdi
leaq 0x1968(%rsp), %rsi
callq 0x11cf00
jmp 0x11ba55
leaq 0xe1f(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x114670
movq 0xd8(%rsp), %rdx
leaq 0x348b0e(%rip), %rsi    # 0x464587
leaq 0xe20(%rsp), %rdi
callq 0x11b770
jmp 0x11ba88
leaq 0xe40(%rsp), %rdi
leaq 0xe20(%rsp), %rsi
callq 0x11d0f0
jmp 0x11ba9f
leaq 0xdf7(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x114670
movq 0xd0(%rsp), %rdx
leaq 0x348ab2(%rip), %rsi    # 0x464575
leaq 0xdf8(%rsp), %rdi
callq 0x11b770
jmp 0x11bad2
leaq 0xe40(%rsp), %rdi
leaq 0xdf8(%rsp), %rsi
callq 0x11d170
movq %rax, 0xc8(%rsp)
jmp 0x11baf1
leaq 0xdcf(%rsp), %rdi
movq %rdi, 0xc0(%rsp)
callq 0x114670
movq 0xc0(%rsp), %rdx
leaq 0x348a63(%rip), %rsi    # 0x464578
leaq 0xdd0(%rsp), %rdi
callq 0x11b770
jmp 0x11bb24
movq 0xc8(%rsp), %rdi
leaq 0xdd0(%rsp), %rsi
callq 0x11d170
movq %rax, 0xb8(%rsp)
jmp 0x11bb43
leaq 0xda7(%rsp), %rdi
movq %rdi, 0xb0(%rsp)
callq 0x114670
movq 0xb0(%rsp), %rdx
leaq 0x348a26(%rip), %rsi    # 0x46458d
leaq 0xda8(%rsp), %rdi
callq 0x11b770
jmp 0x11bb76
movq 0xb8(%rsp), %rdi
leaq 0xda8(%rsp), %rsi
callq 0x11d1a0
movq %rax, 0xa8(%rsp)
jmp 0x11bb95
movq 0xa8(%rsp), %rsi
leaq 0xed0(%rsp), %rdi
xorl %edx, %edx
callq 0x11d0a0
jmp 0x11bbae
leaq 0xda8(%rsp), %rdi
callq 0x1147a8
leaq 0xda7(%rsp), %rdi
callq 0x114790
leaq 0xdd0(%rsp), %rdi
callq 0x1147a8
leaq 0xdcf(%rsp), %rdi
callq 0x114790
leaq 0xdf8(%rsp), %rdi
callq 0x1147a8
leaq 0xdf7(%rsp), %rdi
callq 0x114790
leaq 0xe40(%rsp), %rdi
callq 0x11d1d0
leaq 0xe20(%rsp), %rdi
callq 0x1147a8
leaq 0xe1f(%rsp), %rdi
callq 0x114790
leaq 0xd7f(%rsp), %rdi
movq %rdi, 0xa0(%rsp)
callq 0x114670
movq 0xa0(%rsp), %rdx
leaq 0x34895d(%rip), %rsi    # 0x4645a4
leaq 0xd80(%rsp), %rdi
callq 0x11b770
jmp 0x11bc56
leaq 0xd7f(%rsp), %rdi
callq 0x114790
leaq 0xd57(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x114670
movq 0x98(%rsp), %rdx
leaq 0x34892b(%rip), %rsi    # 0x4645b2
leaq 0xd58(%rsp), %rdi
callq 0x11b770
jmp 0x11bc96
leaq 0xd57(%rsp), %rdi
callq 0x114790
leaq 0xd2f(%rsp), %rdi
movq %rdi, 0x90(%rsp)
callq 0x114670
movq 0x90(%rsp), %rdx
leaq 0x3488f9(%rip), %rsi    # 0x4645c0
leaq 0xd30(%rsp), %rdi
callq 0x11b770
jmp 0x11bcd6
leaq 0xd2f(%rsp), %rdi
callq 0x114790
leaq 0xd08(%rsp), %rdi
leaq 0x1968(%rsp), %rsi
callq 0x11d210
jmp 0x11bcfa
leaq 0xce8(%rsp), %rdi
leaq 0x1968(%rsp), %rsi
callq 0x11d210
jmp 0x11bd11
leaq 0xcc8(%rsp), %rdi
leaq 0x1968(%rsp), %rsi
callq 0x11d210
jmp 0x11bd28
leaq 0x250(%rsp), %rdi
movl $0x7f, %esi
callq 0x11d2d0
jmp 0x11bd3c
leaq 0x3a0(%rsp), %rdi
leaq 0x250(%rsp), %rsi
callq 0x11d400
jmp 0x11bd53
leaq 0x250(%rsp), %rdi
callq 0x11dc30
leaq 0x3a0(%rsp), %rdi
leaq 0xd80(%rsp), %rsi
leaq 0xd08(%rsp), %rdx
callq 0x11dca0
movb %al, 0x8f(%rsp)
jmp 0x11bd86
movb 0x8f(%rsp), %al
testb $0x1, %al
jne 0x11c1cd
jmp 0x11bd97
leaq 0x230(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x11e530
jmp 0x11bdae
leaq 0x230(%rsp), %rdi
callq 0x1140f0
movq %rax, 0x80(%rsp)
leaq 0xd80(%rsp), %rdi
callq 0x1140f0
movq 0x80(%rsp), %rsi
movq %rax, %rdx
leaq 0x3487ec(%rip), %rdi    # 0x4645ce
xorl %eax, %eax
callq 0x114080
jmp 0x11bdeb
leaq 0x230(%rsp), %rdi
callq 0x1147a8
movl $0x1, 0x22c(%rsp)
jmp 0x11c788
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c887
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c87a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11be71
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x1938(%rsp), %rdi
callq 0x1147a8
leaq 0x1937(%rsp), %rdi
callq 0x114790
jmp 0x11c87a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11beba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x1910(%rsp), %rdi
callq 0x1147a8
leaq 0x190f(%rsp), %rdi
callq 0x114790
jmp 0x11c87a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11bf03
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x18e8(%rsp), %rdi
callq 0x1147a8
leaq 0x18e7(%rsp), %rdi
callq 0x114790
jmp 0x11c87a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11bf4c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x18c0(%rsp), %rdi
callq 0x1147a8
leaq 0x18bf(%rsp), %rdi
callq 0x114790
jmp 0x11c87a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c080
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c073
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c059
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c04c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c03f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c032
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c025
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0xda8(%rsp), %rdi
callq 0x1147a8
leaq 0xda7(%rsp), %rdi
callq 0x114790
leaq 0xdd0(%rsp), %rdi
callq 0x1147a8
leaq 0xdcf(%rsp), %rdi
callq 0x114790
leaq 0xdf8(%rsp), %rdi
callq 0x1147a8
leaq 0xdf7(%rsp), %rdi
callq 0x114790
leaq 0xe40(%rsp), %rdi
callq 0x11d1d0
leaq 0xe20(%rsp), %rdi
callq 0x1147a8
leaq 0xe1f(%rsp), %rdi
callq 0x114790
jmp 0x11c86d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0xd7f(%rsp), %rdi
callq 0x114790
jmp 0x11c86d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0xd57(%rsp), %rdi
callq 0x114790
jmp 0x11c860
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0xd2f(%rsp), %rdi
callq 0x114790
jmp 0x11c853
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c846
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c839
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c82c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c81f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x250(%rsp), %rdi
callq 0x11dc30
jmp 0x11c81f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
jmp 0x11c812
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x230(%rsp), %rdi
callq 0x1147a8
jmp 0x11c812
leaq 0x3a0(%rsp), %rdi
leaq 0xd58(%rsp), %rsi
leaq 0xce8(%rsp), %rdx
callq 0x11dca0
movb %al, 0x7f(%rsp)
jmp 0x11c1f0
movb 0x7f(%rsp), %al
testb $0x1, %al
jne 0x11c28f
jmp 0x11c1fe
leaq 0x208(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x11e530
jmp 0x11c215
leaq 0x208(%rsp), %rdi
callq 0x1140f0
movq %rax, 0x70(%rsp)
leaq 0xd58(%rsp), %rdi
callq 0x1140f0
movq 0x70(%rsp), %rsi
movq %rax, %rdx
leaq 0x34838b(%rip), %rdi    # 0x4645ce
xorl %eax, %eax
callq 0x114080
jmp 0x11c24c
leaq 0x208(%rsp), %rdi
callq 0x1147a8
movl $0x1, 0x22c(%rsp)
jmp 0x11c788
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x1147a8
jmp 0x11c812
leaq 0x3a0(%rsp), %rdi
leaq 0xd30(%rsp), %rsi
leaq 0xcc8(%rsp), %rdx
callq 0x11dca0
movb %al, 0x6f(%rsp)
jmp 0x11c2b2
movb 0x6f(%rsp), %al
testb $0x1, %al
jne 0x11c351
jmp 0x11c2c0
leaq 0x1e8(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x11e530
jmp 0x11c2d7
leaq 0x1e8(%rsp), %rdi
callq 0x1140f0
movq %rax, 0x60(%rsp)
leaq 0xd58(%rsp), %rdi
callq 0x1140f0
movq 0x60(%rsp), %rsi
movq %rax, %rdx
leaq 0x3482c9(%rip), %rdi    # 0x4645ce
xorl %eax, %eax
callq 0x114080
jmp 0x11c30e
leaq 0x1e8(%rsp), %rdi
callq 0x1147a8
movl $0x1, 0x22c(%rsp)
jmp 0x11c788
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x1960(%rsp)
movl %eax, 0x195c(%rsp)
leaq 0x1e8(%rsp), %rdi
callq 0x1147a8
jmp 0x11c812
movq $0x5f5e100, 0x1e0(%rsp) # imm = 0x5F5E100
movq $0x0, 0x1d8(%rsp)
leaq 0x1b0(%rsp), %rdi
callq 0x11e5f0
jmp 0x11c378
leaq 0x1b0(%rsp), %rdi
callq 0x11e620
jmp 0x11c387
movq $0x0, 0x1a8(%rsp)
cmpq $0x5f5e100, 0x1a8(%rsp) # imm = 0x5F5E100
jae 0x11c3f9
leaq 0xd08(%rsp), %rdi
callq 0x11e640
movsd %xmm0, 0x58(%rsp)
jmp 0x11c3b6
movsd 0x58(%rsp), %xmm0
addsd 0x1d8(%rsp), %xmm0
movsd %xmm0, 0x1d8(%rsp)
leaq 0x19a0(%rsp), %rdi
leaq 0x1998(%rsp), %rsi
callq 0x11e660
movq 0x1a8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x1a8(%rsp)
jmp 0x11c393
leaq 0x1b0(%rsp), %rdi
callq 0x11e6a0
jmp 0x11c408
leaq 0x1b0(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, 0x50(%rsp)
jmp 0x11c41d
leaq 0x1b0(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, 0x48(%rsp)
jmp 0x11c432
movsd 0x50(%rsp), %xmm0
movsd 0x48(%rsp), %xmm2
movsd 0x342bc2(%rip), %xmm1   # 0x45f008
divsd %xmm2, %xmm1
movsd 0x1d8(%rsp), %xmm2
leaq 0x34818e(%rip), %rdi    # 0x4645e8
movb $0x3, %al
callq 0x114080
jmp 0x11c463
movq $0x0, 0x1a0(%rsp)
leaq 0x178(%rsp), %rdi
callq 0x11e5f0
jmp 0x11c47e
leaq 0x178(%rsp), %rdi
callq 0x11e620
jmp 0x11c48d
movq $0x0, 0x170(%rsp)
cmpq $0x5f5e100, 0x170(%rsp) # imm = 0x5F5E100
jae 0x11c4ff
leaq 0xce8(%rsp), %rdi
callq 0x11e640
movsd %xmm0, 0x40(%rsp)
jmp 0x11c4bc
movsd 0x40(%rsp), %xmm0
addsd 0x1a0(%rsp), %xmm0
movsd %xmm0, 0x1a0(%rsp)
leaq 0x19a0(%rsp), %rdi
leaq 0x1998(%rsp), %rsi
callq 0x11e660
movq 0x170(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x170(%rsp)
jmp 0x11c499
leaq 0x178(%rsp), %rdi
callq 0x11e6a0
jmp 0x11c50e
leaq 0x178(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, 0x38(%rsp)
jmp 0x11c523
leaq 0x178(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, 0x30(%rsp)
jmp 0x11c538
movsd 0x38(%rsp), %xmm0
movsd 0x30(%rsp), %xmm2
movsd 0x342abc(%rip), %xmm1   # 0x45f008
divsd %xmm2, %xmm1
movsd 0x1a0(%rsp), %xmm2
leaq 0x3480cb(%rip), %rdi    # 0x46462b
movb $0x3, %al
callq 0x114080
jmp 0x11c569
movq $0x0, 0x168(%rsp)
leaq 0x140(%rsp), %rdi
callq 0x11e5f0
jmp 0x11c584
leaq 0x140(%rsp), %rdi
callq 0x11e620
jmp 0x11c593
movq $0x0, 0x138(%rsp)
cmpq $0x5f5e100, 0x138(%rsp) # imm = 0x5F5E100
jae 0x11c605
leaq 0xcc8(%rsp), %rdi
callq 0x11e640
movsd %xmm0, 0x28(%rsp)
jmp 0x11c5c2
movsd 0x28(%rsp), %xmm0
addsd 0x168(%rsp), %xmm0
movsd %xmm0, 0x168(%rsp)
leaq 0x19a0(%rsp), %rdi
leaq 0x1998(%rsp), %rsi
callq 0x11e660
movq 0x138(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x138(%rsp)
jmp 0x11c59f
leaq 0x140(%rsp), %rdi
callq 0x11e6a0
jmp 0x11c614
leaq 0x140(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, 0x20(%rsp)
jmp 0x11c629
leaq 0x140(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, 0x18(%rsp)
jmp 0x11c63e
movsd 0x20(%rsp), %xmm0
movsd 0x18(%rsp), %xmm2
movsd 0x3429b6(%rip), %xmm1   # 0x45f008
divsd %xmm2, %xmm1
movsd 0x168(%rsp), %xmm2
leaq 0x348008(%rip), %rdi    # 0x46466e
movb $0x3, %al
callq 0x114080
jmp 0x11c66f
movq $0x0, 0x130(%rsp)
leaq 0x108(%rsp), %rdi
callq 0x11e5f0
jmp 0x11c68a
leaq 0x108(%rsp), %rdi
callq 0x11e620
jmp 0x11c699
movq $0x0, 0x100(%rsp)
cmpq $0x5f5e100, 0x100(%rsp) # imm = 0x5F5E100
jae 0x11c715
movsd 0x19a0(%rsp), %xmm0
movsd 0x1998(%rsp), %xmm1
callq 0x11ceb0
movsd %xmm0, 0x10(%rsp)
jmp 0x11c6d2
movsd 0x10(%rsp), %xmm0
addsd 0x130(%rsp), %xmm0
movsd %xmm0, 0x130(%rsp)
leaq 0x19a0(%rsp), %rdi
leaq 0x1998(%rsp), %rsi
callq 0x11e660
movq 0x100(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x100(%rsp)
jmp 0x11c6a5
leaq 0x108(%rsp), %rdi
callq 0x11e6a0
jmp 0x11c724
leaq 0x108(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, 0x8(%rsp)
jmp 0x11c739
leaq 0x108(%rsp), %rdi
callq 0x11e6d0
movsd %xmm0, (%rsp)
jmp 0x11c74d
movsd 0x8(%rsp), %xmm0
movsd (%rsp), %xmm2
movsd 0x3428a8(%rip), %xmm1   # 0x45f008
divsd %xmm2, %xmm1
movsd 0x130(%rsp), %xmm2
leaq 0x347f3d(%rip), %rdi    # 0x4646b1
movb $0x3, %al
callq 0x114080
jmp 0x11c77d
movl $0x0, 0x22c(%rsp)
leaq 0x3a0(%rsp), %rdi
callq 0x11e720
leaq 0xcc8(%rsp), %rdi
callq 0x11e920
leaq 0xce8(%rsp), %rdi
callq 0x11e920
leaq 0xd08(%rsp), %rdi
callq 0x11e920
leaq 0xd30(%rsp), %rdi
callq 0x1147a8
leaq 0xd58(%rsp), %rdi
callq 0x1147a8
leaq 0xd80(%rsp), %rdi
callq 0x1147a8
leaq 0xed0(%rsp), %rdi
callq 0x11e960
leaq 0x1968(%rsp), %rdi
callq 0x11e9f0
leaq 0x1970(%rsp), %rdi
callq 0x11ea70
addq $0x19a8, %rsp           # imm = 0x19A8
retq
leaq 0x3a0(%rsp), %rdi
callq 0x11e720
leaq 0xcc8(%rsp), %rdi
callq 0x11e920
leaq 0xce8(%rsp), %rdi
callq 0x11e920
leaq 0xd08(%rsp), %rdi
callq 0x11e920
leaq 0xd30(%rsp), %rdi
callq 0x1147a8
leaq 0xd58(%rsp), %rdi
callq 0x1147a8
leaq 0xd80(%rsp), %rdi
callq 0x1147a8
leaq 0xed0(%rsp), %rdi
callq 0x11e960
leaq 0x1968(%rsp), %rdi
callq 0x11e9f0
leaq 0x1970(%rsp), %rdi
callq 0x11ea70
movq 0x1960(%rsp), %rdi
callq 0x114460
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)