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

```asm
<conj_window>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  movl   $0x0,-0x1c(%rbp)
  jmp    L31
L63:
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x1c(%rbp),%xmm1
  movss  D25(%rip),%xmm0
  mulss  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x2c(%rbp),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  movss  D15(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  ja     L3
  movss  D7(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L72
  movss  D7(%rip),%xmm0
  subss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  jmp    L3
L72:
  movss  D40(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L21
  movss  -0x18(%rbp),%xmm0
  movss  D7(%rip),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movl   $0x1,-0x14(%rbp)
  jmp    L3
L21:
  movss  D25(%rip),%xmm0
  subss  -0x18(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
L3:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x18(%rbp),%xmm1
  movsd  D88(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movsd  D46(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D46(%rip),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  mov    -0x18(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movsd  D46(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  D46(%rip),%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x38(%rbp),%xmm0
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  cmpl   $0x0,-0x14(%rbp)
  je     L23
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  D15(%rip),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L23:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x28(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  movd   %eax,%xmm0
  call   <sqrtf@plt>
  movd   %xmm0,%eax
  mov    %eax,(%rbx)
  addl   $0x1,-0x1c(%rbp)
L31:
  mov    -0x1c(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L63
  nop
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D25
type_infered: f32
name: read_data
arguments: tag: D15
type_infered: byte[4]
name: read_data
arguments: tag: D7
type_infered: byte[4]
name: read_data
arguments: tag: D40
type_infered: byte[4]
name: read_data
arguments: tag: D88
type_infered: f64
name: read_data
arguments: tag: D46
type_infered: byte[8]

tool: D25: 4

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

tool: {"D7": [0x00,0x00,0x00,0x40]}

tool: {"D40": [0x00,0x00,0x40,0x40]}

tool: D88: 1.9979

tool: {"D46": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

assistant: ```c
void conj_window(float *w, int len) {
  int i;
  for (i = 0; i < len; i++) {
    float x = 4 * ((float)i) / len;
    int inv = 0;
    if (x < 1) {
    } else if (x < 2) {
      x = 2 - x;
      inv = 1;
    } else if (x < 3) {
      x = x - 2;
      inv = 1;
    } else {
      x = 4 - x;
    }
    x *= 1.9979;
    w[i] = (.5 - .5 * cos(x)) * (.5 - .5 * cos(x));
    if (inv)
      w[i] = 1 - w[i];
    w[i] = sqrtf(w[i]);
  }
}
```