user: 这段汇编代码用C语言表示是什么样的？

```asm
<gl_rotatef>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  movss  %xmm0,-0x74(%rbp)
  movss  %xmm1,-0x78(%rbp)
  movss  %xmm2,-0x7c(%rbp)
  movss  %xmm3,-0x80(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  D61(%rip),%xmm0
  movss  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x44(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x40(%rbp)
  movss  D61(%rip),%xmm0
  movss  %xmm0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  movss  D61(%rip),%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  D61(%rip),%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x74(%rbp),%xmm1
  movss  D21(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  D66(%rip),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x6c(%rbp)
  mov    -0x6c(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x68(%rbp)
  mov    -0x6c(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,-0x64(%rbp)
  movss  D61(%rip),%xmm0
  subss  -0x64(%rbp),%xmm0
  movss  %xmm0,-0x60(%rbp)
  movss  -0x78(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  %xmm0,-0x5c(%rbp)
  movss  -0x7c(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  %xmm0,-0x58(%rbp)
  movss  -0x80(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  %xmm0,-0x54(%rbp)
  movss  D61(%rip),%xmm0
  subss  -0x5c(%rbp),%xmm0
  mulss  -0x64(%rbp),%xmm0
  addss  -0x5c(%rbp),%xmm0
  movss  %xmm0,-0x50(%rbp)
  movss  -0x78(%rbp),%xmm0
  mulss  -0x7c(%rbp),%xmm0
  mulss  -0x60(%rbp),%xmm0
  movss  -0x80(%rbp),%xmm1
  mulss  -0x68(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x40(%rbp)
  movss  -0x78(%rbp),%xmm0
  mulss  -0x80(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x60(%rbp),%xmm1
  movss  -0x7c(%rbp),%xmm0
  mulss  -0x68(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  movss  -0x78(%rbp),%xmm0
  mulss  -0x7c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x60(%rbp),%xmm1
  movss  -0x80(%rbp),%xmm0
  mulss  -0x68(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  movss  D61(%rip),%xmm0
  subss  -0x58(%rbp),%xmm0
  mulss  -0x64(%rbp),%xmm0
  addss  -0x58(%rbp),%xmm0
  movss  %xmm0,-0x3c(%rbp)
  movss  -0x7c(%rbp),%xmm0
  mulss  -0x80(%rbp),%xmm0
  mulss  -0x60(%rbp),%xmm0
  movss  -0x78(%rbp),%xmm1
  mulss  -0x68(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  movss  -0x78(%rbp),%xmm0
  mulss  -0x80(%rbp),%xmm0
  mulss  -0x60(%rbp),%xmm0
  movss  -0x7c(%rbp),%xmm1
  mulss  -0x68(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  movss  -0x7c(%rbp),%xmm0
  mulss  -0x80(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x60(%rbp),%xmm1
  movss  -0x78(%rbp),%xmm0
  mulss  -0x68(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x38(%rbp)
  movss  D61(%rip),%xmm0
  subss  -0x54(%rbp),%xmm0
  mulss  -0x64(%rbp),%xmm0
  addss  -0x54(%rbp),%xmm0
  movss  %xmm0,-0x28(%rbp)
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <gl_mult_matrixf@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D61
data_type: byte[4]
name: retrieve_data
arguments: label: D21
data_type: f32
name: retrieve_data
arguments: label: D66
data_type: byte[4]

tool: {"D61": [0x00,0x00,0x80,0x3f]}

tool: D21: 3.141592653589793

tool: {"D66": [0x00,0x00,0x34,0x43]}

assistant: ```c
void gl_rotatef(float angle, float x, float y, float z) {
  float mat[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
  float angle_rad = (float)3.141592653589793 * angle / 180.f;
  float sina = (float)sin(angle_rad);
  float cosa = (float)cos(angle_rad);
  float one_minus_cosa = 1.f - cosa;
  float nxsq = x * x;
  float nysq = y * y;
  float nzsq = z * z;
  mat[0] = nxsq + (1.f - nxsq) * cosa;
  mat[4] = x * y * one_minus_cosa - z * sina;
  mat[8] = x * z * one_minus_cosa + y * sina;
  mat[1] = x * y * one_minus_cosa + z * sina;
  mat[5] = nysq + (1.f - nysq) * cosa;
  mat[9] = y * z * one_minus_cosa - x * sina;
  mat[2] = x * z * one_minus_cosa - y * sina;
  mat[6] = y * z * one_minus_cosa + x * sina;
  mat[10] = nzsq + (1.f - nzsq) * cosa;
  gl_mult_matrixf(mat);
}
```