user: 请将以下的汇编代码转换成C语言代码：

```asm
<recorditem>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,-0x80(%rbp)
  mov    %r8d,-0x84(%rbp)
  mov    %r9d,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x54(%rbp)
  jmp    L37
L28:
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  imul   -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x80(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x54(%rbp),%eax
  cltq
  mov    %edx,-0x50(%rbp,%rax,4)
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  imul   -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x80(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x54(%rbp),%eax
  cltq
  mov    %edx,-0x44(%rbp,%rax,4)
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  imul   -0x84(%rbp),%eax
  mov    %eax,%edx
  mov    -0x54(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x80(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x54(%rbp),%eax
  cltq
  mov    %edx,-0x38(%rbp,%rax,4)
  addl   $0x1,-0x54(%rbp)
L37:
  cmpl   $0x2,-0x54(%rbp)
  jle    L28
  cmpl   $0x0,0x10(%rbp)
  jne    L33
  lea    -0x20(%rbp),%rdx
  lea    -0x44(%rbp),%rcx
  lea    -0x50(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <diff3@plt>
  lea    -0x14(%rbp),%rdx
  lea    -0x38(%rbp),%rcx
  lea    -0x44(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <diff3@plt>
  lea    -0x14(%rbp),%rdx
  lea    -0x14(%rbp),%rcx
  lea    -0x20(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <crossprod@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rdi
  call   <normalize@plt>
  lea    -0x2c(%rbp),%rcx
  lea    -0x14(%rbp),%rdx
  lea    -0x50(%rbp),%rsi
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <m_xformpt@plt>
  lea    -0x44(%rbp),%rdx
  lea    -0x44(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <m_xformptonly@plt>
  lea    -0x38(%rbp),%rdx
  lea    -0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <m_xformptonly@plt>
  mov    -0x88(%rbp),%eax
  mov    %eax,%edi
  call   <glBegin@plt>
  lea    -0x2c(%rbp),%rax
  mov    %rax,%rdi
  call   <glNormal3dv@plt>
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <glVertex3dv@plt>
  lea    -0x44(%rbp),%rax
  mov    %rax,%rdi
  call   <glVertex3dv@plt>
  lea    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <glVertex3dv@plt>
  mov    $0x0,%eax
  call   <glEnd@plt>
  jmp    L14
L33:
  lea    -0x2c(%rbp),%rcx
  mov    -0x68(%rbp),%rdx
  lea    -0x50(%rbp),%rsi
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <m_xformpt@plt>
  lea    -0x20(%rbp),%rcx
  mov    -0x70(%rbp),%rdx
  lea    -0x44(%rbp),%rsi
  lea    -0x44(%rbp),%rax
  mov    %rax,%rdi
  call   <m_xformpt@plt>
  lea    -0x14(%rbp),%rcx
  mov    -0x78(%rbp),%rdx
  lea    -0x38(%rbp),%rsi
  lea    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <m_xformpt@plt>
  mov    -0x88(%rbp),%eax
  mov    %eax,%edi
  call   <glBegin@plt>
  lea    -0x2c(%rbp),%rax
  mov    %rax,%rdi
  call   <glNormal3dv@plt>
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <glVertex3dv@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <glNormal3dv@plt>
  lea    -0x44(%rbp),%rax
  mov    %rax,%rdi
  call   <glVertex3dv@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rdi
  call   <glNormal3dv@plt>
  lea    -0x38(%rbp),%rax
  mov    %rax,%rdi
  call   <glVertex3dv@plt>
  mov    $0x0,%eax
  call   <glEnd@plt>
L14:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L30
  call   <__stack_chk_fail@plt>
L30:
  leave
  ret
```

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