user: What is the c source code of the assembly code below:

```asm
<sphere_func>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  movss  %xmm0,-0x34(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <vec3_norm@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  mov    -0x28(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jp     L71
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jne    L71
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jp     L71
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jne    L71
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jp     L71
  pxor   %xmm1,%xmm1
  ucomiss %xmm1,%xmm0
  jne    L71
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  movq   %xmm3,%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    $0x3,%eax
  call   <max3@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  jmp    L69
L71:
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  movss  %xmm1,-0x38(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x28(%rbp),%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  divss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  divss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  divss  -0x1c(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  lea    -0x14(%rbp),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <vec3_norm@plt>
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  movss  -0x38(%rbp),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  -0x18(%rbp),%xmm0
  subss  -0x1c(%rbp),%xmm0
L69:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L52
  call   <__stack_chk_fail@plt>
L52:
  leave
  ret
```

assistant: ```c
float sphere_func(const float p[3], const float s[3], float smoothness) {
  float d = vec3_norm(p);
  float r;
  if (p[0] == 0 && p[1] == 0 && p[2] == 0)
    return max3(s[0], s[1], s[2]);
  r = s[0] * s[1] * s[2] / vec3_norm(((float[]){s[1] * s[2] * p[0] / d, s[0] * s[2] * p[1] / d, s[0] * s[1] * p[2] / d}));
  return r - d;
}
```