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

```asm
<X3DGetValues3f>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L304
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  sete   %al
  jmp    L154
L304:
  mov    D6(%rip),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  setne  %al
L154:
  test   %al,%al
  je     L19
  mov    -0x10(%rbp),%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    $0x0,%eax
  jmp    L114
L132:
  addq   $0x1,-0x8(%rbp)
L19:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L132
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L132
  cmpq   $0x0,-0x8(%rbp)
  je     L86
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L339
L86:
  pxor   %xmm0,%xmm0
L339:
  mov    -0x10(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L127
L79:
  addq   $0x1,-0x8(%rbp)
L127:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L191
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L191
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L79
  jmp    L191
L187:
  addq   $0x1,-0x8(%rbp)
L191:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L187
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L187
  cmpq   $0x0,-0x8(%rbp)
  je     L32
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L316
L32:
  pxor   %xmm0,%xmm0
L316:
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movss  %xmm0,(%rax)
  jmp    L13
L283:
  addq   $0x1,-0x8(%rbp)
L13:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L11
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L11
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L283
  jmp    L11
L320:
  addq   $0x1,-0x8(%rbp)
L11:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L320
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L320
  cmpq   $0x0,-0x8(%rbp)
  je     L134
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L233
L134:
  pxor   %xmm0,%xmm0
L233:
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  movss  %xmm0,(%rax)
  jmp    L179
L241:
  addq   $0x1,-0x8(%rbp)
L179:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L5
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L5
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L241
  jmp    L5
L215:
  addq   $0x1,-0x8(%rbp)
L5:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L215
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L215
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L95
  mov    -0x8(%rbp),%rax
  jmp    L114
L95:
  mov    $0x0,%eax
L114:
  leave
  ret
```

assistant: ```c
const char *X3DGetValues3f(const char *arg, GLfloat *vf) {
  if ((arg != NULL) ? (*arg == '\0') : GL_TRUE) {
    vf[0] = 0.0f;
    vf[1] = 0.0f;
    vf[2] = 0.0f;
    return (NULL);
  }
  while ((((*arg) == ' ') || ((*arg) == '\t')))
    arg++;
  vf[0] = (((arg) != NULL) ? (float)atof(arg) : 0.0f);
  while (!(((*arg) == ' ') || ((*arg) == '\t')) && (*arg != '\0'))
    arg++;
  while ((((*arg) == ' ') || ((*arg) == '\t')))
    arg++;
  vf[1] = (((arg) != NULL) ? (float)atof(arg) : 0.0f);
  while (!(((*arg) == ' ') || ((*arg) == '\t')) && (*arg != '\0'))
    arg++;
  while ((((*arg) == ' ') || ((*arg) == '\t')))
    arg++;
  vf[2] = (((arg) != NULL) ? (float)atof(arg) : 0.0f);
  while (!(((*arg) == ' ') || ((*arg) == '\t')) && (*arg != '\0'))
    arg++;
  while ((((*arg) == ' ') || ((*arg) == '\t')))
    arg++;
  return ((*arg != '\0') ? arg : NULL);
}
```