void helper_double_16_recursive(double *buf, int depth) {
  if (depth == 2) {
    for (int j = 0; j < 4; j += 4) {
      for (int k = 0; k < 2; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm0\n"
                         "movapd %%xmm1, %%xmm8\n"
                         "haddpd %%xmm8, %%xmm8\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "hsubpd %%xmm9, %%xmm9\n"
                         "blendpd $1, %%xmm8, %%xmm9\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movupd %%xmm8, (%0)\n"
                         "movupd %%xmm9, (%1)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 2)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5",
                           "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10",
                           "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15",
                           "memory");
      }
    }
    return;
  }
  if (depth == 5) {
    helper_double_16_recursive(buf + 0, 2);
    helper_double_16_recursive(buf + 4, 2);
    helper_double_16_recursive(buf + 8, 2);
    helper_double_16_recursive(buf + 12, 2);
    helper_double_16_recursive(buf + 16, 2);
    helper_double_16_recursive(buf + 20, 2);
    helper_double_16_recursive(buf + 24, 2);
    helper_double_16_recursive(buf + 28, 2);
    for (int j = 0; j < 32; j += 32) {
      for (int k = 0; k < 4; k += 2) {
        __asm__ volatile(
            "movupd (%0), %%xmm0\n"
            "movupd (%1), %%xmm1\n"
            "movupd (%2), %%xmm2\n"
            "movupd (%3), %%xmm3\n"
            "movupd (%4), %%xmm4\n"
            "movupd (%5), %%xmm5\n"
            "movupd (%6), %%xmm6\n"
            "movupd (%7), %%xmm7\n"
            "movapd %%xmm0, %%xmm8\n"
            "movapd %%xmm0, %%xmm9\n"
            "addpd %%xmm1, %%xmm8\n"
            "subpd %%xmm1, %%xmm9\n"
            "movapd %%xmm2, %%xmm10\n"
            "movapd %%xmm2, %%xmm11\n"
            "addpd %%xmm3, %%xmm10\n"
            "subpd %%xmm3, %%xmm11\n"
            "movapd %%xmm4, %%xmm12\n"
            "movapd %%xmm4, %%xmm13\n"
            "addpd %%xmm5, %%xmm12\n"
            "subpd %%xmm5, %%xmm13\n"
            "movapd %%xmm6, %%xmm14\n"
            "movapd %%xmm6, %%xmm15\n"
            "addpd %%xmm7, %%xmm14\n"
            "subpd %%xmm7, %%xmm15\n"
            "movapd %%xmm8, %%xmm0\n"
            "movapd %%xmm8, %%xmm2\n"
            "addpd %%xmm10, %%xmm0\n"
            "subpd %%xmm10, %%xmm2\n"
            "movapd %%xmm9, %%xmm1\n"
            "movapd %%xmm9, %%xmm3\n"
            "addpd %%xmm11, %%xmm1\n"
            "subpd %%xmm11, %%xmm3\n"
            "movapd %%xmm12, %%xmm4\n"
            "movapd %%xmm12, %%xmm6\n"
            "addpd %%xmm14, %%xmm4\n"
            "subpd %%xmm14, %%xmm6\n"
            "movapd %%xmm13, %%xmm5\n"
            "movapd %%xmm13, %%xmm7\n"
            "addpd %%xmm15, %%xmm5\n"
            "subpd %%xmm15, %%xmm7\n"
            "movapd %%xmm0, %%xmm8\n"
            "movapd %%xmm0, %%xmm12\n"
            "addpd %%xmm4, %%xmm8\n"
            "subpd %%xmm4, %%xmm12\n"
            "movapd %%xmm1, %%xmm9\n"
            "movapd %%xmm1, %%xmm13\n"
            "addpd %%xmm5, %%xmm9\n"
            "subpd %%xmm5, %%xmm13\n"
            "movapd %%xmm2, %%xmm10\n"
            "movapd %%xmm2, %%xmm14\n"
            "addpd %%xmm6, %%xmm10\n"
            "subpd %%xmm6, %%xmm14\n"
            "movapd %%xmm3, %%xmm11\n"
            "movapd %%xmm3, %%xmm15\n"
            "addpd %%xmm7, %%xmm11\n"
            "subpd %%xmm7, %%xmm15\n"
            "movupd %%xmm8, (%0)\n"
            "movupd %%xmm9, (%1)\n"
            "movupd %%xmm10, (%2)\n"
            "movupd %%xmm11, (%3)\n"
            "movupd %%xmm12, (%4)\n"
            "movupd %%xmm13, (%5)\n"
            "movupd %%xmm14, (%6)\n"
            "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
            "r"(buf + j + k + 4), "r"(buf + j + k + 8), "r"(buf + j + k + 12),
            "r"(buf + j + k + 16), "r"(buf + j + k + 20), "r"(buf + j + k + 24),
            "r"(buf + j + k + 28)
            : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6",
              "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13",
              "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
  if (depth == 8) {
    helper_double_16_recursive(buf + 0, 5);
    helper_double_16_recursive(buf + 32, 5);
    helper_double_16_recursive(buf + 64, 5);
    helper_double_16_recursive(buf + 96, 5);
    helper_double_16_recursive(buf + 128, 5);
    helper_double_16_recursive(buf + 160, 5);
    helper_double_16_recursive(buf + 192, 5);
    helper_double_16_recursive(buf + 224, 5);
    for (int j = 0; j < 256; j += 256) {
      for (int k = 0; k < 32; k += 2) {
        __asm__ volatile(
            "movupd (%0), %%xmm0\n"
            "movupd (%1), %%xmm1\n"
            "movupd (%2), %%xmm2\n"
            "movupd (%3), %%xmm3\n"
            "movupd (%4), %%xmm4\n"
            "movupd (%5), %%xmm5\n"
            "movupd (%6), %%xmm6\n"
            "movupd (%7), %%xmm7\n"
            "movapd %%xmm0, %%xmm8\n"
            "movapd %%xmm0, %%xmm9\n"
            "addpd %%xmm1, %%xmm8\n"
            "subpd %%xmm1, %%xmm9\n"
            "movapd %%xmm2, %%xmm10\n"
            "movapd %%xmm2, %%xmm11\n"
            "addpd %%xmm3, %%xmm10\n"
            "subpd %%xmm3, %%xmm11\n"
            "movapd %%xmm4, %%xmm12\n"
            "movapd %%xmm4, %%xmm13\n"
            "addpd %%xmm5, %%xmm12\n"
            "subpd %%xmm5, %%xmm13\n"
            "movapd %%xmm6, %%xmm14\n"
            "movapd %%xmm6, %%xmm15\n"
            "addpd %%xmm7, %%xmm14\n"
            "subpd %%xmm7, %%xmm15\n"
            "movapd %%xmm8, %%xmm0\n"
            "movapd %%xmm8, %%xmm2\n"
            "addpd %%xmm10, %%xmm0\n"
            "subpd %%xmm10, %%xmm2\n"
            "movapd %%xmm9, %%xmm1\n"
            "movapd %%xmm9, %%xmm3\n"
            "addpd %%xmm11, %%xmm1\n"
            "subpd %%xmm11, %%xmm3\n"
            "movapd %%xmm12, %%xmm4\n"
            "movapd %%xmm12, %%xmm6\n"
            "addpd %%xmm14, %%xmm4\n"
            "subpd %%xmm14, %%xmm6\n"
            "movapd %%xmm13, %%xmm5\n"
            "movapd %%xmm13, %%xmm7\n"
            "addpd %%xmm15, %%xmm5\n"
            "subpd %%xmm15, %%xmm7\n"
            "movapd %%xmm0, %%xmm8\n"
            "movapd %%xmm0, %%xmm12\n"
            "addpd %%xmm4, %%xmm8\n"
            "subpd %%xmm4, %%xmm12\n"
            "movapd %%xmm1, %%xmm9\n"
            "movapd %%xmm1, %%xmm13\n"
            "addpd %%xmm5, %%xmm9\n"
            "subpd %%xmm5, %%xmm13\n"
            "movapd %%xmm2, %%xmm10\n"
            "movapd %%xmm2, %%xmm14\n"
            "addpd %%xmm6, %%xmm10\n"
            "subpd %%xmm6, %%xmm14\n"
            "movapd %%xmm3, %%xmm11\n"
            "movapd %%xmm3, %%xmm15\n"
            "addpd %%xmm7, %%xmm11\n"
            "subpd %%xmm7, %%xmm15\n"
            "movupd %%xmm8, (%0)\n"
            "movupd %%xmm9, (%1)\n"
            "movupd %%xmm10, (%2)\n"
            "movupd %%xmm11, (%3)\n"
            "movupd %%xmm12, (%4)\n"
            "movupd %%xmm13, (%5)\n"
            "movupd %%xmm14, (%6)\n"
            "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
            "r"(buf + j + k + 32), "r"(buf + j + k + 64), "r"(buf + j + k + 96),
            "r"(buf + j + k + 128), "r"(buf + j + k + 160),
            "r"(buf + j + k + 192), "r"(buf + j + k + 224)
            : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6",
              "%xmm7", "%xmm8", "%xmm9", "%xmm10", "%xmm11", "%xmm12", "%xmm13",
              "%xmm14", "%xmm15", "memory");
      }
    }
    return;
  }
  if (depth == 11) {
    helper_double_16_recursive(buf + 0, 8);
    helper_double_16_recursive(buf + 256, 8);
    helper_double_16_recursive(buf + 512, 8);
    helper_double_16_recursive(buf + 768, 8);
    helper_double_16_recursive(buf + 1024, 8);
    helper_double_16_recursive(buf + 1280, 8);
    helper_double_16_recursive(buf + 1536, 8);
    helper_double_16_recursive(buf + 1792, 8);
    for (int j = 0; j < 2048; j += 2048) {
      for (int k = 0; k < 256; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\n"
                         "movupd (%4), %%xmm4\n"
                         "movupd (%5), %%xmm5\n"
                         "movupd (%6), %%xmm6\n"
                         "movupd (%7), %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm11\n"
                         "addpd %%xmm3, %%xmm10\n"
                         "subpd %%xmm3, %%xmm11\n"
                         "movapd %%xmm4, %%xmm12\n"
                         "movapd %%xmm4, %%xmm13\n"
                         "addpd %%xmm5, %%xmm12\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm6, %%xmm14\n"
                         "movapd %%xmm6, %%xmm15\n"
                         "addpd %%xmm7, %%xmm14\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movapd %%xmm8, %%xmm0\n"
                         "movapd %%xmm8, %%xmm2\n"
                         "addpd %%xmm10, %%xmm0\n"
                         "subpd %%xmm10, %%xmm2\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "addpd %%xmm11, %%xmm1\n"
                         "subpd %%xmm11, %%xmm3\n"
                         "movapd %%xmm12, %%xmm4\n"
                         "movapd %%xmm12, %%xmm6\n"
                         "addpd %%xmm14, %%xmm4\n"
                         "subpd %%xmm14, %%xmm6\n"
                         "movapd %%xmm13, %%xmm5\n"
                         "movapd %%xmm13, %%xmm7\n"
                         "addpd %%xmm15, %%xmm5\n"
                         "subpd %%xmm15, %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm12\n"
                         "addpd %%xmm4, %%xmm8\n"
                         "subpd %%xmm4, %%xmm12\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "movapd %%xmm1, %%xmm13\n"
                         "addpd %%xmm5, %%xmm9\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm14\n"
                         "addpd %%xmm6, %%xmm10\n"
                         "subpd %%xmm6, %%xmm14\n"
                         "movapd %%xmm3, %%xmm11\n"
                         "movapd %%xmm3, %%xmm15\n"
                         "addpd %%xmm7, %%xmm11\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movupd %%xmm8, (%0)\n"
                         "movupd %%xmm9, (%1)\n"
                         "movupd %%xmm10, (%2)\n"
                         "movupd %%xmm11, (%3)\n"
                         "movupd %%xmm12, (%4)\n"
                         "movupd %%xmm13, (%5)\n"
                         "movupd %%xmm14, (%6)\n"
                         "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 256), "r"(buf + j + k + 512),
                         "r"(buf + j + k + 768), "r"(buf + j + k + 1024),
                         "r"(buf + j + k + 1280), "r"(buf + j + k + 1536),
                         "r"(buf + j + k + 1792)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5",
                           "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10",
                           "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15",
                           "memory");
      }
    }
    return;
  }
  if (depth == 14) {
    helper_double_16_recursive(buf + 0, 11);
    helper_double_16_recursive(buf + 2048, 11);
    helper_double_16_recursive(buf + 4096, 11);
    helper_double_16_recursive(buf + 6144, 11);
    helper_double_16_recursive(buf + 8192, 11);
    helper_double_16_recursive(buf + 10240, 11);
    helper_double_16_recursive(buf + 12288, 11);
    helper_double_16_recursive(buf + 14336, 11);
    for (int j = 0; j < 16384; j += 16384) {
      for (int k = 0; k < 2048; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\n"
                         "movupd (%4), %%xmm4\n"
                         "movupd (%5), %%xmm5\n"
                         "movupd (%6), %%xmm6\n"
                         "movupd (%7), %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm11\n"
                         "addpd %%xmm3, %%xmm10\n"
                         "subpd %%xmm3, %%xmm11\n"
                         "movapd %%xmm4, %%xmm12\n"
                         "movapd %%xmm4, %%xmm13\n"
                         "addpd %%xmm5, %%xmm12\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm6, %%xmm14\n"
                         "movapd %%xmm6, %%xmm15\n"
                         "addpd %%xmm7, %%xmm14\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movapd %%xmm8, %%xmm0\n"
                         "movapd %%xmm8, %%xmm2\n"
                         "addpd %%xmm10, %%xmm0\n"
                         "subpd %%xmm10, %%xmm2\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "addpd %%xmm11, %%xmm1\n"
                         "subpd %%xmm11, %%xmm3\n"
                         "movapd %%xmm12, %%xmm4\n"
                         "movapd %%xmm12, %%xmm6\n"
                         "addpd %%xmm14, %%xmm4\n"
                         "subpd %%xmm14, %%xmm6\n"
                         "movapd %%xmm13, %%xmm5\n"
                         "movapd %%xmm13, %%xmm7\n"
                         "addpd %%xmm15, %%xmm5\n"
                         "subpd %%xmm15, %%xmm7\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm12\n"
                         "addpd %%xmm4, %%xmm8\n"
                         "subpd %%xmm4, %%xmm12\n"
                         "movapd %%xmm1, %%xmm9\n"
                         "movapd %%xmm1, %%xmm13\n"
                         "addpd %%xmm5, %%xmm9\n"
                         "subpd %%xmm5, %%xmm13\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm14\n"
                         "addpd %%xmm6, %%xmm10\n"
                         "subpd %%xmm6, %%xmm14\n"
                         "movapd %%xmm3, %%xmm11\n"
                         "movapd %%xmm3, %%xmm15\n"
                         "addpd %%xmm7, %%xmm11\n"
                         "subpd %%xmm7, %%xmm15\n"
                         "movupd %%xmm8, (%0)\n"
                         "movupd %%xmm9, (%1)\n"
                         "movupd %%xmm10, (%2)\n"
                         "movupd %%xmm11, (%3)\n"
                         "movupd %%xmm12, (%4)\n"
                         "movupd %%xmm13, (%5)\n"
                         "movupd %%xmm14, (%6)\n"
                         "movupd %%xmm15, (%7)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 2048), "r"(buf + j + k + 4096),
                         "r"(buf + j + k + 6144), "r"(buf + j + k + 8192),
                         "r"(buf + j + k + 10240), "r"(buf + j + k + 12288),
                         "r"(buf + j + k + 14336)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5",
                           "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10",
                           "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15",
                           "memory");
      }
    }
    return;
  }
  if (depth == 16) {
    helper_double_16_recursive(buf + 0, 14);
    helper_double_16_recursive(buf + 16384, 14);
    helper_double_16_recursive(buf + 32768, 14);
    helper_double_16_recursive(buf + 49152, 14);
    for (int j = 0; j < 65536; j += 65536) {
      for (int k = 0; k < 16384; k += 2) {
        __asm__ volatile("movupd (%0), %%xmm0\n"
                         "movupd (%1), %%xmm1\n"
                         "movupd (%2), %%xmm2\n"
                         "movupd (%3), %%xmm3\n"
                         "movapd %%xmm0, %%xmm8\n"
                         "movapd %%xmm0, %%xmm9\n"
                         "addpd %%xmm1, %%xmm8\n"
                         "subpd %%xmm1, %%xmm9\n"
                         "movapd %%xmm2, %%xmm10\n"
                         "movapd %%xmm2, %%xmm11\n"
                         "addpd %%xmm3, %%xmm10\n"
                         "subpd %%xmm3, %%xmm11\n"
                         "movapd %%xmm8, %%xmm0\n"
                         "movapd %%xmm8, %%xmm2\n"
                         "addpd %%xmm10, %%xmm0\n"
                         "subpd %%xmm10, %%xmm2\n"
                         "movapd %%xmm9, %%xmm1\n"
                         "movapd %%xmm9, %%xmm3\n"
                         "addpd %%xmm11, %%xmm1\n"
                         "subpd %%xmm11, %%xmm3\n"
                         "movupd %%xmm0, (%0)\n"
                         "movupd %%xmm1, (%1)\n"
                         "movupd %%xmm2, (%2)\n"
                         "movupd %%xmm3, (%3)\n" ::"r"(buf + j + k + 0),
                         "r"(buf + j + k + 16384), "r"(buf + j + k + 32768),
                         "r"(buf + j + k + 49152)
                         : "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5",
                           "%xmm6", "%xmm7", "%xmm8", "%xmm9", "%xmm10",
                           "%xmm11", "%xmm12", "%xmm13", "%xmm14", "%xmm15",
                           "memory");
      }
    }
    return;
  }
}


x86 assembly (clang, -O0):
<helper_double_16_recursive>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
cmpl   $0x2,-0xc(%rbp)
jne    120f <helper_double_16_recursive+0xff>
movl   $0x0,-0x10(%rbp)
cmpl   $0x4,-0x10(%rbp)
jge    120a <helper_double_16_recursive+0xfa>
movl   $0x0,-0x14(%rbp)
cmpl   $0x2,-0x14(%rbp)
jge    11f7 <helper_double_16_recursive+0xe7>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x10(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x14(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x10,%rcx
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rax)
movupd %xmm9,(%rcx)
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    1141 <helper_double_16_recursive+0x31>
jmp    11fc <helper_double_16_recursive+0xec>
mov    -0x10(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x10(%rbp)
jmp    1130 <helper_double_16_recursive+0x20>
jmp    2062 <helper_double_16_recursive+0xf52>
cmpl   $0x5,-0xc(%rbp)
jne    152c <helper_double_16_recursive+0x41c>
mov    -0x8(%rbp),%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x20,%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x40,%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x60,%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x80,%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0xa0,%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0xc0,%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0xe0,%rdi
mov    $0x2,%esi
call   1030 <helper_double_16_recursive@plt>
movl   $0x0,-0x18(%rbp)
cmpl   $0x20,-0x18(%rbp)
jge    1527 <helper_double_16_recursive+0x417>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x4,-0x1c(%rbp)
jge    1514 <helper_double_16_recursive+0x404>
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x18(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x1c(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x20,%rcx
mov    -0x8(%rbp),%rdx
movslq -0x18(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
movslq -0x1c(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
add    $0x40,%rdx
mov    -0x8(%rbp),%rsi
movslq -0x18(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
movslq -0x1c(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
add    $0x60,%rsi
mov    -0x8(%rbp),%rdi
movslq -0x18(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
movslq -0x1c(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
add    $0x80,%rdi
mov    -0x8(%rbp),%r8
movslq -0x18(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
movslq -0x1c(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
add    $0xa0,%r8
mov    -0x8(%rbp),%r9
movslq -0x18(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
movslq -0x1c(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
add    $0xc0,%r9
mov    -0x8(%rbp),%r10
movslq -0x18(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
movslq -0x1c(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
add    $0xe0,%r10
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movupd (%rdx),%xmm2
movupd (%rsi),%xmm3
movupd (%rdi),%xmm4
movupd (%r8),%xmm5
movupd (%r9),%xmm6
movupd (%r10),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rax)
movupd %xmm9,(%rcx)
movupd %xmm10,(%rdx)
movupd %xmm11,(%rsi)
movupd %xmm12,(%rdi)
movupd %xmm13,(%r8)
movupd %xmm14,(%r9)
movupd %xmm15,(%r10)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    12c9 <helper_double_16_recursive+0x1b9>
jmp    1519 <helper_double_16_recursive+0x409>
mov    -0x18(%rbp),%eax
add    $0x20,%eax
mov    %eax,-0x18(%rbp)
jmp    12b8 <helper_double_16_recursive+0x1a8>
jmp    2062 <helper_double_16_recursive+0xf52>
cmpl   $0x8,-0xc(%rbp)
jne    1860 <helper_double_16_recursive+0x750>
mov    -0x8(%rbp),%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x100,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x200,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x300,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x400,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x500,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x600,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x700,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
movl   $0x0,-0x20(%rbp)
cmpl   $0x100,-0x20(%rbp)
jge    185b <helper_double_16_recursive+0x74b>
movl   $0x0,-0x24(%rbp)
cmpl   $0x20,-0x24(%rbp)
jge    1846 <helper_double_16_recursive+0x736>
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x20(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x24(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x100,%rcx
mov    -0x8(%rbp),%rdx
movslq -0x20(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
movslq -0x24(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
add    $0x200,%rdx
mov    -0x8(%rbp),%rsi
movslq -0x20(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
movslq -0x24(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
add    $0x300,%rsi
mov    -0x8(%rbp),%rdi
movslq -0x20(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
movslq -0x24(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
add    $0x400,%rdi
mov    -0x8(%rbp),%r8
movslq -0x20(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
movslq -0x24(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
add    $0x500,%r8
mov    -0x8(%rbp),%r9
movslq -0x20(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
movslq -0x24(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
add    $0x600,%r9
mov    -0x8(%rbp),%r10
movslq -0x20(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
movslq -0x24(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
add    $0x700,%r10
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movupd (%rdx),%xmm2
movupd (%rsi),%xmm3
movupd (%rdi),%xmm4
movupd (%r8),%xmm5
movupd (%r9),%xmm6
movupd (%r10),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rax)
movupd %xmm9,(%rcx)
movupd %xmm10,(%rdx)
movupd %xmm11,(%rsi)
movupd %xmm12,(%rdi)
movupd %xmm13,(%r8)
movupd %xmm14,(%r9)
movupd %xmm15,(%r10)
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    15f2 <helper_double_16_recursive+0x4e2>
jmp    184b <helper_double_16_recursive+0x73b>
mov    -0x20(%rbp),%eax
add    $0x100,%eax
mov    %eax,-0x20(%rbp)
jmp    15de <helper_double_16_recursive+0x4ce>
jmp    2062 <helper_double_16_recursive+0xf52>
cmpl   $0xb,-0xc(%rbp)
jne    1b97 <helper_double_16_recursive+0xa87>
mov    -0x8(%rbp),%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x800,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x1000,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x1800,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x2000,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x2800,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x3000,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x3800,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
movl   $0x0,-0x28(%rbp)
cmpl   $0x800,-0x28(%rbp)
jge    1b92 <helper_double_16_recursive+0xa82>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x100,-0x2c(%rbp)
jge    1b7d <helper_double_16_recursive+0xa6d>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x2c(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x28(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x2c(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x800,%rcx
mov    -0x8(%rbp),%rdx
movslq -0x28(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
movslq -0x2c(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
add    $0x1000,%rdx
mov    -0x8(%rbp),%rsi
movslq -0x28(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
movslq -0x2c(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
add    $0x1800,%rsi
mov    -0x8(%rbp),%rdi
movslq -0x28(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
movslq -0x2c(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
add    $0x2000,%rdi
mov    -0x8(%rbp),%r8
movslq -0x28(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
movslq -0x2c(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
add    $0x2800,%r8
mov    -0x8(%rbp),%r9
movslq -0x28(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
movslq -0x2c(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
add    $0x3000,%r9
mov    -0x8(%rbp),%r10
movslq -0x28(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
movslq -0x2c(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
add    $0x3800,%r10
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movupd (%rdx),%xmm2
movupd (%rsi),%xmm3
movupd (%rdi),%xmm4
movupd (%r8),%xmm5
movupd (%r9),%xmm6
movupd (%r10),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rax)
movupd %xmm9,(%rcx)
movupd %xmm10,(%rdx)
movupd %xmm11,(%rsi)
movupd %xmm12,(%rdi)
movupd %xmm13,(%r8)
movupd %xmm14,(%r9)
movupd %xmm15,(%r10)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1926 <helper_double_16_recursive+0x816>
jmp    1b82 <helper_double_16_recursive+0xa72>
mov    -0x28(%rbp),%eax
add    $0x800,%eax
mov    %eax,-0x28(%rbp)
jmp    1912 <helper_double_16_recursive+0x802>
jmp    2062 <helper_double_16_recursive+0xf52>
cmpl   $0xe,-0xc(%rbp)
jne    1ece <helper_double_16_recursive+0xdbe>
mov    -0x8(%rbp),%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x4000,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x8000,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0xc000,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x10000,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x14000,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x18000,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x1c000,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
movl   $0x0,-0x30(%rbp)
cmpl   $0x4000,-0x30(%rbp)
jge    1ec9 <helper_double_16_recursive+0xdb9>
movl   $0x0,-0x34(%rbp)
cmpl   $0x800,-0x34(%rbp)
jge    1eb4 <helper_double_16_recursive+0xda4>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x30(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x34(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x4000,%rcx
mov    -0x8(%rbp),%rdx
movslq -0x30(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
movslq -0x34(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
add    $0x8000,%rdx
mov    -0x8(%rbp),%rsi
movslq -0x30(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
movslq -0x34(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
add    $0xc000,%rsi
mov    -0x8(%rbp),%rdi
movslq -0x30(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
movslq -0x34(%rbp),%r8
shl    $0x3,%r8
add    %r8,%rdi
add    $0x10000,%rdi
mov    -0x8(%rbp),%r8
movslq -0x30(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
movslq -0x34(%rbp),%r9
shl    $0x3,%r9
add    %r9,%r8
add    $0x14000,%r8
mov    -0x8(%rbp),%r9
movslq -0x30(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
movslq -0x34(%rbp),%r10
shl    $0x3,%r10
add    %r10,%r9
add    $0x18000,%r9
mov    -0x8(%rbp),%r10
movslq -0x30(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
movslq -0x34(%rbp),%r11
shl    $0x3,%r11
add    %r11,%r10
add    $0x1c000,%r10
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movupd (%rdx),%xmm2
movupd (%rsi),%xmm3
movupd (%rdi),%xmm4
movupd (%r8),%xmm5
movupd (%r9),%xmm6
movupd (%r10),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rax)
movupd %xmm9,(%rcx)
movupd %xmm10,(%rdx)
movupd %xmm11,(%rsi)
movupd %xmm12,(%rdi)
movupd %xmm13,(%r8)
movupd %xmm14,(%r9)
movupd %xmm15,(%r10)
mov    -0x34(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x34(%rbp)
jmp    1c5d <helper_double_16_recursive+0xb4d>
jmp    1eb9 <helper_double_16_recursive+0xda9>
mov    -0x30(%rbp),%eax
add    $0x4000,%eax
mov    %eax,-0x30(%rbp)
jmp    1c49 <helper_double_16_recursive+0xb39>
jmp    2062 <helper_double_16_recursive+0xf52>
cmpl   $0x10,-0xc(%rbp)
jne    2062 <helper_double_16_recursive+0xf52>
mov    -0x8(%rbp),%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x20000,%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x40000,%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
mov    -0x8(%rbp),%rdi
add    $0x60000,%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
movl   $0x0,-0x38(%rbp)
cmpl   $0x10000,-0x38(%rbp)
jge    205d <helper_double_16_recursive+0xf4d>
movl   $0x0,-0x3c(%rbp)
cmpl   $0x4000,-0x3c(%rbp)
jge    2048 <helper_double_16_recursive+0xf38>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x3c(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x8(%rbp),%rcx
movslq -0x38(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x3c(%rbp),%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
add    $0x20000,%rcx
mov    -0x8(%rbp),%rdx
movslq -0x38(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
movslq -0x3c(%rbp),%rsi
shl    $0x3,%rsi
add    %rsi,%rdx
add    $0x40000,%rdx
mov    -0x8(%rbp),%rsi
movslq -0x38(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
movslq -0x3c(%rbp),%rdi
shl    $0x3,%rdi
add    %rdi,%rsi
add    $0x60000,%rsi
movupd (%rax),%xmm0
movupd (%rcx),%xmm1
movupd (%rdx),%xmm2
movupd (%rsi),%xmm3
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movupd %xmm0,(%rax)
movupd %xmm1,(%rcx)
movupd %xmm2,(%rdx)
movupd %xmm3,(%rsi)
mov    -0x3c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x3c(%rbp)
jmp    1f40 <helper_double_16_recursive+0xe30>
jmp    204d <helper_double_16_recursive+0xf3d>
mov    -0x38(%rbp),%eax
add    $0x10000,%eax
mov    %eax,-0x38(%rbp)
jmp    1f2c <helper_double_16_recursive+0xe1c>
jmp    2062 <helper_double_16_recursive+0xf52>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<helper_double_16_recursive>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
add    $0xfffffffe,%esi
cmp    $0xe,%esi
ja     1f09 <helper_double_16_recursive+0xdf9>
mov    %rdi,%rbx
lea    0xecf(%rip),%rax
movslq (%rax,%rsi,4),%rcx
add    %rax,%rcx
jmp    *%rcx
lea    0x10(%rbx),%rax
movupd (%rbx),%xmm0
movupd (%rax),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rbx)
movupd %xmm9,(%rax)
jmp    1f09 <helper_double_16_recursive+0xdf9>
lea    0x10(%rbx),%rax
mov    %rax,(%rsp)
movupd (%rbx),%xmm0
movupd (%rax),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rbx)
movupd %xmm9,(%rax)
lea    0x20(%rbx),%r9
lea    0x30(%rbx),%r10
movupd (%r9),%xmm0
movupd (%r10),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%r9)
movupd %xmm9,(%r10)
lea    0x40(%rbx),%r11
lea    0x50(%rbx),%r14
movupd (%r11),%xmm0
movupd (%r14),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%r11)
movupd %xmm9,(%r14)
lea    0x60(%rbx),%r15
lea    0x70(%rbx),%r12
movupd (%r15),%xmm0
movupd (%r12),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%r15)
movupd %xmm9,(%r12)
lea    0x80(%rbx),%r13
lea    0x90(%rbx),%r8
movupd 0x0(%r13),%xmm0
movupd (%r8),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,0x0(%r13)
movupd %xmm9,(%r8)
lea    0xa0(%rbx),%rdi
lea    0xb0(%rbx),%rsi
movupd (%rdi),%xmm0
movupd (%rsi),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rdi)
movupd %xmm9,(%rsi)
lea    0xc0(%rbx),%rcx
lea    0xd0(%rbx),%rdx
movupd (%rcx),%xmm0
movupd (%rdx),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rcx)
movupd %xmm9,(%rdx)
mov    %rbx,%rbp
add    $0xf0,%rbp
lea    0xe0(%rbx),%rax
movupd (%rax),%xmm0
movupd 0x0(%rbp),%xmm1
movapd %xmm0,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm0,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm0
movapd %xmm1,%xmm8
haddpd %xmm8,%xmm8
movapd %xmm1,%xmm9
hsubpd %xmm9,%xmm9
blendpd $0x1,%xmm8,%xmm9
movapd %xmm9,%xmm1
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movupd %xmm8,(%rax)
movupd %xmm9,0x0(%rbp)
movupd (%rbx),%xmm0
movupd (%r9),%xmm1
movupd (%r11),%xmm2
movupd (%r15),%xmm3
movupd 0x0(%r13),%xmm4
movupd (%rdi),%xmm5
movupd (%rcx),%xmm6
movupd (%rax),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rbx)
movupd %xmm9,(%r9)
movupd %xmm10,(%r11)
movupd %xmm11,(%r15)
movupd %xmm12,0x0(%r13)
movupd %xmm13,(%rdi)
movupd %xmm14,(%rcx)
movupd %xmm15,(%rax)
mov    (%rsp),%rax
movupd (%rax),%xmm0
movupd (%r10),%xmm1
movupd (%r14),%xmm2
movupd (%r12),%xmm3
movupd (%r8),%xmm4
movupd (%rsi),%xmm5
movupd (%rdx),%xmm6
movupd 0x0(%rbp),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%rax)
movupd %xmm9,(%r10)
movupd %xmm10,(%r14)
movupd %xmm11,(%r12)
movupd %xmm12,(%r8)
movupd %xmm13,(%rsi)
movupd %xmm14,(%rdx)
movupd %xmm15,0x0(%rbp)
jmp    1f09 <helper_double_16_recursive+0xdf9>
mov    %rbx,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x100(%rbx),%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x200(%rbx),%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x300(%rbx),%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x400(%rbx),%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x500(%rbx),%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x600(%rbx),%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
add    $0x700,%rbx
mov    %rbx,%rdi
mov    $0x5,%esi
call   1030 <helper_double_16_recursive@plt>
mov    $0xfffffffffffffffe,%rax
nopw   0x0(%rax,%rax,1)
lea    -0x700(%rbx),%r8
lea    -0x600(%rbx),%r9
lea    -0x500(%rbx),%rsi
lea    -0x400(%rbx),%rdi
lea    -0x300(%rbx),%rbp
lea    -0x200(%rbx),%rcx
lea    -0x100(%rbx),%rdx
movupd (%r8),%xmm0
movupd (%r9),%xmm1
movupd (%rsi),%xmm2
movupd (%rdi),%xmm3
movupd 0x0(%rbp),%xmm4
movupd (%rcx),%xmm5
movupd (%rdx),%xmm6
movupd (%rbx),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%r8)
movupd %xmm9,(%r9)
movupd %xmm10,(%rsi)
movupd %xmm11,(%rdi)
movupd %xmm12,0x0(%rbp)
movupd %xmm13,(%rcx)
movupd %xmm14,(%rdx)
movupd %xmm15,(%rbx)
add    $0x2,%rax
add    $0x10,%rbx
cmp    $0x1e,%rax
jb     1860 <helper_double_16_recursive+0x750>
jmp    1f09 <helper_double_16_recursive+0xdf9>
mov    %rbx,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x800(%rbx),%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x1000(%rbx),%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x1800(%rbx),%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x2000(%rbx),%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x2800(%rbx),%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x3000(%rbx),%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
add    $0x3800,%rbx
mov    %rbx,%rdi
mov    $0x8,%esi
call   1030 <helper_double_16_recursive@plt>
mov    $0xfffffffffffffffe,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x3800(%rbx),%r8
lea    -0x3000(%rbx),%r9
lea    -0x2800(%rbx),%rsi
lea    -0x2000(%rbx),%rdi
lea    -0x1800(%rbx),%rbp
lea    -0x1000(%rbx),%rcx
lea    -0x800(%rbx),%rdx
movupd (%r8),%xmm0
movupd (%r9),%xmm1
movupd (%rsi),%xmm2
movupd (%rdi),%xmm3
movupd 0x0(%rbp),%xmm4
movupd (%rcx),%xmm5
movupd (%rdx),%xmm6
movupd (%rbx),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%r8)
movupd %xmm9,(%r9)
movupd %xmm10,(%rsi)
movupd %xmm11,(%rdi)
movupd %xmm12,0x0(%rbp)
movupd %xmm13,(%rcx)
movupd %xmm14,(%rdx)
movupd %xmm15,(%rbx)
add    $0x2,%rax
add    $0x10,%rbx
cmp    $0xfe,%rax
jb     1a80 <helper_double_16_recursive+0x970>
jmp    1f09 <helper_double_16_recursive+0xdf9>
mov    %rbx,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x4000(%rbx),%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x8000(%rbx),%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0xc000(%rbx),%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x10000(%rbx),%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x14000(%rbx),%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x18000(%rbx),%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
add    $0x1c000,%rbx
mov    %rbx,%rdi
mov    $0xb,%esi
call   1030 <helper_double_16_recursive@plt>
mov    $0xfffffffffffffffe,%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    -0x1c000(%rbx),%r8
lea    -0x18000(%rbx),%r9
lea    -0x14000(%rbx),%rsi
lea    -0x10000(%rbx),%rdi
lea    -0xc000(%rbx),%rbp
lea    -0x8000(%rbx),%rcx
lea    -0x4000(%rbx),%rdx
movupd (%r8),%xmm0
movupd (%r9),%xmm1
movupd (%rsi),%xmm2
movupd (%rdi),%xmm3
movupd 0x0(%rbp),%xmm4
movupd (%rcx),%xmm5
movupd (%rdx),%xmm6
movupd (%rbx),%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm4,%xmm12
movapd %xmm4,%xmm13
addpd  %xmm5,%xmm12
subpd  %xmm5,%xmm13
movapd %xmm6,%xmm14
movapd %xmm6,%xmm15
addpd  %xmm7,%xmm14
subpd  %xmm7,%xmm15
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movapd %xmm12,%xmm4
movapd %xmm12,%xmm6
addpd  %xmm14,%xmm4
subpd  %xmm14,%xmm6
movapd %xmm13,%xmm5
movapd %xmm13,%xmm7
addpd  %xmm15,%xmm5
subpd  %xmm15,%xmm7
movapd %xmm0,%xmm8
movapd %xmm0,%xmm12
addpd  %xmm4,%xmm8
subpd  %xmm4,%xmm12
movapd %xmm1,%xmm9
movapd %xmm1,%xmm13
addpd  %xmm5,%xmm9
subpd  %xmm5,%xmm13
movapd %xmm2,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm6,%xmm10
subpd  %xmm6,%xmm14
movapd %xmm3,%xmm11
movapd %xmm3,%xmm15
addpd  %xmm7,%xmm11
subpd  %xmm7,%xmm15
movupd %xmm8,(%r8)
movupd %xmm9,(%r9)
movupd %xmm10,(%rsi)
movupd %xmm11,(%rdi)
movupd %xmm12,0x0(%rbp)
movupd %xmm13,(%rcx)
movupd %xmm14,(%rdx)
movupd %xmm15,(%rbx)
add    $0x2,%rax
add    $0x10,%rbx
cmp    $0x7fe,%rax
jb     1ca0 <helper_double_16_recursive+0xb90>
jmp    1f09 <helper_double_16_recursive+0xdf9>
mov    %rbx,%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x20000(%rbx),%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x40000(%rbx),%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
lea    0x60000(%rbx),%rdi
mov    $0xe,%esi
call   1030 <helper_double_16_recursive@plt>
mov    $0xfffffffffffffffe,%rax
nopl   (%rax)
lea    0x20000(%rbx),%rcx
lea    0x40000(%rbx),%rdx
lea    0x60000(%rbx),%rsi
movupd (%rbx),%xmm0
movupd (%rcx),%xmm1
movupd (%rdx),%xmm2
movupd (%rsi),%xmm3
movapd %xmm0,%xmm8
movapd %xmm0,%xmm9
addpd  %xmm1,%xmm8
subpd  %xmm1,%xmm9
movapd %xmm2,%xmm10
movapd %xmm2,%xmm11
addpd  %xmm3,%xmm10
subpd  %xmm3,%xmm11
movapd %xmm8,%xmm0
movapd %xmm8,%xmm2
addpd  %xmm10,%xmm0
subpd  %xmm10,%xmm2
movapd %xmm9,%xmm1
movapd %xmm9,%xmm3
addpd  %xmm11,%xmm1
subpd  %xmm11,%xmm3
movupd %xmm0,(%rbx)
movupd %xmm1,(%rcx)
movupd %xmm2,(%rdx)
movupd %xmm3,(%rsi)
add    $0x2,%rax
add    $0x10,%rbx
cmp    $0x3ffe,%rax
jb     1e70 <helper_double_16_recursive+0xd60>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @helper_double_16_recursive(double* %0, i32 %1) {
%3 = alloca double*
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
store double* %0, double** %3
store i32 %1, i32* %4
%17 = load i32, i32* %4
%18 = icmp eq i32 %17, 2
br i1 %18, label %19, label %52
19: ; preds = %2
store i32 0, i32* %5
br label %20
20: ; preds = %48, %19
%21 = load i32, i32* %5
%22 = icmp slt i32 %21, 4
br i1 %22, label %23, label %51
23: ; preds = %20
store i32 0, i32* %6
br label %24
24: ; preds = %44, %23
%25 = load i32, i32* %6
%26 = icmp slt i32 %25, 2
br i1 %26, label %27, label %47
27: ; preds = %24
%28 = load double*, double** %3
%29 = load i32, i32* %5
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds double, double* %28, i64 %30
%32 = load i32, i32* %6
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds double, double* %31, i64 %33
%35 = getelementptr inbounds double, double* %34, i64 0
%36 = load double*, double** %3
%37 = load i32, i32* %5
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double, double* %36, i64 %38
%40 = load i32, i32* %6
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds double, double* %39, i64 %41
%43 = getelementptr inbounds double, double* %42, i64 2
br label %44
44: ; preds = %27
%45 = load i32, i32* %6
%46 = add nsw i32 %45, 2
store i32 %46, i32* %6
br label %24
47: ; preds = %24
br label %48
48: ; preds = %47
%49 = load i32, i32* %5
%50 = add nsw i32 %49, 4
store i32 %50, i32* %5
br label %20
51: ; preds = %20
br label %512
52: ; preds = %2
%53 = load i32, i32* %4
%54 = icmp eq i32 %53, 5
br i1 %54, label %55, label %152
55: ; preds = %52
%56 = load double*, double** %3
%57 = getelementptr inbounds double, double* %56, i64 0
%58 = load double*, double** %3
%59 = getelementptr inbounds double, double* %58, i64 4
%60 = load double*, double** %3
%61 = getelementptr inbounds double, double* %60, i64 8
%62 = load double*, double** %3
%63 = getelementptr inbounds double, double* %62, i64 12
%64 = load double*, double** %3
%65 = getelementptr inbounds double, double* %64, i64 16
%66 = load double*, double** %3
%67 = getelementptr inbounds double, double* %66, i64 20
%68 = load double*, double** %3
%69 = getelementptr inbounds double, double* %68, i64 24
%70 = load double*, double** %3
%71 = getelementptr inbounds double, double* %70, i64 28
store i32 0, i32* %7
br label %72
72: ; preds = %148, %55
%73 = load i32, i32* %7
%74 = icmp slt i32 %73, 32
br i1 %74, label %75, label %151
75: ; preds = %72
store i32 0, i32* %8
br label %76
76: ; preds = %144, %75
%77 = load i32, i32* %8
%78 = icmp slt i32 %77, 4
br i1 %78, label %79, label %147
79: ; preds = %76
%80 = load double*, double** %3
%81 = load i32, i32* %7
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double, double* %80, i64 %82
%84 = load i32, i32* %8
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds double, double* %83, i64 %85
%87 = getelementptr inbounds double, double* %86, i64 0
%88 = load double*, double** %3
%89 = load i32, i32* %7
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds double, double* %88, i64 %90
%92 = load i32, i32* %8
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds double, double* %91, i64 %93
%95 = getelementptr inbounds double, double* %94, i64 4
%96 = load double*, double** %3
%97 = load i32, i32* %7
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds double, double* %96, i64 %98
%100 = load i32, i32* %8
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds double, double* %99, i64 %101
%103 = getelementptr inbounds double, double* %102, i64 8
%104 = load double*, double** %3
%105 = load i32, i32* %7
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds double, double* %104, i64 %106
%108 = load i32, i32* %8
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds double, double* %107, i64 %109
%111 = getelementptr inbounds double, double* %110, i64 12
%112 = load double*, double** %3
%113 = load i32, i32* %7
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double, double* %112, i64 %114
%116 = load i32, i32* %8
%117 = sext i32 %116 to i64
%118 = getelementptr inbounds double, double* %115, i64 %117
%119 = getelementptr inbounds double, double* %118, i64 16
%120 = load double*, double** %3
%121 = load i32, i32* %7
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds double, double* %120, i64 %122
%124 = load i32, i32* %8
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds double, double* %123, i64 %125
%127 = getelementptr inbounds double, double* %126, i64 20
%128 = load double*, double** %3
%129 = load i32, i32* %7
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %128, i64 %130
%132 = load i32, i32* %8
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds double, double* %131, i64 %133
%135 = getelementptr inbounds double, double* %134, i64 24
%136 = load double*, double** %3
%137 = load i32, i32* %7
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds double, double* %136, i64 %138
%140 = load i32, i32* %8
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds double, double* %139, i64 %141
%143 = getelementptr inbounds double, double* %142, i64 28
br label %144
144: ; preds = %79
%145 = load i32, i32* %8
%146 = add nsw i32 %145, 2
store i32 %146, i32* %8
br label %76
147: ; preds = %76
br label %148
148: ; preds = %147
%149 = load i32, i32* %7
%150 = add nsw i32 %149, 32
store i32 %150, i32* %7
br label %72
151: ; preds = %72
br label %512
152: ; preds = %52
%153 = load i32, i32* %4
%154 = icmp eq i32 %153, 8
br i1 %154, label %155, label %252
155: ; preds = %152
%156 = load double*, double** %3
%157 = getelementptr inbounds double, double* %156, i64 0
%158 = load double*, double** %3
%159 = getelementptr inbounds double, double* %158, i64 32
%160 = load double*, double** %3
%161 = getelementptr inbounds double, double* %160, i64 64
%162 = load double*, double** %3
%163 = getelementptr inbounds double, double* %162, i64 96
%164 = load double*, double** %3
%165 = getelementptr inbounds double, double* %164, i64 128
%166 = load double*, double** %3
%167 = getelementptr inbounds double, double* %166, i64 160
%168 = load double*, double** %3
%169 = getelementptr inbounds double, double* %168, i64 192
%170 = load double*, double** %3
%171 = getelementptr inbounds double, double* %170, i64 224
store i32 0, i32* %9
br label %172
172: ; preds = %248, %155
%173 = load i32, i32* %9
%174 = icmp slt i32 %173, 256
br i1 %174, label %175, label %251
175: ; preds = %172
store i32 0, i32* %10
br label %176
176: ; preds = %244, %175
%177 = load i32, i32* %10
%178 = icmp slt i32 %177, 32
br i1 %178, label %179, label %247
179: ; preds = %176
%180 = load double*, double** %3
%181 = load i32, i32* %9
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds double, double* %180, i64 %182
%184 = load i32, i32* %10
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds double, double* %183, i64 %185
%187 = getelementptr inbounds double, double* %186, i64 0
%188 = load double*, double** %3
%189 = load i32, i32* %9
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds double, double* %188, i64 %190
%192 = load i32, i32* %10
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds double, double* %191, i64 %193
%195 = getelementptr inbounds double, double* %194, i64 32
%196 = load double*, double** %3
%197 = load i32, i32* %9
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds double, double* %196, i64 %198
%200 = load i32, i32* %10
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds double, double* %199, i64 %201
%203 = getelementptr inbounds double, double* %202, i64 64
%204 = load double*, double** %3
%205 = load i32, i32* %9
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds double, double* %204, i64 %206
%208 = load i32, i32* %10
%209 = sext i32 %208 to i64
%210 = getelementptr inbounds double, double* %207, i64 %209
%211 = getelementptr inbounds double, double* %210, i64 96
%212 = load double*, double** %3
%213 = load i32, i32* %9
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds double, double* %212, i64 %214
%216 = load i32, i32* %10
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds double, double* %215, i64 %217
%219 = getelementptr inbounds double, double* %218, i64 128
%220 = load double*, double** %3
%221 = load i32, i32* %9
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds double, double* %220, i64 %222
%224 = load i32, i32* %10
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds double, double* %223, i64 %225
%227 = getelementptr inbounds double, double* %226, i64 160
%228 = load double*, double** %3
%229 = load i32, i32* %9
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds double, double* %228, i64 %230
%232 = load i32, i32* %10
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds double, double* %231, i64 %233
%235 = getelementptr inbounds double, double* %234, i64 192
%236 = load double*, double** %3
%237 = load i32, i32* %9
%238 = sext i32 %237 to i64
%239 = getelementptr inbounds double, double* %236, i64 %238
%240 = load i32, i32* %10
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds double, double* %239, i64 %241
%243 = getelementptr inbounds double, double* %242, i64 224
br label %244
244: ; preds = %179
%245 = load i32, i32* %10
%246 = add nsw i32 %245, 2
store i32 %246, i32* %10
br label %176
247: ; preds = %176
br label %248
248: ; preds = %247
%249 = load i32, i32* %9
%250 = add nsw i32 %249, 256
store i32 %250, i32* %9
br label %172
251: ; preds = %172
br label %512
252: ; preds = %152
%253 = load i32, i32* %4
%254 = icmp eq i32 %253, 11
br i1 %254, label %255, label %352
255: ; preds = %252
%256 = load double*, double** %3
%257 = getelementptr inbounds double, double* %256, i64 0
%258 = load double*, double** %3
%259 = getelementptr inbounds double, double* %258, i64 256
%260 = load double*, double** %3
%261 = getelementptr inbounds double, double* %260, i64 512
%262 = load double*, double** %3
%263 = getelementptr inbounds double, double* %262, i64 768
%264 = load double*, double** %3
%265 = getelementptr inbounds double, double* %264, i64 1024
%266 = load double*, double** %3
%267 = getelementptr inbounds double, double* %266, i64 1280
%268 = load double*, double** %3
%269 = getelementptr inbounds double, double* %268, i64 1536
%270 = load double*, double** %3
%271 = getelementptr inbounds double, double* %270, i64 1792
store i32 0, i32* %11
br label %272
272: ; preds = %348, %255
%273 = load i32, i32* %11
%274 = icmp slt i32 %273, 2048
br i1 %274, label %275, label %351
275: ; preds = %272
store i32 0, i32* %12
br label %276
276: ; preds = %344, %275
%277 = load i32, i32* %12
%278 = icmp slt i32 %277, 256
br i1 %278, label %279, label %347
279: ; preds = %276
%280 = load double*, double** %3
%281 = load i32, i32* %11
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds double, double* %280, i64 %282
%284 = load i32, i32* %12
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds double, double* %283, i64 %285
%287 = getelementptr inbounds double, double* %286, i64 0
%288 = load double*, double** %3
%289 = load i32, i32* %11
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds double, double* %288, i64 %290
%292 = load i32, i32* %12
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds double, double* %291, i64 %293
%295 = getelementptr inbounds double, double* %294, i64 256
%296 = load double*, double** %3
%297 = load i32, i32* %11
%298 = sext i32 %297 to i64
%299 = getelementptr inbounds double, double* %296, i64 %298
%300 = load i32, i32* %12
%301 = sext i32 %300 to i64
%302 = getelementptr inbounds double, double* %299, i64 %301
%303 = getelementptr inbounds double, double* %302, i64 512
%304 = load double*, double** %3
%305 = load i32, i32* %11
%306 = sext i32 %305 to i64
%307 = getelementptr inbounds double, double* %304, i64 %306
%308 = load i32, i32* %12
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds double, double* %307, i64 %309
%311 = getelementptr inbounds double, double* %310, i64 768
%312 = load double*, double** %3
%313 = load i32, i32* %11
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds double, double* %312, i64 %314
%316 = load i32, i32* %12
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds double, double* %315, i64 %317
%319 = getelementptr inbounds double, double* %318, i64 1024
%320 = load double*, double** %3
%321 = load i32, i32* %11
%322 = sext i32 %321 to i64
%323 = getelementptr inbounds double, double* %320, i64 %322
%324 = load i32, i32* %12
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds double, double* %323, i64 %325
%327 = getelementptr inbounds double, double* %326, i64 1280
%328 = load double*, double** %3
%329 = load i32, i32* %11
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds double, double* %328, i64 %330
%332 = load i32, i32* %12
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds double, double* %331, i64 %333
%335 = getelementptr inbounds double, double* %334, i64 1536
%336 = load double*, double** %3
%337 = load i32, i32* %11
%338 = sext i32 %337 to i64
%339 = getelementptr inbounds double, double* %336, i64 %338
%340 = load i32, i32* %12
%341 = sext i32 %340 to i64
%342 = getelementptr inbounds double, double* %339, i64 %341
%343 = getelementptr inbounds double, double* %342, i64 1792
br label %344
344: ; preds = %279
%345 = load i32, i32* %12
%346 = add nsw i32 %345, 2
store i32 %346, i32* %12
br label %276
347: ; preds = %276
br label %348
348: ; preds = %347
%349 = load i32, i32* %11
%350 = add nsw i32 %349, 2048
store i32 %350, i32* %11
br label %272
351: ; preds = %272
br label %512
352: ; preds = %252
%353 = load i32, i32* %4
%354 = icmp eq i32 %353, 14
br i1 %354, label %355, label %452
355: ; preds = %352
%356 = load double*, double** %3
%357 = getelementptr inbounds double, double* %356, i64 0
%358 = load double*, double** %3
%359 = getelementptr inbounds double, double* %358, i64 2048
%360 = load double*, double** %3
%361 = getelementptr inbounds double, double* %360, i64 4096
%362 = load double*, double** %3
%363 = getelementptr inbounds double, double* %362, i64 6144
%364 = load double*, double** %3
%365 = getelementptr inbounds double, double* %364, i64 8192
%366 = load double*, double** %3
%367 = getelementptr inbounds double, double* %366, i64 10240
%368 = load double*, double** %3
%369 = getelementptr inbounds double, double* %368, i64 12288
%370 = load double*, double** %3
%371 = getelementptr inbounds double, double* %370, i64 14336
store i32 0, i32* %13
br label %372
372: ; preds = %448, %355
%373 = load i32, i32* %13
%374 = icmp slt i32 %373, 16384
br i1 %374, label %375, label %451
375: ; preds = %372
store i32 0, i32* %14
br label %376
376: ; preds = %444, %375
%377 = load i32, i32* %14
%378 = icmp slt i32 %377, 2048
br i1 %378, label %379, label %447
379: ; preds = %376
%380 = load double*, double** %3
%381 = load i32, i32* %13
%382 = sext i32 %381 to i64
%383 = getelementptr inbounds double, double* %380, i64 %382
%384 = load i32, i32* %14
%385 = sext i32 %384 to i64
%386 = getelementptr inbounds double, double* %383, i64 %385
%387 = getelementptr inbounds double, double* %386, i64 0
%388 = load double*, double** %3
%389 = load i32, i32* %13
%390 = sext i32 %389 to i64
%391 = getelementptr inbounds double, double* %388, i64 %390
%392 = load i32, i32* %14
%393 = sext i32 %392 to i64
%394 = getelementptr inbounds double, double* %391, i64 %393
%395 = getelementptr inbounds double, double* %394, i64 2048
%396 = load double*, double** %3
%397 = load i32, i32* %13
%398 = sext i32 %397 to i64
%399 = getelementptr inbounds double, double* %396, i64 %398
%400 = load i32, i32* %14
%401 = sext i32 %400 to i64
%402 = getelementptr inbounds double, double* %399, i64 %401
%403 = getelementptr inbounds double, double* %402, i64 4096
%404 = load double*, double** %3
%405 = load i32, i32* %13
%406 = sext i32 %405 to i64
%407 = getelementptr inbounds double, double* %404, i64 %406
%408 = load i32, i32* %14
%409 = sext i32 %408 to i64
%410 = getelementptr inbounds double, double* %407, i64 %409
%411 = getelementptr inbounds double, double* %410, i64 6144
%412 = load double*, double** %3
%413 = load i32, i32* %13
%414 = sext i32 %413 to i64
%415 = getelementptr inbounds double, double* %412, i64 %414
%416 = load i32, i32* %14
%417 = sext i32 %416 to i64
%418 = getelementptr inbounds double, double* %415, i64 %417
%419 = getelementptr inbounds double, double* %418, i64 8192
%420 = load double*, double** %3
%421 = load i32, i32* %13
%422 = sext i32 %421 to i64
%423 = getelementptr inbounds double, double* %420, i64 %422
%424 = load i32, i32* %14
%425 = sext i32 %424 to i64
%426 = getelementptr inbounds double, double* %423, i64 %425
%427 = getelementptr inbounds double, double* %426, i64 10240
%428 = load double*, double** %3
%429 = load i32, i32* %13
%430 = sext i32 %429 to i64
%431 = getelementptr inbounds double, double* %428, i64 %430
%432 = load i32, i32* %14
%433 = sext i32 %432 to i64
%434 = getelementptr inbounds double, double* %431, i64 %433
%435 = getelementptr inbounds double, double* %434, i64 12288
%436 = load double*, double** %3
%437 = load i32, i32* %13
%438 = sext i32 %437 to i64
%439 = getelementptr inbounds double, double* %436, i64 %438
%440 = load i32, i32* %14
%441 = sext i32 %440 to i64
%442 = getelementptr inbounds double, double* %439, i64 %441
%443 = getelementptr inbounds double, double* %442, i64 14336
br label %444
444: ; preds = %379
%445 = load i32, i32* %14
%446 = add nsw i32 %445, 2
store i32 %446, i32* %14
br label %376
447: ; preds = %376
br label %448
448: ; preds = %447
%449 = load i32, i32* %13
%450 = add nsw i32 %449, 16384
store i32 %450, i32* %13
br label %372
451: ; preds = %372
br label %512
452: ; preds = %352
%453 = load i32, i32* %4
%454 = icmp eq i32 %453, 16
br i1 %454, label %455, label %512
455: ; preds = %452
%456 = load double*, double** %3
%457 = getelementptr inbounds double, double* %456, i64 0
%458 = load double*, double** %3
%459 = getelementptr inbounds double, double* %458, i64 16384
%460 = load double*, double** %3
%461 = getelementptr inbounds double, double* %460, i64 32768
%462 = load double*, double** %3
%463 = getelementptr inbounds double, double* %462, i64 49152
store i32 0, i32* %15
br label %464
464: ; preds = %508, %455
%465 = load i32, i32* %15
%466 = icmp slt i32 %465, 65536
br i1 %466, label %467, label %511
467: ; preds = %464
store i32 0, i32* %16
br label %468
468: ; preds = %504, %467
%469 = load i32, i32* %16
%470 = icmp slt i32 %469, 16384
br i1 %470, label %471, label %507
471: ; preds = %468
%472 = load double*, double** %3
%473 = load i32, i32* %15
%474 = sext i32 %473 to i64
%475 = getelementptr inbounds double, double* %472, i64 %474
%476 = load i32, i32* %16
%477 = sext i32 %476 to i64
%478 = getelementptr inbounds double, double* %475, i64 %477
%479 = getelementptr inbounds double, double* %478, i64 0
%480 = load double*, double** %3
%481 = load i32, i32* %15
%482 = sext i32 %481 to i64
%483 = getelementptr inbounds double, double* %480, i64 %482
%484 = load i32, i32* %16
%485 = sext i32 %484 to i64
%486 = getelementptr inbounds double, double* %483, i64 %485
%487 = getelementptr inbounds double, double* %486, i64 16384
%488 = load double*, double** %3
%489 = load i32, i32* %15
%490 = sext i32 %489 to i64
%491 = getelementptr inbounds double, double* %488, i64 %490
%492 = load i32, i32* %16
%493 = sext i32 %492 to i64
%494 = getelementptr inbounds double, double* %491, i64 %493
%495 = getelementptr inbounds double, double* %494, i64 32768
%496 = load double*, double** %3
%497 = load i32, i32* %15
%498 = sext i32 %497 to i64
%499 = getelementptr inbounds double, double* %496, i64 %498
%500 = load i32, i32* %16
%501 = sext i32 %500 to i64
%502 = getelementptr inbounds double, double* %499, i64 %501
%503 = getelementptr inbounds double, double* %502, i64 49152
br label %504
504: ; preds = %471
%505 = load i32, i32* %16
%506 = add nsw i32 %505, 2
store i32 %506, i32* %16
br label %468
507: ; preds = %468
br label %508
508: ; preds = %507
%509 = load i32, i32* %15
%510 = add nsw i32 %509, 65536
store i32 %510, i32* %15
br label %464
511: ; preds = %464
br label %512
512: ; preds = %51, %151, %251, %351, %451, %511, %452
ret void
}

LLVM IR (-O2):
define void @helper_double_16_recursive(double* %0, i32 %1) {
switch i32 %1, label %100 [
i32 2, label %26
i32 5, label %3
i32 8, label %28
i32 11, label %48
i32 14, label %68
i32 16, label %88
]
3: ; preds = %2
%4 = getelementptr inbounds double, double* %0, i64 2
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %0, double* %4)
%5 = getelementptr inbounds double, double* %0, i64 4
%6 = getelementptr inbounds double, double* %0, i64 6
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %5, double* %6)
%7 = getelementptr inbounds double, double* %0, i64 8
%8 = getelementptr inbounds double, double* %0, i64 10
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %7, double* %8)
%9 = getelementptr inbounds double, double* %0, i64 12
%10 = getelementptr inbounds double, double* %0, i64 14
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %9, double* %10)
%11 = getelementptr inbounds double, double* %0, i64 16
%12 = getelementptr inbounds double, double* %0, i64 18
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %11, double* %12)
%13 = getelementptr inbounds double, double* %0, i64 20
%14 = getelementptr inbounds double, double* %0, i64 22
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %13, double* %14)
%15 = getelementptr inbounds double, double* %0, i64 24
%16 = getelementptr inbounds double, double* %0, i64 26
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %15, double* %16)
%17 = getelementptr inbounds double, double* %0, i64 28
%18 = getelementptr inbounds double, double* %0, i64 30
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %17, double* %18)
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovupd ($4), %xmm4\0Amovupd ($5), %xmm5\0Amovupd ($6), %xmm6\0Amovupd ($7), %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm4, %xmm12\0Amovapd %xmm4, %xmm13\0Aaddpd %xmm5, %xmm12\0Asubpd %xmm5, %xmm13\0Amovapd %xmm6, %xmm14\0Amovapd %xmm6, %xmm15\0Aaddpd %xmm7, %xmm14\0Asubpd %xmm7, %xmm15\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovapd %xmm12, %xmm4\0Amovapd %xmm12, %xmm6\0Aaddpd %xmm14, %xmm4\0Asubpd %xmm14, %xmm6\0Amovapd %xmm13, %xmm5\0Amovapd %xmm13, %xmm7\0Aaddpd %xmm15, %xmm5\0Asubpd %xmm15, %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm12\0Aaddpd %xmm4, %xmm8\0Asubpd %xmm4, %xmm12\0Amovapd %xmm1, %xmm9\0Amovapd %xmm1, %xmm13\0Aaddpd %xmm5, %xmm9\0Asubpd %xmm5, %xmm13\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm14\0Aaddpd %xmm6, %xmm10\0Asubpd %xmm6, %xmm14\0Amovapd %xmm3, %xmm11\0Amovapd %xmm3, %xmm15\0Aaddpd %xmm7, %xmm11\0Asubpd %xmm7, %xmm15\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0Amovupd %xmm10, ($2)\0Amovupd %xmm11, ($3)\0Amovupd %xmm12, ($4)\0Amovupd %xmm13, ($5)\0Amovupd %xmm14, ($6)\0Amovupd %xmm15, ($7)\0A", "r,r,r,r,r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %0, double* %5, double* %7, double* %9, double* %11, double* %13, double* %15, double* %17)
%19 = getelementptr inbounds double, double* %0, i64 6
%20 = getelementptr inbounds double, double* %0, i64 10
%21 = getelementptr inbounds double, double* %0, i64 14
%22 = getelementptr inbounds double, double* %0, i64 18
%23 = getelementptr inbounds double, double* %0, i64 22
%24 = getelementptr inbounds double, double* %0, i64 26
%25 = getelementptr inbounds double, double* %0, i64 30
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovupd ($4), %xmm4\0Amovupd ($5), %xmm5\0Amovupd ($6), %xmm6\0Amovupd ($7), %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm4, %xmm12\0Amovapd %xmm4, %xmm13\0Aaddpd %xmm5, %xmm12\0Asubpd %xmm5, %xmm13\0Amovapd %xmm6, %xmm14\0Amovapd %xmm6, %xmm15\0Aaddpd %xmm7, %xmm14\0Asubpd %xmm7, %xmm15\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovapd %xmm12, %xmm4\0Amovapd %xmm12, %xmm6\0Aaddpd %xmm14, %xmm4\0Asubpd %xmm14, %xmm6\0Amovapd %xmm13, %xmm5\0Amovapd %xmm13, %xmm7\0Aaddpd %xmm15, %xmm5\0Asubpd %xmm15, %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm12\0Aaddpd %xmm4, %xmm8\0Asubpd %xmm4, %xmm12\0Amovapd %xmm1, %xmm9\0Amovapd %xmm1, %xmm13\0Aaddpd %xmm5, %xmm9\0Asubpd %xmm5, %xmm13\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm14\0Aaddpd %xmm6, %xmm10\0Asubpd %xmm6, %xmm14\0Amovapd %xmm3, %xmm11\0Amovapd %xmm3, %xmm15\0Aaddpd %xmm7, %xmm11\0Asubpd %xmm7, %xmm15\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0Amovupd %xmm10, ($2)\0Amovupd %xmm11, ($3)\0Amovupd %xmm12, ($4)\0Amovupd %xmm13, ($5)\0Amovupd %xmm14, ($6)\0Amovupd %xmm15, ($7)\0A", "r,r,r,r,r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %4, double* %19, double* %20, double* %21, double* %22, double* %23, double* %24, double* %25)
br label %100
26: ; preds = %2
%27 = getelementptr inbounds double, double* %0, i64 2
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovapd %xmm0, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm0, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm0\0Amovapd %xmm1, %xmm8\0Ahaddpd %xmm8, %xmm8\0Amovapd %xmm1, %xmm9\0Ahsubpd %xmm9, %xmm9\0Ablendpd $$1, %xmm8, %xmm9\0Amovapd %xmm9, %xmm1\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0A", "r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %0, double* %27)
br label %100
28: ; preds = %2
tail call void @helper_double_16_recursive(double* %0, i32 5)
%29 = getelementptr inbounds double, double* %0, i64 32
tail call void @helper_double_16_recursive(double* %29, i32 5)
%30 = getelementptr inbounds double, double* %0, i64 64
tail call void @helper_double_16_recursive(double* %30, i32 5)
%31 = getelementptr inbounds double, double* %0, i64 96
tail call void @helper_double_16_recursive(double* %31, i32 5)
%32 = getelementptr inbounds double, double* %0, i64 128
tail call void @helper_double_16_recursive(double* %32, i32 5)
%33 = getelementptr inbounds double, double* %0, i64 160
tail call void @helper_double_16_recursive(double* %33, i32 5)
%34 = getelementptr inbounds double, double* %0, i64 192
tail call void @helper_double_16_recursive(double* %34, i32 5)
%35 = getelementptr inbounds double, double* %0, i64 224
tail call void @helper_double_16_recursive(double* %35, i32 5)
br label %36
36: ; preds = %28, %36
%37 = phi i64 [ 0, %28 ], [ %46, %36 ]
%38 = getelementptr inbounds double, double* %0, i64 %37
%39 = getelementptr inbounds double, double* %38, i64 32
%40 = getelementptr inbounds double, double* %38, i64 64
%41 = getelementptr inbounds double, double* %38, i64 96
%42 = getelementptr inbounds double, double* %38, i64 128
%43 = getelementptr inbounds double, double* %38, i64 160
%44 = getelementptr inbounds double, double* %38, i64 192
%45 = getelementptr inbounds double, double* %38, i64 224
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovupd ($4), %xmm4\0Amovupd ($5), %xmm5\0Amovupd ($6), %xmm6\0Amovupd ($7), %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm4, %xmm12\0Amovapd %xmm4, %xmm13\0Aaddpd %xmm5, %xmm12\0Asubpd %xmm5, %xmm13\0Amovapd %xmm6, %xmm14\0Amovapd %xmm6, %xmm15\0Aaddpd %xmm7, %xmm14\0Asubpd %xmm7, %xmm15\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovapd %xmm12, %xmm4\0Amovapd %xmm12, %xmm6\0Aaddpd %xmm14, %xmm4\0Asubpd %xmm14, %xmm6\0Amovapd %xmm13, %xmm5\0Amovapd %xmm13, %xmm7\0Aaddpd %xmm15, %xmm5\0Asubpd %xmm15, %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm12\0Aaddpd %xmm4, %xmm8\0Asubpd %xmm4, %xmm12\0Amovapd %xmm1, %xmm9\0Amovapd %xmm1, %xmm13\0Aaddpd %xmm5, %xmm9\0Asubpd %xmm5, %xmm13\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm14\0Aaddpd %xmm6, %xmm10\0Asubpd %xmm6, %xmm14\0Amovapd %xmm3, %xmm11\0Amovapd %xmm3, %xmm15\0Aaddpd %xmm7, %xmm11\0Asubpd %xmm7, %xmm15\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0Amovupd %xmm10, ($2)\0Amovupd %xmm11, ($3)\0Amovupd %xmm12, ($4)\0Amovupd %xmm13, ($5)\0Amovupd %xmm14, ($6)\0Amovupd %xmm15, ($7)\0A", "r,r,r,r,r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %38, double* %39, double* %40, double* %41, double* %42, double* %43, double* %44, double* %45)
%46 = add nuw nsw i64 %37, 2
%47 = icmp ult i64 %37, 30
br i1 %47, label %36, label %100
48: ; preds = %2
tail call void @helper_double_16_recursive(double* %0, i32 8)
%49 = getelementptr inbounds double, double* %0, i64 256
tail call void @helper_double_16_recursive(double* %49, i32 8)
%50 = getelementptr inbounds double, double* %0, i64 512
tail call void @helper_double_16_recursive(double* %50, i32 8)
%51 = getelementptr inbounds double, double* %0, i64 768
tail call void @helper_double_16_recursive(double* %51, i32 8)
%52 = getelementptr inbounds double, double* %0, i64 1024
tail call void @helper_double_16_recursive(double* %52, i32 8)
%53 = getelementptr inbounds double, double* %0, i64 1280
tail call void @helper_double_16_recursive(double* %53, i32 8)
%54 = getelementptr inbounds double, double* %0, i64 1536
tail call void @helper_double_16_recursive(double* %54, i32 8)
%55 = getelementptr inbounds double, double* %0, i64 1792
tail call void @helper_double_16_recursive(double* %55, i32 8)
br label %56
56: ; preds = %48, %56
%57 = phi i64 [ 0, %48 ], [ %66, %56 ]
%58 = getelementptr inbounds double, double* %0, i64 %57
%59 = getelementptr inbounds double, double* %58, i64 256
%60 = getelementptr inbounds double, double* %58, i64 512
%61 = getelementptr inbounds double, double* %58, i64 768
%62 = getelementptr inbounds double, double* %58, i64 1024
%63 = getelementptr inbounds double, double* %58, i64 1280
%64 = getelementptr inbounds double, double* %58, i64 1536
%65 = getelementptr inbounds double, double* %58, i64 1792
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovupd ($4), %xmm4\0Amovupd ($5), %xmm5\0Amovupd ($6), %xmm6\0Amovupd ($7), %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm4, %xmm12\0Amovapd %xmm4, %xmm13\0Aaddpd %xmm5, %xmm12\0Asubpd %xmm5, %xmm13\0Amovapd %xmm6, %xmm14\0Amovapd %xmm6, %xmm15\0Aaddpd %xmm7, %xmm14\0Asubpd %xmm7, %xmm15\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovapd %xmm12, %xmm4\0Amovapd %xmm12, %xmm6\0Aaddpd %xmm14, %xmm4\0Asubpd %xmm14, %xmm6\0Amovapd %xmm13, %xmm5\0Amovapd %xmm13, %xmm7\0Aaddpd %xmm15, %xmm5\0Asubpd %xmm15, %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm12\0Aaddpd %xmm4, %xmm8\0Asubpd %xmm4, %xmm12\0Amovapd %xmm1, %xmm9\0Amovapd %xmm1, %xmm13\0Aaddpd %xmm5, %xmm9\0Asubpd %xmm5, %xmm13\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm14\0Aaddpd %xmm6, %xmm10\0Asubpd %xmm6, %xmm14\0Amovapd %xmm3, %xmm11\0Amovapd %xmm3, %xmm15\0Aaddpd %xmm7, %xmm11\0Asubpd %xmm7, %xmm15\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0Amovupd %xmm10, ($2)\0Amovupd %xmm11, ($3)\0Amovupd %xmm12, ($4)\0Amovupd %xmm13, ($5)\0Amovupd %xmm14, ($6)\0Amovupd %xmm15, ($7)\0A", "r,r,r,r,r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %58, double* %59, double* %60, double* %61, double* %62, double* %63, double* %64, double* %65)
%66 = add nuw nsw i64 %57, 2
%67 = icmp ult i64 %57, 254
br i1 %67, label %56, label %100
68: ; preds = %2
tail call void @helper_double_16_recursive(double* %0, i32 11)
%69 = getelementptr inbounds double, double* %0, i64 2048
tail call void @helper_double_16_recursive(double* %69, i32 11)
%70 = getelementptr inbounds double, double* %0, i64 4096
tail call void @helper_double_16_recursive(double* %70, i32 11)
%71 = getelementptr inbounds double, double* %0, i64 6144
tail call void @helper_double_16_recursive(double* %71, i32 11)
%72 = getelementptr inbounds double, double* %0, i64 8192
tail call void @helper_double_16_recursive(double* %72, i32 11)
%73 = getelementptr inbounds double, double* %0, i64 10240
tail call void @helper_double_16_recursive(double* %73, i32 11)
%74 = getelementptr inbounds double, double* %0, i64 12288
tail call void @helper_double_16_recursive(double* %74, i32 11)
%75 = getelementptr inbounds double, double* %0, i64 14336
tail call void @helper_double_16_recursive(double* %75, i32 11)
br label %76
76: ; preds = %68, %76
%77 = phi i64 [ 0, %68 ], [ %86, %76 ]
%78 = getelementptr inbounds double, double* %0, i64 %77
%79 = getelementptr inbounds double, double* %78, i64 2048
%80 = getelementptr inbounds double, double* %78, i64 4096
%81 = getelementptr inbounds double, double* %78, i64 6144
%82 = getelementptr inbounds double, double* %78, i64 8192
%83 = getelementptr inbounds double, double* %78, i64 10240
%84 = getelementptr inbounds double, double* %78, i64 12288
%85 = getelementptr inbounds double, double* %78, i64 14336
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovupd ($4), %xmm4\0Amovupd ($5), %xmm5\0Amovupd ($6), %xmm6\0Amovupd ($7), %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm4, %xmm12\0Amovapd %xmm4, %xmm13\0Aaddpd %xmm5, %xmm12\0Asubpd %xmm5, %xmm13\0Amovapd %xmm6, %xmm14\0Amovapd %xmm6, %xmm15\0Aaddpd %xmm7, %xmm14\0Asubpd %xmm7, %xmm15\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovapd %xmm12, %xmm4\0Amovapd %xmm12, %xmm6\0Aaddpd %xmm14, %xmm4\0Asubpd %xmm14, %xmm6\0Amovapd %xmm13, %xmm5\0Amovapd %xmm13, %xmm7\0Aaddpd %xmm15, %xmm5\0Asubpd %xmm15, %xmm7\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm12\0Aaddpd %xmm4, %xmm8\0Asubpd %xmm4, %xmm12\0Amovapd %xmm1, %xmm9\0Amovapd %xmm1, %xmm13\0Aaddpd %xmm5, %xmm9\0Asubpd %xmm5, %xmm13\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm14\0Aaddpd %xmm6, %xmm10\0Asubpd %xmm6, %xmm14\0Amovapd %xmm3, %xmm11\0Amovapd %xmm3, %xmm15\0Aaddpd %xmm7, %xmm11\0Asubpd %xmm7, %xmm15\0Amovupd %xmm8, ($0)\0Amovupd %xmm9, ($1)\0Amovupd %xmm10, ($2)\0Amovupd %xmm11, ($3)\0Amovupd %xmm12, ($4)\0Amovupd %xmm13, ($5)\0Amovupd %xmm14, ($6)\0Amovupd %xmm15, ($7)\0A", "r,r,r,r,r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %78, double* %79, double* %80, double* %81, double* %82, double* %83, double* %84, double* %85)
%86 = add nuw nsw i64 %77, 2
%87 = icmp ult i64 %77, 2046
br i1 %87, label %76, label %100
88: ; preds = %2
tail call void @helper_double_16_recursive(double* %0, i32 14)
%89 = getelementptr inbounds double, double* %0, i64 16384
tail call void @helper_double_16_recursive(double* %89, i32 14)
%90 = getelementptr inbounds double, double* %0, i64 32768
tail call void @helper_double_16_recursive(double* %90, i32 14)
%91 = getelementptr inbounds double, double* %0, i64 49152
tail call void @helper_double_16_recursive(double* %91, i32 14)
br label %92
92: ; preds = %88, %92
%93 = phi i64 [ 0, %88 ], [ %98, %92 ]
%94 = getelementptr inbounds double, double* %0, i64 %93
%95 = getelementptr inbounds double, double* %94, i64 16384
%96 = getelementptr inbounds double, double* %94, i64 32768
%97 = getelementptr inbounds double, double* %94, i64 49152
tail call void asm sideeffect "movupd ($0), %xmm0\0Amovupd ($1), %xmm1\0Amovupd ($2), %xmm2\0Amovupd ($3), %xmm3\0Amovapd %xmm0, %xmm8\0Amovapd %xmm0, %xmm9\0Aaddpd %xmm1, %xmm8\0Asubpd %xmm1, %xmm9\0Amovapd %xmm2, %xmm10\0Amovapd %xmm2, %xmm11\0Aaddpd %xmm3, %xmm10\0Asubpd %xmm3, %xmm11\0Amovapd %xmm8, %xmm0\0Amovapd %xmm8, %xmm2\0Aaddpd %xmm10, %xmm0\0Asubpd %xmm10, %xmm2\0Amovapd %xmm9, %xmm1\0Amovapd %xmm9, %xmm3\0Aaddpd %xmm11, %xmm1\0Asubpd %xmm11, %xmm3\0Amovupd %xmm0, ($0)\0Amovupd %xmm1, ($1)\0Amovupd %xmm2, ($2)\0Amovupd %xmm3, ($3)\0A", "r,r,r,r,~{xmm0},~{xmm1},~{xmm2},~{xmm3},~{xmm4},~{xmm5},~{xmm6},~{xmm7},~{xmm8},~{xmm9},~{xmm10},~{xmm11},~{xmm12},~{xmm13},~{xmm14},~{xmm15},~{memory},~{dirflag},~{fpsr},~{flags}"(double* %94, double* %95, double* %96, double* %97)
%98 = add nuw nsw i64 %93, 2
%99 = icmp ult i64 %93, 16382
br i1 %99, label %92, label %100
100: ; preds = %92, %76, %56, %36, %3, %26, %2
ret void
}