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

```asm
<init_alias55>:
  endbr64
  mov    %rdi,%r10
  push   %rbx
  mov    %rsi,%rdi
  mov    %ecx,%r11d
  mov    %rdx,%rsi
  test   %ecx,%ecx
  jle    L97
  movslq %ecx,%rdx
  lea    (%rdi,%rdx,8),%rax
  lea    (%rsi,%rdx,4),%rdx
  cmp    %rax,%rsi
  setae  %al
  cmp    %rdx,%rdi
  setae  %dl
  or     %dl,%al
  je     L41
  lea    0x8(%r10),%rdx
  mov    %rdi,%rax
  sub    %rdx,%rax
  cmp    $0x10,%rax
  lea    -0x1(%rcx),%eax
  seta   %dl
  cmp    $0x2,%eax
  seta   %al
  test   %al,%dl
  je     L41
  mov    %ecx,%edx
  xor    %eax,%eax
  pcmpeqd %xmm1,%xmm1
  shr    $0x2,%edx
  shl    $0x4,%rdx
  nopl   0x0(%rax)
L52:
  movupd 0x10(%r10,%rax,2),%xmm0
  movupd (%r10,%rax,2),%xmm5
  movups %xmm1,(%rsi,%rax,1)
  movups %xmm5,(%rdi,%rax,2)
  movups %xmm0,0x10(%rdi,%rax,2)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L52
  mov    %r11d,%edx
  and    $0xfffffffc,%edx
  test   $0x3,%r11b
  je     L114
  mov    %edx,%eax
  movsd  (%r10,%rax,8),%xmm0
  movl   $0xffffffff,(%rsi,%rax,4)
  lea    0x0(,%rax,4),%rbx
  lea    0x0(,%rax,8),%rcx
  movsd  %xmm0,(%rdi,%rax,8)
  lea    0x1(%rdx),%eax
  cmp    %eax,%r11d
  jle    L114
  movsd  0x8(%r10,%rcx,1),%xmm0
  add    $0x2,%edx
  movl   $0xffffffff,0x4(%rsi,%rbx,1)
  movsd  %xmm0,0x8(%rdi,%rcx,1)
  cmp    %edx,%r11d
  jle    L114
  movsd  0x10(%r10,%rcx,1),%xmm0
  movl   $0xffffffff,0x8(%rsi,%rbx,1)
  movsd  %xmm0,0x10(%rdi,%rcx,1)
L114:
  pxor   %xmm4,%xmm4
  mov    %r11d,%r10d
  movslq %r11d,%rcx
  movsd  D12(%rip),%xmm3
  cvtsi2sd %r11d,%xmm4
  movsd  D20(%rip),%xmm6
  movsd  D17(%rip),%xmm5
  divsd  %xmm4,%xmm3
  nopl   0x0(%rax,%rax,1)
L61:
  xor    %eax,%eax
  movapd %xmm6,%xmm2
  movapd %xmm5,%xmm1
  test   %r11d,%r11d
  jle    L75
  nop
L134:
  cmpl   $0xffffffff,(%rsi,%rax,4)
  jne    L68
  movsd  (%rdi,%rax,8),%xmm0
  comisd %xmm1,%xmm0
  movapd %xmm0,%xmm7
  maxsd  %xmm1,%xmm7
  cmova  %eax,%r8d
  comisd %xmm0,%xmm2
  minsd  %xmm2,%xmm0
  movapd %xmm7,%xmm1
  cmova  %eax,%r9d
  movapd %xmm0,%xmm2
L68:
  add    $0x1,%rax
  cmp    %rax,%rcx
  jne    L134
L75:
  movslq %r9d,%rax
  movslq %r8d,%rdx
  mov    %r8d,(%rsi,%rax,4)
  lea    (%rdi,%rax,8),%rax
  lea    (%rdi,%rdx,8),%rdx
  movsd  (%rax),%xmm0
  subsd  %xmm3,%xmm0
  addsd  (%rdx),%xmm0
  movsd  %xmm0,(%rdx)
  movsd  (%rax),%xmm0
  mulsd  %xmm4,%xmm0
  movsd  %xmm0,(%rax)
  sub    $0x1,%r10d
  jne    L61
  pop    %rbx
  ret
L41:
  mov    %r11d,%edx
  xor    %eax,%eax
  nopl   0x0(%rax,%rax,1)
L101:
  movsd  (%r10,%rax,8),%xmm0
  movl   $0xffffffff,(%rsi,%rax,4)
  movsd  %xmm0,(%rdi,%rax,8)
  add    $0x1,%rax
  cmp    %rdx,%rax
  jne    L101
  jmp    L114
L97:
  jne    L114
  pop    %rbx
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D12
datatype: f64
name: extract_symbolic_data
arguments: data_tag: D20
datatype: f64
name: extract_symbolic_data
arguments: data_tag: D17
datatype: byte[8]

tool: D12: 1

tool: D20: 2

tool: {"D17": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf]}

assistant: ```c
void init_alias55(double *prob, double *_g55_prob, int *_g55_else, const int nalias) {
  int i, j;
  int maxi, mini;
  double maxprob, minprob;
  for (j = 0; j < nalias; j++) {
    _g55_else[j] = (-1);
    _g55_prob[j] = prob[j];
  }
  for (j = nalias; j; j--) {
    maxprob = -1.0;
    minprob = 2.0;
    for (i = 0; i < nalias; i++) {
      if (_g55_else[i] == (-1)) {
        if (_g55_prob[i] > maxprob) {
          maxprob = _g55_prob[i];
          maxi = i;
        }
        if (_g55_prob[i] < minprob) {
          minprob = _g55_prob[i];
          mini = i;
        }
      }
    }
    _g55_else[mini] = maxi;
    _g55_prob[maxi] += _g55_prob[mini] - 1.0 / nalias;
    _g55_prob[mini] *= nalias;
  }
}
```