user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<kernel_dgemm_nt_4x4_lib4>:
  endbr64
  push   %rbx
  sub    $0xb0,%rsp
  mov    %rsi,0x98(%rsp)
  mov    %rdx,0x90(%rsp)
  mov    %rcx,0x88(%rsp)
  mov    %r8,0x80(%rsp)
  mov    %r9d,0x7c(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xa8(%rsp)
  xor    %eax,%eax
  test   %edi,%edi
  jle    L4
  mov    %edi,%eax
  and    $0x3,%edi
  sar    $0x2,%eax
  mov    %edi,0xa4(%rsp)
  mov    %eax,0xa0(%rsp)
  mov    0x98(%rsp),%rax
  mov    0x90(%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    0xa0(%rsp),%esi
  test   %esi,%esi
  je     13a6 <.SCONSIDKLEFT>
```

assistant: ```c
void kernel_dgemm_nt_4x4_lib4(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:
    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;
    D[0 + bs * 3] = c_03;
    D[1 + bs * 3] = c_13;
    D[2 + bs * 3] = c_23;
    D[3 + bs * 3] = c_33;
    return;
  store_t:
    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;
    D[0 + bs * 3] = c_30;
    D[1 + bs * 3] = c_31;
    D[2 + bs * 3] = c_32;
    D[3 + bs * 3] = c_33;
    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     .SCONSIDKLEFT            \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".SLOOPKITER:                    \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    .SLOOPKITER              \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".SCONSIDKLEFT:                  \n\t"
                   "                                \n\t"
                   "movl      %1, %%esi             \n\t"
                   "testl  %%esi, %%esi             \n\t"
                   "je     .SPOSTACCUM              \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".SLOOPKLEFT:                    \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    .SLOOPKLEFT              \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".SPOSTACCUM:                    \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     .S0                      \n\t"
                   "                                \n\t"
                   "movq   %4, %%rax                \n\t"
                   "                                \n\t"
                   "movl   %7, %%edx                \n\t"
                   "testl  %%edx, %%edx             \n\t"
                   "je     .S_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     .S1_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    .S1_T_E                  \n\t"
                   "                                \n\t"
                   ".S1_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"
                   ".S1_T_E:                        \n\t"
                   "                                \n\t"
                   "movl   %8, %%edx                \n\t"
                   "testl  %%edx, %%edx             \n\t"
                   "jne    .STORE_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    .STORE_N                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".S_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     .S1_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    .S1_N_E                  \n\t"
                   "                                \n\t"
                   ".S1_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"
                   ".S1_N_E:                        \n\t"
                   "                                \n\t"
                   "movl   %8, %%edx                \n\t"
                   "testl  %%edx, %%edx             \n\t"
                   "je     .S_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    .STORE_T                 \n\t"
                   "                                \n\t"
                   ".S_N_N:                         \n\t"
                   "                                \n\t"
                   "jmp    .STORE_N                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".S0:                            \n\t"
                   "                                \n\t"
                   "movl   %8, %%ecx                \n\t"
                   "testl  %%ecx, %%ecx             \n\t"
                   "je     .S0_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    .STORE_T                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".S0_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    .STORE_N                 \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".STORE_N:                       \n\t"
                   "                                \n\t"
                   "movq   %6, %%rbx                \n\t"
                   "                                \n\t"
                   "movaps  %%xmm1, (%%rbx)         \n\t"
                   "movaps  %%xmm5, 16(%%rbx)       \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"
                   "movaps  %%xmm2, 96(%%rbx)       \n\t"
                   "movaps  %%xmm6, 112(%%rbx)      \n\t"
                   "                                \n\t"
                   "jmp    .SDONE                   \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".STORE_T:                       \n\t"
                   "                                \n\t"
                   "movq   %6, %%rbx                \n\t"
                   "                                \n\t"
                   "movaps  %%xmm1, (%%rbx)         \n\t"
                   "movaps  %%xmm3, 16(%%rbx)       \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"
                   "movaps  %%xmm4, 96(%%rbx)       \n\t"
                   "movaps  %%xmm6, 112(%%rbx)      \n\t"
                   "                                \n\t"
                   "                                \n\t"
                   ".SDONE:                         \n\t"
                   "                                \n\t"
                   :
                   : "m"(k_iter), "m"(k_left), "m"(A), "m"(B), "m"(C), "m"(alg), "m"(D), "m"(tc), "m"(td)
                   : "rax", "rbx", "rcx", "rdx", "rsi", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15", "memory");
}
```