user: Demonstrate the C code that generates the assembly output below:

```asm
<gl_rotatef>:
  endbr64
  push   %r14
  push   %rbx
  sub    $0x68,%rsp
  movss  %xmm1,0x4(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm3,0xc(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  mov    D11(%rip),%ebx
  mov    %ebx,0x10(%rsp)
  movl   $0x0,0x14(%rsp)
  movl   $0x0,0x18(%rsp)
  movl   $0x0,0x1c(%rsp)
  movl   $0x0,0x20(%rsp)
  mov    %ebx,0x24(%rsp)
  movl   $0x0,0x28(%rsp)
  movl   $0x0,0x2c(%rsp)
  movl   $0x0,0x30(%rsp)
  movl   $0x0,0x34(%rsp)
  mov    %ebx,0x38(%rsp)
  movl   $0x0,0x3c(%rsp)
  movl   $0x0,0x40(%rsp)
  movl   $0x0,0x44(%rsp)
  movl   $0x0,0x48(%rsp)
  mov    %ebx,0x4c(%rsp)
  mulss  D28(%rip),%xmm0
  divss  D4(%rip),%xmm0
  movd   %xmm0,%r14d
  call   <sin@plt>
  pxor   %xmm11,%xmm11
  cvtsi2ss %rax,%xmm11
  movss  %xmm11,(%rsp)
  movd   %r14d,%xmm0
  call   <cos@plt>
  pxor   %xmm4,%xmm4
  cvtsi2ss %rax,%xmm4
  movd   %ebx,%xmm7
  subss  %xmm4,%xmm7
  movaps %xmm7,%xmm1
  movss  0x4(%rsp),%xmm9
  movaps %xmm9,%xmm5
  mulss  %xmm9,%xmm5
  movss  0x8(%rsp),%xmm10
  movaps %xmm10,%xmm6
  mulss  %xmm10,%xmm6
  movss  0xc(%rsp),%xmm12
  movaps %xmm12,%xmm3
  mulss  %xmm12,%xmm3
  movd   %ebx,%xmm0
  subss  %xmm5,%xmm0
  mulss  %xmm4,%xmm0
  addss  %xmm5,%xmm0
  movss  %xmm0,0x10(%rsp)
  movaps %xmm9,%xmm0
  mulss  %xmm10,%xmm0
  mulss  %xmm7,%xmm0
  movss  (%rsp),%xmm11
  movaps %xmm11,%xmm7
  mulss  %xmm12,%xmm7
  movaps %xmm0,%xmm2
  subss  %xmm7,%xmm2
  movss  %xmm2,0x20(%rsp)
  movaps %xmm9,%xmm2
  mulss  %xmm12,%xmm2
  mulss  %xmm1,%xmm2
  movaps %xmm11,%xmm5
  mulss  %xmm10,%xmm5
  movaps %xmm2,%xmm8
  addss  %xmm5,%xmm8
  movss  %xmm8,0x30(%rsp)
  addss  %xmm7,%xmm0
  movss  %xmm0,0x14(%rsp)
  movd   %ebx,%xmm0
  subss  %xmm6,%xmm0
  mulss  %xmm4,%xmm0
  addss  %xmm6,%xmm0
  movss  %xmm0,0x24(%rsp)
  mulss  %xmm12,%xmm10
  movaps %xmm10,%xmm0
  mulss  %xmm1,%xmm0
  movaps %xmm11,%xmm1
  mulss  %xmm9,%xmm1
  movaps %xmm0,%xmm6
  subss  %xmm1,%xmm6
  movss  %xmm6,0x34(%rsp)
  subss  %xmm5,%xmm2
  movss  %xmm2,0x18(%rsp)
  addss  %xmm1,%xmm0
  movss  %xmm0,0x28(%rsp)
  movd   %ebx,%xmm0
  subss  %xmm3,%xmm0
  mulss  %xmm4,%xmm0
  addss  %xmm3,%xmm0
  movss  %xmm0,0x38(%rsp)
  lea    0x10(%rsp),%rdi
  call   <gl_mult_matrixf@plt>
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L6
  add    $0x68,%rsp
  pop    %rbx
  pop    %r14
  ret
L6:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D11
type: byte[4]
name: parse_data
arguments: label: D28
type: f32
name: parse_data
arguments: label: D4
type: byte[4]

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

tool: D28: 3.141592653589793

tool: {"D4": [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);
}
```