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

```asm
<MultiNomialAliasSetTable>:
  endbr64
  mov    %rdx,%r9
  mov    %rcx,%r10
  test   %edi,%edi
  jle    L215
  lea    -0x1(%rdi),%ecx
  cmp    $0x2,%ecx
  jbe    L280
  mov    %edi,%edx
  movdqa D73(%rip),%xmm0
  mov    %r10,%rax
  shr    $0x2,%edx
  sub    $0x1,%edx
  shl    $0x4,%rdx
  lea    0x10(%r10,%rdx,1),%rdx
  nopw   0x0(%rax,%rax,1)
L718:
  movups %xmm0,(%rax)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L718
  mov    %edi,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%dil
  je     L240
L611:
  movslq %eax,%rdx
  movl   $0xfffffff7,(%r10,%rdx,4)
  lea    0x0(,%rdx,4),%r11
  lea    0x1(%rax),%edx
  cmp    %edx,%edi
  jle    L240
  movl   $0xfffffff7,0x4(%r10,%r11,1)
  add    $0x2,%eax
  cmp    %eax,%edi
  jle    L240
  movl   $0xfffffff7,0x8(%r10,%r11,1)
L240:
  pxor   %xmm1,%xmm1
  lea    0x8(%rsi),%rax
  cvtsi2sd %edi,%xmm1
  cmp    %rax,%r9
  je     L86
  cmp    $0x1,%ecx
  jbe    L86
  mov    %edi,%edx
  movapd %xmm1,%xmm2
  xor    %eax,%eax
  shr    %edx
  unpcklpd %xmm2,%xmm2
  shl    $0x4,%rdx
  nopw   0x0(%rax,%rax,1)
L396:
  movupd (%rsi,%rax,1),%xmm0
  mulpd  %xmm2,%xmm0
  movups %xmm0,(%r9,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L396
  mov    %edi,%eax
  and    $0xfffffffe,%eax
  test   $0x1,%dil
  je     L348
  mulsd  (%rsi,%rax,8),%xmm1
  movsd  %xmm1,(%r9,%rax,8)
L348:
  movslq %edi,%rax
  lea    (%r9,%rax,8),%rdx
  cmp    %rdx,%r8
  setae  %dl
  add    %r8,%rax
  cmp    %rax,%r9
  setae  %al
  or     %al,%dl
  je     L127
  cmp    $0xe,%ecx
  jbe    L127
  mov    %edi,%ecx
  mov    %r9,%rax
  pxor   %xmm12,%xmm12
  mov    %r8,%rdx
  shr    $0x4,%ecx
  pcmpeqd %xmm13,%xmm13
  movapd D49(%rip),%xmm15
  movdqa D22(%rip),%xmm14
  sub    $0x1,%ecx
  shl    $0x7,%rcx
  lea    0x80(%r9,%rcx,1),%rcx
  nopw   0x0(%rax,%rax,1)
L97:
  movupd 0x20(%rax),%xmm5
  movapd %xmm15,%xmm3
  movapd %xmm15,%xmm6
  movupd 0x40(%rax),%xmm2
  movapd %xmm15,%xmm1
  movupd (%rax),%xmm7
  movupd 0x10(%rax),%xmm4
  movapd %xmm15,%xmm0
  cmplepd %xmm5,%xmm3
  movupd 0x30(%rax),%xmm5
  sub    $0xffffffffffffff80,%rax
  add    $0x10,%rdx
  cmplepd %xmm2,%xmm1
  movupd -0x30(%rax),%xmm2
  cmplepd %xmm7,%xmm0
  movapd %xmm15,%xmm7
  cmplepd %xmm5,%xmm6
  cmplepd %xmm4,%xmm7
  movdqa %xmm3,%xmm8
  movaps %xmm0,-0x18(%rsp)
  movdqa %xmm0,%xmm9
  movupd -0x20(%rax),%xmm0
  movdqa %xmm1,%xmm11
  movdqa %xmm6,%xmm5
  movdqa %xmm7,%xmm4
  pandn  %xmm14,%xmm9
  pandn  %xmm14,%xmm5
  pandn  %xmm14,%xmm4
  pandn  %xmm14,%xmm8
  movaps %xmm5,-0x38(%rsp)
  movapd %xmm15,%xmm5
  pandn  %xmm14,%xmm11
  shufps $0x88,-0x38(%rsp),%xmm8
  cmplepd %xmm2,%xmm5
  movaps %xmm4,-0x48(%rsp)
  movapd %xmm15,%xmm4
  shufps $0x88,-0x48(%rsp),%xmm9
  paddd  %xmm12,%xmm9
  paddd  %xmm9,%xmm8
  movdqa %xmm11,%xmm9
  movdqa %xmm5,%xmm2
  pandn  %xmm14,%xmm2
  movaps %xmm2,-0x28(%rsp)
  movapd %xmm15,%xmm2
  shufps $0x88,-0x28(%rsp),%xmm9
  paddd  %xmm9,%xmm8
  cmplepd %xmm0,%xmm2
  movupd -0x10(%rax),%xmm0
  cmplepd %xmm0,%xmm4
  movdqa %xmm2,%xmm10
  pandn  %xmm14,%xmm10
  movdqa %xmm4,%xmm0
  movdqa %xmm10,%xmm9
  pandn  %xmm14,%xmm0
  shufps $0x88,%xmm0,%xmm9
  movapd -0x18(%rsp),%xmm0
  movdqa %xmm9,%xmm12
  paddd  %xmm8,%xmm12
  movdqa %xmm14,%xmm8
  pand   %xmm0,%xmm8
  pandn  %xmm13,%xmm0
  por    %xmm8,%xmm0
  movdqa %xmm14,%xmm8
  pand   %xmm7,%xmm8
  pandn  %xmm13,%xmm7
  por    %xmm8,%xmm7
  movdqa %xmm14,%xmm8
  pand   %xmm3,%xmm8
  pandn  %xmm13,%xmm3
  shufps $0x88,%xmm7,%xmm0
  por    %xmm8,%xmm3
  movdqa %xmm14,%xmm8
  pand   %xmm6,%xmm8
  pandn  %xmm13,%xmm6
  por    %xmm8,%xmm6
  movdqa %xmm14,%xmm8
  pand   %xmm1,%xmm8
  pandn  %xmm13,%xmm1
  shufps $0x88,%xmm6,%xmm3
  movdqa %xmm0,%xmm6
  por    %xmm8,%xmm1
  movdqa %xmm14,%xmm8
  punpcklwd %xmm3,%xmm0
  pand   %xmm5,%xmm8
  pandn  %xmm13,%xmm5
  punpckhwd %xmm3,%xmm6
  por    %xmm8,%xmm5
  movdqa %xmm14,%xmm8
  movdqa %xmm0,%xmm3
  pand   %xmm2,%xmm8
  punpckhwd %xmm6,%xmm3
  punpcklwd %xmm6,%xmm0
  shufps $0x88,%xmm5,%xmm1
  pandn  %xmm13,%xmm2
  punpcklwd %xmm3,%xmm0
  movdqa %xmm1,%xmm3
  por    %xmm8,%xmm2
  movdqa %xmm14,%xmm8
  pand   D9(%rip),%xmm0
  pand   %xmm4,%xmm8
  pandn  %xmm13,%xmm4
  por    %xmm8,%xmm4
  shufps $0x88,%xmm4,%xmm2
  punpcklwd %xmm2,%xmm1
  punpckhwd %xmm2,%xmm3
  movdqa %xmm1,%xmm2
  punpcklwd %xmm3,%xmm1
  punpckhwd %xmm3,%xmm2
  punpcklwd %xmm2,%xmm1
  pand   D9(%rip),%xmm1
  packuswb %xmm1,%xmm0
  movups %xmm0,-0x10(%rdx)
  cmp    %rax,%rcx
  jne    L97
  movdqa %xmm12,%xmm0
  mov    %edi,%eax
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%eax
  paddd  %xmm12,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%esi
  test   $0xf,%dil
  je     L226
  mov    %eax,%ecx
  movsd  D49(%rip),%xmm0
  movsd  (%r9,%rcx,8),%xmm1
  lea    0x0(,%rcx,8),%rdx
  lea    (%r8,%rcx,1),%r11
  mov    $0x1,%ecx
  comisd %xmm0,%xmm1
  jb     L609
L435:
  mov    %cl,(%r11)
  lea    0x1(%rax),%ecx
  cmp    %edi,%ecx
  jge    L226
  movsd  0x8(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L75
L591:
  mov    %r11b,(%rcx)
  lea    0x2(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x10(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L532
L431:
  mov    %r11b,(%rcx)
  lea    0x3(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x18(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L406
L1:
  mov    %r11b,(%rcx)
  lea    0x4(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x20(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L585
  mov    %r11b,(%rcx)
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
L37:
  movsd  0x28(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L284
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L284:
  mov    %r11b,(%rcx)
  lea    0x6(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x30(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L377
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L377:
  mov    %r11b,(%rcx)
  lea    0x7(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x38(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L82
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L82:
  mov    %r11b,(%rcx)
  lea    0x8(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x40(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L275
L271:
  mov    %r11b,(%rcx)
  lea    0x9(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x48(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L277
L608:
  mov    %r11b,(%rcx)
  lea    0xa(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x50(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L548
L505:
  mov    %r11b,(%rcx)
  lea    0xb(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x58(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L420
L687:
  mov    %r11b,(%rcx)
  lea    0xc(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x60(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L709
L205:
  mov    %r11b,(%rcx)
  lea    0xd(%rax),%ecx
  cmp    %ecx,%edi
  jle    L226
  movsd  0x68(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L158
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L158:
  add    $0xe,%eax
  mov    %r11b,(%rcx)
  cmp    %eax,%edi
  jle    L226
  movsd  0x70(%r9,%rdx,1),%xmm1
  cltq
  mov    $0x1,%edx
  add    %r8,%rax
  comisd %xmm0,%xmm1
  jb     L57
  mov    %dl,(%rax)
  nopw   0x0(%rax,%rax,1)
L226:
  test   %esi,%esi
  je     L215
  movsd  D49(%rip),%xmm1
  nopl   0x0(%rax)
L581:
  mov    %r8,%rcx
  mov    %r8,%rdx
  xor    %eax,%eax
  jmp    L106
  nopw   0x0(%rax,%rax,1)
L314:
  add    $0x1,%eax
  add    $0x1,%rdx
  cmp    %eax,%edi
  je     L204
L106:
  cmpb   $0xff,(%rdx)
  jne    L314
L204:
  xor    %edx,%edx
  jmp    L696
  nopl   0x0(%rax)
L29:
  add    $0x1,%edx
  add    $0x1,%rcx
  cmp    %edx,%edi
  je     L215
L696:
  cmpb   $0x1,(%rcx)
  jne    L29
  cmp    %edx,%edi
  je     L215
  cltq
  movapd %xmm1,%xmm2
  mov    %edx,(%r10,%rax,4)
  movslq %edx,%rdx
  subsd  (%r9,%rax,8),%xmm2
  add    %r8,%rax
  lea    (%r9,%rdx,8),%rcx
  movsd  (%rcx),%xmm0
  subsd  %xmm2,%xmm0
  comisd %xmm0,%xmm1
  movsd  %xmm0,(%rcx)
  ja     L576
  movb   $0x0,(%rax)
  sub    $0x1,%esi
  jne    L581
L215:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L576:
  movb   $0xff,(%r8,%rdx,1)
  movb   $0x0,(%rax)
  jmp    L581
L127:
  movsd  D49(%rip),%xmm0
  mov    %edi,%ecx
  xor    %eax,%eax
  xor    %esi,%esi
L392:
  movsd  (%r9,%rax,8),%xmm1
  mov    $0x1,%edx
  comisd %xmm0,%xmm1
  jae    L251
  add    $0x1,%esi
  mov    $0xffffffff,%edx
L251:
  mov    %dl,(%r8,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L392
  jmp    L226
L609:
  add    $0x1,%esi
  mov    $0xffffffff,%ecx
  jmp    L435
L75:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L591
L532:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L431
L406:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L1
L585:
  mov    $0xffffffff,%r11d
  add    $0x1,%esi
  mov    %r11b,(%rcx)
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edi
  jg     L37
  jmp    L226
L275:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L271
L277:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L608
L548:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L505
L420:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L687
L709:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L205
L57:
  mov    $0xffffffff,%edx
  add    $0x1,%esi
  mov    %dl,(%rax)
  jmp    L226
L86:
  mov    %edi,%edx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L88:
  movsd  (%rsi,%rax,8),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%r9,%rax,8)
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L88
  jmp    L348
L280:
  xor    %eax,%eax
  jmp    L611
```

tool_calls: name: retrieve_data
arguments: tag: D73
type_infered: byte[16]
name: retrieve_data
arguments: tag: D49
type_infered: byte[16]
name: retrieve_data
arguments: tag: D22
type_infered: byte[16]
name: retrieve_data
arguments: tag: D9
type_infered: byte[16]

tool: {"D73": [0xf7,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xf7,0xff,0xff,0xff]}

tool: {"D49": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D22": [0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D9": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
int MultiNomialAliasSetTable(int ncat, double prob[], double F[], int L[], double space[]) {
  signed char *I = (signed char *)space;
  int i, j, k, nsmall;
  for (i = 0; i < ncat; i++)
    L[i] = -9;
  for (i = 0; i < ncat; i++)
    F[i] = ncat * prob[i];
  for (i = 0, nsmall = 0; i < ncat; i++) {
    if (F[i] >= 1)
      I[i] = 1;
    else {
      I[i] = -1;
      nsmall++;
    }
  }
  for (i = 0; nsmall > 0; i++) {
    for (j = 0; j < ncat; j++)
      if (I[j] == -1)
        break;
    for (k = 0; k < ncat; k++)
      if (I[k] == 1)
        break;
    if (k == ncat)
      break;
    L[j] = k;
    F[k] -= 1 - F[j];
    if (F[k] < 1) {
      I[k] = -1;
      nsmall++;
    }
    I[j] = 0;
    nsmall--;
  }
  return (0);
}
```