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

```asm
<matrix_rotate_x>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  movsd  %xmm0,-0x20(%rbp)
  mov    -0x18(%rbp),%rax
  movsd  0x20(%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x20,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  mov    -0x18(%rbp),%rax
  add    $0x40,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x20,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  movq   D11(%rip),%xmm0
  movq   %rax,%xmm3
  xorpd  %xmm0,%xmm3
  movapd %xmm3,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x40,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x40,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  movsd  0x28(%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x28,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  mov    -0x18(%rbp),%rax
  add    $0x48,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x28,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  movq   D11(%rip),%xmm0
  movq   %rax,%xmm6
  xorpd  %xmm0,%xmm6
  movapd %xmm6,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x48,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x48,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  movsd  0x30(%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x30,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  mov    -0x18(%rbp),%rax
  add    $0x50,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x30,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  movq   D11(%rip),%xmm0
  movq   %rax,%xmm4
  xorpd  %xmm0,%xmm4
  movapd %xmm4,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x50,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x50,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  movsd  0x38(%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x38,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  mov    -0x18(%rbp),%rax
  add    $0x58,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x38,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movq   %xmm0,%rax
  movq   D11(%rip),%xmm0
  movq   %rax,%xmm3
  xorpd  %xmm0,%xmm3
  movapd %xmm3,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <cos@plt>
  mov    -0x18(%rbp),%rax
  add    $0x58,%rax
  movsd  (%rax),%xmm1
  mulsd  %xmm1,%xmm0
  mov    -0x18(%rbp),%rax
  add    $0x58,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D11
data_type: byte[8]

tool: {"D11": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
void matrix_rotate_x(double *a, double degree) {
  double temp;
  temp = a[4];
  a[4] = (cos(degree) * a[4]) + (sin(degree) * a[8]);
  a[8] = (-sin(degree) * temp) + (cos(degree) * a[8]);
  temp = a[5];
  a[5] = (cos(degree) * a[5]) + (sin(degree) * a[9]);
  a[9] = (-sin(degree) * temp) + (cos(degree) * a[9]);
  temp = a[6];
  a[6] = (cos(degree) * a[6]) + (sin(degree) * a[10]);
  a[10] = (-sin(degree) * temp) + (cos(degree) * a[10]);
  temp = a[7];
  a[7] = (cos(degree) * a[7]) + (sin(degree) * a[11]);
  a[11] = (-sin(degree) * temp) + (cos(degree) * a[11]);
}
```