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

```asm
<mat4_lookAt>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x40,%rsp
  movss  (%rsi),%xmm7
  movss  (%rcx),%xmm6
  movss  0x4(%rcx),%xmm4
  movss  0x4(%rsi),%xmm5
  movss  %xmm7,0x20(%rsp)
  subss  (%rdx),%xmm7
  movss  0x8(%rsi),%xmm1
  movss  %xmm6,0x24(%rsp)
  movss  0x8(%rcx),%xmm6
  movss  %xmm4,0x28(%rsp)
  movss  0x8(%rdx),%xmm4
  movss  %xmm6,0x2c(%rsp)
  movss  0x4(%rdx),%xmm6
  movaps %xmm7,%xmm0
  movss  %xmm5,0x10(%rsp)
  movss  %xmm1,0x14(%rsp)
  movss  %xmm6,0x18(%rsp)
  movss  %xmm4,0x1c(%rsp)
  movss  %xmm7,0xc(%rsp)
  call   <fabs@plt>
  movsd  D49(%rip),%xmm3
  movss  0x10(%rsp),%xmm5
  subss  0x18(%rsp),%xmm5
  comisd %xmm0,%xmm3
  jbe    L27
  movaps %xmm5,%xmm0
  movss  %xmm5,0x18(%rsp)
  call   <fabs@plt>
  movsd  D49(%rip),%xmm6
  movss  0x18(%rsp),%xmm5
  comisd %xmm0,%xmm6
  ja     L1
L27:
  movss  0x14(%rsp),%xmm1
  subss  0x1c(%rsp),%xmm1
L65:
  movss  0xc(%rsp),%xmm7
  movaps %xmm5,%xmm2
  movss  %xmm5,0x1c(%rsp)
  mulss  %xmm5,%xmm2
  movss  %xmm1,0x18(%rsp)
  movaps %xmm7,%xmm0
  mulss  %xmm7,%xmm0
  addss  %xmm2,%xmm0
  movaps %xmm1,%xmm2
  mulss  %xmm1,%xmm2
  addss  %xmm2,%xmm0
  call   <sqrtf@plt>
  pxor   %xmm4,%xmm4
  movss  0xc(%rsp),%xmm6
  movss  0x18(%rsp),%xmm1
  mov    %eax,%r8d
  mov    $0x1,%eax
  movss  0x1c(%rsp),%xmm5
  movss  0x2c(%rsp),%xmm7
  cltd
  movss  0x28(%rsp),%xmm3
  idiv   %r8d
  movaps %xmm7,%xmm0
  movaps %xmm3,%xmm2
  cvtsi2ss %eax,%xmm4
  mulss  %xmm4,%xmm6
  mulss  %xmm4,%xmm5
  mulss  %xmm1,%xmm4
  mulss  %xmm6,%xmm7
  mulss  %xmm5,%xmm0
  movss  %xmm5,0x28(%rsp)
  mulss  %xmm4,%xmm2
  movss  %xmm4,0x2c(%rsp)
  mulss  %xmm6,%xmm3
  movaps %xmm7,%xmm10
  movss  0x24(%rsp),%xmm7
  movss  %xmm6,0x24(%rsp)
  subss  %xmm0,%xmm2
  movaps %xmm7,%xmm0
  mulss  %xmm4,%xmm0
  mulss  %xmm5,%xmm7
  movss  %xmm2,0x1c(%rsp)
  subss  %xmm0,%xmm10
  movaps %xmm2,%xmm0
  mulss  %xmm2,%xmm0
  movaps %xmm7,%xmm8
  subss  %xmm3,%xmm8
  movaps %xmm10,%xmm1
  movss  %xmm10,0x18(%rsp)
  mulss  %xmm10,%xmm1
  movss  %xmm8,0xc(%rsp)
  addss  %xmm1,%xmm0
  movaps %xmm8,%xmm1
  mulss  %xmm8,%xmm1
  addss  %xmm1,%xmm0
  call   <sqrtf@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm3,%xmm3
  movss  0xc(%rsp),%xmm8
  cvtsi2ss %eax,%xmm0
  movss  0x18(%rsp),%xmm10
  movss  0x1c(%rsp),%xmm2
  movss  0x24(%rsp),%xmm6
  movss  0x28(%rsp),%xmm5
  movss  0x2c(%rsp),%xmm4
  ucomiss %xmm3,%xmm0
  jp     L47
  jne    L47
  movss  D35(%rip),%xmm7
  movaps %xmm3,%xmm8
  movaps %xmm3,%xmm10
  movaps %xmm3,%xmm2
L28:
  movaps %xmm10,%xmm0
  movaps %xmm8,%xmm1
  movaps %xmm2,%xmm9
  movss  %xmm7,0x3c(%rsp)
  mulss  %xmm4,%xmm0
  movaps %xmm10,%xmm11
  movss  %xmm4,0x34(%rsp)
  mulss  %xmm5,%xmm1
  movss  %xmm8,0x38(%rsp)
  mulss  %xmm4,%xmm9
  movss  %xmm2,0x30(%rsp)
  mulss  %xmm6,%xmm11
  movss  %xmm5,0x2c(%rsp)
  movss  %xmm10,0x28(%rsp)
  movss  %xmm6,0x24(%rsp)
  subss  %xmm0,%xmm1
  movaps %xmm8,%xmm0
  mulss  %xmm6,%xmm0
  movss  %xmm1,0x1c(%rsp)
  subss  %xmm0,%xmm9
  movaps %xmm2,%xmm0
  mulss  %xmm5,%xmm0
  movaps %xmm9,%xmm12
  movss  %xmm9,0x18(%rsp)
  mulss  %xmm9,%xmm12
  subss  %xmm0,%xmm11
  movaps %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm11,0xc(%rsp)
  addss  %xmm12,%xmm0
  movaps %xmm11,%xmm12
  mulss  %xmm11,%xmm12
  addss  %xmm12,%xmm0
  call   <sqrtf@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm3,%xmm3
  movss  0xc(%rsp),%xmm11
  cvtsi2ss %eax,%xmm0
  movss  0x18(%rsp),%xmm9
  movss  0x1c(%rsp),%xmm1
  movss  0x24(%rsp),%xmm6
  movss  0x28(%rsp),%xmm10
  movss  0x2c(%rsp),%xmm5
  movss  0x30(%rsp),%xmm2
  movss  0x34(%rsp),%xmm4
  movss  0x38(%rsp),%xmm8
  ucomiss %xmm3,%xmm0
  movss  0x3c(%rsp),%xmm7
  jp     L29
  je     L64
L29:
  movaps %xmm7,%xmm3
  divss  %xmm0,%xmm3
  mulss  %xmm3,%xmm1
  mulss  %xmm3,%xmm9
  mulss  %xmm11,%xmm3
L84:
  movaps %xmm2,%xmm0
  movss  0x10(%rsp),%xmm13
  movss  %xmm10,0x10(%rbp)
  movss  0x14(%rsp),%xmm14
  unpcklps %xmm1,%xmm0
  movss  %xmm9,0x14(%rbp)
  movlps %xmm0,0x0(%rbp)
  movss  0x20(%rsp),%xmm0
  mulss  %xmm13,%xmm10
  mulss  %xmm13,%xmm9
  movss  %xmm8,0x20(%rbp)
  mulss  %xmm0,%xmm2
  movss  %xmm3,0x24(%rbp)
  mulss  %xmm0,%xmm1
  movl   $0x0,0xc(%rbp)
  mulss  %xmm14,%xmm8
  movl   $0x0,0x1c(%rbp)
  mulss  %xmm14,%xmm3
  movl   $0x0,0x2c(%rbp)
  movss  %xmm6,0x8(%rbp)
  addss  %xmm10,%xmm2
  movss  %xmm5,0x18(%rbp)
  addss  %xmm9,%xmm1
  movss  %xmm4,0x28(%rbp)
  movss  %xmm7,0x3c(%rbp)
  addss  %xmm8,%xmm2
  movss  D42(%rip),%xmm8
  addss  %xmm3,%xmm1
  xorps  %xmm8,%xmm2
  movss  %xmm2,0x30(%rbp)
  xorps  %xmm8,%xmm1
  movaps %xmm0,%xmm2
  movss  %xmm1,0x34(%rbp)
  mulss  %xmm6,%xmm2
  movaps %xmm13,%xmm1
  mulss  %xmm5,%xmm1
  movaps %xmm2,%xmm0
  addss  %xmm1,%xmm0
  movaps %xmm14,%xmm1
  mulss  %xmm4,%xmm1
  addss  %xmm1,%xmm0
  xorps  %xmm8,%xmm0
  movss  %xmm0,0x38(%rbp)
  add    $0x40,%rsp
  pop    %rbp
  ret
  nopl   0x0(%rax,%rax,1)
L47:
  movss  D35(%rip),%xmm7
  movaps %xmm7,%xmm1
  divss  %xmm0,%xmm1
  mulss  %xmm1,%xmm2
  mulss  %xmm1,%xmm10
  mulss  %xmm1,%xmm8
  jmp    L28
  nopw   0x0(%rax,%rax,1)
L64:
  movaps %xmm3,%xmm9
  movaps %xmm3,%xmm1
  jmp    L84
  nopl   0x0(%rax)
L1:
  movss  0x14(%rsp),%xmm1
  subss  0x1c(%rsp),%xmm1
  movss  %xmm5,0x30(%rsp)
  movaps %xmm1,%xmm0
  movss  %xmm1,0x18(%rsp)
  call   <fabs@plt>
  movsd  D49(%rip),%xmm4
  movss  0x18(%rsp),%xmm1
  movss  0x30(%rsp),%xmm5
  comisd %xmm0,%xmm4
  jbe    L65
  add    $0x40,%rsp
  mov    %rbp,%rdi
  pop    %rbp
  jmp    1090 <mat4_identity@plt>
```

tool_calls: name: read_data
arguments: data_tag: D49
type: f64
name: read_data
arguments: data_tag: D35
type: f32
name: read_data
arguments: data_tag: D42
type: byte[4]

tool: D49: 1e-06

tool: D35: 1

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

assistant: ```c
void mat4_lookAt(float *dst, float *eye, float *center, float *up) {
  float x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
  float eyex = eye[0];
  float eyey = eye[1];
  float eyez = eye[2];
  float upx = up[0];
  float upy = up[1];
  float upz = up[2];
  float centerx = center[0];
  float centery = center[1];
  float centerz = center[2];
  if (fabs(eyex - centerx) < 0.000001 && fabs(eyey - centery) < 0.000001 && fabs(eyez - centerz) < 0.000001) {
    return mat4_identity(dst);
  }
  z0 = eyex - centerx;
  z1 = eyey - centery;
  z2 = eyez - centerz;
  len = 1 / sqrtf(z0 * z0 + z1 * z1 + z2 * z2);
  z0 *= len;
  z1 *= len;
  z2 *= len;
  x0 = upy * z2 - upz * z1;
  x1 = upz * z0 - upx * z2;
  x2 = upx * z1 - upy * z0;
  len = sqrtf(x0 * x0 + x1 * x1 + x2 * x2);
  if (!len) {
    x0 = 0;
    x1 = 0;
    x2 = 0;
  } else {
    len = 1 / len;
    x0 *= len;
    x1 *= len;
    x2 *= len;
  }
  y0 = z1 * x2 - z2 * x1;
  y1 = z2 * x0 - z0 * x2;
  y2 = z0 * x1 - z1 * x0;
  len = sqrtf(y0 * y0 + y1 * y1 + y2 * y2);
  if (!len) {
    y0 = 0;
    y1 = 0;
    y2 = 0;
  } else {
    len = 1 / len;
    y0 *= len;
    y1 *= len;
    y2 *= len;
  }
  dst[0] = x0;
  dst[1] = y0;
  dst[2] = z0;
  dst[3] = 0;
  dst[4] = x1;
  dst[5] = y1;
  dst[6] = z1;
  dst[7] = 0;
  dst[8] = x2;
  dst[9] = y2;
  dst[10] = z2;
  dst[11] = 0;
  dst[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);
  dst[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);
  dst[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);
  dst[15] = 1;
}
```