user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<UNIFNOISE>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x68,%rsp
  movsd  %xmm0,-0x28(%rbp)
  movsd  %xmm1,-0x30(%rbp)
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  movsd  %xmm2,-0x50(%rbp)
  movsd  %xmm3,-0x58(%rbp)
  movsd  %xmm4,-0x60(%rbp)
  pxor   %xmm0,%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L93
  pxor   %xmm0,%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jne    L93
  movsd  -0x60(%rbp),%xmm2
  movsd  -0x58(%rbp),%xmm1
  movsd  -0x50(%rbp),%xmm0
  mov    -0x48(%rbp),%rdx
  mov    -0x40(%rbp),%rsi
  mov    -0x38(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  mov    %rcx,%rdi
  movq   %rax,%xmm0
  call   <DC@plt>
  jmp    L31
L93:
  movsd  D27(%rip),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jp     L206
  movsd  D27(%rip),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jne    L206
  movq   $0x0,-0x18(%rbp)
  jmp    L116
L177:
  movsd  -0x30(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x68(%rbp)
  mov    $0x0,%eax
  call   <drand49@plt>
  movq   %xmm0,%rax
  movsd  D106(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x40(%rbp),%rdx
  mov    %rcx,(%rdx)
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movq   D54(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  addq   $0x1,-0x18(%rbp)
L116:
  mov    -0x18(%rbp),%rax
  cmp    -0x48(%rbp),%rax
  jl     L177
  jmp    L97
L206:
  pxor   %xmm0,%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jp     L179
  pxor   %xmm0,%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jne    L179
  movq   $0x0,-0x18(%rbp)
  jmp    L153
L174:
  movsd  -0x30(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x68(%rbp)
  mov    $0x0,%eax
  call   <drand49@plt>
  movq   %xmm0,%rax
  movsd  D106(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L195
  movsd  -0x30(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x68(%rbp)
  mov    $0x0,%eax
  call   <drand49@plt>
  movq   %xmm0,%rax
  movsd  D106(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  jmp    L159
L195:
  pxor   %xmm0,%xmm0
L159:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x40(%rbp),%rdx
  mov    %rcx,(%rdx)
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  %xmm0,(%rax)
  addq   $0x1,-0x18(%rbp)
L153:
  mov    -0x18(%rbp),%rax
  cmp    -0x48(%rbp),%rax
  jl     L174
  jmp    L97
L179:
  movsd  D66(%rip),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  jp     L173
  movsd  D66(%rip),%xmm0
  ucomisd -0x50(%rbp),%xmm0
  je     L107
L173:
  movq   $0x0,-0x18(%rbp)
  jmp    L5
L53:
  movsd  -0x30(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x68(%rbp)
  mov    $0x0,%eax
  call   <drand49@plt>
  movq   %xmm0,%rax
  movsd  D106(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movq   %xmm0,%rdx
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rsi
  mov    -0x40(%rbp),%rcx
  mov    %rsi,(%rcx)
  lea    0x0(,%rax,8),%rcx
  mov    -0x38(%rbp),%rax
  lea    (%rcx,%rax,1),%rbx
  movsd  -0x50(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  addq   $0x1,-0x18(%rbp)
L5:
  mov    -0x18(%rbp),%rax
  cmp    -0x48(%rbp),%rax
  jl     L53
  jmp    L97
L107:
  movq   $0x0,-0x18(%rbp)
  jmp    L57
L125:
  movsd  -0x30(%rbp),%xmm1
  movsd  D5(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x68(%rbp)
  mov    $0x0,%eax
  call   <drand49@plt>
  movq   %xmm0,%rax
  movsd  D106(%rip),%xmm1
  movq   %rax,%xmm0
  subsd  %xmm1,%xmm0
  mulsd  -0x68(%rbp),%xmm0
  mov    -0x40(%rbp),%rax
  mov    (%rax),%rax
  lea    0x1(%rax),%rcx
  mov    -0x40(%rbp),%rdx
  mov    %rcx,(%rdx)
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  addq   $0x1,-0x18(%rbp)
L57:
  mov    -0x18(%rbp),%rax
  cmp    -0x48(%rbp),%rax
  jl     L125
L97:
  nop
L31:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D27
type_guessed: f32[2]
name: read_data
arguments: data_tag: D5
type_guessed: f64
name: read_data
arguments: data_tag: D106
type_guessed: f64
name: read_data
arguments: data_tag: D54
type_guessed: qword
name: read_data
arguments: data_tag: D66
type_guessed: f32[2]

tool: {"D27": [0.0,-1.875]}

tool: D5: 3.464101615137754

tool: D106: 0.5

tool: D54: 9223372036854775807

tool: {"D66": [0.0,1.875]}

assistant: ```c
void UNIFNOISE(double mean, double stdv, double *output, uint *index, uint Ni, double expon, double srate, double dt) {
  uint i;
  if (stdv == 0.) {
    DC(mean, output, index, Ni, expon, srate, dt);
    return;
  }
  if (expon == -1)
    for (i = 0; i < Ni; i++)
      output[(*index)++] = fabs(mean + stdv * 3.464101615137754 * (drand49() - 0.5));
  else if (expon == 0)
    for (i = 0; i < Ni; i++)
      output[(*index)++] = (((mean + stdv * 3.464101615137754 * (drand49() - 0.5)) > 0) ? mean + stdv * 3.464101615137754 * (drand49() - 0.5) : 0.);
  else if (expon != 1)
    for (i = 0; i < Ni; i++)
      output[(*index)++] = pow(mean + stdv * 3.464101615137754 * (drand49() - 0.5), expon);
  else
    for (i = 0; i < Ni; i++)
      output[(*index)++] = mean + stdv * 3.464101615137754 * (drand49() - 0.5);
  return;
}
```