void kernel_dgemm_nt_4x4_vs_lib4(int km, int kn, int kmax, double *A, double *B,
                                 double *C, double *D, int alg, int tc,
                                 int td) {
  if (kmax <= 0) {
    const int bs = 4;
    double c_00 = 0, c_01 = 0, c_02 = 0, c_03 = 0, c_10 = 0, c_11 = 0, c_12 = 0,
           c_13 = 0, c_20 = 0, c_21 = 0, c_22 = 0, c_23 = 0, c_30 = 0, c_31 = 0,
           c_32 = 0, c_33 = 0;
    if (alg == 0) {
      if (td == 0) {
        goto store_n;
      } else {
        goto store_t;
      }
    } else {
      if (tc == 0) {
        c_00 = C[0 + bs * 0];
        c_10 = C[1 + bs * 0];
        c_20 = C[2 + bs * 0];
        c_30 = C[3 + bs * 0];
        c_01 = C[0 + bs * 1];
        c_11 = C[1 + bs * 1];
        c_21 = C[2 + bs * 1];
        c_31 = C[3 + bs * 1];
        c_02 = C[0 + bs * 2];
        c_12 = C[1 + bs * 2];
        c_22 = C[2 + bs * 2];
        c_32 = C[3 + bs * 2];
        c_03 = C[0 + bs * 3];
        c_13 = C[1 + bs * 3];
        c_23 = C[2 + bs * 3];
        c_33 = C[3 + bs * 3];
      } else {
        c_00 = C[0 + bs * 0];
        c_01 = C[1 + bs * 0];
        c_02 = C[2 + bs * 0];
        c_03 = C[3 + bs * 0];
        c_10 = C[0 + bs * 1];
        c_11 = C[1 + bs * 1];
        c_12 = C[2 + bs * 1];
        c_13 = C[3 + bs * 1];
        c_20 = C[0 + bs * 2];
        c_21 = C[1 + bs * 2];
        c_22 = C[2 + bs * 2];
        c_23 = C[3 + bs * 2];
        c_30 = C[0 + bs * 3];
        c_31 = C[1 + bs * 3];
        c_32 = C[2 + bs * 3];
        c_33 = C[3 + bs * 3];
      }
      if (td == 0) {
        goto store_n;
      } else {
        goto store_t;
      }
    }
  store_n:
    if (km >= 4) {
      D[0 + bs * 0] = c_00;
      D[1 + bs * 0] = c_10;
      D[2 + bs * 0] = c_20;
      D[3 + bs * 0] = c_30;
      D[0 + bs * 1] = c_01;
      D[1 + bs * 1] = c_11;
      D[2 + bs * 1] = c_21;
      D[3 + bs * 1] = c_31;
      D[0 + bs * 2] = c_02;
      D[1 + bs * 2] = c_12;
      D[2 + bs * 2] = c_22;
      D[3 + bs * 2] = c_32;
      if (kn >= 4) {
        D[0 + bs * 3] = c_03;
        D[1 + bs * 3] = c_13;
        D[2 + bs * 3] = c_23;
        D[3 + bs * 3] = c_33;
      }
    } else {
      D[0 + bs * 0] = c_00;
      D[1 + bs * 0] = c_10;
      D[2 + bs * 0] = c_20;
      D[0 + bs * 1] = c_01;
      D[1 + bs * 1] = c_11;
      D[2 + bs * 1] = c_21;
      D[0 + bs * 2] = c_02;
      D[1 + bs * 2] = c_12;
      D[2 + bs * 2] = c_22;
      if (kn >= 4) {
        D[0 + bs * 3] = c_03;
        D[1 + bs * 3] = c_13;
        D[2 + bs * 3] = c_23;
      }
    }
    return;
  store_t:
    if (kn >= 4) {
      D[0 + bs * 0] = c_00;
      D[1 + bs * 0] = c_01;
      D[2 + bs * 0] = c_02;
      D[3 + bs * 0] = c_03;
      D[0 + bs * 1] = c_10;
      D[1 + bs * 1] = c_11;
      D[2 + bs * 1] = c_12;
      D[3 + bs * 1] = c_13;
      D[0 + bs * 2] = c_20;
      D[1 + bs * 2] = c_21;
      D[2 + bs * 2] = c_22;
      D[3 + bs * 2] = c_23;
      if (km >= 4) {
        D[0 + bs * 3] = c_30;
        D[1 + bs * 3] = c_31;
        D[2 + bs * 3] = c_32;
        D[3 + bs * 3] = c_33;
      }
    } else {
      D[0 + bs * 0] = c_00;
      D[1 + bs * 0] = c_01;
      D[2 + bs * 0] = c_02;
      D[0 + bs * 1] = c_10;
      D[1 + bs * 1] = c_11;
      D[2 + bs * 1] = c_12;
      D[0 + bs * 2] = c_20;
      D[1 + bs * 2] = c_21;
      D[2 + bs * 2] = c_22;
      if (km >= 4) {
        D[0 + bs * 3] = c_30;
        D[1 + bs * 3] = c_31;
        D[2 + bs * 3] = c_32;
      }
    }
    return;
  }
  int k_iter = kmax / 4;
  int k_left = kmax % 4;
  __asm__ volatile("                                \n\t"
                   "                                \n\t"
                   "movq          %2, %%rax         \n\t"
                   "movq          %3, %%rbx         \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "movaps        0(%%rax), %%xmm0  \n\t"
                   "movaps       16(%%rax), %%xmm1  \n\t"
                   "movaps        0(%%rbx), %%xmm2  \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "xorpd     %%xmm3,  %%xmm3       \n\t"
                   "movaps    %%xmm3,  %%xmm4       \n\t"
                   "movaps    %%xmm3,  %%xmm5       \n\t"
                   "movaps    %%xmm3,  %%xmm6       \n\t"
                   "movaps    %%xmm3,  %%xmm7       \n\t"
                   "movaps    %%xmm3,  %%xmm8       \n\t"
                   "movaps    %%xmm3,  %%xmm9       \n\t"
                   "movaps    %%xmm3, %%xmm10       \n\t"
                   "movaps    %%xmm3, %%xmm11       \n\t"
                   "movaps    %%xmm3, %%xmm12       \n\t"
                   "movaps    %%xmm3, %%xmm13       \n\t"
                   "movaps    %%xmm3, %%xmm14       \n\t"
                   "movaps    %%xmm3, %%xmm15       \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "movl      %0, %%esi             \n\t"
                   "testl  %%esi, %%esi             \n\t"
                   "je     .TCONSIDKLEFT            \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".TLOOPKITER:                    \n\t"
                   "                                \n\t"
                   "addpd   %%xmm6, %%xmm10         \n\t"
                   "movaps       16(%%rbx), %%xmm6  \n\t"
                   "addpd   %%xmm3, %%xmm14         \n\t"
                   "movaps  %%xmm2, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm2, %%xmm7  \n\t"
                   "mulpd   %%xmm0, %%xmm2          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm4, %%xmm11         \n\t"
                   "addpd   %%xmm5, %%xmm15         \n\t"
                   "movaps  %%xmm7, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm7          \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm2, %%xmm8          \n\t"
                   "movaps       32(%%rbx), %%xmm2  \n\t"
                   "addpd   %%xmm3, %%xmm12         \n\t"
                   "movaps  %%xmm6, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm6, %%xmm4  \n\t"
                   "mulpd   %%xmm0, %%xmm6          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm7, %%xmm9          \n\t"
                   "addpd   %%xmm5, %%xmm13         \n\t"
                   "movaps  %%xmm4, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm4          \n\t"
                   "movaps       32(%%rax), %%xmm0  \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "movaps       48(%%rax), %%xmm1  \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "addpd   %%xmm6, %%xmm10         \n\t"
                   "movaps       48(%%rbx), %%xmm6  \n\t"
                   "addpd   %%xmm3, %%xmm14         \n\t"
                   "movaps  %%xmm2, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm2, %%xmm7  \n\t"
                   "mulpd   %%xmm0, %%xmm2          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm4, %%xmm11         \n\t"
                   "addpd   %%xmm5, %%xmm15         \n\t"
                   "movaps  %%xmm7, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm7          \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm2, %%xmm8          \n\t"
                   "movaps       64(%%rbx), %%xmm2  \n\t"
                   "addpd   %%xmm3, %%xmm12         \n\t"
                   "movaps  %%xmm6, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm6, %%xmm4  \n\t"
                   "mulpd   %%xmm0, %%xmm6          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm7, %%xmm9          \n\t"
                   "addpd   %%xmm5, %%xmm13         \n\t"
                   "movaps  %%xmm4, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm4          \n\t"
                   "movaps       64(%%rax), %%xmm0  \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "movaps       80(%%rax), %%xmm1  \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "addpd   %%xmm6, %%xmm10         \n\t"
                   "movaps       80(%%rbx), %%xmm6  \n\t"
                   "addpd   %%xmm3, %%xmm14         \n\t"
                   "movaps  %%xmm2, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm2, %%xmm7  \n\t"
                   "mulpd   %%xmm0, %%xmm2          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm4, %%xmm11         \n\t"
                   "addpd   %%xmm5, %%xmm15         \n\t"
                   "movaps  %%xmm7, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm7          \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm2, %%xmm8          \n\t"
                   "movaps       96(%%rbx), %%xmm2  \n\t"
                   "addpd   %%xmm3, %%xmm12         \n\t"
                   "movaps  %%xmm6, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm6, %%xmm4  \n\t"
                   "mulpd   %%xmm0, %%xmm6          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm7, %%xmm9          \n\t"
                   "addpd   %%xmm5, %%xmm13         \n\t"
                   "movaps  %%xmm4, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm4          \n\t"
                   "movaps       96(%%rax), %%xmm0  \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "movaps      112(%%rax), %%xmm1  \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "addpd   %%xmm6, %%xmm10         \n\t"
                   "movaps      112(%%rbx), %%xmm6  \n\t"
                   "addpd   %%xmm3, %%xmm14         \n\t"
                   "movaps  %%xmm2, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm2, %%xmm7  \n\t"
                   "mulpd   %%xmm0, %%xmm2          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addq      $128, %%rax           \n\t"
                   "                                \n\t"
                   "addpd   %%xmm4, %%xmm11         \n\t"
                   "addpd   %%xmm5, %%xmm15         \n\t"
                   "movaps  %%xmm7, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm7          \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "                                \n\t"
                   "addq      $128, %%rbx           \n\t"
                   "                                \n\t"
                   "addpd   %%xmm2, %%xmm8          \n\t"
                   "movaps         (%%rbx), %%xmm2  \n\t"
                   "addpd   %%xmm3, %%xmm12         \n\t"
                   "movaps  %%xmm6, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm6, %%xmm4  \n\t"
                   "mulpd   %%xmm0, %%xmm6          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "addpd   %%xmm7, %%xmm9          \n\t"
                   "decl    %%esi                   \n\t"
                   "addpd   %%xmm5, %%xmm13         \n\t"
                   "movaps  %%xmm4, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm4          \n\t"
                   "movaps         (%%rax), %%xmm0  \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "movaps       16(%%rax), %%xmm1  \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "jne    .TLOOPKITER              \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".TCONSIDKLEFT:                  \n\t"
                   "                                \n\t"
                   "movl      %1, %%esi             \n\t"
                   "testl  %%esi, %%esi             \n\t"
                   "je     .TPOSTACCUM              \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".TLOOPKLEFT:                    \n\t"
                   "                                \n\t"
                   "addpd   %%xmm6, %%xmm10         \n\t"
                   "movaps       16(%%rbx), %%xmm6  \n\t"
                   "addpd   %%xmm3, %%xmm14         \n\t"
                   "movaps  %%xmm2, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm2, %%xmm7  \n\t"
                   "mulpd   %%xmm0, %%xmm2          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm4, %%xmm11         \n\t"
                   "addpd   %%xmm5, %%xmm15         \n\t"
                   "movaps  %%xmm7, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm7          \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm2, %%xmm8          \n\t"
                   "movaps       32(%%rbx), %%xmm2  \n\t"
                   "addpd   %%xmm3, %%xmm12         \n\t"
                   "movaps  %%xmm6, %%xmm3          \n\t"
                   "pshufd   $0x4e, %%xmm6, %%xmm4  \n\t"
                   "mulpd   %%xmm0, %%xmm6          \n\t"
                   "mulpd   %%xmm1, %%xmm3          \n\t"
                   "                                \n\t"
                   "addpd   %%xmm7, %%xmm9          \n\t"
                   "addpd   %%xmm5, %%xmm13         \n\t"
                   "movaps  %%xmm4, %%xmm5          \n\t"
                   "mulpd   %%xmm0, %%xmm4          \n\t"
                   "movaps       32(%%rax), %%xmm0  \n\t"
                   "mulpd   %%xmm1, %%xmm5          \n\t"
                   "movaps       48(%%rax), %%xmm1  \n\t"
                   "                                \n\t"
                   "addq          $32, %%rax        \n\t"
                   "addq          $32, %%rbx        \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "decl    %%esi                   \n\t"
                   "jne    .TLOOPKLEFT              \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".TPOSTACCUM:                    \n\t"
                   "                                \n\t"
                   "addpd   %%xmm6, %%xmm10         \n\t"
                   "addpd   %%xmm3, %%xmm14         \n\t"
                   "addpd   %%xmm4, %%xmm11         \n\t"
                   "addpd   %%xmm5, %%xmm15         \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "movl   %5, %%ecx                \n\t"
                   "testl  %%ecx, %%ecx             \n\t"
                   "je     .T0                      \n\t"
                   "                                \n\t"
                   "movq   %4, %%rax                \n\t"
                   "                                \n\t"
                   "movl   %7, %%edx                \n\t"
                   "testl  %%edx, %%edx             \n\t"
                   "je     .T_N                     \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "movaps   %%xmm9,  %%xmm0        \n\t"
                   "unpckhpd %%xmm8,  %%xmm0        \n\t"
                   "unpcklpd %%xmm9,  %%xmm8        \n\t"
                   "movaps   %%xmm8,  %%xmm9        \n\t"
                   "movaps   %%xmm0,  %%xmm8        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm11, %%xmm0        \n\t"
                   "unpckhpd %%xmm10, %%xmm0        \n\t"
                   "unpcklpd %%xmm11, %%xmm10       \n\t"
                   "movaps   %%xmm10, %%xmm11       \n\t"
                   "movaps   %%xmm0,  %%xmm10       \n\t"
                   "                                \n\t"
                   "movaps   %%xmm13, %%xmm0        \n\t"
                   "unpckhpd %%xmm12, %%xmm0        \n\t"
                   "unpcklpd %%xmm13, %%xmm12       \n\t"
                   "movaps   %%xmm12, %%xmm13       \n\t"
                   "movaps   %%xmm0,  %%xmm12       \n\t"
                   "                                \n\t"
                   "movaps   %%xmm15, %%xmm0        \n\t"
                   "unpckhpd %%xmm14, %%xmm0        \n\t"
                   "unpcklpd %%xmm15, %%xmm14       \n\t"
                   "movaps   %%xmm14, %%xmm15       \n\t"
                   "movaps   %%xmm0,  %%xmm14       \n\t"
                   "                                \n\t"
                   "movaps  (%%rax),   %%xmm1       \n\t"
                   "movaps  16(%%rax), %%xmm3       \n\t"
                   "movaps  32(%%rax), %%xmm0       \n\t"
                   "movaps  48(%%rax), %%xmm2       \n\t"
                   "movaps  64(%%rax), %%xmm5       \n\t"
                   "movaps  80(%%rax), %%xmm7       \n\t"
                   "movaps  96(%%rax), %%xmm4       \n\t"
                   "movaps 112(%%rax), %%xmm6       \n\t"
                   "                                \n\t"
                   "cmpl	$1, %%ecx                \n\t"
                   "                                \n\t"
                   "je     .T1_T                    \n\t"
                   "                                \n\t"
                   "subpd  %%xmm8,  %%xmm0          \n\t"
                   "subpd  %%xmm9,  %%xmm1          \n\t"
                   "subpd  %%xmm10, %%xmm2          \n\t"
                   "subpd  %%xmm11, %%xmm3          \n\t"
                   "subpd  %%xmm12, %%xmm4          \n\t"
                   "subpd  %%xmm13, %%xmm5          \n\t"
                   "subpd  %%xmm14, %%xmm6          \n\t"
                   "subpd  %%xmm15, %%xmm7          \n\t"
                   "                                \n\t"
                   "jmp    .T1_T_E                  \n\t"
                   "                                \n\t"
                   ".T1_T:                          \n\t"
                   "                                \n\t"
                   "addpd  %%xmm8,  %%xmm0          \n\t"
                   "addpd  %%xmm9,  %%xmm1          \n\t"
                   "addpd  %%xmm10, %%xmm2          \n\t"
                   "addpd  %%xmm11, %%xmm3          \n\t"
                   "addpd  %%xmm12, %%xmm4          \n\t"
                   "addpd  %%xmm13, %%xmm5          \n\t"
                   "addpd  %%xmm14, %%xmm6          \n\t"
                   "addpd  %%xmm15, %%xmm7          \n\t"
                   "                                \n\t"
                   ".T1_T_E:                        \n\t"
                   "                                \n\t"
                   "movl   %8, %%edx                \n\t"
                   "testl  %%edx, %%edx             \n\t"
                   "jne    .TTORE_T                 \n\t"
                   "                                \n\t"
                   "movaps   %%xmm1,  %%xmm8        \n\t"
                   "unpcklpd %%xmm0,  %%xmm1        \n\t"
                   "unpckhpd %%xmm0,  %%xmm8        \n\t"
                   "movaps   %%xmm8,  %%xmm0        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm3,  %%xmm9        \n\t"
                   "unpcklpd %%xmm2,  %%xmm3        \n\t"
                   "unpckhpd %%xmm2,  %%xmm9        \n\t"
                   "movaps   %%xmm9,  %%xmm2        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm5,  %%xmm8        \n\t"
                   "unpcklpd %%xmm4,  %%xmm5        \n\t"
                   "unpckhpd %%xmm4,  %%xmm8        \n\t"
                   "movaps   %%xmm8,  %%xmm4        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm7,  %%xmm9        \n\t"
                   "unpcklpd %%xmm6,  %%xmm7        \n\t"
                   "unpckhpd %%xmm6,  %%xmm9        \n\t"
                   "movaps   %%xmm9,  %%xmm6        \n\t"
                   "                                \n\t"
                   "jmp    .TTORE_N                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".T_N:                           \n\t"
                   "                                \n\t"
                   "movaps   %%xmm8,  %%xmm0        \n\t"
                   "movsd    %%xmm9,  %%xmm8        \n\t"
                   "movsd    %%xmm0,  %%xmm9        \n\t"
                   "                                \n\t"
                   "movaps  %%xmm10,  %%xmm0        \n\t"
                   "movsd   %%xmm11, %%xmm10        \n\t"
                   "movsd    %%xmm0, %%xmm11        \n\t"
                   "                                \n\t"
                   "movaps  %%xmm12,  %%xmm0        \n\t"
                   "movsd   %%xmm13, %%xmm12        \n\t"
                   "movsd    %%xmm0, %%xmm13        \n\t"
                   "                                \n\t"
                   "movaps  %%xmm14,  %%xmm0        \n\t"
                   "movsd   %%xmm15, %%xmm14        \n\t"
                   "movsd    %%xmm0, %%xmm15        \n\t"
                   "                                \n\t"
                   "movaps  (%%rax),   %%xmm1       \n\t"
                   "movaps  16(%%rax), %%xmm5       \n\t"
                   "movaps  32(%%rax), %%xmm0       \n\t"
                   "movaps  48(%%rax), %%xmm4       \n\t"
                   "movaps  64(%%rax), %%xmm3       \n\t"
                   "movaps  80(%%rax), %%xmm7       \n\t"
                   "movaps  96(%%rax), %%xmm2       \n\t"
                   "movaps 112(%%rax), %%xmm6       \n\t"
                   "                                \n\t"
                   "cmpl	$1, %%ecx                \n\t"
                   "                                \n\t"
                   "je     .T1_N                    \n\t"
                   "                                \n\t"
                   "subpd  %%xmm8,  %%xmm0          \n\t"
                   "subpd  %%xmm9,  %%xmm1          \n\t"
                   "subpd  %%xmm10, %%xmm2          \n\t"
                   "subpd  %%xmm11, %%xmm3          \n\t"
                   "subpd  %%xmm12, %%xmm4          \n\t"
                   "subpd  %%xmm13, %%xmm5          \n\t"
                   "subpd  %%xmm14, %%xmm6          \n\t"
                   "subpd  %%xmm15, %%xmm7          \n\t"
                   "                                \n\t"
                   "jmp    .T1_N_E                  \n\t"
                   "                                \n\t"
                   ".T1_N:                          \n\t"
                   "                                \n\t"
                   "addpd  %%xmm8,  %%xmm0          \n\t"
                   "addpd  %%xmm9,  %%xmm1          \n\t"
                   "addpd  %%xmm10, %%xmm2          \n\t"
                   "addpd  %%xmm11, %%xmm3          \n\t"
                   "addpd  %%xmm12, %%xmm4          \n\t"
                   "addpd  %%xmm13, %%xmm5          \n\t"
                   "addpd  %%xmm14, %%xmm6          \n\t"
                   "addpd  %%xmm15, %%xmm7          \n\t"
                   "                                \n\t"
                   ".T1_N_E:                        \n\t"
                   "                                \n\t"
                   "movl   %8, %%edx                \n\t"
                   "testl  %%edx, %%edx             \n\t"
                   "je     .T_N_N                   \n\t"
                   "                                \n\t"
                   "movaps   %%xmm1,  %%xmm8        \n\t"
                   "unpcklpd %%xmm0,  %%xmm1        \n\t"
                   "unpckhpd %%xmm0,  %%xmm8        \n\t"
                   "movaps   %%xmm8,  %%xmm0        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm3,  %%xmm9        \n\t"
                   "unpcklpd %%xmm2,  %%xmm3        \n\t"
                   "unpckhpd %%xmm2,  %%xmm9        \n\t"
                   "movaps   %%xmm9,  %%xmm2        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm5,  %%xmm8        \n\t"
                   "unpcklpd %%xmm4,  %%xmm5        \n\t"
                   "unpckhpd %%xmm4,  %%xmm8        \n\t"
                   "movaps   %%xmm8,  %%xmm4        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm7,  %%xmm9        \n\t"
                   "unpcklpd %%xmm6,  %%xmm7        \n\t"
                   "unpckhpd %%xmm6,  %%xmm9        \n\t"
                   "movaps   %%xmm9,  %%xmm6        \n\t"
                   "                                \n\t"
                   "jmp    .TTORE_T                 \n\t"
                   "                                \n\t"
                   ".T_N_N:                         \n\t"
                   "                                \n\t"
                   "jmp    .TTORE_N                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".T0:                            \n\t"
                   "                                \n\t"
                   "movl   %8, %%ecx                \n\t"
                   "testl  %%ecx, %%ecx             \n\t"
                   "je     .T0_N                    \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "movaps   %%xmm8,  %%xmm1        \n\t"
                   "movaps   %%xmm9,  %%xmm0        \n\t"
                   "unpckhpd %%xmm8,  %%xmm0        \n\t"
                   "unpcklpd %%xmm9,  %%xmm1        \n\t"
                   "                                \n\t"
                   "movaps   %%xmm10,  %%xmm3       \n\t"
                   "movaps   %%xmm11,  %%xmm2       \n\t"
                   "unpckhpd %%xmm10,  %%xmm2       \n\t"
                   "unpcklpd %%xmm11,  %%xmm3       \n\t"
                   "                                \n\t"
                   "movaps   %%xmm12,  %%xmm5       \n\t"
                   "movaps   %%xmm13,  %%xmm4       \n\t"
                   "unpckhpd %%xmm12,  %%xmm4       \n\t"
                   "unpcklpd %%xmm13,  %%xmm5       \n\t"
                   "                                \n\t"
                   "movaps   %%xmm14,  %%xmm7       \n\t"
                   "movaps   %%xmm15,  %%xmm6       \n\t"
                   "unpckhpd %%xmm14,  %%xmm6       \n\t"
                   "unpcklpd %%xmm15,  %%xmm7       \n\t"
                   "                                \n\t"
                   "jmp    .TTORE_T                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".T0_N:                          \n\t"
                   "                                \n\t"
                   "movaps   %%xmm8,  %%xmm0        \n\t"
                   "movaps   %%xmm9,  %%xmm1        \n\t"
                   "movsd    %%xmm9,  %%xmm0        \n\t"
                   "movsd    %%xmm8,  %%xmm1        \n\t"
                   "                                \n\t"
                   "movaps  %%xmm10,  %%xmm2        \n\t"
                   "movaps  %%xmm11,  %%xmm3        \n\t"
                   "movsd   %%xmm11,  %%xmm2        \n\t"
                   "movsd   %%xmm10,  %%xmm3        \n\t"
                   "                                \n\t"
                   "movaps  %%xmm12,  %%xmm4        \n\t"
                   "movaps  %%xmm13,  %%xmm5        \n\t"
                   "movsd   %%xmm13,  %%xmm4        \n\t"
                   "movsd   %%xmm12,  %%xmm5        \n\t"
                   "                                \n\t"
                   "movaps  %%xmm14,  %%xmm6        \n\t"
                   "movaps  %%xmm15,  %%xmm7        \n\t"
                   "movsd   %%xmm15,  %%xmm6        \n\t"
                   "movsd   %%xmm14,  %%xmm7        \n\t"
                   "                                \n\t"
                   "jmp    .TTORE_N                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".TTORE_N:                       \n\t"
                   "                                \n\t"
                   "movq   %6, %%rbx                \n\t"
                   "                                \n\t"
                   "movl   %9, %%edx                \n\t"
                   "movl  %10, %%ecx                \n\t"
                   "cmpl	$4, %%edx                \n\t"
                   "jl      .T_N_3                  \n\t"
                   "                                \n\t"
                   "movaps  %%xmm1, (%%rbx)         \n\t"
                   "movaps  %%xmm5, 16(%%rbx)       \n\t"
                   "cmpl	$4, %%ecx                \n\t"
                   "movaps  %%xmm0, 32(%%rbx)       \n\t"
                   "movaps  %%xmm4, 48(%%rbx)       \n\t"
                   "movaps  %%xmm3, 64(%%rbx)       \n\t"
                   "movaps  %%xmm7, 80(%%rbx)       \n\t"
                   "jl      .TDONE                  \n\t"
                   "movaps  %%xmm2, 96(%%rbx)       \n\t"
                   "movaps  %%xmm6, 112(%%rbx)      \n\t"
                   "                                \n\t"
                   ".T_N_3:                         \n\t"
                   "                                \n\t"
                   "movaps  %%xmm1, (%%rbx)         \n\t"
                   "movsd   %%xmm5, 16(%%rbx)       \n\t"
                   "cmpl	$4, %%ecx                \n\t"
                   "movaps  %%xmm0, 32(%%rbx)       \n\t"
                   "movsd   %%xmm4, 48(%%rbx)       \n\t"
                   "movaps  %%xmm3, 64(%%rbx)       \n\t"
                   "movsd   %%xmm7, 80(%%rbx)       \n\t"
                   "jl      .TDONE                  \n\t"
                   "movaps  %%xmm2, 96(%%rbx)       \n\t"
                   "movsd   %%xmm6, 112(%%rbx)      \n\t"
                   "                                \n\t"
                   "jmp    .TDONE                   \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".TTORE_T:                       \n\t"
                   "                                \n\t"
                   "movq   %6, %%rbx                \n\t"
                   "                                \n\t"
                   "movl  %10, %%ecx                \n\t"
                   "movl   %9, %%edx                \n\t"
                   "cmpl	$4, %%ecx                \n\t"
                   "jl      .T_T_3                  \n\t"
                   "                                \n\t"
                   "movaps  %%xmm1, (%%rbx)         \n\t"
                   "movaps  %%xmm3, 16(%%rbx)       \n\t"
                   "cmpl	$4, %%edx                \n\t"
                   "movaps  %%xmm0, 32(%%rbx)       \n\t"
                   "movaps  %%xmm2, 48(%%rbx)       \n\t"
                   "movaps  %%xmm5, 64(%%rbx)       \n\t"
                   "movaps  %%xmm7, 80(%%rbx)       \n\t"
                   "jl      .TDONE                  \n\t"
                   "movaps  %%xmm4, 96(%%rbx)       \n\t"
                   "movaps  %%xmm6, 112(%%rbx)      \n\t"
                   "                                \n\t"
                   ".T_T_3:                         \n\t"
                   "                                \n\t"
                   "movaps  %%xmm1, (%%rbx)         \n\t"
                   "movsd   %%xmm3, 16(%%rbx)       \n\t"
                   "cmpl	$4, %%edx                \n\t"
                   "movaps  %%xmm0, 32(%%rbx)       \n\t"
                   "movsd   %%xmm2, 48(%%rbx)       \n\t"
                   "movaps  %%xmm5, 64(%%rbx)       \n\t"
                   "movsd   %%xmm7, 80(%%rbx)       \n\t"
                   "jl      .TDONE                  \n\t"
                   "movaps  %%xmm4, 96(%%rbx)       \n\t"
                   "movsd   %%xmm6, 112(%%rbx)      \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".TDONE:                         \n\t"
                   "                                \n\t"
                   :
                   : "m"(k_iter), "m"(k_left), "m"(A), "m"(B), "m"(C), "m"(alg),
                     "m"(D), "m"(tc), "m"(td), "m"(km), "m"(kn)
                   : "rax", "rbx", "rcx", "rdx", "rsi", "xmm0", "xmm1", "xmm2",
                     "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "xmm8", "xmm9",
                     "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15",
                     "memory");
}


x86 assembly (clang, -O0):
<kernel_dgemm_nt_4x4_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
push   %rbx
sub    $0x38,%rsp
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
cmpl   $0x0,-0x14(%rbp)
jg     17a2 <kernel_dgemm_nt_4x4_vs_lib4+0x6a2>
movl   $0x4,-0x34(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
cmpl   $0x0,0x18(%rbp)
jne    11ef <kernel_dgemm_nt_4x4_vs_lib4+0xef>
cmpl   $0x0,0x28(%rbp)
jne    11ea <kernel_dgemm_nt_4x4_vs_lib4+0xea>
jmp    13fa <kernel_dgemm_nt_4x4_vs_lib4+0x2fa>
jmp    15cb <kernel_dgemm_nt_4x4_vs_lib4+0x4cb>
cmpl   $0x0,0x20(%rbp)
jne    12f2 <kernel_dgemm_nt_4x4_vs_lib4+0x1f2>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    13e6 <kernel_dgemm_nt_4x4_vs_lib4+0x2e6>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x30(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
cmpl   $0x0,0x28(%rbp)
jne    13f5 <kernel_dgemm_nt_4x4_vs_lib4+0x2f5>
jmp    13fa <kernel_dgemm_nt_4x4_vs_lib4+0x2fa>
jmp    15cb <kernel_dgemm_nt_4x4_vs_lib4+0x4cb>
cmpl   $0x4,-0xc(%rbp)
jl     1507 <kernel_dgemm_nt_4x4_vs_lib4+0x407>
movsd  -0x40(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x48(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x68(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x50(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x10(%rbp)
jl     1502 <kernel_dgemm_nt_4x4_vs_lib4+0x402>
movsd  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    15c6 <kernel_dgemm_nt_4x4_vs_lib4+0x4c6>
movsd  -0x40(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x48(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x68(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x50(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x10(%rbp)
jl     15c1 <kernel_dgemm_nt_4x4_vs_lib4+0x4c1>
movsd  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    15c6 <kernel_dgemm_nt_4x4_vs_lib4+0x4c6>
jmp    1e48 <.TDONE>
cmpl   $0x4,-0x10(%rbp)
jl     16d8 <kernel_dgemm_nt_4x4_vs_lib4+0x5d8>
movsd  -0x40(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x48(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x50(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x68(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0xc(%rbp)
jl     16d3 <kernel_dgemm_nt_4x4_vs_lib4+0x5d3>
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    179d <kernel_dgemm_nt_4x4_vs_lib4+0x69d>
movsd  -0x40(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x48(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x50(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x68(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0xc(%rbp)
jl     1798 <kernel_dgemm_nt_4x4_vs_lib4+0x698>
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    179d <kernel_dgemm_nt_4x4_vs_lib4+0x69d>
jmp    1e48 <.TDONE>
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0xbc(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %edx,-0xc0(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rbx
movaps (%rax),%xmm0
movaps 0x10(%rax),%xmm1
movaps (%rbx),%xmm2
xorpd  %xmm3,%xmm3
movaps %xmm3,%xmm4
movaps %xmm3,%xmm5
movaps %xmm3,%xmm6
movaps %xmm3,%xmm7
movaps %xmm3,%xmm8
movaps %xmm3,%xmm9
movaps %xmm3,%xmm10
movaps %xmm3,%xmm11
movaps %xmm3,%xmm12
movaps %xmm3,%xmm13
movaps %xmm3,%xmm14
movaps %xmm3,%xmm15
mov    -0xbc(%rbp),%esi
test   %esi,%esi
je     19df <.TCONSIDKLEFT>

x86 assembly (clang, -O2):
<kernel_dgemm_nt_4x4_vs_lib4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x50(%rsp),%ebp
mov    0x48(%rsp),%r11d
mov    0x40(%rsp),%ebx
mov    0x38(%rsp),%rax
mov    %edi,-0x24(%rsp)
mov    %esi,-0x28(%rsp)
mov    %rcx,-0x8(%rsp)
mov    %r8,-0x10(%rsp)
mov    %r9,-0x18(%rsp)
test   %edx,%edx
jle    17ac <.TDONE+0xb>
mov    %edx,%eax
shr    $0x2,%eax
mov    %eax,-0x2c(%rsp)
and    $0x3,%edx
mov    %edx,-0x30(%rsp)
mov    -0x8(%rsp),%rax
mov    -0x10(%rsp),%rbx
movaps (%rax),%xmm0
movaps 0x10(%rax),%xmm1
movaps (%rbx),%xmm2
xorpd  %xmm3,%xmm3
movaps %xmm3,%xmm4
movaps %xmm3,%xmm5
movaps %xmm3,%xmm6
movaps %xmm3,%xmm7
movaps %xmm3,%xmm8
movaps %xmm3,%xmm9
movaps %xmm3,%xmm10
movaps %xmm3,%xmm11
movaps %xmm3,%xmm12
movaps %xmm3,%xmm13
movaps %xmm3,%xmm14
movaps %xmm3,%xmm15
mov    -0x2c(%rsp),%esi
test   %esi,%esi
je     1366 <.TCONSIDKLEFT>

LLVM IR (-O0):
define void @kernel_dgemm_nt_4x4_vs_lib4(i32 %0, i32 %1, i32 %2, double* %3, double* %4, double* %5, double* %6, i32 %7, i32 %8, i32 %9) {
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca double*
%15 = alloca double*
%16 = alloca double*
%17 = alloca double*
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca i32
%39 = alloca i32
store i32 %0, i32* %11
store i32 %1, i32* %12
store i32 %2, i32* %13
store double* %3, double** %14
store double* %4, double** %15
store double* %5, double** %16
store double* %6, double** %17
store i32 %7, i32* %18
store i32 %8, i32* %19
store i32 %9, i32* %20
%40 = load i32, i32* %13
%41 = icmp sle i32 %40, 0
br i1 %41, label %42, label %352
42: ; preds = %10
store i32 4, i32* %21
store double 0.000000e+00, double* %22
store double 0.000000e+00, double* %23
store double 0.000000e+00, double* %24
store double 0.000000e+00, double* %25
store double 0.000000e+00, double* %26
store double 0.000000e+00, double* %27
store double 0.000000e+00, double* %28
store double 0.000000e+00, double* %29
store double 0.000000e+00, double* %30
store double 0.000000e+00, double* %31
store double 0.000000e+00, double* %32
store double 0.000000e+00, double* %33
store double 0.000000e+00, double* %34
store double 0.000000e+00, double* %35
store double 0.000000e+00, double* %36
store double 0.000000e+00, double* %37
%43 = load i32, i32* %18
%44 = icmp eq i32 %43, 0
br i1 %44, label %45, label %50
45: ; preds = %42
%46 = load i32, i32* %20
%47 = icmp eq i32 %46, 0
br i1 %47, label %48, label %49
48: ; preds = %45
br label %156
49: ; preds = %45
br label %254
50: ; preds = %42
%51 = load i32, i32* %19
%52 = icmp eq i32 %51, 0
br i1 %52, label %53, label %102
53: ; preds = %50
%54 = load double*, double** %16
%55 = getelementptr inbounds double, double* %54, i64 0
%56 = load double, double* %55
store double %56, double* %22
%57 = load double*, double** %16
%58 = getelementptr inbounds double, double* %57, i64 1
%59 = load double, double* %58
store double %59, double* %26
%60 = load double*, double** %16
%61 = getelementptr inbounds double, double* %60, i64 2
%62 = load double, double* %61
store double %62, double* %30
%63 = load double*, double** %16
%64 = getelementptr inbounds double, double* %63, i64 3
%65 = load double, double* %64
store double %65, double* %34
%66 = load double*, double** %16
%67 = getelementptr inbounds double, double* %66, i64 4
%68 = load double, double* %67
store double %68, double* %23
%69 = load double*, double** %16
%70 = getelementptr inbounds double, double* %69, i64 5
%71 = load double, double* %70
store double %71, double* %27
%72 = load double*, double** %16
%73 = getelementptr inbounds double, double* %72, i64 6
%74 = load double, double* %73
store double %74, double* %31
%75 = load double*, double** %16
%76 = getelementptr inbounds double, double* %75, i64 7
%77 = load double, double* %76
store double %77, double* %35
%78 = load double*, double** %16
%79 = getelementptr inbounds double, double* %78, i64 8
%80 = load double, double* %79
store double %80, double* %24
%81 = load double*, double** %16
%82 = getelementptr inbounds double, double* %81, i64 9
%83 = load double, double* %82
store double %83, double* %28
%84 = load double*, double** %16
%85 = getelementptr inbounds double, double* %84, i64 10
%86 = load double, double* %85
store double %86, double* %32
%87 = load double*, double** %16
%88 = getelementptr inbounds double, double* %87, i64 11
%89 = load double, double* %88
store double %89, double* %36
%90 = load double*, double** %16
%91 = getelementptr inbounds double, double* %90, i64 12
%92 = load double, double* %91
store double %92, double* %25
%93 = load double*, double** %16
%94 = getelementptr inbounds double, double* %93, i64 13
%95 = load double, double* %94
store double %95, double* %29
%96 = load double*, double** %16
%97 = getelementptr inbounds double, double* %96, i64 14
%98 = load double, double* %97
store double %98, double* %33
%99 = load double*, double** %16
%100 = getelementptr inbounds double, double* %99, i64 15
%101 = load double, double* %100
store double %101, double* %37
br label %151
102: ; preds = %50
%103 = load double*, double** %16
%104 = getelementptr inbounds double, double* %103, i64 0
%105 = load double, double* %104
store double %105, double* %22
%106 = load double*, double** %16
%107 = getelementptr inbounds double, double* %106, i64 1
%108 = load double, double* %107
store double %108, double* %23
%109 = load double*, double** %16
%110 = getelementptr inbounds double, double* %109, i64 2
%111 = load double, double* %110
store double %111, double* %24
%112 = load double*, double** %16
%113 = getelementptr inbounds double, double* %112, i64 3
%114 = load double, double* %113
store double %114, double* %25
%115 = load double*, double** %16
%116 = getelementptr inbounds double, double* %115, i64 4
%117 = load double, double* %116
store double %117, double* %26
%118 = load double*, double** %16
%119 = getelementptr inbounds double, double* %118, i64 5
%120 = load double, double* %119
store double %120, double* %27
%121 = load double*, double** %16
%122 = getelementptr inbounds double, double* %121, i64 6
%123 = load double, double* %122
store double %123, double* %28
%124 = load double*, double** %16
%125 = getelementptr inbounds double, double* %124, i64 7
%126 = load double, double* %125
store double %126, double* %29
%127 = load double*, double** %16
%128 = getelementptr inbounds double, double* %127, i64 8
%129 = load double, double* %128
store double %129, double* %30
%130 = load double*, double** %16
%131 = getelementptr inbounds double, double* %130, i64 9
%132 = load double, double* %131
store double %132, double* %31
%133 = load double*, double** %16
%134 = getelementptr inbounds double, double* %133, i64 10
%135 = load double, double* %134
store double %135, double* %32
%136 = load double*, double** %16
%137 = getelementptr inbounds double, double* %136, i64 11
%138 = load double, double* %137
store double %138, double* %33
%139 = load double*, double** %16
%140 = getelementptr inbounds double, double* %139, i64 12
%141 = load double, double* %140
store double %141, double* %34
%142 = load double*, double** %16
%143 = getelementptr inbounds double, double* %142, i64 13
%144 = load double, double* %143
store double %144, double* %35
%145 = load double*, double** %16
%146 = getelementptr inbounds double, double* %145, i64 14
%147 = load double, double* %146
store double %147, double* %36
%148 = load double*, double** %16
%149 = getelementptr inbounds double, double* %148, i64 15
%150 = load double, double* %149
store double %150, double* %37
br label %151
151: ; preds = %102, %53
%152 = load i32, i32* %20
%153 = icmp eq i32 %152, 0
br i1 %153, label %154, label %155
154: ; preds = %151
br label %156
155: ; preds = %151
br label %254
156: ; preds = %154, %48
%157 = load i32, i32* %11
%158 = icmp sge i32 %157, 4
br i1 %158, label %159, label %212
159: ; preds = %156
%160 = load double, double* %22
%161 = load double*, double** %17
%162 = getelementptr inbounds double, double* %161, i64 0
store double %160, double* %162
%163 = load double, double* %26
%164 = load double*, double** %17
%165 = getelementptr inbounds double, double* %164, i64 1
store double %163, double* %165
%166 = load double, double* %30
%167 = load double*, double** %17
%168 = getelementptr inbounds double, double* %167, i64 2
store double %166, double* %168
%169 = load double, double* %34
%170 = load double*, double** %17
%171 = getelementptr inbounds double, double* %170, i64 3
store double %169, double* %171
%172 = load double, double* %23
%173 = load double*, double** %17
%174 = getelementptr inbounds double, double* %173, i64 4
store double %172, double* %174
%175 = load double, double* %27
%176 = load double*, double** %17
%177 = getelementptr inbounds double, double* %176, i64 5
store double %175, double* %177
%178 = load double, double* %31
%179 = load double*, double** %17
%180 = getelementptr inbounds double, double* %179, i64 6
store double %178, double* %180
%181 = load double, double* %35
%182 = load double*, double** %17
%183 = getelementptr inbounds double, double* %182, i64 7
store double %181, double* %183
%184 = load double, double* %24
%185 = load double*, double** %17
%186 = getelementptr inbounds double, double* %185, i64 8
store double %184, double* %186
%187 = load double, double* %28
%188 = load double*, double** %17
%189 = getelementptr inbounds double, double* %188, i64 9
store double %187, double* %189
%190 = load double, double* %32
%191 = load double*, double** %17
%192 = getelementptr inbounds double, double* %191, i64 10
store double %190, double* %192
%193 = load double, double* %36
%194 = load double*, double** %17
%195 = getelementptr inbounds double, double* %194, i64 11
store double %193, double* %195
%196 = load i32, i32* %12
%197 = icmp sge i32 %196, 4
br i1 %197, label %198, label %211
198: ; preds = %159
%199 = load double, double* %25
%200 = load double*, double** %17
%201 = getelementptr inbounds double, double* %200, i64 12
store double %199, double* %201
%202 = load double, double* %29
%203 = load double*, double** %17
%204 = getelementptr inbounds double, double* %203, i64 13
store double %202, double* %204
%205 = load double, double* %33
%206 = load double*, double** %17
%207 = getelementptr inbounds double, double* %206, i64 14
store double %205, double* %207
%208 = load double, double* %37
%209 = load double*, double** %17
%210 = getelementptr inbounds double, double* %209, i64 15
store double %208, double* %210
br label %211
211: ; preds = %198, %159
br label %253
212: ; preds = %156
%213 = load double, double* %22
%214 = load double*, double** %17
%215 = getelementptr inbounds double, double* %214, i64 0
store double %213, double* %215
%216 = load double, double* %26
%217 = load double*, double** %17
%218 = getelementptr inbounds double, double* %217, i64 1
store double %216, double* %218
%219 = load double, double* %30
%220 = load double*, double** %17
%221 = getelementptr inbounds double, double* %220, i64 2
store double %219, double* %221
%222 = load double, double* %23
%223 = load double*, double** %17
%224 = getelementptr inbounds double, double* %223, i64 4
store double %222, double* %224
%225 = load double, double* %27
%226 = load double*, double** %17
%227 = getelementptr inbounds double, double* %226, i64 5
store double %225, double* %227
%228 = load double, double* %31
%229 = load double*, double** %17
%230 = getelementptr inbounds double, double* %229, i64 6
store double %228, double* %230
%231 = load double, double* %24
%232 = load double*, double** %17
%233 = getelementptr inbounds double, double* %232, i64 8
store double %231, double* %233
%234 = load double, double* %28
%235 = load double*, double** %17
%236 = getelementptr inbounds double, double* %235, i64 9
store double %234, double* %236
%237 = load double, double* %32
%238 = load double*, double** %17
%239 = getelementptr inbounds double, double* %238, i64 10
store double %237, double* %239
%240 = load i32, i32* %12
%241 = icmp sge i32 %240, 4
br i1 %241, label %242, label %252
242: ; preds = %212
%243 = load double, double* %25
%244 = load double*, double** %17
%245 = getelementptr inbounds double, double* %244, i64 12
store double %243, double* %245
%246 = load double, double* %29
%247 = load double*, double** %17
%248 = getelementptr inbounds double, double* %247, i64 13
store double %246, double* %248
%249 = load double, double* %33
%250 = load double*, double** %17
%251 = getelementptr inbounds double, double* %250, i64 14
store double %249, double* %251
br label %252
252: ; preds = %242, %212
br label %253
253: ; preds = %252, %211
br label %357
254: ; preds = %155, %49
%255 = load i32, i32* %12
%256 = icmp sge i32 %255, 4
br i1 %256, label %257, label %310
257: ; preds = %254
%258 = load double, double* %22
%259 = load double*, double** %17
%260 = getelementptr inbounds double, double* %259, i64 0
store double %258, double* %260
%261 = load double, double* %23
%262 = load double*, double** %17
%263 = getelementptr inbounds double, double* %262, i64 1
store double %261, double* %263
%264 = load double, double* %24
%265 = load double*, double** %17
%266 = getelementptr inbounds double, double* %265, i64 2
store double %264, double* %266
%267 = load double, double* %25
%268 = load double*, double** %17
%269 = getelementptr inbounds double, double* %268, i64 3
store double %267, double* %269
%270 = load double, double* %26
%271 = load double*, double** %17
%272 = getelementptr inbounds double, double* %271, i64 4
store double %270, double* %272
%273 = load double, double* %27
%274 = load double*, double** %17
%275 = getelementptr inbounds double, double* %274, i64 5
store double %273, double* %275
%276 = load double, double* %28
%277 = load double*, double** %17
%278 = getelementptr inbounds double, double* %277, i64 6
store double %276, double* %278
%279 = load double, double* %29
%280 = load double*, double** %17
%281 = getelementptr inbounds double, double* %280, i64 7
store double %279, double* %281
%282 = load double, double* %30
%283 = load double*, double** %17
%284 = getelementptr inbounds double, double* %283, i64 8
store double %282, double* %284
%285 = load double, double* %31
%286 = load double*, double** %17
%287 = getelementptr inbounds double, double* %286, i64 9
store double %285, double* %287
%288 = load double, double* %32
%289 = load double*, double** %17
%290 = getelementptr inbounds double, double* %289, i64 10
store double %288, double* %290
%291 = load double, double* %33
%292 = load double*, double** %17
%293 = getelementptr inbounds double, double* %292, i64 11
store double %291, double* %293
%294 = load i32, i32* %11
%295 = icmp sge i32 %294, 4
br i1 %295, label %296, label %309
296: ; preds = %257
%297 = load double, double* %34
%298 = load double*, double** %17
%299 = getelementptr inbounds double, double* %298, i64 12
store double %297, double* %299
%300 = load double, double* %35
%301 = load double*, double** %17
%302 = getelementptr inbounds double, double* %301, i64 13
store double %300, double* %302
%303 = load double, double* %36
%304 = load double*, double** %17
%305 = getelementptr inbounds double, double* %304, i64 14
store double %303, double* %305
%306 = load double, double* %37
%307 = load double*, double** %17
%308 = getelementptr inbounds double, double* %307, i64 15
store double %306, double* %308
br label %309
309: ; preds = %296, %257
br label %351
310: ; preds = %254
%311 = load double, double* %22
%312 = load double*, double** %17
%313 = getelementptr inbounds double, double* %312, i64 0
store double %311, double* %313
%314 = load double, double* %23
%315 = load double*, double** %17
%316 = getelementptr inbounds double, double* %315, i64 1
store double %314, double* %316
%317 = load double, double* %24
%318 = load double*, double** %17
%319 = getelementptr inbounds double, double* %318, i64 2
store double %317, double* %319
%320 = load double, double* %26
%321 = load double*, double** %17
%322 = getelementptr inbounds double, double* %321, i64 4
store double %320, double* %322
%323 = load double, double* %27
%324 = load double*, double** %17
%325 = getelementptr inbounds double, double* %324, i64 5
store double %323, double* %325
%326 = load double, double* %28
%327 = load double*, double** %17
%328 = getelementptr inbounds double, double* %327, i64 6
store double %326, double* %328
%329 = load double, double* %30
%330 = load double*, double** %17
%331 = getelementptr inbounds double, double* %330, i64 8
store double %329, double* %331
%332 = load double, double* %31
%333 = load double*, double** %17
%334 = getelementptr inbounds double, double* %333, i64 9
store double %332, double* %334
%335 = load double, double* %32
%336 = load double*, double** %17
%337 = getelementptr inbounds double, double* %336, i64 10
store double %335, double* %337
%338 = load i32, i32* %11
%339 = icmp sge i32 %338, 4
br i1 %339, label %340, label %350
340: ; preds = %310
%341 = load double, double* %34
%342 = load double*, double** %17
%343 = getelementptr inbounds double, double* %342, i64 12
store double %341, double* %343
%344 = load double, double* %35
%345 = load double*, double** %17
%346 = getelementptr inbounds double, double* %345, i64 13
store double %344, double* %346
%347 = load double, double* %36
%348 = load double*, double** %17
%349 = getelementptr inbounds double, double* %348, i64 14
store double %347, double* %349
br label %350
350: ; preds = %340, %310
br label %351
351: ; preds = %350, %309
br label %357
352: ; preds = %10
%353 = load i32, i32* %13
%354 = sdiv i32 %353, 4
store i32 %354, i32* %38
%355 = load i32, i32* %13
%356 = srem i32 %355, 4
store i32 %356, i32* %39
br label %357
357: ; preds = %352, %351, %253
ret void
}

LLVM IR (-O2):
define void @kernel_dgemm_nt_4x4_vs_lib4(i32 %0, i32 %1, i32 %2, double* %3, double* %4, double* %5, double* %6, i32 %7, i32 %8, i32 %9) {
%11 = alloca i32
%12 = alloca i32
%13 = alloca double*
%14 = alloca double*
%15 = alloca double*
%16 = alloca double*
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
store i32 %0, i32* %11
store i32 %1, i32* %12
store double* %3, double** %13
store double* %4, double** %14
store double* %5, double** %15
store double* %6, double** %16
store i32 %7, i32* %17
store i32 %8, i32* %18
store i32 %9, i32* %19
%22 = icmp slt i32 %2, 1
br i1 %22, label %23, label %169
23: ; preds = %10
%24 = icmp eq i32 %7, 0
br i1 %24, label %25, label %27
25: ; preds = %23
%26 = icmp eq i32 %9, 0
br i1 %26, label %73, label %121
27: ; preds = %23
%28 = icmp eq i32 %8, 0
%29 = getelementptr inbounds double, double* %5, i64 1
%30 = getelementptr inbounds double, double* %5, i64 2
%31 = getelementptr inbounds double, double* %5, i64 3
%32 = getelementptr inbounds double, double* %5, i64 4
%33 = getelementptr inbounds double, double* %5, i64 6
%34 = getelementptr inbounds double, double* %5, i64 7
%35 = getelementptr inbounds double, double* %5, i64 8
%36 = getelementptr inbounds double, double* %5, i64 9
%37 = getelementptr inbounds double, double* %5, i64 11
%38 = getelementptr inbounds double, double* %5, i64 12
%39 = getelementptr inbounds double, double* %5, i64 13
%40 = getelementptr inbounds double, double* %5, i64 14
%41 = select i1 %28, double* %32, double* %29
%42 = select i1 %28, double* %35, double* %30
%43 = select i1 %28, double* %38, double* %31
%44 = select i1 %28, double* %29, double* %32
%45 = select i1 %28, double* %36, double* %33
%46 = select i1 %28, double* %39, double* %34
%47 = select i1 %28, double* %30, double* %35
%48 = select i1 %28, double* %33, double* %36
%49 = select i1 %28, double* %40, double* %37
%50 = select i1 %28, double* %31, double* %38
%51 = select i1 %28, double* %34, double* %39
%52 = select i1 %28, double* %37, double* %40
%53 = getelementptr inbounds double, double* %5, i64 15
%54 = load double, double* %53
%55 = load double, double* %52
%56 = load double, double* %51
%57 = load double, double* %50
%58 = load double, double* %49
%59 = getelementptr inbounds double, double* %5, i64 10
%60 = load double, double* %59
%61 = load double, double* %48
%62 = load double, double* %47
%63 = load double, double* %46
%64 = load double, double* %45
%65 = getelementptr inbounds double, double* %5, i64 5
%66 = load double, double* %65
%67 = load double, double* %44
%68 = load double, double* %43
%69 = load double, double* %42
%70 = load double, double* %41
%71 = load double, double* %5
%72 = icmp eq i32 %9, 0
br i1 %72, label %73, label %121
73: ; preds = %27, %25
%74 = phi double [ 0.000000e+00, %25 ], [ %71, %27 ]
%75 = phi double [ 0.000000e+00, %25 ], [ %70, %27 ]
%76 = phi double [ 0.000000e+00, %25 ], [ %69, %27 ]
%77 = phi double [ 0.000000e+00, %25 ], [ %68, %27 ]
%78 = phi double [ 0.000000e+00, %25 ], [ %67, %27 ]
%79 = phi double [ 0.000000e+00, %25 ], [ %66, %27 ]
%80 = phi double [ 0.000000e+00, %25 ], [ %64, %27 ]
%81 = phi double [ 0.000000e+00, %25 ], [ %63, %27 ]
%82 = phi double [ 0.000000e+00, %25 ], [ %62, %27 ]
%83 = phi double [ 0.000000e+00, %25 ], [ %61, %27 ]
%84 = phi double [ 0.000000e+00, %25 ], [ %60, %27 ]
%85 = phi double [ 0.000000e+00, %25 ], [ %58, %27 ]
%86 = phi double [ 0.000000e+00, %25 ], [ %57, %27 ]
%87 = phi double [ 0.000000e+00, %25 ], [ %56, %27 ]
%88 = phi double [ 0.000000e+00, %25 ], [ %55, %27 ]
%89 = phi double [ 0.000000e+00, %25 ], [ %54, %27 ]
%90 = icmp sgt i32 %0, 3
store double %74, double* %6
%91 = getelementptr inbounds double, double* %6, i64 1
store double %78, double* %91
%92 = getelementptr inbounds double, double* %6, i64 2
store double %82, double* %92
br i1 %90, label %93, label %109
93: ; preds = %73
%94 = getelementptr inbounds double, double* %6, i64 3
store double %86, double* %94
%95 = getelementptr inbounds double, double* %6, i64 4
store double %75, double* %95
%96 = getelementptr inbounds double, double* %6, i64 5
store double %79, double* %96
%97 = getelementptr inbounds double, double* %6, i64 6
store double %83, double* %97
%98 = getelementptr inbounds double, double* %6, i64 7
store double %87, double* %98
%99 = getelementptr inbounds double, double* %6, i64 8
store double %76, double* %99
%100 = getelementptr inbounds double, double* %6, i64 9
store double %80, double* %100
%101 = getelementptr inbounds double, double* %6, i64 10
store double %84, double* %101
%102 = getelementptr inbounds double, double* %6, i64 11
store double %88, double* %102
%103 = icmp sgt i32 %1, 3
br i1 %103, label %104, label %172
104: ; preds = %93
%105 = getelementptr inbounds double, double* %6, i64 12
store double %77, double* %105
%106 = getelementptr inbounds double, double* %6, i64 13
store double %81, double* %106
%107 = getelementptr inbounds double, double* %6, i64 14
store double %85, double* %107
%108 = getelementptr inbounds double, double* %6, i64 15
store double %89, double* %108
br label %172
109: ; preds = %73
%110 = getelementptr inbounds double, double* %6, i64 4
store double %75, double* %110
%111 = getelementptr inbounds double, double* %6, i64 5
store double %79, double* %111
%112 = getelementptr inbounds double, double* %6, i64 6
store double %83, double* %112
%113 = getelementptr inbounds double, double* %6, i64 8
store double %76, double* %113
%114 = getelementptr inbounds double, double* %6, i64 9
store double %80, double* %114
%115 = getelementptr inbounds double, double* %6, i64 10
store double %84, double* %115
%116 = icmp sgt i32 %1, 3
br i1 %116, label %117, label %172
117: ; preds = %109
%118 = getelementptr inbounds double, double* %6, i64 12
store double %77, double* %118
%119 = getelementptr inbounds double, double* %6, i64 13
store double %81, double* %119
%120 = getelementptr inbounds double, double* %6, i64 14
store double %85, double* %120
br label %172
121: ; preds = %27, %25
%122 = phi double [ 0.000000e+00, %25 ], [ %71, %27 ]
%123 = phi double [ 0.000000e+00, %25 ], [ %70, %27 ]
%124 = phi double [ 0.000000e+00, %25 ], [ %69, %27 ]
%125 = phi double [ 0.000000e+00, %25 ], [ %68, %27 ]
%126 = phi double [ 0.000000e+00, %25 ], [ %67, %27 ]
%127 = phi double [ 0.000000e+00, %25 ], [ %66, %27 ]
%128 = phi double [ 0.000000e+00, %25 ], [ %64, %27 ]
%129 = phi double [ 0.000000e+00, %25 ], [ %63, %27 ]
%130 = phi double [ 0.000000e+00, %25 ], [ %62, %27 ]
%131 = phi double [ 0.000000e+00, %25 ], [ %61, %27 ]
%132 = phi double [ 0.000000e+00, %25 ], [ %60, %27 ]
%133 = phi double [ 0.000000e+00, %25 ], [ %58, %27 ]
%134 = phi double [ 0.000000e+00, %25 ], [ %57, %27 ]
%135 = phi double [ 0.000000e+00, %25 ], [ %56, %27 ]
%136 = phi double [ 0.000000e+00, %25 ], [ %55, %27 ]
%137 = phi double [ 0.000000e+00, %25 ], [ %54, %27 ]
%138 = icmp sgt i32 %1, 3
store double %122, double* %6
%139 = getelementptr inbounds double, double* %6, i64 1
store double %123, double* %139
%140 = getelementptr inbounds double, double* %6, i64 2
store double %124, double* %140
br i1 %138, label %141, label %157
141: ; preds = %121
%142 = getelementptr inbounds double, double* %6, i64 3
store double %125, double* %142
%143 = getelementptr inbounds double, double* %6, i64 4
store double %126, double* %143
%144 = getelementptr inbounds double, double* %6, i64 5
store double %127, double* %144
%145 = getelementptr inbounds double, double* %6, i64 6
store double %128, double* %145
%146 = getelementptr inbounds double, double* %6, i64 7
store double %129, double* %146
%147 = getelementptr inbounds double, double* %6, i64 8
store double %130, double* %147
%148 = getelementptr inbounds double, double* %6, i64 9
store double %131, double* %148
%149 = getelementptr inbounds double, double* %6, i64 10
store double %132, double* %149
%150 = getelementptr inbounds double, double* %6, i64 11
store double %133, double* %150
%151 = icmp sgt i32 %0, 3
br i1 %151, label %152, label %172
152: ; preds = %141
%153 = getelementptr inbounds double, double* %6, i64 12
store double %134, double* %153
%154 = getelementptr inbounds double, double* %6, i64 13
store double %135, double* %154
%155 = getelementptr inbounds double, double* %6, i64 14
store double %136, double* %155
%156 = getelementptr inbounds double, double* %6, i64 15
store double %137, double* %156
br label %172
157: ; preds = %121
%158 = getelementptr inbounds double, double* %6, i64 4
store double %126, double* %158
%159 = getelementptr inbounds double, double* %6, i64 5
store double %127, double* %159
%160 = getelementptr inbounds double, double* %6, i64 6
store double %128, double* %160
%161 = getelementptr inbounds double, double* %6, i64 8
store double %130, double* %161
%162 = getelementptr inbounds double, double* %6, i64 9
store double %131, double* %162
%163 = getelementptr inbounds double, double* %6, i64 10
store double %132, double* %163
%164 = icmp sgt i32 %0, 3
br i1 %164, label %165, label %172
165: ; preds = %157
%166 = getelementptr inbounds double, double* %6, i64 12
store double %134, double* %166
%167 = getelementptr inbounds double, double* %6, i64 13
store double %135, double* %167
%168 = getelementptr inbounds double, double* %6, i64 14
store double %136, double* %168
br label %172
169: ; preds = %10
%170 = lshr i32 %2, 2
store i32 %170, i32* %20
%171 = and i32 %2, 3
store i32 %171, i32* %21
br label %172
172: ; preds = %109, %117, %93, %104, %157, %165, %141, %152, %169
ret void
}