user: 这段汇编代码用C语言表示是什么样的？

```asm
<recorditem>:
  endbr64
  push   %r15
  mov    %rcx,%rax
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %r9d,%ebp
  push   %rbx
  sub    $0x78,%rsp
  movq   (%rcx),%xmm3
  mov    0x8(%rax),%eax
  mov    %fs:0x28,%rdx
  mov    %rdx,0x68(%rsp)
  xor    %edx,%edx
  mov    0x4(%rdi),%edx
  mov    (%rsi),%ebx
  mov    (%r12),%ecx
  mov    (%rdi),%esi
  imul   %r8d,%edx
  imul   %r8d,%ebx
  imul   %r8d,%ecx
  movd   %edx,%xmm4
  mov    0x4(%r13),%edx
  imul   %r8d,%esi
  movd   %ebx,%xmm1
  imul   %r8d,%edx
  movd   %ecx,%xmm0
  movd   %esi,%xmm2
  punpckldq %xmm4,%xmm2
  movd   %edx,%xmm5
  mov    0x4(%r12),%edx
  paddd  %xmm3,%xmm2
  punpckldq %xmm5,%xmm1
  imul   %r8d,%edx
  paddd  %xmm3,%xmm1
  movq   %xmm2,0x18(%rsp)
  movd   %edx,%xmm6
  mov    0x8(%rdi),%edx
  movq   %xmm1,0x28(%rsp)
  punpckldq %xmm6,%xmm0
  imul   %r8d,%edx
  paddd  %xmm3,%xmm0
  add    %eax,%edx
  movq   %xmm0,0x38(%rsp)
  mov    %edx,0x20(%rsp)
  mov    0x8(%r13),%edx
  imul   %r8d,%edx
  imul   0x8(%r12),%r8d
  add    %eax,%edx
  add    %eax,%r8d
  mov    0xb0(%rsp),%eax
  mov    %edx,0x30(%rsp)
  mov    %r8d,0x40(%rsp)
  test   %eax,%eax
  je     L0
  lea    0x44(%rsp),%r9
  lea    0x18(%rsp),%r15
  mov    %rdi,%rdx
  mov    %r9,%rcx
  mov    %r15,%rsi
  mov    %r15,%rdi
  mov    %r9,0x8(%rsp)
  call   <m_xformpt@plt>
  lea    0x28(%rsp),%r14
  lea    0x50(%rsp),%r8
  mov    %r13,%rdx
  mov    %r8,%rcx
  lea    0x38(%rsp),%r13
  mov    %r14,%rsi
  mov    %r14,%rdi
  lea    0x5c(%rsp),%rbx
  mov    %r8,(%rsp)
  call   <m_xformpt@plt>
  mov    %rbx,%rcx
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %r13,%rdi
  call   <m_xformpt@plt>
  mov    %ebp,%edi
  call   <glBegin@plt>
  mov    0x8(%rsp),%rdi
  call   <glNormal3dv@plt>
  mov    %r15,%rdi
  call   <glVertex3dv@plt>
  mov    (%rsp),%rdi
  call   <glNormal3dv@plt>
  mov    %r14,%rdi
  call   <glVertex3dv@plt>
  mov    %rbx,%rdi
  call   <glNormal3dv@plt>
  mov    %r13,%rdi
  call   <glVertex3dv@plt>
  xor    %eax,%eax
  call   <glEnd@plt>
L23:
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L14
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L0:
  lea    0x28(%rsp),%r12
  lea    0x18(%rsp),%r15
  lea    0x50(%rsp),%rbx
  lea    0x5c(%rsp),%r13
  mov    %r12,%rsi
  mov    %r15,%rdi
  lea    0x38(%rsp),%r14
  mov    %rbx,%rdx
  call   <diff3@plt>
  mov    %r13,%rdx
  mov    %r14,%rsi
  mov    %r12,%rdi
  call   <diff3@plt>
  mov    %r13,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <crossprod@plt>
  lea    0x44(%rsp),%rbx
  mov    %r13,%rdi
  call   <normalize@plt>
  mov    %rbx,%rcx
  mov    %r13,%rdx
  mov    %r15,%rsi
  mov    %r15,%rdi
  call   <m_xformpt@plt>
  mov    %r12,%rsi
  mov    %r12,%rdi
  call   <m_xformptonly@plt>
  mov    %r14,%rsi
  mov    %r14,%rdi
  call   <m_xformptonly@plt>
  mov    %ebp,%edi
  call   <glBegin@plt>
  mov    %rbx,%rdi
  call   <glNormal3dv@plt>
  mov    %r15,%rdi
  call   <glVertex3dv@plt>
  mov    %r12,%rdi
  call   <glVertex3dv@plt>
  mov    %r14,%rdi
  call   <glVertex3dv@plt>
  xor    %eax,%eax
  call   <glEnd@plt>
  jmp    L23
L14:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void recorditem(GLdouble *n1, GLdouble *n2, GLdouble *n3, GLdouble center[3], GLdouble radius, GLenum shadeType, int avnormal) {
  GLdouble p1[3], p2[3], p3[3], q0[3], q1[3], n11[3], n22[3], n33[3];
  int i;
  for (i = 0; i < 3; i++) {
    p1[i] = n1[i] * radius + center[i];
    p2[i] = n2[i] * radius + center[i];
    p3[i] = n3[i] * radius + center[i];
  }
  if (avnormal == 0) {
    diff3(p1, p2, q0);
    diff3(p2, p3, q1);
    crossprod(q0, q1, q1);
    normalize(q1);
    m_xformpt(p1, p1, q1, n11);
    m_xformptonly(p2, p2);
    m_xformptonly(p3, p3);
    glBegin(shadeType);
    glNormal3dv(n11);
    glVertex3dv(p1);
    glVertex3dv(p2);
    glVertex3dv(p3);
    glEnd();
    return;
  }
  m_xformpt(p1, p1, n1, n11);
  m_xformpt(p2, p2, n2, n22);
  m_xformpt(p3, p3, n3, n33);
  glBegin(shadeType);
  glNormal3dv(n11);
  glVertex3dv(p1);
  glNormal3dv(n22);
  glVertex3dv(p2);
  glNormal3dv(n33);
  glVertex3dv(p3);
  glEnd();
}
```