user: Converte this assembly snippet into its equivalent C code:

```asm
<K>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %rcx,-0x70(%rbp)
  mov    %r8,-0x78(%rbp)
  movss  %xmm0,-0x7c(%rbp)
  movss  %xmm1,-0x80(%rbp)
  movss  %xmm2,-0x84(%rbp)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  add    %rdx,%rax
  test   %rax,%rax
  js     L268
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L145
L268:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L145:
  movss  D32(%rip),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x50(%rbp)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L267
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L56
L267:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L56:
  movss  -0x7c(%rbp),%xmm1
  subss  %xmm0,%xmm1
  movss  -0x50(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L270
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L84
L270:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L84:
  movss  -0x80(%rbp),%xmm1
  subss  %xmm0,%xmm1
  movss  -0x50(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  test   %rax,%rax
  js     L69
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  jmp    L282
L69:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2ss %rdx,%xmm0
  addss  %xmm0,%xmm0
L282:
  movss  -0x84(%rbp),%xmm1
  subss  %xmm0,%xmm1
  movss  -0x50(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x44(%rbp)
  movss  -0x4c(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  %xmm0,%xmm2
  movss  D59(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  movss  -0x48(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  subss  %xmm0,%xmm1
  movss  -0x44(%rbp),%xmm0
  movaps %xmm0,%xmm2
  mulss  %xmm0,%xmm2
  subss  %xmm2,%xmm1
  movaps %xmm1,%xmm0
  movss  %xmm0,-0x40(%rbp)
  mov    -0x60(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x78(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rcx
  mov    -0x70(%rbp),%rax
  add    %rax,%rcx
  mov    -0x60(%rbp),%rax
  mov    (%rax),%rsi
  mov    -0x68(%rbp),%rax
  add    %rsi,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <shuffle@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x58(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  add    $0x1,%rdx
  mov    %rdx,(%rax)
  pxor   %xmm0,%xmm0
  comiss -0x40(%rbp),%xmm0
  jbe    L304
  pxor   %xmm0,%xmm0
  jmp    L186
L304:
  mov    -0x30(%rbp),%rax
  shr    $0x5,%rax
  and    $0x1,%eax
  mov    %rax,-0x28(%rbp)
  mov    -0x30(%rbp),%rax
  shr    $0x4,%rax
  and    $0x1,%eax
  mov    %rax,-0x20(%rbp)
  mov    -0x30(%rbp),%rax
  shr    $0x3,%rax
  and    $0x1,%eax
  mov    %rax,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  shr    $0x2,%rax
  and    $0x1,%eax
  mov    %rax,-0x10(%rbp)
  mov    -0x30(%rbp),%rax
  and    $0x3,%eax
  mov    %rax,-0x8(%rbp)
  cmpq   $0x1,-0x8(%rbp)
  je     L105
  cmpq   $0x2,-0x8(%rbp)
  jne    L296
  movss  -0x48(%rbp),%xmm0
  jmp    L191
L296:
  movss  -0x44(%rbp),%xmm0
  jmp    L191
L105:
  movss  -0x4c(%rbp),%xmm0
L191:
  movss  %xmm0,-0x3c(%rbp)
  cmpq   $0x1,-0x8(%rbp)
  je     L81
  cmpq   $0x2,-0x8(%rbp)
  jne    L285
  movss  -0x44(%rbp),%xmm0
  jmp    L122
L285:
  movss  -0x4c(%rbp),%xmm0
  jmp    L122
L81:
  movss  -0x48(%rbp),%xmm0
L122:
  movss  %xmm0,-0x38(%rbp)
  cmpq   $0x1,-0x8(%rbp)
  je     L58
  cmpq   $0x2,-0x8(%rbp)
  jne    L13
  movss  -0x4c(%rbp),%xmm0
  jmp    L243
L13:
  movss  -0x48(%rbp),%xmm0
  jmp    L243
L58:
  movss  -0x44(%rbp),%xmm0
L243:
  movss  %xmm0,-0x34(%rbp)
  mov    -0x28(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  jne    L146
  movss  -0x3c(%rbp),%xmm0
  movss  D1(%rip),%xmm1
  xorps  %xmm1,%xmm0
  jmp    L42
L146:
  movss  -0x3c(%rbp),%xmm0
L42:
  movss  %xmm0,-0x3c(%rbp)
  mov    -0x28(%rbp),%rax
  cmp    -0x20(%rbp),%rax
  jne    L53
  movss  -0x38(%rbp),%xmm0
  movss  D1(%rip),%xmm1
  xorps  %xmm1,%xmm0
  jmp    L135
L53:
  movss  -0x38(%rbp),%xmm0
L135:
  movss  %xmm0,-0x38(%rbp)
  mov    -0x20(%rbp),%rax
  xor    -0x18(%rbp),%rax
  cmp    %rax,-0x28(%rbp)
  je     L265
  movss  -0x34(%rbp),%xmm0
  movss  D1(%rip),%xmm1
  xorps  %xmm1,%xmm0
  jmp    L158
L265:
  movss  -0x34(%rbp),%xmm0
L158:
  movss  %xmm0,-0x34(%rbp)
  movss  -0x40(%rbp),%xmm0
  mulss  %xmm0,%xmm0
  movss  %xmm0,-0x40(%rbp)
  movss  -0x40(%rbp),%xmm1
  movss  D50(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x40(%rbp),%xmm1
  cmpq   $0x0,-0x8(%rbp)
  jne    L255
  movss  -0x38(%rbp),%xmm0
  addss  -0x34(%rbp),%xmm0
  jmp    L178
L255:
  cmpq   $0x0,-0x10(%rbp)
  jne    L187
  movss  -0x38(%rbp),%xmm0
  jmp    L178
L187:
  movss  -0x34(%rbp),%xmm0
L178:
  addss  -0x3c(%rbp),%xmm0
  mulss  %xmm1,%xmm0
L186:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D32
datatype: byte[4]
name: extract_symbolic_data
arguments: data_label: D59
datatype: byte[4]
name: extract_symbolic_data
arguments: data_label: D1
datatype: byte[4]
name: extract_symbolic_data
arguments: data_label: D50
datatype: byte[4]

tool: {"D32": [0x00,0x00,0xc0,0x40]}

tool: {"D59": [0x9a,0x99,0x19,0x3f]}

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

tool: {"D50": [0x00,0x00,0xc8,0x41]}

assistant: ```c
float K(uint32_t a, uint32_t A[3], uint32_t i, uint32_t j, uint32_t k, float u, float v, float w) {
  float s = (float)(A[0] + A[1] + A[2]) / 6.f;
  float x = u - (float)A[0] + s;
  float y = v - (float)A[1] + s;
  float z = w - (float)A[2] + s;
  float t = .6f - x * x - y * y - z * z;
  uint32_t h = shuffle(i + A[0], j + A[1], k + A[2]);
  A[a]++;
  if (t < 0)
    return 0;
  uint32_t b5 = h >> 5 & 1;
  uint32_t b4 = h >> 4 & 1;
  uint32_t b3 = h >> 3 & 1;
  uint32_t b2 = h >> 2 & 1;
  uint32_t b = h & 3;
  float p = (b == 1 ? x : (b == 2 ? y : z));
  float q = (b == 1 ? y : (b == 2 ? z : x));
  float r = (b == 1 ? z : (b == 2 ? x : y));
  p = (b5 == b3 ? -p : p);
  q = (b5 == b4 ? -q : q);
  r = (b5 != (b4 ^ b3) ? -r : r);
  t *= t;
  return 25.0f * t * t * (p + (b == 0 ? q + r : (b2 == 0 ? q : r)));
}
```