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

```asm
<IC>:
  endbr64
  movslq %edx,%rax
  mov    %rsi,%rcx
  lea    -0x1(%rax),%r9d
  movq   $0x0,(%rcx)
  mov    %rax,%rsi
  movq   $0x0,(%rdi)
  movq   $0x0,-0x8(%rdi,%rax,8)
  cmp    $0x1,%r9d
  jle    L53
  pxor   %xmm0,%xmm0
  movapd %xmm1,%xmm2
  lea    0x8(%rcx),%r11
  cvtsi2sd %eax,%xmm0
  lea    -0x3(%rsi),%edx
  mov    %r11,%rax
  lea    0x10(%rcx,%rdx,8),%rdx
  divsd  %xmm0,%xmm2
  movsd  (%rcx),%xmm0
  nopl   (%rax)
L86:
  addsd  %xmm2,%xmm0
  add    $0x8,%rax
  movsd  %xmm0,-0x8(%rax)
  cmp    %rdx,%rax
  jne    L86
  mov    $0x320,%eax
  lea    -0x2(%rsi),%r8d
  cmp    %eax,%r8d
  cmovg  %eax,%r8d
  xor    %r10d,%r10d
  mov    %rdi,%rax
  test   %r8d,%r8d
  cmovns %r8d,%r10d
  sub    %r11,%rax
  cmp    $0x10,%rax
  jbe    L92
  cmp    $0x2,%r10d
  jbe    L92
  add    $0x1,%r10d
  movapd %xmm1,%xmm6
  xor    %eax,%eax
  movdqa D58(%rip),%xmm4
  mov    %r10d,%edx
  movapd D14(%rip),%xmm5
  unpcklpd %xmm6,%xmm6
  movdqa D1(%rip),%xmm8
  shr    $0x2,%edx
  movdqa D53(%rip),%xmm7
  shl    $0x5,%rdx
  nopw   0x0(%rax,%rax,1)
L78:
  movupd 0x10(%rcx,%rax,1),%xmm0
  movupd (%rcx,%rax,1),%xmm2
  movdqa %xmm4,%xmm3
  paddd  %xmm8,%xmm4
  paddd  %xmm7,%xmm3
  mulpd  %xmm5,%xmm0
  mulpd  %xmm5,%xmm2
  divpd  %xmm6,%xmm0
  divpd  %xmm6,%xmm2
  movups %xmm0,0x10(%rdi,%rax,1)
  movups %xmm2,(%rdi,%rax,1)
  add    $0x20,%rax
  cmp    %rdx,%rax
  jne    L78
  mov    %r10d,%eax
  pshufd $0xff,%xmm3,%xmm3
  and    $0xfffffffc,%eax
  and    $0x3,%r10d
  movd   %xmm3,%edx
  je     L52
  mov    %eax,%edx
  movsd  D14(%rip),%xmm0
  movsd  (%rcx,%rdx,8),%xmm2
  lea    0x0(,%rdx,8),%r10
  mulsd  %xmm0,%xmm2
  divsd  %xmm1,%xmm2
  movsd  %xmm2,(%rdi,%rdx,8)
  lea    0x1(%rax),%edx
  cmp    %edx,%r8d
  jl     L52
  movsd  0x8(%rcx,%r10,1),%xmm2
  lea    0x2(%rax),%edx
  mulsd  %xmm0,%xmm2
  divsd  %xmm1,%xmm2
  movsd  %xmm2,0x8(%rdi,%r10,1)
  cmp    %r8d,%edx
  jg     L52
  mulsd  0x10(%rcx,%r10,1),%xmm0
  lea    0x3(%rax),%edx
  divsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rdi,%r10,1)
L52:
  cmp    %r9d,%edx
  jge    L70
L132:
  movslq %edx,%rax
  sub    %edx,%esi
  lea    0x0(,%rax,8),%r8
  lea    (%rdi,%r8,1),%r10
  lea    0x8(%rcx,%r8,1),%r11
  cmp    %r11,%r10
  je     L125
  cmp    $0x2,%esi
  je     L125
  sub    $0x1,%esi
  movapd %xmm1,%xmm4
  add    %rcx,%r8
  xor    %eax,%eax
  mov    %esi,%r9d
  movapd D87(%rip),%xmm2
  unpcklpd %xmm4,%xmm4
  shr    %r9d
  shl    $0x4,%r9
  nopl   0x0(%rax)
L49:
  movupd (%r8,%rax,1),%xmm0
  movapd %xmm2,%xmm3
  mulpd  %xmm2,%xmm0
  divpd  %xmm4,%xmm0
  subpd  %xmm0,%xmm3
  movups %xmm3,(%r10,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%r9
  jne    L49
  mov    %esi,%r8d
  and    $0xfffffffe,%r8d
  lea    (%r8,%rdx,1),%eax
  cmp    %r8d,%esi
  je     L128
  cltq
  movsd  D87(%rip),%xmm0
  movsd  (%rcx,%rax,8),%xmm2
  mulsd  %xmm0,%xmm2
  divsd  %xmm1,%xmm2
  subsd  %xmm2,%xmm0
  movsd  %xmm0,(%rdi,%rax,8)
  ret
  nopl   (%rax)
L53:
  je     L122
L128:
  ret
  nopl   0x0(%rax,%rax,1)
L92:
  movsd  D14(%rip),%xmm2
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L167:
  movsd  (%rcx,%rax,8),%xmm0
  lea    0x1(%rax),%edx
  mulsd  %xmm2,%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdi,%rax,8)
  add    $0x1,%rax
  cmp    %eax,%r8d
  jge    L167
  cmp    %r9d,%edx
  jl     L132
L70:
  ret
L125:
  movsd  D87(%rip),%xmm2
  nopl   0x0(%rax,%rax,1)
L46:
  movsd  (%rcx,%rax,8),%xmm0
  movapd %xmm2,%xmm3
  mulsd  %xmm2,%xmm0
  divsd  %xmm1,%xmm0
  subsd  %xmm0,%xmm3
  movsd  %xmm3,(%rdi,%rax,8)
  add    $0x1,%rax
  cmp    %eax,%r9d
  jg     L46
  ret
L122:
  movsd  D14(%rip),%xmm0
  mulsd  (%rcx),%xmm0
  mov    $0x1,%edx
  divsd  %xmm1,%xmm0
  movsd  %xmm0,(%rdi)
  jmp    L52
```

tool_calls: name: parse_data
arguments: data_tag: D58
type_infered: byte[16]
name: parse_data
arguments: data_tag: D14
type_infered: f64[2]
name: parse_data
arguments: data_tag: D1
type_infered: byte[16]
name: parse_data
arguments: data_tag: D53
type_infered: byte[16]
name: parse_data
arguments: data_tag: D87
type_infered: byte[16]

tool: {"D58": [0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00]}

tool: {"D14": [1.25,1.25]}

tool: {"D1": [0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00]}

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

tool: {"D87": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

assistant: ```c
void IC(double *u_init, double *x, int n_points, double c, double L) {
  int i;
  x[0] = 0;
  u_init[0] = 0;
  u_init[n_points - 1] = 0;
  for (i = 1; i < n_points - 1; i++) {
    x[i] = x[i - 1] + L / (n_points);
  }
  for (i = 0; i < n_points - 1; i++) {
    if (i <= 800) {
      u_init[i] = 1.25 * x[i] / L;
    }
    if (i > 800) {
      u_init[i] = 5 - (5 * x[i] / L);
    }
  }
}
```