user: Please show me the C implementation that matches the assembly code listed below:

```asm
<X3DGetValues3f>:
  endbr64
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  sub    $0x8,%rsp
  test   %rdi,%rdi
  je     L145
  movzbl (%rdi),%eax
  mov    %rdi,%rbx
  test   %al,%al
  jne    L143
  jmp    L278
  nopl   (%rax)
L2:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
L143:
  cmp    $0x20,%al
  je     L2
  cmp    $0x9,%al
  je     L2
  mov    %rbx,%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,0x0(%rbp)
  movzbl (%rbx),%eax
  test   $0xdf,%al
  jne    L192
  jmp    L112
  nopw   0x0(%rax,%rax,1)
L258:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  test   $0xdf,%al
  je     L112
L192:
  cmp    $0x9,%al
  jne    L258
  cmp    $0x20,%al
  jne    L91
  nopl   0x0(%rax)
L275:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
L112:
  cmp    $0x20,%al
  je     L275
L91:
  cmp    $0x9,%al
  je     L275
  mov    %rbx,%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,0x4(%rbp)
  movzbl (%rbx),%eax
  test   $0xdf,%al
  jne    L234
  jmp    L285
  nopw   0x0(%rax,%rax,1)
L51:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  test   $0xdf,%al
  je     L285
L234:
  cmp    $0x9,%al
  jne    L51
L193:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  cmp    $0x20,%al
  je     L193
  cmp    $0x9,%al
  je     L193
L50:
  mov    %rbx,%rdi
  call   <atof@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  movss  %xmm0,0x8(%rbp)
  movzbl (%rbx),%eax
  test   $0xdf,%al
  jne    L200
  jmp    L14
  nop
L82:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  test   $0xdf,%al
  je     L14
L200:
  cmp    $0x9,%al
  jne    L82
L58:
  movzbl 0x1(%rbx),%eax
  add    $0x1,%rbx
  cmp    $0x20,%al
  je     L58
  cmp    $0x9,%al
  je     L58
L203:
  test   %al,%al
  mov    $0x0,%eax
  cmovne %rbx,%rax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L285:
  cmp    $0x9,%al
  je     L193
  cmp    $0x20,%al
  je     L193
  jmp    L50
  nopw   0x0(%rax,%rax,1)
L14:
  cmp    $0x9,%al
  je     L58
  cmp    $0x20,%al
  je     L58
  jmp    L203
  nopw   0x0(%rax,%rax,1)
L145:
  mov    D7(%rip),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L207
L278:
  movq   $0x0,0x0(%rbp)
  xor    %eax,%eax
  movl   $0x0,0x8(%rbp)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L207:
  jmp    1060 <X3DGetValues3f.cold>
```

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);
}
```