user: What would the C source look like for the assembly code provided here:

```asm
<dscf_line>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x380,%rsp
  mov    %rdi,-0x358(%rbp)
  mov    %rsi,-0x360(%rbp)
  mov    %rdx,-0x368(%rbp)
  mov    %ecx,-0x36c(%rbp)
  mov    %r8,-0x378(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x340(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x330(%rbp)
  mov    -0x378(%rbp),%rdx
  mov    $0x0,%eax
  call   *%rdx
  movd   %xmm0,%eax
  mov    %eax,-0x1a0(%rbp)
  movss  -0x1a0(%rbp),%xmm0
  movss  %xmm0,-0x344(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x350(%rbp)
  movss  D8(%rip),%xmm0
  movss  %xmm0,-0x34c(%rbp)
  movl   $0x0,-0x334(%rbp)
  jmp    L178
L72:
  movl   $0x0,-0x338(%rbp)
  jmp    L177
L108:
  movl   $0x0,-0x33c(%rbp)
  jmp    L128
L20:
  mov    -0x33c(%rbp),%eax
  cltq
  movss  -0x330(%rbp,%rax,4),%xmm0
  ucomiss -0x34c(%rbp),%xmm0
  jp     L102
  ucomiss -0x34c(%rbp),%xmm0
  jne    L102
  mov    -0x33c(%rbp),%eax
  cltq
  movss  -0x1a0(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x348(%rbp)
  jmp    L81
L102:
  addl   $0x1,-0x33c(%rbp)
L128:
  mov    -0x33c(%rbp),%eax
  cmp    -0x340(%rbp),%eax
  jl     L20
  movl   $0x0,-0x33c(%rbp)
  jmp    L151
L179:
  mov    -0x33c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x368(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x33c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x358(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  -0x34c(%rbp),%xmm0
  mov    -0x33c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x360(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x33c(%rbp)
L151:
  mov    -0x33c(%rbp),%eax
  cmp    -0x36c(%rbp),%eax
  jl     L179
  mov    -0x378(%rbp),%rdx
  mov    $0x0,%eax
  call   *%rdx
  movd   %xmm0,%eax
  mov    %eax,-0x348(%rbp)
  cmpl   $0x63,-0x340(%rbp)
  jg     L113
  mov    -0x340(%rbp),%eax
  cltq
  movss  -0x348(%rbp),%xmm0
  movss  %xmm0,-0x1a0(%rbp,%rax,4)
  mov    -0x340(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x340(%rbp)
  cltq
  movss  -0x34c(%rbp),%xmm0
  movss  %xmm0,-0x330(%rbp,%rax,4)
  jmp    L81
L113:
  nop
L81:
  movss  -0x348(%rbp),%xmm0
  comiss -0x344(%rbp),%xmm0
  jbe    L69
  movss  -0x34c(%rbp),%xmm0
  movss  D13(%rip),%xmm1
  xorps  %xmm0,%xmm1
  movss  D10(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x34c(%rbp)
  jmp    L41
L69:
  movss  -0x348(%rbp),%xmm0
  movss  %xmm0,-0x344(%rbp)
  movss  -0x34c(%rbp),%xmm0
  movss  %xmm0,-0x350(%rbp)
  addl   $0x1,-0x338(%rbp)
L177:
  cmpl   $0x63,-0x338(%rbp)
  jle    L108
L41:
  addl   $0x1,-0x334(%rbp)
L178:
  cmpl   $0x7,-0x334(%rbp)
  jle    L72
  movl   $0x0,-0x33c(%rbp)
  jmp    L117
L5:
  mov    -0x33c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x368(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x33c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x358(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  -0x350(%rbp),%xmm0
  mov    -0x33c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x360(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x33c(%rbp)
L117:
  mov    -0x33c(%rbp),%eax
  cmp    -0x36c(%rbp),%eax
  jl     L5
  movss  -0x350(%rbp),%xmm0
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L29
  call   <__stack_chk_fail@plt>
L29:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D8
type_infered: f32
name: unpack_data
arguments: data_tag: D13
type_infered: byte[4]
name: unpack_data
arguments: data_tag: D10
type_infered: byte[4]

tool: D8: 1

tool: {"D13": [0x00,0x00,0x00,0x80]}

tool: {"D10": [0x00,0x00,0x00,0x3f]}

assistant: ```c
float dscf_line(search, where, params, n, what)
int n;
float search[], params[], *where[];
float (*what)();
{
  float step, dstep, myval, bestval;
  float steps[100], vals[100];
  int inbuf;
  int i, irun, itry;
  ;
  inbuf = 1;
  steps[0] = 0.;
  vals[0] = (*what)();
  bestval = vals[0];
  step = 0.;
  dstep = 1.;
  for (itry = 0; itry < 8; itry++) {
    for (irun = 0; irun < 100; irun++) {
      for (i = 0; i < inbuf; i++) {
        if (dstep == steps[i]) {
          myval = vals[i];
          goto STEP_FOUND;
        }
      }
      for (i = 0; i < n; i++) {
        *where[i] = params[i] + search[i] * dstep;
      }
      myval = (*what)();
      if (inbuf < 100) {
        vals[inbuf] = myval;
        steps[inbuf++] = dstep;
      }
    STEP_FOUND:
      if (myval > bestval) {
        dstep = -dstep * .5;
        break;
      } else {
        bestval = myval;
        step = dstep;
      }
    }
  }
  for (i = 0; i < n; i++) {
    *where[i] = params[i] + search[i] * step;
  }
  return step;
}
```