user: 请将以下的汇编代码转换成C语言代码:

```asm
<oszfunc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x20(%rbp)
  jmp    L41
L69:
  cmpl   $0x0,-0x20(%rbp)
  je     L54
  mov    -0x34(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x20(%rbp)
  jne    L39
L54:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L14
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  je     L47
L14:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  call   <fabs@plt>
  mov    %eax,%edi
  call   <log@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
L47:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L51
  movsd  D40(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D32(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L34
L51:
  movsd  D45(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D43(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
L34:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L49
  movl   $0x1,-0x1c(%rbp)
  jmp    L31
L49:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L26
  pxor   %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jne    L26
  movl   $0x0,-0x1c(%rbp)
  jmp    L31
L26:
  movl   $0xffffffff,-0x1c(%rbp)
L31:
  movsd  -0x18(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x10(%rbp),%xmm0
  movapd %xmm0,%xmm2
  mulsd  -0x8(%rbp),%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  call   <sin@plt>
  movsd  -0x40(%rbp),%xmm1
  addsd  %xmm0,%xmm1
  movsd  D16(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  imul   -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  movsd  %xmm0,(%rax)
  jmp    L90
L39:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  movsd  (%rdx),%xmm0
  movsd  %xmm0,(%rax)
L90:
  addl   $0x1,-0x20(%rbp)
L41:
  mov    -0x20(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L69
  nop
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D40
type: f32[2]
name: extract_symbolic_data
arguments: data_label: D32
type: f64
name: extract_symbolic_data
arguments: data_label: D45
type: f64
name: extract_symbolic_data
arguments: data_label: D43
type: f64
name: extract_symbolic_data
arguments: data_label: D16
type: f64

tool: {"D40": [0.0,2.5625]}

tool: D32: 7.9

tool: D45: 5.5

tool: D43: 3.1

tool: D16: 0.049

assistant: ```c
void oszfunc(double *x, double *xosz, int nx) {
  int i, sx;
  double c1, c2, xx = 0;
  for (i = 0; i < nx; i++) {
    if (i == 0 || i == nx - 1) {
      if (x[i] != 0)
        xx = log(fabs(x[i]));
      if (x[i] > 0) {
        c1 = 10;
        c2 = 7.9;
      } else {
        c1 = 5.5;
        c2 = 3.1;
      }
      if (x[i] > 0)
        sx = 1;
      else if (x[i] == 0)
        sx = 0;
      else
        sx = -1;
      xosz[i] = sx * exp(xx + 0.049 * (sin(c1 * xx) + sin(c2 * xx)));
    } else
      xosz[i] = x[i];
  }
}
```