user: What is the c source code of the assembly code below:

```asm
<kernel_dgemm_diag_left_4_lib4>:
  endbr64
  test   %edi,%edi
  jle    L68
  movupd (%rsi),%xmm1
  movupd 0x10(%rsi),%xmm0
  mov    %rdx,%r10
  mov    %rcx,%r11
  movapd D7(%rip),%xmm8
  lea    -0x3(%rdi),%eax
  movapd %xmm1,%xmm3
  movapd %xmm0,%xmm4
  movapd %xmm1,%xmm9
  unpckhpd %xmm3,%xmm3
  unpckhpd %xmm4,%xmm4
  xorpd  %xmm8,%xmm9
  movapd %xmm3,%xmm2
  movapd %xmm4,%xmm5
  movapd %xmm1,%xmm3
  xorpd  %xmm0,%xmm8
  movapd %xmm0,%xmm4
  cmp    $0xffffffff,%r9d
  je     L188
  test   %r9d,%r9d
  jne    L93
  test   %eax,%eax
  jle    L201
  lea    0x7f(%rdx),%rax
  lea    -0x4(%rdi),%esi
  sub    %r8,%rax
  cmp    $0xfe,%rax
  jbe    L172
  mov    %esi,%r9d
  mov    %r8,%rax
  xor    %ecx,%ecx
  shr    $0x2,%r9d
  add    $0x1,%r9d
  nopw   0x0(%rax,%rax,1)
L49:
  movupd 0x10(%rdx),%xmm8
  movupd 0x20(%rdx),%xmm7
  add    $0x1,%ecx
  sub    $0xffffffffffffff80,%rdx
  movupd -0x50(%rdx),%xmm6
  movupd -0x40(%rdx),%xmm5
  sub    $0xffffffffffffff80,%rax
  movupd -0x30(%rdx),%xmm4
  movupd -0x20(%rdx),%xmm3
  mulpd  %xmm0,%xmm8
  movupd -0x10(%rdx),%xmm2
  movupd -0x80(%rdx),%xmm9
  mulpd  %xmm1,%xmm7
  mulpd  %xmm0,%xmm6
  mulpd  %xmm1,%xmm5
  mulpd  %xmm0,%xmm4
  mulpd  %xmm1,%xmm3
  movups %xmm8,-0x70(%rax)
  mulpd  %xmm0,%xmm2
  movups %xmm7,-0x60(%rax)
  mulpd  %xmm1,%xmm9
  movups %xmm6,-0x50(%rax)
  movups %xmm5,-0x40(%rax)
  movups %xmm4,-0x30(%rax)
  movups %xmm3,-0x20(%rax)
  movups %xmm2,-0x10(%rax)
  movups %xmm9,-0x80(%rax)
  cmp    %r9d,%ecx
  jb     L49
L52:
  shr    $0x2,%esi
  lea    0x1(%rsi),%eax
  mov    %rax,%r9
  shl    $0x7,%rax
  shl    $0x2,%r9d
  add    %rax,%r10
  add    %rax,%r8
  cmp    %r9d,%edi
  jle    L68
L201:
  movupd 0x10(%r10),%xmm2
  movupd (%r10),%xmm3
  mov    %edi,%eax
  mov    $0x1,%edx
  sub    %r9d,%eax
  cmp    %edi,%r9d
  mulpd  %xmm0,%xmm2
  cmovge %edx,%eax
  mulpd  %xmm1,%xmm3
  movups %xmm2,0x10(%r8)
  movups %xmm3,(%r8)
  cmp    $0x1,%eax
  je     L68
  movupd 0x30(%r10),%xmm2
  movupd 0x20(%r10),%xmm3
  mulpd  %xmm0,%xmm2
  mulpd  %xmm1,%xmm3
  movups %xmm2,0x30(%r8)
  movups %xmm3,0x20(%r8)
  cmp    $0x2,%eax
  je     L68
  movupd 0x50(%r10),%xmm2
  movupd 0x40(%r10),%xmm3
  mulpd  %xmm0,%xmm2
  mulpd  %xmm1,%xmm3
  movups %xmm2,0x50(%r8)
  movups %xmm3,0x40(%r8)
  cmp    $0x3,%eax
  je     L68
  movupd 0x70(%r10),%xmm2
  mulpd  %xmm2,%xmm0
  movupd 0x60(%r10),%xmm2
  mulpd  %xmm2,%xmm1
  movups %xmm0,0x70(%r8)
  movups %xmm1,0x60(%r8)
  ret
  nopl   0x0(%rax)
L68:
  ret
  nopl   0x0(%rax)
L93:
  movapd %xmm1,%xmm9
  movapd %xmm0,%xmm8
L188:
  movapd %xmm9,%xmm2
  movapd %xmm8,%xmm1
  push   %rbx
  movapd %xmm8,%xmm0
  unpckhpd %xmm2,%xmm2
  unpckhpd %xmm1,%xmm1
  xor    %esi,%esi
  movapd %xmm2,%xmm3
  movapd %xmm9,%xmm2
  test   %eax,%eax
  jle    L38
  lea    0x7f(%r11),%rax
  lea    -0x4(%rdi),%esi
  sub    %r8,%rax
  cmp    $0xfe,%rax
  jbe    L205
  lea    0x7f(%r10),%rax
  sub    %r8,%rax
  cmp    $0xfe,%rax
  jbe    L205
  mov    %esi,%ebx
  mov    %r11,%rcx
  mov    %r10,%rdx
  mov    %r8,%rax
  shr    $0x2,%ebx
  xor    %r9d,%r9d
  add    $0x1,%ebx
  nopw   0x0(%rax,%rax,1)
L219:
  movupd 0x10(%rdx),%xmm6
  movupd 0x30(%rdx),%xmm4
  add    $0x1,%r9d
  sub    $0xffffffffffffff80,%rcx
  movupd -0x70(%rcx),%xmm3
  movupd -0x50(%rcx),%xmm2
  sub    $0xffffffffffffff80,%rdx
  sub    $0xffffffffffffff80,%rax
  mulpd  %xmm8,%xmm6
  movupd -0x60(%rdx),%xmm5
  movupd -0x60(%rcx),%xmm0
  mulpd  %xmm8,%xmm4
  movupd -0x40(%rcx),%xmm1
  movupd -0x20(%rcx),%xmm7
  mulpd  %xmm9,%xmm5
  movupd -0x80(%rcx),%xmm10
  addpd  %xmm3,%xmm6
  movupd -0x40(%rdx),%xmm3
  addpd  %xmm2,%xmm4
  movupd -0x30(%rdx),%xmm2
  mulpd  %xmm9,%xmm3
  addpd  %xmm0,%xmm5
  movupd -0x30(%rcx),%xmm0
  mulpd  %xmm8,%xmm2
  addpd  %xmm1,%xmm3
  movupd -0x20(%rdx),%xmm1
  addpd  %xmm0,%xmm2
  movupd -0x10(%rdx),%xmm0
  mulpd  %xmm9,%xmm1
  mulpd  %xmm8,%xmm0
  addpd  %xmm7,%xmm1
  movupd -0x10(%rcx),%xmm7
  addpd  %xmm7,%xmm0
  movupd -0x80(%rdx),%xmm7
  movups %xmm6,-0x70(%rax)
  movups %xmm5,-0x60(%rax)
  mulpd  %xmm9,%xmm7
  movups %xmm4,-0x50(%rax)
  movups %xmm3,-0x40(%rax)
  movups %xmm2,-0x30(%rax)
  movups %xmm1,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  addpd  %xmm10,%xmm7
  movups %xmm7,-0x80(%rax)
  cmp    %r9d,%ebx
  ja     L219
L78:
  shr    $0x2,%esi
  lea    0x1(%rsi),%eax
  mov    %rax,%rsi
  shl    $0x7,%rax
  shl    $0x2,%esi
  add    %rax,%r10
  add    %rax,%r11
  add    %rax,%r8
  cmp    %esi,%edi
  jle    L57
L38:
  movupd 0x10(%r10),%xmm0
  movupd (%r10),%xmm1
  mov    %edi,%eax
  mov    $0x1,%edx
  movupd 0x10(%r11),%xmm2
  sub    %esi,%eax
  cmp    %edi,%esi
  mulpd  %xmm8,%xmm0
  cmovge %edx,%eax
  mulpd  %xmm9,%xmm1
  addpd  %xmm2,%xmm0
  movupd (%r11),%xmm2
  addpd  %xmm2,%xmm1
  movups %xmm0,0x10(%r8)
  movups %xmm1,(%r8)
  cmp    $0x1,%eax
  je     L57
  movupd 0x30(%r10),%xmm0
  movupd 0x30(%r11),%xmm1
  movupd 0x20(%r11),%xmm3
  mulpd  %xmm8,%xmm0
  addpd  %xmm1,%xmm0
  movupd 0x20(%r10),%xmm1
  mulpd  %xmm9,%xmm1
  movups %xmm0,0x30(%r8)
  addpd  %xmm3,%xmm1
  movups %xmm1,0x20(%r8)
  cmp    $0x2,%eax
  je     L57
  movupd 0x50(%r10),%xmm0
  movupd 0x50(%r11),%xmm1
  movupd 0x40(%r11),%xmm2
  mulpd  %xmm8,%xmm0
  addpd  %xmm1,%xmm0
  movupd 0x40(%r10),%xmm1
  mulpd  %xmm9,%xmm1
  movups %xmm0,0x50(%r8)
  addpd  %xmm2,%xmm1
  movups %xmm1,0x40(%r8)
  cmp    $0x3,%eax
  je     L57
  movupd 0x70(%r10),%xmm0
  movupd 0x70(%r11),%xmm1
  movupd 0x60(%r11),%xmm2
  mulpd  %xmm8,%xmm0
  addpd  %xmm1,%xmm0
  movupd 0x60(%r10),%xmm1
  mulpd  %xmm9,%xmm1
  movups %xmm0,0x70(%r8)
  addpd  %xmm2,%xmm1
  movups %xmm1,0x60(%r8)
L57:
  pop    %rbx
  ret
  nopl   0x0(%rax)
L205:
  mov    %esi,%r9d
  mov    %r8,%rcx
  mov    %r11,%rdx
  mov    %r10,%rax
  shr    $0x2,%r9d
  add    $0x1,%r9d
  shl    $0x7,%r9
  add    %r10,%r9
  nopl   0x0(%rax,%rax,1)
L170:
  movsd  (%rax),%xmm7
  sub    $0xffffffffffffff80,%rax
  sub    $0xffffffffffffff80,%rdx
  sub    $0xffffffffffffff80,%rcx
  movsd  -0x78(%rax),%xmm6
  movsd  -0x70(%rax),%xmm5
  movsd  -0x68(%rax),%xmm4
  mulsd  %xmm2,%xmm7
  mulsd  %xmm3,%xmm6
  addsd  -0x80(%rdx),%xmm7
  mulsd  %xmm0,%xmm5
  addsd  -0x78(%rdx),%xmm6
  mulsd  %xmm1,%xmm4
  addsd  -0x70(%rdx),%xmm5
  addsd  -0x68(%rdx),%xmm4
  movsd  %xmm7,-0x80(%rcx)
  movsd  %xmm6,-0x78(%rcx)
  movsd  %xmm5,-0x70(%rcx)
  movsd  %xmm4,-0x68(%rcx)
  movsd  -0x58(%rax),%xmm6
  movsd  -0x50(%rax),%xmm5
  movsd  -0x48(%rax),%xmm4
  movsd  -0x60(%rax),%xmm7
  mulsd  %xmm3,%xmm6
  mulsd  %xmm0,%xmm5
  addsd  -0x58(%rdx),%xmm6
  mulsd  %xmm1,%xmm4
  addsd  -0x50(%rdx),%xmm5
  mulsd  %xmm2,%xmm7
  addsd  -0x48(%rdx),%xmm4
  addsd  -0x60(%rdx),%xmm7
  movsd  %xmm6,-0x58(%rcx)
  movsd  %xmm5,-0x50(%rcx)
  movsd  %xmm4,-0x48(%rcx)
  movsd  %xmm7,-0x60(%rcx)
  movsd  -0x38(%rax),%xmm6
  movsd  -0x30(%rax),%xmm5
  movsd  -0x28(%rax),%xmm4
  movsd  -0x40(%rax),%xmm7
  mulsd  %xmm3,%xmm6
  mulsd  %xmm0,%xmm5
  addsd  -0x38(%rdx),%xmm6
  mulsd  %xmm1,%xmm4
  addsd  -0x30(%rdx),%xmm5
  mulsd  %xmm2,%xmm7
  addsd  -0x28(%rdx),%xmm4
  addsd  -0x40(%rdx),%xmm7
  movsd  %xmm7,-0x40(%rcx)
  movsd  %xmm6,-0x38(%rcx)
  movsd  %xmm5,-0x30(%rcx)
  movsd  %xmm4,-0x28(%rcx)
  movsd  -0x18(%rax),%xmm6
  movsd  -0x10(%rax),%xmm5
  movsd  -0x8(%rax),%xmm4
  movsd  -0x20(%rax),%xmm7
  mulsd  %xmm3,%xmm6
  mulsd  %xmm0,%xmm5
  addsd  -0x18(%rdx),%xmm6
  mulsd  %xmm1,%xmm4
  addsd  -0x10(%rdx),%xmm5
  mulsd  %xmm2,%xmm7
  addsd  -0x8(%rdx),%xmm4
  addsd  -0x20(%rdx),%xmm7
  movsd  %xmm6,-0x18(%rcx)
  movsd  %xmm5,-0x10(%rcx)
  movsd  %xmm4,-0x8(%rcx)
  movsd  %xmm7,-0x20(%rcx)
  cmp    %r9,%rax
  jne    L170
  jmp    L78
  nopl   0x0(%rax)
L172:
  mov    %esi,%ecx
  mov    %r10,%rax
  shr    $0x2,%ecx
  add    $0x1,%ecx
  shl    $0x7,%rcx
  add    %rdx,%rcx
  mov    %r8,%rdx
  nopl   (%rax)
L158:
  movsd  0x8(%rax),%xmm8
  movsd  0x10(%rax),%xmm7
  sub    $0xffffffffffffff80,%rax
  sub    $0xffffffffffffff80,%rdx
  movsd  -0x68(%rax),%xmm6
  movsd  -0x80(%rax),%xmm9
  mulsd  %xmm2,%xmm8
  mulsd  %xmm4,%xmm7
  mulsd  %xmm5,%xmm6
  mulsd  %xmm3,%xmm9
  movsd  %xmm8,-0x78(%rdx)
  movsd  %xmm7,-0x70(%rdx)
  movsd  %xmm6,-0x68(%rdx)
  movsd  %xmm9,-0x80(%rdx)
  movsd  -0x50(%rax),%xmm7
  movsd  -0x58(%rax),%xmm8
  movsd  -0x48(%rax),%xmm6
  movsd  -0x60(%rax),%xmm9
  mulsd  %xmm2,%xmm8
  mulsd  %xmm4,%xmm7
  mulsd  %xmm5,%xmm6
  mulsd  %xmm3,%xmm9
  movsd  %xmm8,-0x58(%rdx)
  movsd  %xmm7,-0x50(%rdx)
  movsd  %xmm6,-0x48(%rdx)
  movsd  %xmm9,-0x60(%rdx)
  movsd  -0x30(%rax),%xmm7
  movsd  -0x38(%rax),%xmm8
  movsd  -0x28(%rax),%xmm6
  movsd  -0x40(%rax),%xmm9
  mulsd  %xmm2,%xmm8
  mulsd  %xmm4,%xmm7
  mulsd  %xmm5,%xmm6
  mulsd  %xmm3,%xmm9
  movsd  %xmm8,-0x38(%rdx)
  movsd  %xmm7,-0x30(%rdx)
  movsd  %xmm6,-0x28(%rdx)
  movsd  %xmm9,-0x40(%rdx)
  movsd  -0x10(%rax),%xmm7
  movsd  -0x18(%rax),%xmm8
  movsd  -0x8(%rax),%xmm6
  movsd  -0x20(%rax),%xmm9
  mulsd  %xmm2,%xmm8
  mulsd  %xmm4,%xmm7
  mulsd  %xmm5,%xmm6
  mulsd  %xmm3,%xmm9
  movsd  %xmm8,-0x18(%rdx)
  movsd  %xmm7,-0x10(%rdx)
  movsd  %xmm6,-0x8(%rdx)
  movsd  %xmm9,-0x20(%rdx)
  cmp    %rax,%rcx
  jne    L158
  jmp    L52
```

tool_calls: name: disassemble_data
arguments: data_tag: D7
type_guessed: byte[16]

tool: {"D7": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
void kernel_dgemm_diag_left_4_lib4(int kmax, double *A, double *B, double *C, double *D, int alg) {
  if (kmax <= 0)
    return;
  const int bs = 4;
  int k;
  double a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3, c_0, c_1, c_2, c_3;
  if (alg == -1) {
    a_0 = -A[0];
    a_1 = -A[1];
    a_2 = -A[2];
    a_3 = -A[3];
  } else {
    a_0 = A[0];
    a_1 = A[1];
    a_2 = A[2];
    a_3 = A[3];
  }
  if (alg == 0) {
    for (k = 0; k < kmax - 3; k += 4) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      b_0 = B[0 + bs * 1];
      b_1 = B[1 + bs * 1];
      b_2 = B[2 + bs * 1];
      b_3 = B[3 + bs * 1];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 1] = c_0;
      D[1 + bs * 1] = c_1;
      D[2 + bs * 1] = c_2;
      D[3 + bs * 1] = c_3;
      b_0 = B[0 + bs * 2];
      b_1 = B[1 + bs * 2];
      b_2 = B[2 + bs * 2];
      b_3 = B[3 + bs * 2];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 2] = c_0;
      D[1 + bs * 2] = c_1;
      D[2 + bs * 2] = c_2;
      D[3 + bs * 2] = c_3;
      b_0 = B[0 + bs * 3];
      b_1 = B[1 + bs * 3];
      b_2 = B[2 + bs * 3];
      b_3 = B[3 + bs * 3];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 3] = c_0;
      D[1 + bs * 3] = c_1;
      D[2 + bs * 3] = c_2;
      D[3 + bs * 3] = c_3;
      B += 16;
      D += 16;
    }
    for (; k < kmax; k++) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = a_0 * b_0;
      c_1 = a_1 * b_1;
      c_2 = a_2 * b_2;
      c_3 = a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      B += 4;
      D += 4;
    }
  } else {
    for (k = 0; k < kmax - 3; k += 4) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = C[0 + bs * 0] + a_0 * b_0;
      c_1 = C[1 + bs * 0] + a_1 * b_1;
      c_2 = C[2 + bs * 0] + a_2 * b_2;
      c_3 = C[3 + bs * 0] + a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      b_0 = B[0 + bs * 1];
      b_1 = B[1 + bs * 1];
      b_2 = B[2 + bs * 1];
      b_3 = B[3 + bs * 1];
      c_0 = C[0 + bs * 1] + a_0 * b_0;
      c_1 = C[1 + bs * 1] + a_1 * b_1;
      c_2 = C[2 + bs * 1] + a_2 * b_2;
      c_3 = C[3 + bs * 1] + a_3 * b_3;
      D[0 + bs * 1] = c_0;
      D[1 + bs * 1] = c_1;
      D[2 + bs * 1] = c_2;
      D[3 + bs * 1] = c_3;
      b_0 = B[0 + bs * 2];
      b_1 = B[1 + bs * 2];
      b_2 = B[2 + bs * 2];
      b_3 = B[3 + bs * 2];
      c_0 = C[0 + bs * 2] + a_0 * b_0;
      c_1 = C[1 + bs * 2] + a_1 * b_1;
      c_2 = C[2 + bs * 2] + a_2 * b_2;
      c_3 = C[3 + bs * 2] + a_3 * b_3;
      D[0 + bs * 2] = c_0;
      D[1 + bs * 2] = c_1;
      D[2 + bs * 2] = c_2;
      D[3 + bs * 2] = c_3;
      b_0 = B[0 + bs * 3];
      b_1 = B[1 + bs * 3];
      b_2 = B[2 + bs * 3];
      b_3 = B[3 + bs * 3];
      c_0 = C[0 + bs * 3] + a_0 * b_0;
      c_1 = C[1 + bs * 3] + a_1 * b_1;
      c_2 = C[2 + bs * 3] + a_2 * b_2;
      c_3 = C[3 + bs * 3] + a_3 * b_3;
      D[0 + bs * 3] = c_0;
      D[1 + bs * 3] = c_1;
      D[2 + bs * 3] = c_2;
      D[3 + bs * 3] = c_3;
      B += 16;
      C += 16;
      D += 16;
    }
    for (; k < kmax; k++) {
      b_0 = B[0 + bs * 0];
      b_1 = B[1 + bs * 0];
      b_2 = B[2 + bs * 0];
      b_3 = B[3 + bs * 0];
      c_0 = C[0 + bs * 0] + a_0 * b_0;
      c_1 = C[1 + bs * 0] + a_1 * b_1;
      c_2 = C[2 + bs * 0] + a_2 * b_2;
      c_3 = C[3 + bs * 0] + a_3 * b_3;
      D[0 + bs * 0] = c_0;
      D[1 + bs * 0] = c_1;
      D[2 + bs * 0] = c_2;
      D[3 + bs * 0] = c_3;
      B += 4;
      C += 4;
      D += 4;
    }
  }
}
```