user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<cross>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %rcx,-0x70(%rbp)
  jmp    L11
L14:
  mov    -0x70(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x20(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x44(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x40(%rbp)
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x3c(%rbp)
  mov    -0x18(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x44(%rbp),%xmm0
  movss  %xmm0,-0x38(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x40(%rbp),%xmm0
  movss  %xmm0,-0x34(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x3c(%rbp),%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x44(%rbp),%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x40(%rbp),%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x10(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x3c(%rbp),%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  -0x34(%rbp),%xmm0
  mulss  -0x24(%rbp),%xmm0
  movss  -0x30(%rbp),%xmm1
  mulss  -0x28(%rbp),%xmm1
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x30(%rbp),%xmm0
  mulss  -0x2c(%rbp),%xmm0
  movss  -0x38(%rbp),%xmm1
  mulss  -0x24(%rbp),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x38(%rbp),%xmm0
  mulss  -0x28(%rbp),%xmm0
  movss  -0x34(%rbp),%xmm1
  mulss  -0x2c(%rbp),%xmm1
  mov    -0x20(%rbp),%rax
  add    $0x2,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L11:
  mov    -0x70(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    %rdx,-0x70(%rbp)
  test   %rax,%rax
  jne    L14
  nop
  nop
  pop    %rbp
  ret
```

assistant: ```c
void cross(float *vertices, uint16_t *triangles, float *result, size_t amount) {
  size_t u, v, w;
  size_t triangle;
  float ux, uy, uz;
  float vx, vy, vz;
  float wx, wy, wz;
  while (amount-- > 0) {
    triangle = 3 * amount;
    u = 3 * ((size_t)triangles[triangle + 0]);
    v = 3 * ((size_t)triangles[triangle + 1]);
    w = 3 * ((size_t)triangles[triangle + 2]);
    wx = vertices[w + 0];
    wy = vertices[w + 1];
    wz = vertices[w + 2];
    ux = vertices[u + 0] - wx;
    uy = vertices[u + 1] - wy;
    uz = vertices[u + 2] - wz;
    vx = vertices[v + 0] - wx;
    vy = vertices[v + 1] - wy;
    vz = vertices[v + 2] - wz;
    result[triangle + 0] = uy * vz - uz * vy;
    result[triangle + 1] = uz * vx - ux * vz;
    result[triangle + 2] = ux * vy - uy * vx;
  }
}
```