user: Converte this assembly snippet into its equivalent C code:

```asm
<gl_rotatef>:
  endbr64
  movaps %xmm1,%xmm6
  movaps %xmm3,%xmm5
  movaps %xmm2,%xmm4
  sub    $0x88,%rsp
  shufps $0xe0,%xmm5,%xmm5
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  unpcklps %xmm2,%xmm6
  unpcklps %xmm1,%xmm4
  mulps  %xmm5,%xmm6
  movss  D13(%rip),%xmm5
  movss  %xmm1,0x2c(%rsp)
  movaps %xmm5,0x30(%rsp)
  movaps D11(%rip),%xmm5
  mulss  D48(%rip),%xmm0
  movss  %xmm2,0x28(%rsp)
  divss  D60(%rip),%xmm0
  movaps %xmm5,0x40(%rsp)
  movaps D45(%rip),%xmm5
  movss  %xmm3,0x24(%rsp)
  movaps %xmm5,0x50(%rsp)
  movaps D49(%rip),%xmm5
  movlps %xmm6,0x18(%rsp)
  movlps %xmm4,0x8(%rsp)
  movaps %xmm5,0x60(%rsp)
  movss  %xmm0,0x20(%rsp)
  call   <sin@plt>
  pxor   %xmm8,%xmm8
  movq   0x8(%rsp),%xmm4
  movss  0x20(%rsp),%xmm0
  cvtsi2ss %rax,%xmm8
  movaps %xmm8,%xmm5
  movss  %xmm8,0x14(%rsp)
  shufps $0xe0,%xmm5,%xmm5
  mulps  %xmm4,%xmm5
  movlps %xmm5,0x8(%rsp)
  call   <cos@plt>
  movss  0x2c(%rsp),%xmm1
  pxor   %xmm7,%xmm7
  movss  0x28(%rsp),%xmm2
  cvtsi2ss %rax,%xmm7
  movss  D13(%rip),%xmm0
  movss  0x24(%rsp),%xmm3
  lea    0x30(%rsp),%rdi
  movaps %xmm1,%xmm12
  movss  0x14(%rsp),%xmm8
  movaps %xmm2,%xmm9
  movq   0x18(%rsp),%xmm6
  mulss  %xmm1,%xmm12
  movaps %xmm0,%xmm11
  movaps %xmm0,%xmm10
  movq   0x8(%rsp),%xmm5
  mulss  %xmm2,%xmm1
  subss  %xmm7,%xmm11
  mulss  %xmm3,%xmm8
  mulss  %xmm2,%xmm9
  movaps %xmm11,%xmm4
  subss  %xmm12,%xmm10
  mulss  %xmm11,%xmm1
  shufps $0xe0,%xmm4,%xmm4
  mulps  %xmm6,%xmm4
  movaps %xmm3,%xmm6
  mulss  %xmm3,%xmm6
  mulss  %xmm7,%xmm10
  movaps %xmm1,%xmm2
  addss  %xmm8,%xmm1
  subss  %xmm8,%xmm2
  movss  %xmm1,0x34(%rsp)
  movaps %xmm0,%xmm1
  subss  %xmm6,%xmm0
  addss  %xmm12,%xmm10
  subss  %xmm9,%xmm1
  movss  %xmm2,0x40(%rsp)
  movaps %xmm4,%xmm2
  addps  %xmm5,%xmm2
  mulss  %xmm7,%xmm0
  movss  %xmm10,0x30(%rsp)
  mulss  %xmm7,%xmm1
  addss  %xmm6,%xmm0
  addss  %xmm9,%xmm1
  movss  %xmm0,0x58(%rsp)
  movss  %xmm1,0x44(%rsp)
  movaps %xmm4,%xmm1
  subps  %xmm5,%xmm1
  movss  %xmm2,%xmm1
  movlps %xmm1,0x50(%rsp)
  movaps %xmm4,%xmm1
  shufps $0xe5,%xmm4,%xmm4
  subss  %xmm5,%xmm1
  shufps $0xe5,%xmm5,%xmm5
  addss  %xmm5,%xmm4
  movss  %xmm1,0x38(%rsp)
  movss  %xmm4,0x48(%rsp)
  call   <gl_mult_matrixf@plt>
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L4
  add    $0x88,%rsp
  ret
L4:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D13
datatype: byte[4]
name: unpack_data
arguments: data_tag: D11
datatype: byte[16]
name: unpack_data
arguments: data_tag: D48
datatype: f32
name: unpack_data
arguments: data_tag: D60
datatype: byte[4]
name: unpack_data
arguments: data_tag: D45
datatype: byte[16]
name: unpack_data
arguments: data_tag: D49
datatype: byte[16]

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

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

tool: D48: 3.141592653589793

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

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

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

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);
}
```