user: 下面的汇编指令对应的C源代码是什么:

```asm
<d_copy_pmat_panel>:
  endbr64
  push   %rbp
  mov    %edi,%r11d
  push   %rbx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  test   %edi,%edi
  jle    L147
  mov    %esi,%edi
  test   %esi,%esi
  jle    L147
  mov    %edx,%eax
  mov    %rcx,%rsi
  mov    %r11d,%r10d
  mov    %rsp,%rbp
  sar    $0x1f,%eax
  shr    $0x1e,%eax
  add    %eax,%edx
  and    $0x3,%edx
  sub    %edx,%eax
  mov    %rbp,%rdx
  lea    0x4(%rax),%ecx
  mov    %r8,%rax
  cmp    %ecx,%r11d
  cmovle %r11d,%ecx
  lea    -0x1(%rcx),%ebx
  sub    %ecx,%r10d
  lea    0x8(%r8,%rbx,8),%rbx
L265:
  mov    %rax,(%rdx)
  add    $0x8,%rax
  add    $0x8,%rdx
  cmp    %rbx,%rax
  jne    L265
  test   %r10d,%r10d
  jle    L273
  lea    -0x4(,%r9,4),%eax
  movslq %ecx,%rcx
  cltq
  add    %rcx,%rax
  lea    0x0(%rbp,%rcx,8),%rcx
  lea    (%r8,%rax,8),%rdx
  xor    %eax,%eax
L180:
  mov    %rdx,(%rcx,%rax,8)
  add    $0x1,%rax
  add    $0x8,%rdx
  cmp    %eax,%r10d
  jg     L180
L273:
  mov    (%rsp),%rcx
  lea    -0x3(%rdi),%eax
  cmp    $0x1,%r11d
  je     L149
  mov    0x8(%rsp),%r9
  cmp    $0x2,%r11d
  je     L136
  mov    0x10(%rsp),%r10
  cmp    $0x3,%r11d
  je     L204
  mov    0x18(%rsp),%r11
  test   %eax,%eax
  jle    L12
  lea    -0x4(%rdi),%eax
  mov    %rsi,%rdx
  shr    $0x2,%eax
  lea    0x1(%rax),%ebx
  xor    %eax,%eax
  mov    %rbx,%r8
  shl    $0x7,%rbx
  nopl   0x0(%rax)
L82:
  movsd  (%rdx),%xmm0
  sub    $0xffffffffffffff80,%rdx
  movsd  %xmm0,(%rcx,%rax,1)
  movsd  -0x78(%rdx),%xmm0
  movsd  %xmm0,(%r9,%rax,1)
  movsd  -0x70(%rdx),%xmm0
  movsd  %xmm0,(%r10,%rax,1)
  movsd  -0x68(%rdx),%xmm0
  movsd  %xmm0,(%r11,%rax,1)
  movsd  -0x60(%rdx),%xmm0
  movsd  %xmm0,0x20(%rcx,%rax,1)
  movsd  -0x58(%rdx),%xmm0
  movsd  %xmm0,0x20(%r9,%rax,1)
  movsd  -0x50(%rdx),%xmm0
  movsd  %xmm0,0x20(%r10,%rax,1)
  movsd  -0x68(%rdx),%xmm0
  movsd  %xmm0,(%r11,%rax,1)
  movsd  -0x40(%rdx),%xmm0
  movsd  %xmm0,0x40(%rcx,%rax,1)
  movsd  -0x38(%rdx),%xmm0
  movsd  %xmm0,0x40(%r9,%rax,1)
  movsd  -0x30(%rdx),%xmm0
  movsd  %xmm0,0x40(%r10,%rax,1)
  movsd  -0x68(%rdx),%xmm0
  movsd  %xmm0,(%r11,%rax,1)
  movsd  -0x20(%rdx),%xmm0
  movsd  %xmm0,0x60(%rcx,%rax,1)
  movsd  -0x18(%rdx),%xmm0
  movsd  %xmm0,0x60(%r9,%rax,1)
  movsd  -0x10(%rdx),%xmm0
  movsd  %xmm0,0x60(%r10,%rax,1)
  movsd  -0x68(%rdx),%xmm0
  movsd  %xmm0,(%r11,%rax,1)
  sub    $0xffffffffffffff80,%rax
  cmp    %rax,%rbx
  jne    L82
  lea    0x0(,%r8,4),%eax
  cmp    %eax,%edi
  jle    L147
L143:
  movslq %eax,%rdx
  shl    $0x2,%eax
  cltq
  shl    $0x3,%rax
L313:
  movsd  (%rsi,%rax,1),%xmm0
  add    $0x1,%rdx
  movsd  %xmm0,(%rcx,%rax,1)
  movsd  0x8(%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r9,%rax,1)
  movsd  0x10(%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r10,%rax,1)
  movsd  0x18(%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r11,%rax,1)
  add    $0x20,%rax
  cmp    %edx,%edi
  jg     L313
  nop
L147:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L255
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax,%rax,1)
L149:
  test   %eax,%eax
  jle    L317
  lea    -0x4(%rdi),%r9d
  mov    %rsi,%rax
  mov    %rcx,%rdx
  shr    $0x2,%r9d
  mov    %r9d,%r8d
  shl    $0x7,%r8
  lea    0x80(%rsi,%r8,1),%r8
  nopl   (%rax)
L94:
  movsd  (%rax),%xmm0
  sub    $0xffffffffffffff80,%rax
  sub    $0xffffffffffffff80,%rdx
  movsd  %xmm0,-0x80(%rdx)
  movsd  -0x60(%rax),%xmm0
  movsd  %xmm0,-0x60(%rdx)
  movsd  -0x40(%rax),%xmm0
  movsd  %xmm0,-0x40(%rdx)
  movsd  -0x20(%rax),%xmm0
  movsd  %xmm0,-0x20(%rdx)
  cmp    %rax,%r8
  jne    L94
  lea    0x4(,%r9,4),%eax
  cmp    %eax,%edi
  jle    L147
L306:
  cltq
L298:
  mov    %rax,%rdx
  add    $0x1,%rax
  shl    $0x5,%rdx
  movsd  (%rsi,%rdx,1),%xmm0
  movsd  %xmm0,(%rcx,%rdx,1)
  cmp    %eax,%edi
  jg     L298
  jmp    L147
  nopl   0x0(%rax)
L204:
  test   %eax,%eax
  jle    L301
  lea    -0x4(%rdi),%ebp
  mov    %rsi,%rax
  mov    %rcx,%r11
  mov    %r9,%r8
  shr    $0x2,%ebp
  mov    %r10,%rdx
  mov    %ebp,%ebx
  shl    $0x7,%rbx
  lea    0x80(%rsi,%rbx,1),%rbx
  nopl   0x0(%rax,%rax,1)
L117:
  movsd  (%rax),%xmm0
  sub    $0xffffffffffffff80,%rax
  sub    $0xffffffffffffff80,%r11
  sub    $0xffffffffffffff80,%r8
  sub    $0xffffffffffffff80,%rdx
  movsd  %xmm0,-0x80(%r11)
  movsd  -0x78(%rax),%xmm0
  movsd  %xmm0,-0x80(%r8)
  movsd  -0x70(%rax),%xmm0
  movsd  %xmm0,-0x80(%rdx)
  movsd  -0x60(%rax),%xmm0
  movsd  %xmm0,-0x60(%r11)
  movsd  -0x58(%rax),%xmm0
  movsd  %xmm0,-0x60(%r8)
  movsd  -0x50(%rax),%xmm0
  movsd  %xmm0,-0x60(%rdx)
  movsd  -0x40(%rax),%xmm0
  movsd  %xmm0,-0x40(%r11)
  movsd  -0x38(%rax),%xmm0
  movsd  %xmm0,-0x40(%r8)
  movsd  -0x30(%rax),%xmm0
  movsd  %xmm0,-0x40(%rdx)
  movsd  -0x20(%rax),%xmm0
  movsd  %xmm0,-0x20(%r11)
  movsd  -0x18(%rax),%xmm0
  movsd  %xmm0,-0x20(%r8)
  movsd  -0x10(%rax),%xmm0
  movsd  %xmm0,-0x20(%rdx)
  cmp    %rax,%rbx
  jne    L117
  lea    0x4(,%rbp,4),%eax
  cmp    %edi,%eax
  jge    L147
L169:
  movslq %eax,%rdx
  shl    $0x2,%eax
  cltq
  shl    $0x3,%rax
L289:
  movsd  (%rsi,%rax,1),%xmm0
  add    $0x1,%rdx
  movsd  %xmm0,(%rcx,%rax,1)
  movsd  0x8(%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r9,%rax,1)
  movsd  0x10(%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r10,%rax,1)
  add    $0x20,%rax
  cmp    %edx,%edi
  jg     L289
  jmp    L147
  cs nopw 0x0(%rax,%rax,1)
L136:
  test   %eax,%eax
  jle    L96
  lea    -0x4(%rdi),%r11d
  mov    %rsi,%rax
  mov    %rcx,%r8
  mov    %r9,%rdx
  shr    $0x2,%r11d
  mov    %r11d,%r10d
  shl    $0x7,%r10
  lea    0x80(%rsi,%r10,1),%r10
  nopl   0x0(%rax,%rax,1)
L75:
  movsd  (%rax),%xmm0
  sub    $0xffffffffffffff80,%rax
  sub    $0xffffffffffffff80,%r8
  sub    $0xffffffffffffff80,%rdx
  movsd  %xmm0,-0x80(%r8)
  movsd  -0x78(%rax),%xmm0
  movsd  %xmm0,-0x80(%rdx)
  movsd  -0x60(%rax),%xmm0
  movsd  %xmm0,-0x60(%r8)
  movsd  -0x58(%rax),%xmm0
  movsd  %xmm0,-0x60(%rdx)
  movsd  -0x40(%rax),%xmm0
  movsd  %xmm0,-0x40(%r8)
  movsd  -0x38(%rax),%xmm0
  movsd  %xmm0,-0x40(%rdx)
  movsd  -0x20(%rax),%xmm0
  movsd  %xmm0,-0x20(%r8)
  movsd  -0x18(%rax),%xmm0
  movsd  %xmm0,-0x20(%rdx)
  cmp    %rax,%r10
  jne    L75
  lea    0x4(,%r11,4),%eax
  cmp    %eax,%edi
  jle    L147
L246:
  movslq %eax,%rdx
  shl    $0x2,%eax
  cltq
  shl    $0x3,%rax
L48:
  movsd  (%rsi,%rax,1),%xmm0
  add    $0x1,%rdx
  movsd  %xmm0,(%rcx,%rax,1)
  movsd  0x8(%rsi,%rax,1),%xmm0
  movsd  %xmm0,(%r9,%rax,1)
  add    $0x20,%rax
  cmp    %edx,%edi
  jg     L48
  jmp    L147
L317:
  xor    %eax,%eax
  jmp    L306
L12:
  xor    %eax,%eax
  jmp    L143
L96:
  xor    %eax,%eax
  jmp    L246
L301:
  xor    %eax,%eax
  jmp    L169
L255:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void d_copy_pmat_panel(int row, int col, int offset, double *A, double *B, int sdb) {
  if (row <= 0 || col <= 0)
    return;
  const int bs = 4;
  int i, ii;
  int row0 = bs - offset % bs;
  row0 = row0 > row ? row : row0;
  int row1 = row - row0;
  double *(ptrB[4]);
  for (i = 0; i < row0; i++)
    ptrB[i] = B + i;
  for (i = 0; i < row1; i++)
    ptrB[row0 + i] = B + row0 + (sdb - 1) * bs + i;
  if (row == 1) {
    i = 0;
    for (; i < col - 3; i += 4) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
      ptrB[0][(i + 1) * bs] = A[0 + (i + 1) * bs];
      ptrB[0][(i + 2) * bs] = A[0 + (i + 2) * bs];
      ptrB[0][(i + 3) * bs] = A[0 + (i + 3) * bs];
    }
    for (; i < col; i++) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
    }
  } else if (row == 2) {
    i = 0;
    for (; i < col - 3; i += 4) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
      ptrB[1][(i + 0) * bs] = A[1 + (i + 0) * bs];
      ptrB[0][(i + 1) * bs] = A[0 + (i + 1) * bs];
      ptrB[1][(i + 1) * bs] = A[1 + (i + 1) * bs];
      ptrB[0][(i + 2) * bs] = A[0 + (i + 2) * bs];
      ptrB[1][(i + 2) * bs] = A[1 + (i + 2) * bs];
      ptrB[0][(i + 3) * bs] = A[0 + (i + 3) * bs];
      ptrB[1][(i + 3) * bs] = A[1 + (i + 3) * bs];
    }
    for (; i < col; i++) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
      ptrB[1][(i + 0) * bs] = A[1 + (i + 0) * bs];
    }
  } else if (row == 3) {
    i = 0;
    for (; i < col - 3; i += 4) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
      ptrB[1][(i + 0) * bs] = A[1 + (i + 0) * bs];
      ptrB[2][(i + 0) * bs] = A[2 + (i + 0) * bs];
      ptrB[0][(i + 1) * bs] = A[0 + (i + 1) * bs];
      ptrB[1][(i + 1) * bs] = A[1 + (i + 1) * bs];
      ptrB[2][(i + 1) * bs] = A[2 + (i + 1) * bs];
      ptrB[0][(i + 2) * bs] = A[0 + (i + 2) * bs];
      ptrB[1][(i + 2) * bs] = A[1 + (i + 2) * bs];
      ptrB[2][(i + 2) * bs] = A[2 + (i + 2) * bs];
      ptrB[0][(i + 3) * bs] = A[0 + (i + 3) * bs];
      ptrB[1][(i + 3) * bs] = A[1 + (i + 3) * bs];
      ptrB[2][(i + 3) * bs] = A[2 + (i + 3) * bs];
    }
    for (; i < col; i++) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
      ptrB[1][(i + 0) * bs] = A[1 + (i + 0) * bs];
      ptrB[2][(i + 0) * bs] = A[2 + (i + 0) * bs];
    }
  } else {
    i = 0;
    for (; i < col - 3; i += 4) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
      ptrB[1][(i + 0) * bs] = A[1 + (i + 0) * bs];
      ptrB[2][(i + 0) * bs] = A[2 + (i + 0) * bs];
      ptrB[3][(i + 0) * bs] = A[3 + (i + 0) * bs];
      ptrB[0][(i + 1) * bs] = A[0 + (i + 1) * bs];
      ptrB[1][(i + 1) * bs] = A[1 + (i + 1) * bs];
      ptrB[2][(i + 1) * bs] = A[2 + (i + 1) * bs];
      ptrB[3][(i + 0) * bs] = A[3 + (i + 0) * bs];
      ptrB[0][(i + 2) * bs] = A[0 + (i + 2) * bs];
      ptrB[1][(i + 2) * bs] = A[1 + (i + 2) * bs];
      ptrB[2][(i + 2) * bs] = A[2 + (i + 2) * bs];
      ptrB[3][(i + 0) * bs] = A[3 + (i + 0) * bs];
      ptrB[0][(i + 3) * bs] = A[0 + (i + 3) * bs];
      ptrB[1][(i + 3) * bs] = A[1 + (i + 3) * bs];
      ptrB[2][(i + 3) * bs] = A[2 + (i + 3) * bs];
      ptrB[3][(i + 0) * bs] = A[3 + (i + 0) * bs];
    }
    for (; i < col; i++) {
      ptrB[0][(i + 0) * bs] = A[0 + (i + 0) * bs];
      ptrB[1][(i + 0) * bs] = A[1 + (i + 0) * bs];
      ptrB[2][(i + 0) * bs] = A[2 + (i + 0) * bs];
      ptrB[3][(i + 0) * bs] = A[3 + (i + 0) * bs];
    }
  }
}
```