user: Translate the below assembly code into C programming language:

```asm
<cos>:
  endbr64
  push   %r15
  pxor   %xmm1,%xmm1
  push   %r14
  cvtsi2sd %edi,%xmm1
  mov    $0x2,%edi
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mulsd  D16(%rip),%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0xc(%rsp)
  call   <factorial@plt>
  mov    $0x4,%edi
  mov    %eax,%r15d
  call   <factorial@plt>
  mov    $0x6,%edi
  mov    %eax,%r14d
  call   <factorial@plt>
  mov    $0x8,%edi
  mov    %eax,%r13d
  call   <factorial@plt>
  mov    $0xa,%edi
  mov    %eax,%r12d
  call   <factorial@plt>
  mov    $0xc,%edi
  mov    %eax,%ebp
  call   <factorial@plt>
  mov    $0xe,%edi
  mov    %eax,%ebx
  call   <factorial@plt>
  movss  0xc(%rsp),%xmm1
  pxor   %xmm8,%xmm8
  cvtsi2ss %r15d,%xmm8
  movaps %xmm1,%xmm2
  movaps %xmm1,%xmm0
  movaps %xmm1,%xmm6
  mulss  %xmm1,%xmm2
  movaps %xmm1,%xmm5
  movaps %xmm1,%xmm4
  movaps %xmm1,%xmm3
  mulss  %xmm2,%xmm0
  movaps %xmm2,%xmm7
  movss  D12(%rip),%xmm2
  add    $0x18,%rsp
  divss  %xmm8,%xmm7
  mulss  %xmm1,%xmm0
  mulss  %xmm0,%xmm6
  mulss  %xmm1,%xmm6
  subss  %xmm7,%xmm2
  pxor   %xmm7,%xmm7
  cvtsi2ss %r14d,%xmm7
  mulss  %xmm6,%xmm5
  divss  %xmm7,%xmm0
  mulss  %xmm1,%xmm5
  mulss  %xmm5,%xmm4
  mulss  %xmm1,%xmm4
  mulss  %xmm4,%xmm3
  addss  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2ss %r13d,%xmm2
  mulss  %xmm1,%xmm3
  divss  %xmm2,%xmm6
  pxor   %xmm2,%xmm2
  cvtsi2ss %r12d,%xmm2
  divss  %xmm2,%xmm5
  pxor   %xmm2,%xmm2
  cvtsi2ss %ebp,%xmm2
  subss  %xmm6,%xmm0
  divss  %xmm2,%xmm4
  movaps %xmm3,%xmm2
  mulss  %xmm1,%xmm3
  addss  %xmm5,%xmm0
  mulss  %xmm1,%xmm3
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  divss  %xmm1,%xmm3
  subss  %xmm4,%xmm0
  pxor   %xmm4,%xmm4
  cvtsi2ss %ebx,%xmm4
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  divss  %xmm4,%xmm2
  addss  %xmm2,%xmm0
  subss  %xmm3,%xmm0
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D16
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D12
type_guessed: f32

tool: {"D16": [0x39,0x9d,0x52,0xa2,0x46,0xdf,0x91,0x3f]}

tool: D12: 1

assistant: ```c
float cos(int ang) {
  float angrad = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989 / 180 * ang;
  int angf2 = factorial(2);
  int angf4 = factorial(4);
  int angf6 = factorial(6);
  int angf8 = factorial(8);
  int angf10 = factorial(10);
  int angf12 = factorial(12);
  int angf14 = factorial(14);
  float ang2 = angrad * angrad;
  float ang4 = ang2 * angrad * angrad;
  float ang6 = ang4 * angrad * angrad;
  float ang8 = ang6 * angrad * angrad;
  float ang10 = ang8 * angrad * angrad;
  float ang12 = ang10 * angrad * angrad;
  float ang14 = ang12 * angrad * angrad;
  float ang22 = ang2 / angf2;
  float ang44 = ang4 / angf4;
  float ang66 = ang6 / angf6;
  float ang88 = ang8 / angf8;
  float ang101 = ang10 / angf10;
  float ang122 = ang12 / angf12;
  float ang144 = ang14 / angf14;
  float cos = 1 - ang22 + ang44 - ang66 + ang88 - ang101 + ang122 - ang144;
  return cos;
}
```