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

```asm
<kernel_dgetrf_pivot_4_vs_lib4>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %r8,(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  test   %edi,%edi
  jle    L84
  mov    %esi,%r12d
  test   %esi,%esi
  jle    L84
  lea    -0x4(%rdi),%eax
  lea    0x24(%rsp),%r8
  mov    %r9,%r13
  xor    %esi,%esi
  mov    %eax,0xc(%rsp)
  lea    0x28(%rsp),%r9
  xor    %eax,%eax
  mov    %edi,%ebp
  mov    %r8,0x10(%rsp)
  mov    %rdx,%rbx
  mov    %ecx,%r14d
  call   <idamax_lib4@plt>
  pxor   %xmm7,%xmm7
  ucomisd 0x28(%rsp),%xmm7
  mov    0x24(%rsp),%eax
  mov    0x10(%rsp),%r8
  mov    %eax,0x0(%r13)
  jp     L505
  je     L164
L505:
  test   %eax,%eax
  jne    L82
L177:
  mov    (%rsp),%rax
  movsd  D27(%rip),%xmm0
  divsd  (%rbx),%xmm0
  movsd  %xmm0,0x28(%rsp)
  movsd  %xmm0,(%rax)
  cmp    $0x3,%ebp
  jg     L192
  cmp    $0x1,%ebp
  je     L84
  movsd  0x8(%rbx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rbx)
  cmp    $0x3,%ebp
  je     L290
  cmp    $0x1,%r12d
  je     L84
  mulsd  0x20(%rbx),%xmm1
  movsd  0x28(%rbx),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x30(%rsp)
  movsd  %xmm0,0x28(%rbx)
  jmp    L16
  nopl   0x0(%rax)
L723:
  je     L464
  cmp    $0x2,%r12d
  je     L84
  movsd  0x40(%rbx),%xmm1
  mulsd  0x8(%rbx),%xmm1
  movsd  0x48(%rbx),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x48(%rbx)
L9:
  cmp    $0x2,%ebp
  jne    L163
  cmp    $0x3,%r12d
  je     L84
L50:
  movsd  0x60(%rbx),%xmm1
  movsd  0x8(%rbx),%xmm2
  movsd  0x68(%rbx),%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,0x68(%rbx)
  cmp    $0x3,%ebp
  je     L647
L84:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L761
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L164:
  mov    (%rsp),%rax
  movq   $0x0,(%rax)
  cmp    $0x1,%r12d
  je     L84
  cmp    $0x1,%ebp
  je     L84
  movsd  0x8(%rbx),%xmm1
  cmp    $0x3,%ebp
  jg     L528
  movsd  0x20(%rbx),%xmm2
  movsd  0x28(%rbx),%xmm0
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x30(%rsp)
  movsd  %xmm0,0x28(%rbx)
  je     L227
L16:
  xor    %eax,%eax
  lea    0x28(%rbx),%rdx
  lea    -0x1(%rbp),%edi
  mov    %r14d,%ecx
  lea    0x30(%rsp),%r9
  mov    $0x1,%esi
  mov    %r8,0x10(%rsp)
  call   <idamax_lib4@plt>
  mov    0x24(%rsp),%eax
  pxor   %xmm7,%xmm7
  mov    0x10(%rsp),%r8
  add    $0x1,%eax
  ucomisd 0x30(%rsp),%xmm7
  mov    %eax,0x4(%r13)
  jp     L712
  je     L542
L712:
  cmp    $0x1,%eax
  je     L682
  test   %eax,%eax
  lea    0x3(%rax),%edx
  mov    %eax,%esi
  mov    $0x4,%edi
  cmovns %eax,%edx
  sar    $0x1f,%esi
  mov    %r8,0x10(%rsp)
  shr    $0x1e,%esi
  sar    $0x2,%edx
  add    %esi,%eax
  imul   %r14d,%edx
  and    $0x3,%eax
  sub    %esi,%eax
  lea    0x8(%rbx),%rsi
  cltq
  shl    $0x2,%edx
  movslq %edx,%rdx
  add    %rax,%rdx
  xor    %eax,%eax
  lea    (%rbx,%rdx,8),%rdx
  call   <drowsw_lib@plt>
  mov    0x10(%rsp),%r8
L682:
  mov    (%rsp),%rax
  movsd  D27(%rip),%xmm0
  divsd  0x28(%rbx),%xmm0
  movsd  %xmm0,0x30(%rsp)
  movsd  %xmm0,0x8(%rax)
  cmp    $0x3,%ebp
  jle    L723
  movsd  0x30(%rbx),%xmm1
  lea    0x0(,%r14,4),%edi
  lea    -0x7(%rbp),%esi
  xor    %r9d,%r9d
  movslq %edi,%rdi
  mulsd  %xmm0,%xmm1
  shl    $0x3,%rdi
  lea    (%rbx,%rdi,1),%rdx
  mov    %rdx,%rax
  movsd  %xmm1,0x30(%rbx)
  movsd  0x38(%rbx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x38(%rbx)
  test   %esi,%esi
  jle    L446
  xchg   %ax,%ax
L615:
  movsd  0x20(%rax),%xmm1
  add    $0x4,%r9d
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x20(%rax)
  movsd  0x28(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x28(%rax)
  movsd  0x30(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x30(%rax)
  movsd  0x38(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x38(%rax)
  add    %rdi,%rax
  cmp    %esi,%r9d
  jl     L615
  lea    -0x8(%rbp),%r9d
  shr    $0x2,%r9d
  lea    0x1(%r9),%eax
  mov    %rax,%r9
  imul   %rdi,%rax
  shl    $0x2,%r9d
  add    %rdx,%rax
L446:
  cmp    %r9d,0xc(%rsp)
  jle    L277
  lea    -0x5(%rbp),%r10d
  sub    %r9d,%r10d
  lea    0x8(%rax,%r10,8),%r9
L339:
  movsd  0x20(%rax),%xmm1
  add    $0x8,%rax
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rax)
  cmp    %r9,%rax
  jne    L339
L277:
  cmp    $0x2,%r12d
  je     L84
L834:
  movsd  0x40(%rbx),%xmm5
  movsd  0x8(%rbx),%xmm0
  movsd  0x18(%rbx),%xmm1
  movsd  0x10(%rbx),%xmm2
  mulsd  %xmm5,%xmm0
  movsd  0x48(%rbx),%xmm4
  mulsd  %xmm5,%xmm1
  mulsd  %xmm5,%xmm2
  subsd  %xmm0,%xmm4
  movsd  0x58(%rbx),%xmm0
  subsd  %xmm1,%xmm0
  movsd  0x50(%rbx),%xmm1
  movsd  %xmm4,0x48(%rbx)
  subsd  %xmm2,%xmm1
  movsd  0x30(%rbx),%xmm2
  mulsd  %xmm4,%xmm2
  subsd  %xmm2,%xmm1
  movsd  0x38(%rbx),%xmm2
  mulsd  %xmm4,%xmm2
  movsd  %xmm1,0x38(%rsp)
  movsd  %xmm1,0x50(%rbx)
  subsd  %xmm2,%xmm0
  movsd  %xmm0,0x40(%rsp)
  movsd  %xmm0,0x58(%rbx)
  test   %esi,%esi
  jle    L425
  mov    %rdx,%rax
  xor    %r9d,%r9d
L617:
  movsd  (%rax),%xmm0
  movsd  0x40(%rax),%xmm3
  add    $0x4,%r9d
  movsd  0x48(%rax),%xmm2
  movsd  0x50(%rax),%xmm1
  mulsd  %xmm5,%xmm0
  movsd  0x18(%rax),%xmm6
  mulsd  %xmm5,%xmm6
  subsd  %xmm0,%xmm3
  movsd  0x20(%rax),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm3
  movsd  0x8(%rax),%xmm0
  mulsd  %xmm5,%xmm0
  movsd  %xmm3,0x40(%rax)
  subsd  %xmm0,%xmm2
  movsd  0x28(%rax),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm2
  movsd  0x10(%rax),%xmm0
  mulsd  %xmm5,%xmm0
  movsd  %xmm2,0x48(%rax)
  subsd  %xmm0,%xmm1
  movsd  0x30(%rax),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm1
  movsd  0x58(%rax),%xmm0
  subsd  %xmm6,%xmm0
  movsd  0x38(%rax),%xmm6
  movsd  %xmm1,0x50(%rax)
  mulsd  %xmm4,%xmm6
  subsd  %xmm6,%xmm0
  movsd  %xmm0,0x58(%rax)
  add    %rdi,%rax
  cmp    %esi,%r9d
  jl     L617
  sub    $0x1,%esi
  movsd  %xmm3,0x28(%rsp)
  shr    $0x2,%esi
  movsd  %xmm2,0x30(%rsp)
  lea    0x1(%rsi),%eax
  movsd  %xmm1,0x38(%rsp)
  mov    %rax,%rsi
  imul   %rdi,%rax
  movsd  %xmm0,0x40(%rsp)
  shl    $0x2,%esi
  add    %rax,%rdx
L482:
  cmp    %esi,0xc(%rsp)
  jle    L163
  lea    -0x5(%rbp),%eax
  sub    %esi,%eax
  lea    0x8(%rdx,%rax,8),%rax
L314:
  movsd  (%rdx),%xmm1
  movsd  0x40(%rdx),%xmm0
  add    $0x8,%rdx
  mulsd  %xmm5,%xmm1
  subsd  %xmm1,%xmm0
  movsd  0x18(%rdx),%xmm1
  mulsd  %xmm4,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x38(%rdx)
  cmp    %rax,%rdx
  jne    L314
  movsd  %xmm0,0x28(%rsp)
L163:
  xor    %eax,%eax
  lea    0x50(%rbx),%rdx
  lea    -0x2(%rbp),%edi
  mov    %r14d,%ecx
  lea    0x38(%rsp),%r9
  mov    $0x2,%esi
  mov    %r8,0x10(%rsp)
  call   <idamax_lib4@plt>
  mov    0x24(%rsp),%eax
  pxor   %xmm7,%xmm7
  mov    0x10(%rsp),%r8
  add    $0x2,%eax
  ucomisd 0x38(%rsp),%xmm7
  mov    %eax,0x8(%r13)
  jp     L850
  jne    L850
  mov    (%rsp),%rax
  movq   $0x0,0x10(%rax)
  cmp    $0x3,%r12d
  je     L84
  cmp    $0x3,%ebp
  jle    L50
  lea    0x0(,%r14,4),%r15d
  lea    -0x7(%rbp),%r10d
  movslq %r15d,%r15
  shl    $0x3,%r15
  lea    (%rbx,%r15,1),%r11
L652:
  movsd  0x60(%rbx),%xmm6
  movsd  0x8(%rbx),%xmm0
  mov    %r11,%rax
  xor    %edx,%edx
  movsd  0x68(%rbx),%xmm5
  movsd  0x70(%rbx),%xmm4
  mulsd  %xmm6,%xmm0
  movsd  0x18(%rbx),%xmm1
  mulsd  %xmm6,%xmm1
  subsd  %xmm0,%xmm5
  movsd  0x10(%rbx),%xmm0
  mulsd  %xmm6,%xmm0
  movsd  %xmm5,0x68(%rbx)
  subsd  %xmm0,%xmm4
  movsd  0x30(%rbx),%xmm0
  mulsd  %xmm5,%xmm0
  subsd  %xmm0,%xmm4
  movsd  0x78(%rbx),%xmm0
  subsd  %xmm1,%xmm0
  movsd  0x38(%rbx),%xmm1
  movsd  %xmm4,0x70(%rbx)
  mulsd  %xmm5,%xmm1
  subsd  %xmm1,%xmm0
  movsd  0x58(%rbx),%xmm1
  mulsd  %xmm4,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x40(%rsp)
  movsd  %xmm0,0x78(%rbx)
  test   %r10d,%r10d
  jle    L638
L203:
  movsd  (%rax),%xmm0
  movsd  0x60(%rax),%xmm3
  add    $0x4,%edx
  movsd  0x68(%rax),%xmm2
  movsd  0x70(%rax),%xmm1
  mulsd  %xmm6,%xmm0
  movsd  0x18(%rax),%xmm7
  mulsd  %xmm6,%xmm7
  subsd  %xmm0,%xmm3
  movsd  0x20(%rax),%xmm0
  mulsd  %xmm5,%xmm0
  subsd  %xmm0,%xmm3
  movsd  0x40(%rax),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm3
  movsd  0x8(%rax),%xmm0
  mulsd  %xmm6,%xmm0
  movsd  %xmm3,0x60(%rax)
  subsd  %xmm0,%xmm2
  movsd  0x28(%rax),%xmm0
  mulsd  %xmm5,%xmm0
  subsd  %xmm0,%xmm2
  movsd  0x48(%rax),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm2
  movsd  0x10(%rax),%xmm0
  mulsd  %xmm6,%xmm0
  movsd  %xmm2,0x68(%rax)
  subsd  %xmm0,%xmm1
  movsd  0x30(%rax),%xmm0
  mulsd  %xmm5,%xmm0
  subsd  %xmm0,%xmm1
  movsd  0x50(%rax),%xmm0
  mulsd  %xmm4,%xmm0
  subsd  %xmm0,%xmm1
  movsd  0x78(%rax),%xmm0
  subsd  %xmm7,%xmm0
  movsd  0x38(%rax),%xmm7
  movsd  %xmm1,0x70(%rax)
  mulsd  %xmm5,%xmm7
  subsd  %xmm7,%xmm0
  movsd  0x58(%rax),%xmm7
  mulsd  %xmm4,%xmm7
  subsd  %xmm7,%xmm0
  movsd  %xmm0,0x78(%rax)
  add    %r15,%rax
  cmp    %r10d,%edx
  jl     L203
  lea    -0x1(%r10),%edx
  movsd  %xmm3,0x28(%rsp)
  shr    $0x2,%edx
  movsd  %xmm2,0x30(%rsp)
  lea    0x1(%rdx),%eax
  movsd  %xmm1,0x38(%rsp)
  mov    %rax,%rdx
  imul   %r15,%rax
  movsd  %xmm0,0x40(%rsp)
  shl    $0x2,%edx
  add    %r11,%rax
L638:
  cmp    %edx,0xc(%rsp)
  jle    L58
  lea    -0x5(%rbp),%esi
  sub    %edx,%esi
  lea    0x8(%rax,%rsi,8),%rdx
L230:
  movsd  (%rax),%xmm1
  movsd  0x60(%rax),%xmm0
  add    $0x8,%rax
  mulsd  %xmm6,%xmm1
  subsd  %xmm1,%xmm0
  movsd  0x18(%rax),%xmm1
  mulsd  %xmm5,%xmm1
  subsd  %xmm1,%xmm0
  movsd  0x38(%rax),%xmm1
  mulsd  %xmm4,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x58(%rax)
  cmp    %rdx,%rax
  jne    L230
  movsd  %xmm0,0x28(%rsp)
L58:
  xor    %eax,%eax
  lea    0x78(%rbx),%rdx
  lea    -0x3(%rbp),%edi
  mov    %r14d,%ecx
  lea    0x40(%rsp),%r9
  mov    $0x3,%esi
  mov    %r11,0x18(%rsp)
  mov    %r10d,0x10(%rsp)
  call   <idamax_lib4@plt>
  mov    0x24(%rsp),%eax
  pxor   %xmm7,%xmm7
  mov    0x10(%rsp),%r10d
  mov    0x18(%rsp),%r11
  add    $0x3,%eax
  ucomisd 0x40(%rsp),%xmm7
  mov    %eax,0xc(%r13)
  jp     L455
  jne    L455
  mov    (%rsp),%rax
  movq   $0x0,0x18(%rax)
  jmp    L84
  nopl   0x0(%rax)
L192:
  movsd  0x8(%rbx),%xmm1
  lea    0x0(,%r14,4),%edi
  lea    -0x7(%rbp),%edx
  xor    %r9d,%r9d
  movslq %edi,%rdi
  mulsd  %xmm0,%xmm1
  shl    $0x3,%rdi
  lea    (%rbx,%rdi,1),%rsi
  mov    %rsi,%rax
  movsd  %xmm1,0x8(%rbx)
  movsd  0x10(%rbx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rbx)
  movsd  0x18(%rbx),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rbx)
  test   %edx,%edx
  jle    L76
  nopw   0x0(%rax,%rax,1)
L572:
  movsd  (%rax),%xmm1
  add    $0x4,%r9d
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%rax)
  movsd  0x8(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x8(%rax)
  movsd  0x10(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x10(%rax)
  movsd  0x18(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x18(%rax)
  add    %rdi,%rax
  cmp    %edx,%r9d
  jl     L572
  lea    -0x8(%rbp),%r9d
  shr    $0x2,%r9d
  lea    0x1(%r9),%eax
  mov    %rax,%r9
  imul   %rdi,%rax
  shl    $0x2,%r9d
  add    %rsi,%rax
L76:
  cmp    %r9d,0xc(%rsp)
  jle    L186
  lea    -0x5(%rbp),%r10d
  sub    %r9d,%r10d
  lea    0x8(%rax,%r10,8),%r9
L735:
  movsd  (%rax),%xmm1
  add    $0x8,%rax
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x8(%rax)
  cmp    %r9,%rax
  jne    L735
L186:
  cmp    $0x1,%r12d
  je     L84
L213:
  movsd  0x20(%rbx),%xmm0
  movsd  0x8(%rbx),%xmm4
  movsd  0x28(%rbx),%xmm3
  movsd  0x30(%rbx),%xmm2
  mulsd  %xmm0,%xmm4
  movsd  0x38(%rbx),%xmm1
  subsd  %xmm4,%xmm3
  movsd  0x10(%rbx),%xmm4
  mulsd  %xmm0,%xmm4
  movsd  %xmm3,0x30(%rsp)
  movsd  %xmm3,0x28(%rbx)
  subsd  %xmm4,%xmm2
  movsd  0x18(%rbx),%xmm4
  mulsd  %xmm0,%xmm4
  movsd  %xmm2,0x38(%rsp)
  movsd  %xmm2,0x30(%rbx)
  subsd  %xmm4,%xmm1
  movsd  %xmm1,0x40(%rsp)
  movsd  %xmm1,0x38(%rbx)
  test   %edx,%edx
  jle    L63
  mov    %rsi,%rax
  xor    %r9d,%r9d
  nopl   0x0(%rax)
L651:
  movsd  (%rax),%xmm1
  movsd  0x20(%rax),%xmm4
  add    $0x4,%r9d
  movsd  0x28(%rax),%xmm3
  movsd  0x18(%rax),%xmm5
  mulsd  %xmm0,%xmm1
  movsd  0x30(%rax),%xmm2
  mulsd  %xmm0,%xmm5
  subsd  %xmm1,%xmm4
  movsd  0x8(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm4,0x20(%rax)
  subsd  %xmm1,%xmm3
  movsd  0x10(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm3,0x28(%rax)
  subsd  %xmm1,%xmm2
  movsd  0x38(%rax),%xmm1
  subsd  %xmm5,%xmm1
  movsd  %xmm2,0x30(%rax)
  movsd  %xmm1,0x38(%rax)
  add    %rdi,%rax
  cmp    %edx,%r9d
  jl     L651
  sub    $0x1,%edx
  movsd  %xmm4,0x28(%rsp)
  shr    $0x2,%edx
  movsd  %xmm3,0x30(%rsp)
  lea    0x1(%rdx),%eax
  movsd  %xmm2,0x38(%rsp)
  mov    %rax,%rdx
  imul   %rdi,%rax
  movsd  %xmm1,0x40(%rsp)
  shl    $0x2,%edx
  add    %rax,%rsi
L64:
  cmp    %edx,0xc(%rsp)
  jle    L16
  lea    -0x5(%rbp),%eax
  sub    %edx,%eax
  lea    0x8(%rsi,%rax,8),%rax
L95:
  movsd  (%rsi),%xmm2
  movsd  0x20(%rsi),%xmm1
  add    $0x8,%rsi
  mulsd  %xmm0,%xmm2
  subsd  %xmm2,%xmm1
  movsd  %xmm1,0x18(%rsi)
  cmp    %rax,%rsi
  jne    L95
  movsd  %xmm1,0x28(%rsp)
  jmp    L16
  nopl   0x0(%rax,%rax,1)
L82:
  lea    0x3(%rax),%edx
  mov    %eax,%esi
  mov    $0x4,%edi
  mov    %r8,0x10(%rsp)
  cmovns %eax,%edx
  sar    $0x1f,%esi
  shr    $0x1e,%esi
  sar    $0x2,%edx
  add    %esi,%eax
  imul   %r14d,%edx
  and    $0x3,%eax
  sub    %esi,%eax
  mov    %rbx,%rsi
  cltq
  shl    $0x2,%edx
  movslq %edx,%rdx
  add    %rax,%rdx
  xor    %eax,%eax
  lea    (%rbx,%rdx,8),%rdx
  call   <drowsw_lib@plt>
  mov    0x10(%rsp),%r8
  jmp    L177
  nopl   0x0(%rax)
L542:
  mov    (%rsp),%rax
  movq   $0x0,0x8(%rax)
  cmp    $0x2,%r12d
  je     L84
  cmp    $0x3,%ebp
  jle    L27
  lea    0x0(,%r14,4),%edi
  lea    -0x7(%rbp),%esi
  movslq %edi,%rdi
  shl    $0x3,%rdi
  lea    (%rbx,%rdi,1),%rdx
  jmp    L834
  cs nopw 0x0(%rax,%rax,1)
L528:
  lea    0x0(,%r14,4),%edi
  lea    -0x7(%rbp),%edx
  movslq %edi,%rdi
  shl    $0x3,%rdi
  lea    (%rbx,%rdi,1),%rsi
  jmp    L213
  nopl   0x0(%rax,%rax,1)
L27:
  movsd  0x40(%rbx),%xmm1
  movsd  0x8(%rbx),%xmm2
  movsd  0x48(%rbx),%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,0x48(%rbx)
  jne    L9
L144:
  movsd  0x10(%rbx),%xmm2
  mulsd  0x30(%rbx),%xmm0
  mulsd  %xmm1,%xmm2
  movsd  0x50(%rbx),%xmm1
  subsd  %xmm2,%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,0x38(%rsp)
  movsd  %xmm1,0x50(%rbx)
  jmp    L163
  nopl   (%rax)
L850:
  cmp    $0x2,%eax
  jne    L556
L764:
  mov    (%rsp),%rax
  movsd  D27(%rip),%xmm0
  divsd  0x50(%rbx),%xmm0
  movsd  %xmm0,0x38(%rsp)
  movsd  %xmm0,0x10(%rax)
  cmp    $0x3,%ebp
  je     L399
  movsd  0x58(%rbx),%xmm1
  lea    0x0(,%r14,4),%r15d
  lea    -0x7(%rbp),%r10d
  movslq %r15d,%r15
  mulsd  %xmm0,%xmm1
  shl    $0x3,%r15
  lea    (%rbx,%r15,1),%r11
  movsd  %xmm1,0x58(%rbx)
  test   %r10d,%r10d
  jle    L524
  mov    %r11,%rax
  xor    %edx,%edx
  nopl   0x0(%rax)
L391:
  movsd  0x40(%rax),%xmm1
  add    $0x4,%edx
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x40(%rax)
  movsd  0x48(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x48(%rax)
  movsd  0x50(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x50(%rax)
  movsd  0x58(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x58(%rax)
  add    %r15,%rax
  cmp    %r10d,%edx
  jl     L391
  lea    -0x8(%rbp),%eax
  shr    $0x2,%eax
  lea    0x1(%rax),%edx
  mov    %rdx,%rax
  imul   %r15,%rdx
  shl    $0x2,%eax
  add    %r11,%rdx
L110:
  cmp    %eax,0xc(%rsp)
  jle    L218
  lea    -0x5(%rbp),%esi
  sub    %eax,%esi
  lea    0x8(%rdx,%rsi,8),%rax
L722:
  movsd  0x40(%rdx),%xmm1
  add    $0x8,%rdx
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x38(%rdx)
  cmp    %rax,%rdx
  jne    L722
L218:
  cmp    $0x3,%r12d
  jne    L652
  jmp    L84
  nopw   0x0(%rax,%rax,1)
L290:
  mulsd  0x10(%rbx),%xmm0
  movsd  %xmm0,0x10(%rbx)
  cmp    $0x1,%r12d
  je     L84
  movsd  0x20(%rbx),%xmm2
  movsd  0x28(%rbx),%xmm0
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,0x30(%rsp)
  movsd  %xmm0,0x28(%rbx)
L227:
  mulsd  0x10(%rbx),%xmm2
  movsd  0x30(%rbx),%xmm0
  subsd  %xmm2,%xmm0
  movsd  %xmm0,0x38(%rsp)
  movsd  %xmm0,0x30(%rbx)
  jmp    L16
  nop
L455:
  cmp    $0x3,%eax
  je     L211
  test   %eax,%eax
  lea    0x3(%rax),%edx
  mov    %eax,%ecx
  mov    $0x4,%edi
  cmovns %eax,%edx
  sar    $0x1f,%ecx
  lea    0x18(%rbx),%rsi
  mov    %r11,0x18(%rsp)
  shr    $0x1e,%ecx
  mov    %r10d,0x10(%rsp)
  sar    $0x2,%edx
  add    %ecx,%eax
  imul   %r14d,%edx
  and    $0x3,%eax
  sub    %ecx,%eax
  cltq
  shl    $0x2,%edx
  movslq %edx,%rdx
  add    %rdx,%rax
  lea    (%rbx,%rax,8),%rdx
  xor    %eax,%eax
  call   <drowsw_lib@plt>
  mov    0x18(%rsp),%r11
  mov    0x10(%rsp),%r10d
L211:
  mov    (%rsp),%rax
  movsd  D27(%rip),%xmm0
  divsd  0x78(%rbx),%xmm0
  movsd  %xmm0,0x40(%rsp)
  movsd  %xmm0,0x18(%rax)
  test   %r10d,%r10d
  jle    L256
  mov    %r11,%rax
  xor    %edx,%edx
L650:
  movsd  0x60(%rax),%xmm1
  add    $0x4,%edx
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x60(%rax)
  movsd  0x68(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x68(%rax)
  movsd  0x70(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x70(%rax)
  movsd  0x78(%rax),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x78(%rax)
  add    %r15,%rax
  cmp    %r10d,%edx
  jl     L650
  lea    -0x1(%r10),%eax
  shr    $0x2,%eax
  lea    0x1(%rax),%edx
  mov    %rdx,%rax
  imul   %r15,%rdx
  shl    $0x2,%eax
  add    %rdx,%r11
L532:
  cmp    %eax,0xc(%rsp)
  jle    L84
  sub    $0x5,%ebp
  sub    %eax,%ebp
  lea    0x8(%r11,%rbp,8),%rax
L317:
  movsd  0x60(%r11),%xmm1
  add    $0x8,%r11
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,0x58(%r11)
  cmp    %rax,%r11
  jne    L317
  jmp    L84
  nopl   0x0(%rax)
L556:
  test   %eax,%eax
  lea    0x3(%rax),%edx
  mov    %eax,%esi
  mov    $0x4,%edi
  cmovns %eax,%edx
  sar    $0x1f,%esi
  mov    %r8,0x10(%rsp)
  shr    $0x1e,%esi
  sar    $0x2,%edx
  add    %esi,%eax
  imul   %r14d,%edx
  and    $0x3,%eax
  sub    %esi,%eax
  lea    0x10(%rbx),%rsi
  cltq
  shl    $0x2,%edx
  movslq %edx,%rdx
  add    %rax,%rdx
  xor    %eax,%eax
  lea    (%rbx,%rdx,8),%rdx
  call   <drowsw_lib@plt>
  mov    0x10(%rsp),%r8
  jmp    L764
  nopl   0x0(%rax)
L399:
  cmp    $0x3,%r12d
  je     L84
  movsd  0x60(%rbx),%xmm1
  movsd  0x8(%rbx),%xmm2
  movsd  0x68(%rbx),%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,0x68(%rbx)
L647:
  mulsd  0x10(%rbx),%xmm1
  movsd  0x70(%rbx),%xmm2
  mulsd  0x30(%rbx),%xmm0
  subsd  %xmm1,%xmm2
  subsd  %xmm0,%xmm2
  movsd  %xmm2,0x70(%rbx)
  jmp    L84
  nopw   0x0(%rax,%rax,1)
L464:
  mulsd  0x30(%rbx),%xmm0
  movsd  %xmm0,0x30(%rbx)
  cmp    $0x2,%r12d
  je     L84
  movsd  0x40(%rbx),%xmm1
  movsd  0x8(%rbx),%xmm2
  movsd  0x48(%rbx),%xmm0
  mulsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,0x48(%rbx)
  jmp    L144
  nopl   (%rax)
L63:
  xor    %edx,%edx
  jmp    L64
L425:
  xor    %esi,%esi
  jmp    L482
L524:
  mov    %r11,%rdx
  xor    %eax,%eax
  jmp    L110
L256:
  xor    %eax,%eax
  jmp    L532
L761:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: data_label: D27
datatype: f64

tool: D27: 1

assistant: ```c
void kernel_dgetrf_pivot_4_vs_lib4(int m, int n, double *pA, int sda, double *inv_diag_A, int *ipiv) {
  if (m <= 0 || n <= 0)
    return;
  const int bs = 4;
  int ma = m - 4;
  double tmp0, tmp1, tmp2, tmp3, u_00, u_01, u_02, u_03, u_11, u_12, u_13, u_22, u_23, u_33;
  double *pB;
  int k, idamax;
  idamax_lib4(m - 0, 0, &pA[0 + bs * 0], sda, &idamax, &tmp0);
  ipiv[0] = idamax;
  if (tmp0 != 0.0) {
    if (ipiv[0] != 0)
      drowsw_lib(4, pA + 0, pA + ipiv[0] / bs * bs * sda + ipiv[0] % bs);
    tmp0 = 1.0 / pA[0 + bs * 0];
    inv_diag_A[0] = tmp0;
    if (m >= 4) {
      pA[1 + bs * 0] *= tmp0;
      pA[2 + bs * 0] *= tmp0;
      pA[3 + bs * 0] *= tmp0;
      pB = pA + bs * sda;
      for (k = 0; k < ma - 3; k += 4) {
        pB[0 + bs * 0] *= tmp0;
        pB[1 + bs * 0] *= tmp0;
        pB[2 + bs * 0] *= tmp0;
        pB[3 + bs * 0] *= tmp0;
        pB += bs * sda;
      }
      for (; k < ma; k++) {
        pB[0 + bs * 0] *= tmp0;
        pB += 1;
      }
    } else {
      if (m > 1) {
        pA[1 + bs * 0] *= tmp0;
        if (m > 2)
          pA[2 + bs * 0] *= tmp0;
      }
    }
  } else {
    inv_diag_A[0] = 0.0;
  }
  if (n == 1 || m == 1)
    return;
  if (m >= 4) {
    u_01 = pA[0 + bs * 1];
    tmp1 = pA[1 + bs * 1];
    tmp2 = pA[2 + bs * 1];
    tmp3 = pA[3 + bs * 1];
    tmp1 -= pA[1 + bs * 0] * u_01;
    tmp2 -= pA[2 + bs * 0] * u_01;
    tmp3 -= pA[3 + bs * 0] * u_01;
    pA[1 + bs * 1] = tmp1;
    pA[2 + bs * 1] = tmp2;
    pA[3 + bs * 1] = tmp3;
    pB = pA + bs * sda;
    for (k = 0; k < ma - 3; k += 4) {
      tmp0 = pB[0 + bs * 1];
      tmp1 = pB[1 + bs * 1];
      tmp2 = pB[2 + bs * 1];
      tmp3 = pB[3 + bs * 1];
      tmp0 -= pB[0 + bs * 0] * u_01;
      tmp1 -= pB[1 + bs * 0] * u_01;
      tmp2 -= pB[2 + bs * 0] * u_01;
      tmp3 -= pB[3 + bs * 0] * u_01;
      pB[0 + bs * 1] = tmp0;
      pB[1 + bs * 1] = tmp1;
      pB[2 + bs * 1] = tmp2;
      pB[3 + bs * 1] = tmp3;
      pB += bs * sda;
    }
    for (; k < ma; k++) {
      tmp0 = pB[0 + bs * 1];
      tmp0 -= pB[0 + bs * 0] * u_01;
      pB[0 + bs * 1] = tmp0;
      pB += 1;
    }
  } else {
    u_01 = pA[0 + bs * 1];
    tmp1 = pA[1 + bs * 1];
    tmp1 -= pA[1 + bs * 0] * u_01;
    pA[1 + bs * 1] = tmp1;
    if (m > 2) {
      tmp2 = pA[2 + bs * 1];
      tmp2 -= pA[2 + bs * 0] * u_01;
      pA[2 + bs * 1] = tmp2;
    }
  }
  idamax_lib4(m - 1, 1, &pA[1 + bs * 1], sda, &idamax, &tmp1);
  ipiv[1] = idamax + 1;
  if (tmp1 != 0) {
    if (ipiv[1] != 1)
      drowsw_lib(4, pA + 1, pA + ipiv[1] / bs * bs * sda + ipiv[1] % bs);
    tmp1 = 1.0 / pA[1 + bs * 1];
    inv_diag_A[1] = tmp1;
    if (m >= 4) {
      pA[2 + bs * 1] *= tmp1;
      pA[3 + bs * 1] *= tmp1;
      pB = pA + bs * sda;
      for (k = 0; k < ma - 3; k += 4) {
        pB[0 + bs * 1] *= tmp1;
        pB[1 + bs * 1] *= tmp1;
        pB[2 + bs * 1] *= tmp1;
        pB[3 + bs * 1] *= tmp1;
        pB += bs * sda;
      }
      for (; k < ma; k++) {
        pB[0 + bs * 1] *= tmp1;
        pB += 1;
      }
    } else {
      if (m > 2)
        pA[2 + bs * 1] *= tmp1;
    }
  } else {
    inv_diag_A[1] = 0.0;
  }
  if (n == 2)
    return;
  if (m >= 4) {
    u_02 = pA[0 + bs * 2];
    u_12 = pA[1 + bs * 2];
    u_12 -= pA[1 + bs * 0] * u_02;
    pA[1 + bs * 2] = u_12;
    tmp2 = pA[2 + bs * 2];
    tmp3 = pA[3 + bs * 2];
    tmp2 -= pA[2 + bs * 0] * u_02;
    tmp3 -= pA[3 + bs * 0] * u_02;
    tmp2 -= pA[2 + bs * 1] * u_12;
    tmp3 -= pA[3 + bs * 1] * u_12;
    pA[2 + bs * 2] = tmp2;
    pA[3 + bs * 2] = tmp3;
    pB = pA + bs * sda;
    for (k = 0; k < ma - 3; k += 4) {
      tmp0 = pB[0 + bs * 2];
      tmp1 = pB[1 + bs * 2];
      tmp2 = pB[2 + bs * 2];
      tmp3 = pB[3 + bs * 2];
      tmp0 -= pB[0 + bs * 0] * u_02;
      tmp1 -= pB[1 + bs * 0] * u_02;
      tmp2 -= pB[2 + bs * 0] * u_02;
      tmp3 -= pB[3 + bs * 0] * u_02;
      tmp0 -= pB[0 + bs * 1] * u_12;
      tmp1 -= pB[1 + bs * 1] * u_12;
      tmp2 -= pB[2 + bs * 1] * u_12;
      tmp3 -= pB[3 + bs * 1] * u_12;
      pB[0 + bs * 2] = tmp0;
      pB[1 + bs * 2] = tmp1;
      pB[2 + bs * 2] = tmp2;
      pB[3 + bs * 2] = tmp3;
      pB += bs * sda;
    }
    for (; k < ma; k++) {
      tmp0 = pB[0 + bs * 2];
      tmp0 -= pB[0 + bs * 0] * u_02;
      tmp0 -= pB[0 + bs * 1] * u_12;
      pB[0 + bs * 2] = tmp0;
      pB += 1;
    }
  } else {
    u_02 = pA[0 + bs * 2];
    u_12 = pA[1 + bs * 2];
    u_12 -= pA[1 + bs * 0] * u_02;
    pA[1 + bs * 2] = u_12;
    if (m > 2) {
      tmp2 = pA[2 + bs * 2];
      tmp2 -= pA[2 + bs * 0] * u_02;
      tmp2 -= pA[2 + bs * 1] * u_12;
      pA[2 + bs * 2] = tmp2;
    }
  }
  if (m > 2) {
    idamax_lib4(m - 2, 2, &pA[2 + bs * 2], sda, &idamax, &tmp2);
    ipiv[2] = idamax + 2;
    if (tmp2 != 0) {
      if (ipiv[2] != 2)
        drowsw_lib(4, pA + 2, pA + ipiv[2] / bs * bs * sda + ipiv[2] % bs);
      tmp2 = 1.0 / pA[2 + bs * 2];
      inv_diag_A[2] = tmp2;
      if (m >= 4) {
        pA[3 + bs * 2] *= tmp2;
        pB = pA + bs * sda;
        for (k = 0; k < ma - 3; k += 4) {
          pB[0 + bs * 2] *= tmp2;
          pB[1 + bs * 2] *= tmp2;
          pB[2 + bs * 2] *= tmp2;
          pB[3 + bs * 2] *= tmp2;
          pB += bs * sda;
        }
        for (; k < ma; k++) {
          pB[0 + bs * 2] *= tmp2;
          pB += 1;
        }
      }
    } else {
      inv_diag_A[2] = 0.0;
    }
  }
  if (n < 4)
    return;
  if (m >= 4) {
    u_03 = pA[0 + bs * 3];
    u_13 = pA[1 + bs * 3];
    u_13 -= pA[1 + bs * 0] * u_03;
    pA[1 + bs * 3] = u_13;
    u_23 = pA[2 + bs * 3];
    u_23 -= pA[2 + bs * 0] * u_03;
    u_23 -= pA[2 + bs * 1] * u_13;
    pA[2 + bs * 3] = u_23;
    tmp3 = pA[3 + bs * 3];
    tmp3 -= pA[3 + bs * 0] * u_03;
    tmp3 -= pA[3 + bs * 1] * u_13;
    tmp3 -= pA[3 + bs * 2] * u_23;
    pA[3 + bs * 3] = tmp3;
    pB = pA + bs * sda;
    for (k = 0; k < ma - 3; k += 4) {
      tmp0 = pB[0 + bs * 3];
      tmp1 = pB[1 + bs * 3];
      tmp2 = pB[2 + bs * 3];
      tmp3 = pB[3 + bs * 3];
      tmp0 -= pB[0 + bs * 0] * u_03;
      tmp1 -= pB[1 + bs * 0] * u_03;
      tmp2 -= pB[2 + bs * 0] * u_03;
      tmp3 -= pB[3 + bs * 0] * u_03;
      tmp0 -= pB[0 + bs * 1] * u_13;
      tmp1 -= pB[1 + bs * 1] * u_13;
      tmp2 -= pB[2 + bs * 1] * u_13;
      tmp3 -= pB[3 + bs * 1] * u_13;
      tmp0 -= pB[0 + bs * 2] * u_23;
      tmp1 -= pB[1 + bs * 2] * u_23;
      tmp2 -= pB[2 + bs * 2] * u_23;
      tmp3 -= pB[3 + bs * 2] * u_23;
      pB[0 + bs * 3] = tmp0;
      pB[1 + bs * 3] = tmp1;
      pB[2 + bs * 3] = tmp2;
      pB[3 + bs * 3] = tmp3;
      pB += bs * sda;
    }
    for (; k < ma; k++) {
      tmp0 = pB[0 + bs * 3];
      tmp0 -= pB[0 + bs * 0] * u_03;
      tmp0 -= pB[0 + bs * 1] * u_13;
      tmp0 -= pB[0 + bs * 2] * u_23;
      pB[0 + bs * 3] = tmp0;
      pB += 1;
    }
  } else {
    u_03 = pA[0 + bs * 3];
    u_13 = pA[1 + bs * 3];
    u_13 -= pA[1 + bs * 0] * u_03;
    pA[1 + bs * 3] = u_13;
    if (m > 2) {
      u_23 = pA[2 + bs * 3];
      u_23 -= pA[2 + bs * 0] * u_03;
      u_23 -= pA[2 + bs * 1] * u_13;
      pA[2 + bs * 3] = u_23;
    }
  }
  if (m > 3) {
    idamax_lib4(m - 3, 3, &pA[3 + bs * 3], sda, &idamax, &tmp3);
    ipiv[3] = idamax + 3;
    if (tmp3 != 0) {
      if (ipiv[3] != 3)
        drowsw_lib(4, pA + 3, pA + ipiv[3] / bs * bs * sda + ipiv[3] % bs);
      tmp3 = 1.0 / pA[3 + bs * 3];
      inv_diag_A[3] = tmp3;
      pB = pA + bs * sda;
      for (k = 0; k < ma - 3; k += 4) {
        pB[0 + bs * 3] *= tmp3;
        pB[1 + bs * 3] *= tmp3;
        pB[2 + bs * 3] *= tmp3;
        pB[3 + bs * 3] *= tmp3;
        pB += bs * sda;
      }
      for (; k < ma; k++) {
        pB[0 + bs * 3] *= tmp3;
        pB += 1;
      }
    } else {
      inv_diag_A[3] = 0.0;
    }
  }
  return;
}
```