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

```asm
<math_matrix_rotate>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x68(%rbp)
  movss  %xmm0,-0x6c(%rbp)
  movss  %xmm1,-0x70(%rbp)
  movss  %xmm2,-0x74(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x50(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <math_matrix_copy@plt>
  mov    -0x6c(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x6c(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x54(%rbp)
  movss  -0x40(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x30(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x3c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x2c(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x14,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x38(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x18,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x34(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x24(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x1c,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x30(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x40(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x2c(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x3c(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x24,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x28(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x38(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x28,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x24(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x34(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x2c,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  lea    -0x50(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <math_matrix_copy@plt>
  mov    -0x70(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x70(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x54(%rbp)
  movss  -0x50(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x30(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x68(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x4c(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x2c(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x4,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x48(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x28(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x8,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x44(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x24(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0xc,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x30(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x50(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x20,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x2c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x4c(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x24,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x28(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x48(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x28,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x24(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x44(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x2c,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  lea    -0x50(%rbp),%rdx
  mov    -0x68(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <math_matrix_copy@plt>
  mov    -0x74(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x74(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x54(%rbp)
  movss  -0x50(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x40(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x68(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x4c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x3c(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x4,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x48(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x38(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0x8,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x44(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x58(%rbp),%xmm1
  movss  -0x34(%rbp),%xmm0
  mulss  -0x54(%rbp),%xmm0
  mov    -0x68(%rbp),%rax
  add    $0xc,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x40(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x50(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x10,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x3c(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x4c(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x14,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x38(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x48(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x18,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x34(%rbp),%xmm0
  mulss  -0x58(%rbp),%xmm0
  movss  -0x44(%rbp),%xmm1
  mulss  -0x54(%rbp),%xmm1
  mov    -0x68(%rbp),%rax
  add    $0x1c,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L1
  call   <__stack_chk_fail@plt>
L1:
  leave
  ret
```

assistant: ```c
void math_matrix_rotate(float *matrix, const float x, const float y, const float z) {
  float cache[16];
  float cosine;
  float sine;
  math_matrix_copy(matrix, cache);
  cosine = cos(x);
  sine = sin(x);
  matrix[4] = cache[4] * cosine + cache[8] * sine;
  matrix[5] = cache[5] * cosine + cache[9] * sine;
  matrix[6] = cache[6] * cosine + cache[10] * sine;
  matrix[7] = cache[7] * cosine + cache[11] * sine;
  matrix[8] = cache[8] * cosine - cache[4] * sine;
  matrix[9] = cache[9] * cosine - cache[5] * sine;
  matrix[10] = cache[10] * cosine - cache[6] * sine;
  matrix[11] = cache[11] * cosine - cache[7] * sine;
  math_matrix_copy(matrix, cache);
  cosine = cos(y);
  sine = sin(y);
  matrix[0] = cache[0] * cosine - cache[8] * sine;
  matrix[1] = cache[1] * cosine - cache[9] * sine;
  matrix[2] = cache[2] * cosine - cache[10] * sine;
  matrix[3] = cache[3] * cosine - cache[11] * sine;
  matrix[8] = cache[8] * cosine + cache[0] * sine;
  matrix[9] = cache[9] * cosine + cache[1] * sine;
  matrix[10] = cache[10] * cosine + cache[2] * sine;
  matrix[11] = cache[11] * cosine + cache[3] * sine;
  math_matrix_copy(matrix, cache);
  cosine = cos(z);
  sine = sin(z);
  matrix[0] = cache[0] * cosine + cache[4] * sine;
  matrix[1] = cache[1] * cosine + cache[5] * sine;
  matrix[2] = cache[2] * cosine + cache[6] * sine;
  matrix[3] = cache[3] * cosine + cache[7] * sine;
  matrix[4] = cache[4] * cosine - cache[0] * sine;
  matrix[5] = cache[5] * cosine - cache[1] * sine;
  matrix[6] = cache[6] * cosine - cache[2] * sine;
  matrix[7] = cache[7] * cosine - cache[3] * sine;
}
```