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

```asm
<hermite>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  test   %edi,%edi
  js     L2
  movaps %xmm0,%xmm1
  je     L17
  mov    %edi,%r12d
  mov    %edi,%ebx
  sub    $0x1,%r12d
  je     L23
  mov    %edi,%r14d
  sub    $0x2,%r14d
  je     L156
  mov    %edi,%ebp
  sub    $0x3,%ebp
  je     L212
  lea    -0x4(%rdi),%r15d
  movss  %xmm0,(%rsp)
  lea    -0x5(%rbx),%r13d
  mov    %r15d,%edi
  call   <hermite>
  movss  (%rsp),%xmm1
  mov    %r13d,%edi
  movaps %xmm0,%xmm2
  mulss  %xmm1,%xmm2
  movaps %xmm1,%xmm0
  movss  %xmm2,0x4(%rsp)
  call   <hermite>
  movss  0x4(%rsp),%xmm2
  movss  (%rsp),%xmm1
  pxor   %xmm4,%xmm4
  movaps %xmm0,%xmm3
  cvtsi2ss %ebp,%xmm4
  pxor   %xmm0,%xmm0
  cvtsi2ss %r15d,%xmm0
  movss  %xmm4,0x10(%rsp)
  mulss  %xmm3,%xmm0
  subss  %xmm0,%xmm2
  movaps %xmm2,%xmm3
  mulss  %xmm1,%xmm3
  movss  %xmm3,0x8(%rsp)
  cmp    $0x4,%ebx
  je     L154
  movaps %xmm1,%xmm0
  mov    %r13d,%edi
  movss  %xmm1,(%rsp)
  call   <hermite>
  movss  (%rsp),%xmm1
  lea    -0x6(%rbx),%edi
  movaps %xmm0,%xmm2
  mulss  %xmm1,%xmm2
  movaps %xmm1,%xmm0
  movss  %xmm2,0x4(%rsp)
  call   <hermite>
  movss  0x4(%rsp),%xmm2
  movss  (%rsp),%xmm1
  movaps %xmm0,%xmm5
  pxor   %xmm0,%xmm0
  movss  0x8(%rsp),%xmm3
  movss  0x10(%rsp),%xmm4
  cvtsi2ss %r13d,%xmm0
  mulss  %xmm5,%xmm0
  subss  %xmm0,%xmm2
L226:
  mulss  %xmm4,%xmm2
  pxor   %xmm7,%xmm7
  cvtsi2ss %r14d,%xmm7
  subss  %xmm2,%xmm3
  movss  %xmm7,(%rsp)
  mulss  %xmm1,%xmm3
  movss  %xmm3,0x4(%rsp)
  test   %r15d,%r15d
  je     L138
  movaps %xmm1,%xmm0
  mov    %r13d,%edi
  movss  %xmm1,0x8(%rsp)
  lea    -0x6(%rbx),%r14d
  call   <hermite>
  movss  0x8(%rsp),%xmm1
  mov    %r14d,%edi
  movaps %xmm0,%xmm2
  mulss  %xmm1,%xmm2
  movaps %xmm1,%xmm0
  movss  %xmm2,0x10(%rsp)
  call   <hermite>
  movss  0x10(%rsp),%xmm2
  movss  0x8(%rsp),%xmm1
  movaps %xmm0,%xmm3
  pxor   %xmm0,%xmm0
  cvtsi2ss %r13d,%xmm0
  mulss  %xmm3,%xmm0
  pxor   %xmm3,%xmm3
  cvtsi2ss %r15d,%xmm3
  subss  %xmm0,%xmm2
  movss  %xmm3,0x10(%rsp)
  mulss  %xmm1,%xmm2
  movss  %xmm2,0x18(%rsp)
  cmp    $0x5,%ebx
  je     L74
  movaps %xmm1,%xmm0
  mov    %r14d,%edi
  movss  %xmm1,0x8(%rsp)
  call   <hermite>
  movss  0x8(%rsp),%xmm1
  lea    -0x7(%rbx),%edi
  mulss  %xmm1,%xmm0
  movd   %xmm0,%r13d
  movaps %xmm1,%xmm0
  call   <hermite>
  movss  0x18(%rsp),%xmm2
  movss  0x10(%rsp),%xmm3
  movaps %xmm0,%xmm4
  pxor   %xmm0,%xmm0
  movss  0x8(%rsp),%xmm1
  cvtsi2ss %r14d,%xmm0
  mulss  %xmm0,%xmm4
  movd   %r13d,%xmm0
  subss  %xmm4,%xmm0
L15:
  mulss  %xmm3,%xmm0
  subss  %xmm0,%xmm2
L111:
  mulss  (%rsp),%xmm2
  movss  0x4(%rsp),%xmm0
  pxor   %xmm7,%xmm7
  cvtsi2ss %r12d,%xmm7
  subss  %xmm2,%xmm0
  movss  %xmm7,(%rsp)
  mulss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rsp)
  test   %ebp,%ebp
  je     L18
  mov    %ebx,%r15d
  sub    $0x4,%r15d
  je     L163
  lea    -0x5(%rbx),%r13d
  movaps %xmm1,%xmm0
  movss  %xmm1,0x8(%rsp)
  lea    -0x6(%rbx),%r14d
  mov    %r13d,%edi
  call   <hermite>
  movss  0x8(%rsp),%xmm1
  mov    %r14d,%edi
  movaps %xmm0,%xmm4
  mulss  %xmm1,%xmm4
  movaps %xmm1,%xmm0
  movss  %xmm4,0x10(%rsp)
  call   <hermite>
  movss  0x10(%rsp),%xmm4
  movss  0x8(%rsp),%xmm1
  movaps %xmm0,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2ss %r13d,%xmm0
  mulss  %xmm0,%xmm2
  subss  %xmm2,%xmm4
  pxor   %xmm2,%xmm2
  cvtsi2ss %r15d,%xmm2
  mulss  %xmm1,%xmm4
  movss  %xmm2,0x18(%rsp)
  movss  %xmm4,0x10(%rsp)
  cmp    $0x5,%ebx
  je     L114
  movaps %xmm1,%xmm0
  mov    %r14d,%edi
  movss  %xmm1,0x8(%rsp)
  call   <hermite>
  movss  0x8(%rsp),%xmm1
  lea    -0x7(%rbx),%edi
  mulss  %xmm1,%xmm0
  movd   %xmm0,%r12d
  movaps %xmm1,%xmm0
  call   <hermite>
  movss  0x8(%rsp),%xmm1
  movss  0x10(%rsp),%xmm4
  movaps %xmm0,%xmm3
  pxor   %xmm0,%xmm0
  movss  0x18(%rsp),%xmm2
  cvtsi2ss %r14d,%xmm0
  mulss  %xmm0,%xmm3
  movd   %r12d,%xmm0
  subss  %xmm3,%xmm0
L209:
  mulss  %xmm0,%xmm2
  pxor   %xmm6,%xmm6
  cvtsi2ss %ebp,%xmm6
  subss  %xmm2,%xmm4
  movss  %xmm6,0x8(%rsp)
  mulss  %xmm1,%xmm4
  movd   %xmm4,%r15d
  test   %r13d,%r13d
  je     L67
  movaps %xmm1,%xmm0
  mov    %r14d,%edi
  movss  %xmm1,0x10(%rsp)
  lea    -0x7(%rbx),%r12d
  call   <hermite>
  movss  0x10(%rsp),%xmm1
  mov    %r12d,%edi
  movaps %xmm0,%xmm2
  mulss  %xmm1,%xmm2
  movaps %xmm1,%xmm0
  movss  %xmm2,0x18(%rsp)
  call   <hermite>
  movss  0x18(%rsp),%xmm2
  movss  0x10(%rsp),%xmm1
  movaps %xmm0,%xmm3
  pxor   %xmm0,%xmm0
  cvtsi2ss %r14d,%xmm0
  mulss  %xmm3,%xmm0
  pxor   %xmm3,%xmm3
  cvtsi2ss %r13d,%xmm3
  subss  %xmm0,%xmm2
  movss  %xmm3,0x18(%rsp)
  mulss  %xmm1,%xmm2
  movss  %xmm2,0x1c(%rsp)
  cmp    $0x6,%ebx
  je     L161
  movaps %xmm1,%xmm0
  mov    %r12d,%edi
  movss  %xmm1,0x10(%rsp)
  call   <hermite>
  movss  0x10(%rsp),%xmm1
  lea    -0x8(%rbx),%edi
  mulss  %xmm1,%xmm0
  movd   %xmm0,%ebp
  movaps %xmm1,%xmm0
  call   <hermite>
  movss  0x1c(%rsp),%xmm2
  movss  0x18(%rsp),%xmm3
  movaps %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  mulss  %xmm1,%xmm0
  movd   %ebp,%xmm1
  subss  %xmm0,%xmm1
L217:
  mulss  %xmm3,%xmm1
  subss  %xmm1,%xmm2
  movaps %xmm2,%xmm0
L53:
  mulss  0x8(%rsp),%xmm0
  movd   %r15d,%xmm1
  subss  %xmm0,%xmm1
L50:
  mulss  (%rsp),%xmm1
  movss  0x4(%rsp),%xmm0
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  subss  %xmm1,%xmm0
  ret
  nopl   0x0(%rax)
L17:
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D46(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movss  %xmm0,(%rsp)
  call   <sqrt@plt>
  movss  (%rsp),%xmm1
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  divss  %xmm0,%xmm1
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  movaps %xmm1,%xmm0
  ret
  nop
L2:
  add    $0x28,%rsp
  pxor   %xmm0,%xmm0
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L156:
  movsd  D46(%rip),%xmm2
  cvtss2sd %xmm0,%xmm0
  movss  %xmm1,(%rsp)
  mulsd  %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%ebx
  call   <sqrt@plt>
  movss  (%rsp),%xmm1
  pxor   %xmm7,%xmm7
  movsd  0x8(%rsp),%xmm2
  movaps %xmm0,%xmm3
  cvtsi2ss %r12d,%xmm7
  movd   %ebx,%xmm0
  divss  %xmm3,%xmm0
  movss  %xmm7,(%rsp)
  mulss  %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rsp)
  movapd %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movss  %xmm0,0x8(%rsp)
  call   <sqrt@plt>
  movss  0x8(%rsp),%xmm1
  divss  %xmm0,%xmm1
  jmp    L50
  nopl   0x0(%rax,%rax,1)
L23:
  pxor   %xmm2,%xmm2
  movss  %xmm0,(%rsp)
  cvtss2sd %xmm0,%xmm2
  movsd  D46(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%ebx
  call   <sqrt@plt>
  movss  (%rsp),%xmm1
  pxor   %xmm5,%xmm5
  movaps %xmm0,%xmm2
  movd   %ebx,%xmm0
  movss  %xmm5,(%rsp)
  divss  %xmm2,%xmm0
  mulss  %xmm1,%xmm0
  movaps %xmm5,%xmm1
  movss  %xmm0,0x4(%rsp)
  jmp    L50
  nopl   0x0(%rax,%rax,1)
L163:
  movsd  D46(%rip),%xmm2
  pxor   %xmm0,%xmm0
  movss  %xmm1,0x8(%rsp)
  cvtss2sd %xmm1,%xmm0
  mulsd  %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x10(%rsp)
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%ebx
  call   <sqrt@plt>
  movss  0x8(%rsp),%xmm1
  pxor   %xmm6,%xmm6
  movsd  0x10(%rsp),%xmm2
  movaps %xmm0,%xmm3
  cvtsi2ss %ebp,%xmm6
  movd   %ebx,%xmm0
  divss  %xmm3,%xmm0
  movss  %xmm6,0x8(%rsp)
  mulss  %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  movd   %xmm0,%r15d
  movapd %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%ebx
  call   <sqrt@plt>
  movaps %xmm0,%xmm1
  movd   %ebx,%xmm0
  divss  %xmm1,%xmm0
  jmp    L53
  nopl   0x0(%rax)
L18:
  movsd  D46(%rip),%xmm0
  pxor   %xmm2,%xmm2
  movss  %xmm1,0x8(%rsp)
  cvtss2sd %xmm1,%xmm2
  mulsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%ebx
  call   <sqrt@plt>
  movss  0x8(%rsp),%xmm1
  pxor   %xmm5,%xmm5
  movaps %xmm0,%xmm2
  movd   %ebx,%xmm0
  movss  %xmm5,0x8(%rsp)
  divss  %xmm2,%xmm0
  mulss  %xmm1,%xmm0
  movd   %xmm0,%r15d
  movaps %xmm5,%xmm0
  jmp    L53
  nopl   (%rax)
L212:
  movsd  D46(%rip),%xmm2
  cvtss2sd %xmm0,%xmm0
  movss  %xmm1,(%rsp)
  mulsd  %xmm0,%xmm2
  mulsd  %xmm0,%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%r13d
  call   <sqrt@plt>
  movss  (%rsp),%xmm1
  pxor   %xmm6,%xmm6
  movsd  0x8(%rsp),%xmm2
  movaps %xmm0,%xmm3
  cvtsi2ss %r14d,%xmm6
  movd   %r13d,%xmm0
  divss  %xmm3,%xmm0
  movss  %xmm1,0x10(%rsp)
  movss  %xmm6,(%rsp)
  mulss  %xmm1,%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,0x4(%rsp)
  movapd %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movss  %xmm0,0x8(%rsp)
  call   <sqrt@plt>
  movss  0x8(%rsp),%xmm2
  movss  0x10(%rsp),%xmm1
  divss  %xmm0,%xmm2
  jmp    L111
  cs nopw 0x0(%rax,%rax,1)
L154:
  movsd  D46(%rip),%xmm0
  pxor   %xmm2,%xmm2
  movss  %xmm1,0x4(%rsp)
  cvtss2sd %xmm1,%xmm2
  mulsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movss  %xmm0,(%rsp)
  call   <sqrt@plt>
  movss  (%rsp),%xmm2
  movss  0x4(%rsp),%xmm1
  movss  0x8(%rsp),%xmm3
  movss  0x10(%rsp),%xmm4
  divss  %xmm0,%xmm2
  jmp    L226
  nopw   0x0(%rax,%rax,1)
L161:
  movsd  D46(%rip),%xmm0
  cvtss2sd %xmm1,%xmm1
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movss  %xmm0,0x10(%rsp)
  call   <sqrt@plt>
  movss  0x10(%rsp),%xmm1
  movss  0x18(%rsp),%xmm3
  movss  0x1c(%rsp),%xmm2
  divss  %xmm0,%xmm1
  jmp    L217
  nopl   0x0(%rax)
L67:
  movsd  D46(%rip),%xmm0
  pxor   %xmm2,%xmm2
  movss  %xmm1,0x18(%rsp)
  cvtss2sd %xmm1,%xmm2
  mulsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movss  %xmm0,0x10(%rsp)
  call   <sqrt@plt>
  movss  0x10(%rsp),%xmm2
  movss  0x18(%rsp),%xmm1
  pxor   %xmm3,%xmm3
  divss  %xmm0,%xmm2
  mulss  %xmm1,%xmm2
  movaps %xmm3,%xmm1
  jmp    L217
  nopl   0x0(%rax,%rax,1)
L114:
  movsd  D46(%rip),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm1,%xmm3
  mulsd  %xmm3,%xmm0
  mulsd  %xmm3,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%r12d
  call   <sqrt@plt>
  movss  0x8(%rsp),%xmm1
  movss  0x10(%rsp),%xmm4
  movaps %xmm0,%xmm3
  movd   %r12d,%xmm0
  movss  0x18(%rsp),%xmm2
  divss  %xmm3,%xmm0
  jmp    L209
  nopw   0x0(%rax,%rax,1)
L74:
  movsd  D46(%rip),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm1,%xmm4
  mulsd  %xmm4,%xmm0
  mulsd  %xmm4,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movd   %xmm0,%r13d
  call   <sqrt@plt>
  movss  0x8(%rsp),%xmm1
  movss  0x10(%rsp),%xmm3
  movaps %xmm0,%xmm4
  movd   %r13d,%xmm0
  movss  0x18(%rsp),%xmm2
  divss  %xmm4,%xmm0
  jmp    L15
  nop
L138:
  movsd  D46(%rip),%xmm0
  pxor   %xmm2,%xmm2
  movss  %xmm1,0x10(%rsp)
  cvtss2sd %xmm1,%xmm2
  mulsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  call   <exp@plt>
  mov    $0x6,%edi
  movss  %xmm0,0x8(%rsp)
  call   <sqrt@plt>
  movss  0x8(%rsp),%xmm2
  movss  0x10(%rsp),%xmm1
  pxor   %xmm3,%xmm3
  divss  %xmm0,%xmm2
  movaps %xmm3,%xmm0
  mulss  %xmm1,%xmm2
  jmp    L15
```

tool_calls: name: disassemble_data
arguments: data_tag: D46
type_infered: byte[8]

tool: {"D46": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xbf]}

assistant: ```c
float hermite(int n, float x) {
  if (n < 0)
    return 0;
  if (n == 0)
    return exp(-.5 * x * x) / sqrt(2 * 3.141592653589793238462643);
  return x * hermite(n - 1, x) - (n - 1) * hermite(n - 2, x);
}
```