user: 下面的汇编指令对应的C源代码是什么:

```asm
<MultiNomialAliasSetTable>:
  endbr64
  mov    %rdx,%r9
  mov    %rcx,%r10
  test   %edi,%edi
  jle    L325
  lea    -0x1(%rdi),%ecx
  cmp    $0x2,%ecx
  jbe    L428
  mov    %edi,%edx
  movdqa D10(%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)
L147:
  movups %xmm0,(%rax)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L147
  mov    %edi,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%dil
  je     L140
L624:
  movslq %eax,%rdx
  movl   $0xfffffff7,(%r10,%rdx,4)
  lea    0x0(,%rdx,4),%r11
  lea    0x1(%rax),%edx
  cmp    %edx,%edi
  jle    L140
  movl   $0xfffffff7,0x4(%r10,%r11,1)
  add    $0x2,%eax
  cmp    %eax,%edi
  jle    L140
  movl   $0xfffffff7,0x8(%r10,%r11,1)
L140:
  pxor   %xmm1,%xmm1
  lea    0x8(%rsi),%rax
  cvtsi2sd %edi,%xmm1
  cmp    %rax,%r9
  je     L290
  cmp    $0x1,%ecx
  jbe    L290
  mov    %edi,%edx
  movapd %xmm1,%xmm2
  xor    %eax,%eax
  shr    %edx
  unpcklpd %xmm2,%xmm2
  shl    $0x4,%rdx
  nopw   0x0(%rax,%rax,1)
L637:
  movupd (%rsi,%rax,1),%xmm0
  mulpd  %xmm2,%xmm0
  movups %xmm0,(%r9,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L637
  mov    %edi,%eax
  and    $0xfffffffe,%eax
  test   $0x1,%dil
  je     L384
  mulsd  (%rsi,%rax,8),%xmm1
  movsd  %xmm1,(%r9,%rax,8)
L384:
  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     L433
  cmp    $0xe,%ecx
  jbe    L433
  mov    %edi,%ecx
  mov    %r9,%rax
  pxor   %xmm12,%xmm12
  mov    %r8,%rdx
  shr    $0x4,%ecx
  pcmpeqd %xmm13,%xmm13
  movapd D45(%rip),%xmm15
  movdqa D5(%rip),%xmm14
  sub    $0x1,%ecx
  shl    $0x7,%rcx
  lea    0x80(%r9,%rcx,1),%rcx
  nopw   0x0(%rax,%rax,1)
L103:
  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   D28(%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   D28(%rip),%xmm1
  packuswb %xmm1,%xmm0
  movups %xmm0,-0x10(%rdx)
  cmp    %rax,%rcx
  jne    L103
  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     L54
  mov    %eax,%ecx
  movsd  D45(%rip),%xmm0
  movsd  (%r9,%rcx,8),%xmm1
  lea    0x0(,%rcx,8),%rdx
  lea    (%r8,%rcx,1),%r11
  mov    $0x1,%ecx
  comisd %xmm0,%xmm1
  jb     L568
L485:
  mov    %cl,(%r11)
  lea    0x1(%rax),%ecx
  cmp    %edi,%ecx
  jge    L54
  movsd  0x8(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L155
L674:
  mov    %r11b,(%rcx)
  lea    0x2(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x10(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L533
L443:
  mov    %r11b,(%rcx)
  lea    0x3(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x18(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L661
L524:
  mov    %r11b,(%rcx)
  lea    0x4(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x20(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L622
  mov    %r11b,(%rcx)
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
L143:
  movsd  0x28(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L52
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L52:
  mov    %r11b,(%rcx)
  lea    0x6(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x30(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L546
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L546:
  mov    %r11b,(%rcx)
  lea    0x7(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x38(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L706
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L706:
  mov    %r11b,(%rcx)
  lea    0x8(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x40(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L460
L612:
  mov    %r11b,(%rcx)
  lea    0x9(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x48(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L515
L643:
  mov    %r11b,(%rcx)
  lea    0xa(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x50(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L398
L64:
  mov    %r11b,(%rcx)
  lea    0xb(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x58(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L687
L609:
  mov    %r11b,(%rcx)
  lea    0xc(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x60(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jb     L431
L271:
  mov    %r11b,(%rcx)
  lea    0xd(%rax),%ecx
  cmp    %ecx,%edi
  jle    L54
  movsd  0x68(%r9,%rdx,1),%xmm1
  movslq %ecx,%rcx
  mov    $0x1,%r11d
  add    %r8,%rcx
  comisd %xmm0,%xmm1
  jae    L241
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
L241:
  add    $0xe,%eax
  mov    %r11b,(%rcx)
  cmp    %eax,%edi
  jle    L54
  movsd  0x70(%r9,%rdx,1),%xmm1
  cltq
  mov    $0x1,%edx
  add    %r8,%rax
  comisd %xmm0,%xmm1
  jb     L302
  mov    %dl,(%rax)
  nopw   0x0(%rax,%rax,1)
L54:
  test   %esi,%esi
  je     L325
  movsd  D45(%rip),%xmm1
  nopl   0x0(%rax)
L98:
  mov    %r8,%rcx
  mov    %r8,%rdx
  xor    %eax,%eax
  jmp    L307
  nopw   0x0(%rax,%rax,1)
L301:
  add    $0x1,%eax
  add    $0x1,%rdx
  cmp    %eax,%edi
  je     L152
L307:
  cmpb   $0xff,(%rdx)
  jne    L301
L152:
  xor    %edx,%edx
  jmp    L230
  nopl   0x0(%rax)
L249:
  add    $0x1,%edx
  add    $0x1,%rcx
  cmp    %edx,%edi
  je     L325
L230:
  cmpb   $0x1,(%rcx)
  jne    L249
  cmp    %edx,%edi
  je     L325
  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     L187
  movb   $0x0,(%rax)
  sub    $0x1,%esi
  jne    L98
L325:
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L187:
  movb   $0xff,(%r8,%rdx,1)
  movb   $0x0,(%rax)
  jmp    L98
L433:
  movsd  D45(%rip),%xmm0
  mov    %edi,%ecx
  xor    %eax,%eax
  xor    %esi,%esi
L136:
  movsd  (%r9,%rax,8),%xmm1
  mov    $0x1,%edx
  comisd %xmm0,%xmm1
  jae    L613
  add    $0x1,%esi
  mov    $0xffffffff,%edx
L613:
  mov    %dl,(%r8,%rax,1)
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L136
  jmp    L54
L568:
  add    $0x1,%esi
  mov    $0xffffffff,%ecx
  jmp    L485
L155:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L674
L533:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L443
L661:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L524
L622:
  mov    $0xffffffff,%r11d
  add    $0x1,%esi
  mov    %r11b,(%rcx)
  lea    0x5(%rax),%ecx
  cmp    %ecx,%edi
  jg     L143
  jmp    L54
L460:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L612
L515:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L643
L398:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L64
L687:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L609
L431:
  add    $0x1,%esi
  mov    $0xffffffff,%r11d
  jmp    L271
L302:
  mov    $0xffffffff,%edx
  add    $0x1,%esi
  mov    %dl,(%rax)
  jmp    L54
L290:
  mov    %edi,%edx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L519:
  movsd  (%rsi,%rax,8),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%r9,%rax,8)
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L519
  jmp    L384
L428:
  xor    %eax,%eax
  jmp    L624
```

tool_calls: name: unpack_data
arguments: data_tag: D10
data_type: byte[16]
name: unpack_data
arguments: data_tag: D45
data_type: byte[16]
name: unpack_data
arguments: data_tag: D5
data_type: byte[16]
name: unpack_data
arguments: data_tag: D28
data_type: byte[16]

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

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

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

tool: {"D28": [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);
}
```