user: 请将以下的汇编代码转换成C语言代码:

```asm
<rotate_model_openmp>:
  endbr64
  mov    %edx,%eax
  push   %r15
  shr    $0x1f,%eax
  push   %r14
  mov    %edx,%r14d
  push   %r13
  add    %edx,%eax
  push   %r12
  sar    %eax
  push   %rbp
  mov    %eax,%edx
  push   %rbx
  mov    %eax,%ebx
  neg    %ebx
  mov    %eax,-0x8(%rsp)
  mov    %r14d,%eax
  sub    %edx,%eax
  mov    %rcx,-0x18(%rsp)
  lea    -0x1(%rax),%r15d
  mov    %ebx,-0x1c(%rsp)
  cmp    %r15d,%ebx
  jge    L176
  cmp    $0x1,%r14d
  jne    L11
  mov    %ebx,-0x28(%rsp)
  mov    %ebx,%r13d
  xor    %r12d,%r12d
  pxor   %xmm2,%xmm2
  movsd  D3(%rip),%xmm6
  mov    %rcx,%r14
L81:
  pxor   %xmm5,%xmm5
  mov    %r13d,%r9d
  cvtsi2sdl -0x28(%rsp),%xmm5
  nop
L159:
  pxor   %xmm4,%xmm4
  mov    %r13d,%eax
  lea    (%r9,%r12,1),%r10d
  cvtsi2sd %r9d,%xmm4
L58:
  movsd  0x8(%rdi),%xmm0
  movsd  (%rdi),%xmm1
  pxor   %xmm3,%xmm3
  cvtsi2sd %eax,%xmm3
  mulsd  %xmm5,%xmm1
  mulsd  %xmm4,%xmm0
  addsd  %xmm1,%xmm0
  movsd  0x10(%rdi),%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  comisd %xmm0,%xmm2
  ja     L110
  comisd %xmm2,%xmm0
  jae    L110
  movsd  0x18(%rdi),%xmm1
  movsd  0x20(%rdi),%xmm7
  mulsd  %xmm5,%xmm1
  mulsd  %xmm4,%xmm7
  addsd  %xmm7,%xmm1
  movsd  0x28(%rdi),%xmm7
  mulsd  %xmm3,%xmm7
  addsd  %xmm7,%xmm1
  addsd  %xmm2,%xmm1
  comisd %xmm1,%xmm2
  ja     L110
  comisd %xmm2,%xmm1
  jae    L110
  movsd  0x30(%rdi),%xmm7
  movsd  0x38(%rdi),%xmm8
  mulsd  0x40(%rdi),%xmm3
  mulsd  %xmm5,%xmm7
  mulsd  %xmm4,%xmm8
  addsd  %xmm8,%xmm7
  addsd  %xmm7,%xmm3
  addsd  %xmm2,%xmm3
  comisd %xmm3,%xmm2
  ja     L110
  comisd %xmm2,%xmm3
  jae    L110
  cvttsd2si %xmm0,%r8d
  pxor   %xmm7,%xmm7
  movapd %xmm6,%xmm8
  cvttsd2si %xmm1,%ecx
  movapd %xmm6,%xmm9
  lea    (%r10,%rax,1),%r11d
  cvttsd2si %xmm3,%edx
  movslq %r11d,%r11
  lea    (%r14,%r11,8),%rbp
  cvtsi2sd %r8d,%xmm7
  lea    (%rcx,%r8,1),%r11d
  lea    (%r11,%rdx,1),%ebx
  movslq %r11d,%r11
  movslq %ebx,%rbx
  subsd  %xmm7,%xmm0
  pxor   %xmm7,%xmm7
  cvtsi2sd %ecx,%xmm7
  subsd  %xmm0,%xmm9
  subsd  %xmm7,%xmm1
  pxor   %xmm7,%xmm7
  cvtsi2sd %edx,%xmm7
  subsd  %xmm1,%xmm8
  subsd  %xmm7,%xmm3
  movapd %xmm6,%xmm7
  movapd %xmm8,%xmm10
  mulsd  %xmm9,%xmm10
  subsd  %xmm3,%xmm7
  mulsd  %xmm1,%xmm9
  mulsd  %xmm0,%xmm8
  mulsd  %xmm0,%xmm1
  movapd %xmm10,%xmm0
  mulsd  %xmm7,%xmm0
  mulsd  %xmm3,%xmm10
  mulsd  (%rsi,%r11,8),%xmm10
  lea    (%rdx,%r8,1),%r11d
  movslq %r8d,%r8
  mulsd  (%rsi,%rbx,8),%xmm0
  movslq %r11d,%r11
  addsd  %xmm10,%xmm0
  movapd %xmm9,%xmm10
  mulsd  %xmm7,%xmm10
  mulsd  (%rsi,%r11,8),%xmm10
  mulsd  %xmm3,%xmm9
  mulsd  (%rsi,%r8,8),%xmm9
  lea    (%rdx,%rcx,1),%r8d
  movslq %ecx,%rcx
  movslq %edx,%rdx
  movslq %r8d,%r8
  addsd  %xmm10,%xmm0
  addsd  %xmm9,%xmm0
  movapd %xmm8,%xmm9
  mulsd  %xmm7,%xmm9
  mulsd  (%rsi,%r8,8),%xmm9
  mulsd  %xmm3,%xmm8
  mulsd  (%rsi,%rcx,8),%xmm8
  mulsd  %xmm1,%xmm7
  mulsd  (%rsi,%rdx,8),%xmm7
  addsd  %xmm9,%xmm0
  mulsd  %xmm3,%xmm1
  mulsd  (%rsi),%xmm1
  addsd  %xmm8,%xmm0
  addsd  %xmm7,%xmm0
  addsd  %xmm1,%xmm0
  addsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
  nopl   0x0(%rax,%rax,1)
L110:
  add    $0x1,%eax
  cmp    %eax,%r15d
  jne    L58
  add    $0x1,%r9d
  cmp    %r9d,%r15d
  jne    L159
  addl   $0x1,-0x28(%rsp)
  mov    -0x28(%rsp),%eax
  add    $0x1,%r12d
  cmp    %eax,%r15d
  jne    L81
L176:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L11:
  pxor   %xmm5,%xmm5
  pxor   %xmm2,%xmm2
  lea    -0x1(%r14),%ebx
  mov    %r14d,%eax
  imul   %r14d,%eax
  movl   $0x0,-0xc(%rsp)
  movsd  D3(%rip),%xmm7
  cvtsi2sdl -0x8(%rsp),%xmm5
  mov    %eax,-0x4(%rsp)
  mov    -0x1c(%rsp),%eax
  mov    %eax,-0x10(%rsp)
L76:
  pxor   %xmm6,%xmm6
  mov    -0x8(%rsp),%eax
  add    -0xc(%rsp),%eax
  mov    %ebx,%r13d
  cvtsi2sdl -0x10(%rsp),%xmm6
  mov    %eax,-0x28(%rsp)
  mov    -0x1c(%rsp),%ebp
L55:
  pxor   %xmm4,%xmm4
  mov    %ebp,-0x20(%rsp)
  mov    -0x1c(%rsp),%ecx
  cvtsi2sd %ebp,%xmm4
  nopl   0x0(%rax)
L83:
  movsd  (%rdi),%xmm0
  movsd  0x8(%rdi),%xmm1
  pxor   %xmm8,%xmm8
  cvtsi2sd %ecx,%xmm8
  mulsd  %xmm4,%xmm1
  mulsd  %xmm6,%xmm0
  addsd  %xmm1,%xmm0
  movsd  0x10(%rdi),%xmm1
  mulsd  %xmm8,%xmm1
  addsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  addsd  %xmm5,%xmm0
  comisd %xmm0,%xmm2
  ja     L59
  pxor   %xmm9,%xmm9
  cvtsi2sd %r13d,%xmm9
  comisd %xmm9,%xmm0
  jae    L59
  movsd  0x18(%rdi),%xmm1
  movsd  0x20(%rdi),%xmm3
  mulsd  %xmm6,%xmm1
  mulsd  %xmm4,%xmm3
  addsd  %xmm3,%xmm1
  movsd  0x28(%rdi),%xmm3
  mulsd  %xmm8,%xmm3
  addsd  %xmm3,%xmm1
  addsd  %xmm2,%xmm1
  addsd  %xmm5,%xmm1
  comisd %xmm1,%xmm2
  ja     L59
  comisd %xmm9,%xmm1
  jae    L59
  movsd  0x30(%rdi),%xmm3
  movsd  0x38(%rdi),%xmm10
  mulsd  0x40(%rdi),%xmm8
  mulsd  %xmm6,%xmm3
  mulsd  %xmm4,%xmm10
  addsd  %xmm10,%xmm3
  addsd  %xmm8,%xmm3
  addsd  %xmm2,%xmm3
  addsd  %xmm5,%xmm3
  comisd %xmm3,%xmm2
  ja     L59
  comisd %xmm9,%xmm3
  jae    L59
  cvttsd2si %xmm0,%ebx
  mov    %r14d,%r8d
  mov    -0x28(%rsp),%eax
  mov    %r14d,%r10d
  cvttsd2si %xmm1,%r12d
  mov    -0x18(%rsp),%rdx
  pxor   %xmm8,%xmm8
  movapd %xmm7,%xmm10
  cvttsd2si %xmm3,%r9d
  add    %ecx,%eax
  movapd %xmm7,%xmm9
  cltq
  imul   %ebx,%r8d
  lea    (%rdx,%rax,8),%rbp
  imul   %r12d,%r10d
  cvtsi2sd %ebx,%xmm8
  imul   %r14d,%r8d
  lea    (%r8,%r10,1),%eax
  subsd  %xmm8,%xmm0
  pxor   %xmm8,%xmm8
  mov    %eax,-0x24(%rsp)
  cvtsi2sd %r12d,%xmm8
  lea    0x1(%r9),%eax
  cltd
  idiv   %r14d
  lea    0x1(%r12),%eax
  subsd  %xmm8,%xmm1
  pxor   %xmm8,%xmm8
  cvtsi2sd %r9d,%xmm8
  subsd  %xmm0,%xmm10
  movapd %xmm10,%xmm11
  subsd  %xmm8,%xmm3
  mulsd  %xmm1,%xmm10
  movapd %xmm7,%xmm8
  subsd  %xmm1,%xmm8
  subsd  %xmm3,%xmm9
  mulsd  %xmm8,%xmm11
  mulsd  %xmm0,%xmm8
  mulsd  %xmm1,%xmm0
  mov    %edx,%r11d
  cltd
  movapd %xmm11,%xmm1
  idiv   %r14d
  lea    0x1(%rbx),%eax
  mov    -0x24(%rsp),%ebx
  mulsd  %xmm9,%xmm1
  mulsd  %xmm3,%xmm11
  imul   %r14d,%edx
  add    %edx,%r8d
  mov    %edx,%r12d
  cltd
  idiv   %r14d
  imul   %r14d,%edx
  mov    %edx,%eax
  lea    (%rbx,%r9,1),%edx
  movslq %edx,%rdx
  imul   %r14d,%eax
  mulsd  (%rsi,%rdx,8),%xmm1
  lea    (%rbx,%r11,1),%edx
  movslq %edx,%rdx
  mulsd  (%rsi,%rdx,8),%xmm11
  lea    (%r8,%r9,1),%edx
  add    %eax,%r10d
  add    %r12d,%eax
  movslq %edx,%rdx
  addsd  %xmm11,%xmm1
  movapd %xmm10,%xmm11
  mulsd  %xmm9,%xmm11
  mulsd  (%rsi,%rdx,8),%xmm11
  lea    (%r11,%r8,1),%edx
  mulsd  %xmm3,%xmm10
  movslq %edx,%rdx
  mulsd  (%rsi,%rdx,8),%xmm10
  lea    (%r10,%r9,1),%edx
  add    %r11d,%r10d
  movslq %edx,%rdx
  addsd  %xmm11,%xmm1
  addsd  %xmm10,%xmm1
  movapd %xmm8,%xmm10
  mulsd  %xmm9,%xmm10
  mulsd  (%rsi,%rdx,8),%xmm10
  movslq %r10d,%rdx
  mulsd  %xmm3,%xmm8
  mulsd  (%rsi,%rdx,8),%xmm8
  lea    (%rax,%r9,1),%edx
  add    %r11d,%eax
  mulsd  %xmm0,%xmm9
  movslq %edx,%rdx
  cltq
  mulsd  (%rsi,%rdx,8),%xmm9
  addsd  %xmm10,%xmm1
  mulsd  %xmm3,%xmm0
  mulsd  (%rsi,%rax,8),%xmm0
  addsd  %xmm8,%xmm1
  addsd  %xmm9,%xmm1
  addsd  %xmm1,%xmm0
  addsd  0x0(%rbp),%xmm0
  movsd  %xmm0,0x0(%rbp)
L59:
  add    $0x1,%ecx
  cmp    %r15d,%ecx
  jne    L83
  mov    -0x20(%rsp),%ebp
  add    %r14d,-0x28(%rsp)
  add    $0x1,%ebp
  cmp    %r15d,%ebp
  jne    L55
  addl   $0x1,-0x10(%rsp)
  mov    -0x10(%rsp),%eax
  mov    %r13d,%ebx
  mov    -0x4(%rsp),%edx
  add    %edx,-0xc(%rsp)
  cmp    %r15d,%eax
  jne    L76
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: unpack_data
arguments: label: D3
type_infered: f64

tool: D3: 1

assistant: ```c
void rotate_model_openmp(double rot[3][3], double *m, int s, double *rotmodel) {
#pragma omp parallel default(shared)
  {
    int x, y, z, i, c = s / 2, vx, vy, vz;
    double fx, fy, fz, cx, cy, cz;
    double rot_vox[3];
#pragma omp for schedule(static, 1)
    for (vx = -c; vx < s - c - 1; ++vx)
      for (vy = -c; vy < s - c - 1; ++vy)
        for (vz = -c; vz < s - c - 1; ++vz) {
          for (i = 0; i < 3; ++i) {
            rot_vox[i] = 0.;
            rot_vox[i] += rot[i][0] * vx + rot[i][1] * vy + rot[i][2] * vz;
            rot_vox[i] += c;
          }
          if (rot_vox[0] < 0 || rot_vox[0] >= s - 1)
            continue;
          if (rot_vox[1] < 0 || rot_vox[1] >= s - 1)
            continue;
          if (rot_vox[2] < 0 || rot_vox[2] >= s - 1)
            continue;
          x = (int)rot_vox[0];
          y = (int)rot_vox[1];
          z = (int)rot_vox[2];
          fx = rot_vox[0] - x;
          fy = rot_vox[1] - y;
          fz = rot_vox[2] - z;
          cx = 1. - fx;
          cy = 1. - fy;
          cz = 1. - fz;
          rotmodel[(vx + c) * s * s + (vy + c) * s + (vz + c)] += cx * cy * cz * m[x * s * s + y * s + z] + cx * cy * fz * m[x * s * s + y * s + ((z + 1) % s)] + cx * fy * cz * m[x * s * s + ((y + 1) % s) * s + z] + cx * fy * fz * m[x * s * s + ((y + 1) % s) * s + ((z + 1) % s)] + fx * cy * cz * m[((x + 1) % s) * s * s + y * s + z] + fx * cy * fz * m[((x + 1) % s) * s * s + y * s + ((z + 1) % s)] + fx * fy * cz * m[((x + 1) % s) * s * s + ((y + 1) % s) * s + z] + fx * fy * fz * m[((x + 1) % s) * s * s + ((y + 1) % s) * s + ((z + 1) % s)];
        }
  }
}
```