user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<kernel_dgema_1_lib4>:
  endbr64
  push   %rbx
  mov    %esi,%ebx
  mov    %ecx,%r10d
  mov    %rdx,%rsi
  lea    -0x3(%rdi),%r11d
  test   %ebx,%ebx
  je     L5
  cmp    $0x1,%ebx
  je     L204
  cmp    $0x2,%ebx
  je     L51
  xor    %eax,%eax
  test   %r11d,%r11d
  jle    L57
  shl    $0x2,%r9d
  shl    $0x2,%r10d
  mov    %r8,%rdx
  mov    %rsi,%rax
  movslq %r9d,%r9
  movslq %r10d,%r10
  xor    %ecx,%ecx
  shl    $0x3,%r9
  shl    $0x3,%r10
L157:
  movsd  (%rax),%xmm0
  add    $0x4,%ecx
  movsd  %xmm0,0x8(%rdx)
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,0x10(%rdx)
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,0x18(%rdx)
  movsd  0x18(%rax),%xmm0
  add    %r9,%rdx
  add    %r10,%rax
  movsd  %xmm0,(%rdx)
  cmp    %ecx,%r11d
  jg     L157
  lea    -0x4(%rdi),%eax
  shr    $0x2,%eax
  lea    0x1(%rax),%edx
  imul   %rdx,%r9
  mov    %rdx,%rax
  imul   %rdx,%r10
  shl    $0x2,%eax
  add    %r9,%r8
  add    %r10,%rsi
L57:
  cmp    %eax,%edi
  jle    L179
  movsd  (%rsi),%xmm0
  lea    0x1(%rax),%edx
  movsd  %xmm0,0x8(%r8)
  cmp    %edx,%edi
  je     L179
  movsd  0x8(%rsi),%xmm0
  add    $0x2,%eax
  movsd  %xmm0,0x10(%r8)
  cmp    %eax,%edi
  je     L179
  movsd  0x10(%rsi),%xmm0
  movsd  %xmm0,0x18(%r8)
L179:
  pop    %rbx
  ret
  nopl   (%rax)
L204:
  test   %r11d,%r11d
  jle    L27
  lea    0x0(,%r9,4),%ebx
  mov    %r8,%rdx
  mov    %rsi,%rax
  xor    %ecx,%ecx
  shl    $0x2,%r10d
  movslq %ebx,%rbx
  movslq %r10d,%r10
  shl    $0x3,%rbx
  shl    $0x3,%r10
  nopl   0x0(%rax,%rax,1)
L195:
  movsd  (%rax),%xmm0
  add    $0x4,%ecx
  movsd  %xmm0,0x18(%rdx)
  movsd  0x8(%rax),%xmm0
  add    %rbx,%rdx
  movsd  %xmm0,(%rdx)
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,0x8(%rdx)
  movsd  0x18(%rax),%xmm0
  add    %r10,%rax
  movsd  %xmm0,0x10(%rdx)
  cmp    %ecx,%r11d
  jg     L195
  lea    -0x4(%rdi),%eax
  shr    $0x2,%eax
  lea    0x1(%rax),%edx
  imul   %rdx,%rbx
  mov    %rdx,%rax
  imul   %rdx,%r10
  shl    $0x2,%eax
  add    %rbx,%r8
  add    %r10,%rsi
L114:
  cmp    %eax,%edi
  jle    L179
  movsd  (%rsi),%xmm0
  lea    0x1(%rax),%edx
  movsd  %xmm0,0x18(%r8)
  cmp    %edx,%edi
  je     L179
  lea    0x0(,%r9,4),%ecx
  movsd  0x8(%rsi),%xmm0
  add    $0x2,%eax
  movslq %ecx,%rcx
  lea    (%r8,%rcx,8),%rdx
  movsd  %xmm0,(%rdx)
  cmp    %eax,%edi
  je     L179
  movsd  0x10(%rsi),%xmm0
  movsd  %xmm0,0x8(%rdx)
  pop    %rbx
  ret
  nopl   (%rax)
L5:
  test   %r11d,%r11d
  jle    L145
  shl    $0x2,%r10d
  lea    0x0(,%r9,4),%ecx
  mov    %r8,%rdx
  mov    %rsi,%rax
  movslq %r10d,%r10
  movslq %ecx,%rcx
  shl    $0x3,%r10
  shl    $0x3,%rcx
  nopl   (%rax)
L177:
  movsd  (%rax),%xmm0
  add    $0x4,%ebx
  movsd  %xmm0,(%rdx)
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,0x8(%rdx)
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,0x10(%rdx)
  movsd  0x18(%rax),%xmm0
  add    %r10,%rax
  movsd  %xmm0,0x18(%rdx)
  add    %rcx,%rdx
  cmp    %ebx,%r11d
  jg     L177
  lea    -0x4(%rdi),%ebx
  mov    %r10,%rax
  shr    $0x2,%ebx
  lea    0x1(%rbx),%edx
  imul   %rdx,%rax
  mov    %rdx,%rbx
  imul   %rdx,%rcx
  shl    $0x2,%ebx
  add    %rax,%rsi
  add    %rcx,%r8
L145:
  cmp    %ebx,%edi
  jle    L179
  sub    $0x1,%edi
  xor    %eax,%eax
  sub    %ebx,%edi
L56:
  movsd  (%rsi,%rax,8),%xmm0
  mov    %rax,%rdx
  movsd  %xmm0,(%r8,%rax,8)
  add    $0x1,%rax
  cmp    %rdi,%rdx
  jne    L56
  pop    %rbx
  ret
  nopl   0x0(%rax)
L51:
  test   %r11d,%r11d
  jle    L199
  shl    $0x2,%r10d
  lea    0x0(,%r9,4),%ebx
  mov    %r8,%rdx
  mov    %rsi,%rax
  movslq %r10d,%rcx
  movslq %ebx,%rbx
  xor    %r10d,%r10d
  shl    $0x3,%rbx
  shl    $0x3,%rcx
  nopl   0x0(%rax)
L130:
  movsd  (%rax),%xmm0
  add    $0x4,%r10d
  movsd  %xmm0,0x10(%rdx)
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,0x18(%rdx)
  movsd  0x10(%rax),%xmm0
  add    %rbx,%rdx
  movsd  %xmm0,(%rdx)
  movsd  0x18(%rax),%xmm0
  add    %rcx,%rax
  movsd  %xmm0,0x8(%rdx)
  cmp    %r10d,%r11d
  jg     L130
  lea    -0x4(%rdi),%eax
  shr    $0x2,%eax
  lea    0x1(%rax),%edx
  imul   %rdx,%rbx
  mov    %rdx,%rax
  imul   %rdx,%rcx
  shl    $0x2,%eax
  add    %rbx,%r8
  add    %rcx,%rsi
L28:
  cmp    %eax,%edi
  jle    L179
  movsd  (%rsi),%xmm0
  lea    0x1(%rax),%edx
  movsd  %xmm0,0x10(%r8)
  cmp    %edx,%edi
  je     L179
  movsd  0x8(%rsi),%xmm0
  add    $0x2,%eax
  movsd  %xmm0,0x18(%r8)
  cmp    %eax,%edi
  je     L179
  movsd  0x18(%rsi),%xmm0
  lea    0x0(,%r9,4),%ecx
  pop    %rbx
  movslq %ecx,%rcx
  movsd  %xmm0,(%r8,%rcx,8)
  ret
L27:
  xor    %eax,%eax
  jmp    L114
L199:
  xor    %eax,%eax
  jmp    L28
```

assistant: ```c
void kernel_dgema_1_lib4(int kmax, int kna, double *A, int sda, double *C, int sdc) {
  const int bs = 4;
  int k;
  if (kna == 0) {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[0 + bs * 0] = A[0 + bs * 0];
      C[1 + bs * 0] = A[1 + bs * 0];
      C[2 + bs * 0] = A[2 + bs * 0];
      C[3 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
      C += bs * sdc;
    }
    for (; k < kmax; k++) {
      C[0 + bs * 0] = A[0 + bs * 0];
      A += 1;
      C += 1;
    }
    return;
  } else if (kna == 1) {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[3 + bs * 0] = A[0 + bs * 0];
      C += bs * sdc;
      C[0 + bs * 0] = A[1 + bs * 0];
      C[1 + bs * 0] = A[2 + bs * 0];
      C[2 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
    }
    if (k >= kmax) {
      return;
    }
    C[3 + bs * 0] = A[0 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C += bs * sdc;
    C[0 + bs * 0] = A[1 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[1 + bs * 0] = A[2 + bs * 0];
    return;
  } else if (kna == 2) {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[2 + bs * 0] = A[0 + bs * 0];
      C[3 + bs * 0] = A[1 + bs * 0];
      C += bs * sdc;
      C[0 + bs * 0] = A[2 + bs * 0];
      C[1 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
    }
    if (k >= kmax) {
      return;
    }
    C[2 + bs * 0] = A[0 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[3 + bs * 0] = A[1 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C += bs * sdc;
    C[0 + bs * 0] = A[3 + bs * 0];
    return;
  } else {
    k = 0;
    for (; k < kmax - 3; k += 4) {
      C[1 + bs * 0] = A[0 + bs * 0];
      C[2 + bs * 0] = A[1 + bs * 0];
      C[3 + bs * 0] = A[2 + bs * 0];
      C += bs * sdc;
      C[0 + bs * 0] = A[3 + bs * 0];
      A += bs * sda;
    }
    if (k >= kmax) {
      return;
    }
    C[1 + bs * 0] = A[0 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[2 + bs * 0] = A[1 + bs * 0];
    k++;
    if (k == kmax) {
      return;
    }
    C[3 + bs * 0] = A[2 + bs * 0];
    return;
  }
}
```