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

```asm
<BlkSchlsEqEuroNoDiv>:
  endbr64
  push   %rbx
  movaps %xmm0,%xmm5
  pxor   %xmm0,%xmm0
  mov    %edi,%ebx
  sub    $0x20,%rsp
  ucomiss %xmm4,%xmm0
  movss  %xmm2,0x8(%rsp)
  ja     L21
  movaps %xmm4,%xmm6
  sqrtss %xmm6,%xmm6
  movss  %xmm6,0xc(%rsp)
L23:
  movaps %xmm5,%xmm0
  movss  %xmm1,0x18(%rsp)
  divss  %xmm1,%xmm0
  movss  %xmm5,0x1c(%rsp)
  movss  %xmm4,0x14(%rsp)
  movss  %xmm3,0x10(%rsp)
  cvtss2sd %xmm0,%xmm0
  call   <log@plt>
  movss  0x10(%rsp),%xmm3
  movss  0x14(%rsp),%xmm4
  cvtsd2ss %xmm0,%xmm0
  mov    $0x1,%eax
  movaps %xmm3,%xmm2
  mulss  %xmm3,%xmm2
  mulss  D21(%rip),%xmm2
  addss  0x8(%rsp),%xmm2
  mulss  0xc(%rsp),%xmm3
  mulss  %xmm4,%xmm2
  addss  %xmm2,%xmm0
  divss  %xmm3,%xmm0
  movaps %xmm0,%xmm7
  cvtss2sd %xmm0,%xmm0
  subss  %xmm3,%xmm7
  movss  %xmm7,0x10(%rsp)
  call   <CNDF@plt>
  pxor   %xmm7,%xmm7
  movss  0x10(%rsp),%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm7
  mov    $0x1,%eax
  cvtss2sd %xmm2,%xmm0
  movss  %xmm7,0xc(%rsp)
  call   <CNDF@plt>
  movss  0x8(%rsp),%xmm2
  movss  0x14(%rsp),%xmm4
  pxor   %xmm5,%xmm5
  xorps  D10(%rip),%xmm2
  cvtsi2ss %eax,%xmm5
  pxor   %xmm0,%xmm0
  mulss  %xmm4,%xmm2
  movss  %xmm5,0x10(%rsp)
  cvtss2sd %xmm2,%xmm0
  call   <exp@plt>
  movss  0x18(%rsp),%xmm1
  test   %ebx,%ebx
  movss  0x1c(%rsp),%xmm5
  cvtss2sd %xmm1,%xmm1
  mulsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  jne    L24
  movss  0xc(%rsp),%xmm0
  mulss  0x10(%rsp),%xmm1
  add    $0x20,%rsp
  pop    %rbx
  mulss  %xmm5,%xmm0
  subss  %xmm1,%xmm0
  ret
  cs nopw 0x0(%rax,%rax,1)
L24:
  movss  D29(%rip),%xmm2
  movaps %xmm2,%xmm0
  subss  0xc(%rsp),%xmm2
  subss  0x10(%rsp),%xmm0
  add    $0x20,%rsp
  pop    %rbx
  mulss  %xmm1,%xmm0
  mulss  %xmm5,%xmm2
  subss  %xmm2,%xmm0
  ret
L21:
  movaps %xmm4,%xmm0
  movss  %xmm3,0x1c(%rsp)
  movss  %xmm1,0x18(%rsp)
  movss  %xmm5,0x14(%rsp)
  movss  %xmm4,0x10(%rsp)
  call   <sqrtf@plt>
  movss  0x1c(%rsp),%xmm3
  movss  0x18(%rsp),%xmm1
  movss  0x14(%rsp),%xmm5
  movss  0x10(%rsp),%xmm4
  movss  %xmm0,0xc(%rsp)
  jmp    L23
```

tool_calls: name: extract_symbolic_data
arguments: label: D21
datatype: f32
name: extract_symbolic_data
arguments: label: D10
datatype: byte[16]
name: extract_symbolic_data
arguments: label: D29
datatype: f32

tool: D21: 0.5

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

tool: D29: 1

assistant: ```c
float BlkSchlsEqEuroNoDiv(float sptprice, float strike, float rate, float volatility, float time, int otype, float timet) {
  float OptionPrice;
  float xStockPrice;
  float xStrikePrice;
  float xRiskFreeRate;
  float xVolatility;
  float xTime;
  float xSqrtTime;
  float logValues;
  float xLogTerm;
  float xD1;
  float xD2;
  float xPowerTerm;
  float xDen;
  float d1;
  float d2;
  float FutureValueX;
  float NofXd1;
  float NofXd2;
  float NegNofXd1;
  float NegNofXd2;
  xStockPrice = sptprice;
  xStrikePrice = strike;
  xRiskFreeRate = rate;
  xVolatility = volatility;
  xTime = time;
  xSqrtTime = sqrt(xTime);
  logValues = log(sptprice / strike);
  xLogTerm = logValues;
  xPowerTerm = xVolatility * xVolatility;
  xPowerTerm = xPowerTerm * 0.5;
  xD1 = xRiskFreeRate + xPowerTerm;
  xD1 = xD1 * xTime;
  xD1 = xD1 + xLogTerm;
  xDen = xVolatility * xSqrtTime;
  xD1 = xD1 / xDen;
  xD2 = xD1 - xDen;
  d1 = xD1;
  d2 = xD2;
  NofXd1 = CNDF(d1);
  NofXd2 = CNDF(d2);
  FutureValueX = strike * (exp(-(rate) * (time)));
  if (otype == 0) {
    OptionPrice = (sptprice * NofXd1) - (FutureValueX * NofXd2);
  } else {
    NegNofXd1 = (1.0 - NofXd1);
    NegNofXd2 = (1.0 - NofXd2);
    OptionPrice = (FutureValueX * NegNofXd2) - (sptprice * NegNofXd1);
  }
  return OptionPrice;
}
```