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

```asm
<gridGenRotBounds>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %edi,-0x64(%rbp)
  mov    %esi,-0x68(%rbp)
  mov    %edx,-0x6c(%rbp)
  mov    %rcx,-0x78(%rbp)
  mov    %r8,-0x80(%rbp)
  mov    %r9,-0x88(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%edi
  call   <gridInqXpole@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%edi
  call   <gridInqYpole@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,%edi
  call   <gridInqAngle@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x30(%rbp)
  movq   $0x0,-0x58(%rbp)
  jmp    L35
L24:
  mov    -0x80(%rbp),%rax
  movsd  (%rax),%xmm0
  mov    -0x80(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  comisd %xmm1,%xmm0
  jbe    L17
  mov    -0x58(%rbp),%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x58(%rbp),%rax
  shl    $0x4,%rax
  lea    0x8(%rax),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  jmp    L37
L17:
  mov    -0x58(%rbp),%rax
  shl    $0x4,%rax
  lea    0x8(%rax),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x58(%rbp),%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x50(%rbp)
L37:
  movq   $0x0,-0x60(%rbp)
  jmp    L20
L50:
  mov    -0x60(%rbp),%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x60(%rbp),%rax
  shl    $0x4,%rax
  lea    0x8(%rax),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  imul   -0x58(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm3
  movsd  -0x40(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mov    -0x50(%rbp),%rax
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <lamrot_to_lam@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm3
  movsd  -0x40(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  mov    -0x50(%rbp),%rax
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <lamrot_to_lam@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm3
  movsd  -0x40(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <lamrot_to_lam@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x3,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x88(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm3
  movsd  -0x40(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <lamrot_to_lam@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mov    -0x50(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <phirot_to_phi@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  mov    -0x50(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <phirot_to_phi@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x20(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <phirot_to_phi@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x3,%rax
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  movsd  -0x30(%rbp),%xmm2
  movsd  -0x38(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mov    -0x48(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <phirot_to_phi@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  addq   $0x1,-0x60(%rbp)
L20:
  mov    -0x68(%rbp),%eax
  cltq
  cmp    %rax,-0x60(%rbp)
  jl     L50
  addq   $0x1,-0x58(%rbp)
L35:
  mov    -0x6c(%rbp),%eax
  cltq
  cmp    %rax,-0x58(%rbp)
  jl     L24
  nop
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void gridGenRotBounds(int gridID, int nx, int ny, double *xbounds, double *ybounds, double *xbounds2D, double *ybounds2D) {
  long i, j, index;
  double minlon, maxlon;
  double minlat, maxlat;
  double xpole, ypole, angle;
  xpole = gridInqXpole(gridID);
  ypole = gridInqYpole(gridID);
  angle = gridInqAngle(gridID);
  for (j = 0; j < ny; j++) {
    if (ybounds[0] > ybounds[1]) {
      maxlat = ybounds[2 * j];
      minlat = ybounds[2 * j + 1];
    } else {
      maxlat = ybounds[2 * j + 1];
      minlat = ybounds[2 * j];
    }
    for (i = 0; i < nx; i++) {
      minlon = xbounds[2 * i];
      maxlon = xbounds[2 * i + 1];
      index = j * 4 * nx + 4 * i;
      xbounds2D[index + 0] = lamrot_to_lam(minlat, minlon, ypole, xpole, angle);
      xbounds2D[index + 1] = lamrot_to_lam(minlat, maxlon, ypole, xpole, angle);
      xbounds2D[index + 2] = lamrot_to_lam(maxlat, maxlon, ypole, xpole, angle);
      xbounds2D[index + 3] = lamrot_to_lam(maxlat, minlon, ypole, xpole, angle);
      ybounds2D[index + 0] = phirot_to_phi(minlat, minlon, ypole, angle);
      ybounds2D[index + 1] = phirot_to_phi(minlat, maxlon, ypole, angle);
      ybounds2D[index + 2] = phirot_to_phi(maxlat, maxlon, ypole, angle);
      ybounds2D[index + 3] = phirot_to_phi(maxlat, minlon, ypole, angle);
    }
  }
}
```