user: Converte this assembly snippet into its equivalent C code:

```asm
<kernel_add_align_panel_3_0_lib4>:
  endbr64
  test   %edi,%edi
  jle    L101
  lea    -0x3(%rdi),%r10d
  push   %rbx
  mov    %edi,%r8d
  movapd %xmm0,%xmm1
  mov    %rdx,%rcx
  test   %r10d,%r10d
  jle    L130
  lea    0xf7(%rsi),%rax
  lea    -0x4(%rdi),%edi
  sub    %rdx,%rax
  cmp    $0x1ee,%rax
  jbe    L88
  cmp    $0x7,%edi
  jbe    L88
  mov    %edi,%ebx
  mov    %rdx,%rax
  unpcklpd %xmm0,%xmm0
  mov    %rsi,%rdx
  shr    $0x3,%ebx
  lea    -0x1(%rbx),%r11d
  shl    $0x8,%r11
  lea    0x100(%rcx,%r11,1),%r9
  nopl   (%rax)
L128:
  movupd 0x10(%rdx),%xmm3
  movupd 0x10(%rax),%xmm2
  add    $0x100,%rax
  add    $0x100,%rdx
  movupd -0x70(%rdx),%xmm5
  movupd -0x70(%rax),%xmm6
  movhpd -0x80(%rdx),%xmm3
  movhpd -0x80(%rax),%xmm2
  movupd -0x80(%rax),%xmm4
  movupd -0x100(%rax),%xmm7
  mulpd  %xmm0,%xmm3
  shufpd $0x1,%xmm6,%xmm4
  movupd -0x50(%rax),%xmm6
  addpd  %xmm2,%xmm3
  movupd -0x80(%rdx),%xmm2
  shufpd $0x1,%xmm5,%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm4,%xmm2
  movupd -0x100(%rdx),%xmm4
  movlpd %xmm3,-0xf0(%rax)
  mulpd  %xmm0,%xmm4
  movhpd %xmm2,-0x70(%rax)
  shufpd $0x1,%xmm2,%xmm3
  movupd -0xd0(%rax),%xmm2
  movups %xmm3,-0x80(%rax)
  movhpd -0x60(%rax),%xmm2
  addpd  %xmm7,%xmm4
  movupd -0xe0(%rax),%xmm7
  movups %xmm4,-0x100(%rax)
  movupd -0xd0(%rdx),%xmm3
  movupd -0x50(%rdx),%xmm5
  movupd -0x60(%rax),%xmm4
  movhpd -0x60(%rdx),%xmm3
  mulpd  %xmm0,%xmm3
  shufpd $0x1,%xmm6,%xmm4
  addpd  %xmm2,%xmm3
  movupd -0x60(%rdx),%xmm2
  shufpd $0x1,%xmm5,%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm4,%xmm2
  movupd -0xe0(%rdx),%xmm4
  movlpd %xmm3,-0xd0(%rax)
  mulpd  %xmm0,%xmm4
  movhpd %xmm2,-0x50(%rax)
  shufpd $0x1,%xmm2,%xmm3
  movupd -0xb0(%rax),%xmm2
  movups %xmm3,-0x60(%rax)
  movhpd -0x40(%rax),%xmm2
  addpd  %xmm7,%xmm4
  movups %xmm4,-0xe0(%rax)
  movupd -0xb0(%rdx),%xmm3
  movhpd -0x40(%rdx),%xmm3
  mulpd  %xmm0,%xmm3
  addpd  %xmm2,%xmm3
  movupd -0x40(%rdx),%xmm2
  movupd -0x30(%rdx),%xmm5
  movupd -0x30(%rax),%xmm6
  movupd -0x40(%rax),%xmm4
  shufpd $0x1,%xmm5,%xmm2
  mulpd  %xmm0,%xmm2
  movupd -0xc0(%rax),%xmm7
  shufpd $0x1,%xmm6,%xmm4
  movupd -0x10(%rax),%xmm6
  addpd  %xmm4,%xmm2
  movupd -0xc0(%rdx),%xmm4
  movlpd %xmm3,-0xb0(%rax)
  mulpd  %xmm0,%xmm4
  movhpd %xmm2,-0x30(%rax)
  shufpd $0x1,%xmm2,%xmm3
  movupd -0x90(%rax),%xmm2
  movups %xmm3,-0x40(%rax)
  movhpd -0x20(%rax),%xmm2
  addpd  %xmm7,%xmm4
  movupd -0xa0(%rax),%xmm7
  movups %xmm4,-0xc0(%rax)
  movupd -0x90(%rdx),%xmm3
  movupd -0x10(%rdx),%xmm5
  movupd -0x20(%rax),%xmm4
  movhpd -0x20(%rdx),%xmm3
  mulpd  %xmm0,%xmm3
  shufpd $0x1,%xmm6,%xmm4
  addpd  %xmm2,%xmm3
  movupd -0x20(%rdx),%xmm2
  shufpd $0x1,%xmm5,%xmm2
  mulpd  %xmm0,%xmm2
  addpd  %xmm4,%xmm2
  movupd -0xa0(%rdx),%xmm4
  movlpd %xmm3,-0x90(%rax)
  mulpd  %xmm0,%xmm4
  shufpd $0x1,%xmm2,%xmm3
  movhpd %xmm2,-0x10(%rax)
  movups %xmm3,-0x20(%rax)
  addpd  %xmm7,%xmm4
  movups %xmm4,-0xa0(%rax)
  cmp    %rax,%r9
  jne    L128
  lea    (%rbx,%rbx,1),%eax
  mov    %rax,%r9
  shl    $0x7,%rax
  lea    (%rsi,%rax,1),%rdx
  add    %rcx,%rax
  lea    0x4(,%r9,4),%r9d
  movsd  (%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  (%rax),%xmm0
  movsd  %xmm0,(%rax)
  movsd  0x8(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x8(%rax),%xmm0
  movsd  %xmm0,0x8(%rax)
  movsd  0x10(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x10(%rax),%xmm0
  movsd  %xmm0,0x10(%rax)
  movsd  0x20(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x20(%rax),%xmm0
  movsd  %xmm0,0x20(%rax)
  movsd  0x28(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x28(%rax),%xmm0
  movsd  %xmm0,0x28(%rax)
  movsd  0x30(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x30(%rax),%xmm0
  movsd  %xmm0,0x30(%rax)
  movsd  0x40(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x40(%rax),%xmm0
  movsd  %xmm0,0x40(%rax)
  movsd  0x48(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x48(%rax),%xmm0
  movsd  %xmm0,0x48(%rax)
  movsd  0x50(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x50(%rax),%xmm0
  movsd  %xmm0,0x50(%rax)
  movsd  0x60(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x60(%rax),%xmm0
  movsd  %xmm0,0x60(%rax)
  movsd  0x68(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x68(%rax),%xmm0
  movsd  %xmm0,0x68(%rax)
  movsd  0x70(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x70(%rax),%xmm0
  movsd  %xmm0,0x70(%rax)
  cmp    %r9d,%r10d
  jle    L100
  movsd  0x80(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x80(%rax),%xmm0
  movsd  %xmm0,0x80(%rax)
  movsd  0x88(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x88(%rax),%xmm0
  movsd  %xmm0,0x88(%rax)
  movsd  0x90(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x90(%rax),%xmm0
  movsd  %xmm0,0x90(%rax)
  movsd  0xa0(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xa0(%rax),%xmm0
  movsd  %xmm0,0xa0(%rax)
  movsd  0xa8(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xa8(%rax),%xmm0
  movsd  %xmm0,0xa8(%rax)
  movsd  0xb0(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xb0(%rax),%xmm0
  movsd  %xmm0,0xb0(%rax)
  movsd  0xc0(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xc0(%rax),%xmm0
  movsd  %xmm0,0xc0(%rax)
  movsd  0xc8(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xc8(%rax),%xmm0
  movsd  %xmm0,0xc8(%rax)
  movsd  0xd0(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xd0(%rax),%xmm0
  movsd  %xmm0,0xd0(%rax)
  movsd  0xe0(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xe0(%rax),%xmm0
  movsd  %xmm0,0xe0(%rax)
  movsd  0xe8(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xe8(%rax),%xmm0
  movsd  %xmm0,0xe8(%rax)
  movsd  0xf0(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0xf0(%rax),%xmm0
  movsd  %xmm0,0xf0(%rax)
L100:
  shr    $0x2,%edi
  lea    0x1(%rdi),%eax
  mov    %rax,%rdi
  shl    $0x7,%rax
  shl    $0x2,%edi
  add    %rax,%rsi
  add    %rax,%rcx
  cmp    %edi,%r8d
  jle    L4
L131:
  mov    %r8d,%eax
  lea    0x37(%rcx),%rdx
  sub    %edi,%eax
  sub    %rsi,%rdx
  cmp    $0x6e,%rdx
  lea    -0x1(%rax),%edx
  seta   %r9b
  cmp    $0x1,%edx
  seta   %dl
  test   %dl,%r9b
  je     L94
  cmp    %r8d,%edi
  jge    L94
  movupd 0x10(%rsi),%xmm2
  movapd %xmm1,%xmm3
  movupd 0x10(%rcx),%xmm0
  mov    $0x1,%edx
  unpcklpd %xmm3,%xmm3
  movupd 0x30(%rsi),%xmm5
  movupd (%rsi),%xmm7
  cmovge %edx,%eax
  movhpd 0x20(%rsi),%xmm2
  movhpd 0x20(%rcx),%xmm0
  movupd 0x20(%rcx),%xmm4
  movupd 0x30(%rcx),%xmm6
  mulpd  %xmm3,%xmm2
  sub    $0x1,%eax
  and    $0xfffffffe,%eax
  shufpd $0x1,%xmm6,%xmm4
  mov    %eax,%edx
  mov    %rdx,%r9
  shl    $0x5,%rdx
  lea    (%rcx,%rdx,1),%rax
  addpd  %xmm0,%xmm2
  movupd 0x20(%rsi),%xmm0
  add    %rdx,%rsi
  lea    0x1(%rdi,%r9,1),%edx
  shufpd $0x1,%xmm5,%xmm0
  mulpd  %xmm3,%xmm0
  movupd (%rcx),%xmm5
  mulpd  %xmm7,%xmm3
  movlpd %xmm2,0x10(%rcx)
  addpd  %xmm4,%xmm0
  addpd  %xmm5,%xmm3
  movhpd %xmm0,0x30(%rcx)
  shufpd $0x1,%xmm0,%xmm2
  movups %xmm3,(%rcx)
  movups %xmm2,0x20(%rcx)
  movsd  (%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  (%rax),%xmm0
  movsd  %xmm0,(%rax)
  movsd  0x8(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x8(%rax),%xmm0
  movsd  %xmm0,0x8(%rax)
  movsd  0x10(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x10(%rax),%xmm0
  movsd  %xmm0,0x10(%rax)
  cmp    %edx,%r8d
  jle    L4
  movsd  0x20(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x20(%rax),%xmm0
  movsd  %xmm0,0x20(%rax)
  movsd  0x28(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x28(%rax),%xmm0
  movsd  %xmm0,0x28(%rax)
  mulsd  0x30(%rsi),%xmm1
  addsd  0x30(%rax),%xmm1
  movsd  %xmm1,0x30(%rax)
L4:
  pop    %rbx
  ret
  nopw   0x0(%rax,%rax,1)
L101:
  ret
  nopl   0x0(%rax)
L94:
  movsd  (%rsi),%xmm0
  lea    0x1(%rdi),%eax
  mulsd  %xmm1,%xmm0
  addsd  (%rcx),%xmm0
  movsd  %xmm0,(%rcx)
  movsd  0x8(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x8(%rcx),%xmm0
  movsd  %xmm0,0x8(%rcx)
  movsd  0x10(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x10(%rcx),%xmm0
  movsd  %xmm0,0x10(%rcx)
  cmp    %eax,%r8d
  jle    L4
  movsd  0x20(%rsi),%xmm0
  lea    0x2(%rdi),%eax
  mulsd  %xmm1,%xmm0
  addsd  0x20(%rcx),%xmm0
  movsd  %xmm0,0x20(%rcx)
  movsd  0x28(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x28(%rcx),%xmm0
  movsd  %xmm0,0x28(%rcx)
  movsd  0x30(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x30(%rcx),%xmm0
  movsd  %xmm0,0x30(%rcx)
  cmp    %eax,%r8d
  jle    L4
  movsd  0x40(%rsi),%xmm0
  lea    0x3(%rdi),%eax
  mulsd  %xmm1,%xmm0
  addsd  0x40(%rcx),%xmm0
  movsd  %xmm0,0x40(%rcx)
  movsd  0x48(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x48(%rcx),%xmm0
  movsd  %xmm0,0x48(%rcx)
  movsd  0x50(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x50(%rcx),%xmm0
  movsd  %xmm0,0x50(%rcx)
  cmp    %r8d,%eax
  jge    L4
  movsd  0x60(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x60(%rcx),%xmm0
  movsd  %xmm0,0x60(%rcx)
  movsd  0x68(%rsi),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x68(%rcx),%xmm0
  movsd  %xmm0,0x68(%rcx)
  mulsd  0x70(%rsi),%xmm1
  addsd  0x70(%rcx),%xmm1
  movsd  %xmm1,0x70(%rcx)
  pop    %rbx
  ret
  nop
L88:
  mov    %edi,%r9d
  mov    %rcx,%rax
  mov    %rsi,%rdx
  shr    $0x2,%r9d
  add    $0x1,%r9d
  shl    $0x7,%r9
  add    %rsi,%r9
  nopl   0x0(%rax,%rax,1)
L42:
  movsd  (%rdx),%xmm0
  sub    $0xffffffffffffff80,%rdx
  sub    $0xffffffffffffff80,%rax
  mulsd  %xmm1,%xmm0
  addsd  -0x80(%rax),%xmm0
  movsd  %xmm0,-0x80(%rax)
  movsd  -0x78(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x78(%rax),%xmm0
  movsd  %xmm0,-0x78(%rax)
  movsd  -0x70(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x70(%rax),%xmm0
  movsd  %xmm0,-0x70(%rax)
  movsd  -0x60(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x60(%rax),%xmm0
  movsd  %xmm0,-0x60(%rax)
  movsd  -0x58(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x58(%rax),%xmm0
  movsd  %xmm0,-0x58(%rax)
  movsd  -0x50(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x50(%rax),%xmm0
  movsd  %xmm0,-0x50(%rax)
  movsd  -0x40(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x40(%rax),%xmm0
  movsd  %xmm0,-0x40(%rax)
  movsd  -0x38(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x38(%rax),%xmm0
  movsd  %xmm0,-0x38(%rax)
  movsd  -0x30(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x30(%rax),%xmm0
  movsd  %xmm0,-0x30(%rax)
  movsd  -0x20(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x20(%rax),%xmm0
  movsd  %xmm0,-0x20(%rax)
  movsd  -0x18(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x18(%rax),%xmm0
  movsd  %xmm0,-0x18(%rax)
  movsd  -0x10(%rdx),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x10(%rax),%xmm0
  movsd  %xmm0,-0x10(%rax)
  cmp    %r9,%rdx
  jne    L42
  jmp    L100
  nopl   0x0(%rax)
L130:
  xor    %edi,%edi
  jmp    L131
```

assistant: ```c
void kernel_add_align_panel_3_0_lib4(int kmax, double alpha, double *A, double *B) {
  if (kmax <= 0)
    return;
  const int bs = 4;
  int k;
  for (k = 0; k < kmax - 3; k += 4) {
    B[0 + bs * 0] += alpha * A[0 + bs * 0];
    B[1 + bs * 0] += alpha * A[1 + bs * 0];
    B[2 + bs * 0] += alpha * A[2 + bs * 0];
    B[0 + bs * 1] += alpha * A[0 + bs * 1];
    B[1 + bs * 1] += alpha * A[1 + bs * 1];
    B[2 + bs * 1] += alpha * A[2 + bs * 1];
    B[0 + bs * 2] += alpha * A[0 + bs * 2];
    B[1 + bs * 2] += alpha * A[1 + bs * 2];
    B[2 + bs * 2] += alpha * A[2 + bs * 2];
    B[0 + bs * 3] += alpha * A[0 + bs * 3];
    B[1 + bs * 3] += alpha * A[1 + bs * 3];
    B[2 + bs * 3] += alpha * A[2 + bs * 3];
    A += 16;
    B += 16;
  }
  for (; k < kmax; k++) {
    B[0 + bs * 0] += alpha * A[0 + bs * 0];
    B[1 + bs * 0] += alpha * A[1 + bs * 0];
    B[2 + bs * 0] += alpha * A[2 + bs * 0];
    A += 4;
    B += 4;
  }
}
```