user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<kernel_dgemm_nt_4x4_lib4>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xd8,%rsp
  mov    %edi,-0xb4(%rbp)
  mov    %rsi,-0xc0(%rbp)
  mov    %rdx,-0xc8(%rbp)
  mov    %rcx,-0xd0(%rbp)
  mov    %r8,-0xd8(%rbp)
  mov    %r9d,-0xb8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  cmpl   $0x0,-0xb4(%rbp)
  jg     L17
  movl   $0x4,-0x9c(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x98(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x78(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0xb8(%rbp),%eax
  test   %eax,%eax
  jne    L78
  mov    0x18(%rbp),%eax
  test   %eax,%eax
  jne    L50
  jmp    L38
L78:
  mov    0x10(%rbp),%eax
  test   %eax,%eax
  jne    L54
  mov    -0xd0(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  jmp    L33
L54:
  mov    -0xd0(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  mov    -0xd0(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0xd0(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0xd0(%rbp),%rcx
  mov    -0x9c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x20(%rbp)
L33:
  mov    0x18(%rbp),%eax
  test   %eax,%eax
  jne    L46
  nop
L38:
  mov    -0xd8(%rbp),%rax
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rax
  add    $0x18,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  jmp    2068 <.SDONE>
L50:
  nop
  jmp    L27
L46:
  nop
L27:
  mov    -0xd8(%rbp),%rax
  movsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rax
  add    $0x8,%rax
  movsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rax
  add    $0x10,%rax
  movsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rax
  add    $0x18,%rax
  movsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    $0x1,%eax
  add    %eax,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rdx
  mov    -0x9c(%rbp),%eax
  add    %eax,%eax
  add    $0x3,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  movsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x1,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    $0x2,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0xd8(%rbp),%rcx
  mov    -0x9c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  jmp    2068 <.SDONE>
L17:
  mov    -0xb4(%rbp),%eax
  lea    0x3(%rax),%edx
  test   %eax,%eax
  cmovs  %edx,%eax
  sar    $0x2,%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0xb4(%rbp),%eax
  cltd
  shr    $0x1e,%edx
  add    %edx,%eax
  and    $0x3,%eax
  sub    %edx,%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0xc0(%rbp),%rax
  mov    -0xc8(%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    -0xa4(%rbp),%esi
  test   %esi,%esi
  je     1ca2 <.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");
}
```