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

```asm
<cg_update_inf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x40(%rbp),%rcx
  movabs $0x6666666666666667,%rdx
  mov    %rcx,%rax
  imul   %rdx
  mov    %rdx,%rax
  sar    %rax
  mov    %rcx,%rsi
  sar    $0x3f,%rsi
  sub    %rsi,%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  sub    %rax,%rcx
  mov    %rcx,%rdx
  mov    %rdx,-0x10(%rbp)
  cmpq   $0x0,-0x38(%rbp)
  jne    L25
  movq   $0x0,-0x20(%rbp)
  jmp    L160
L114:
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L77
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L77:
  addq   $0x1,-0x20(%rbp)
L160:
  mov    -0x20(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jl     L114
  jmp    L86
L93:
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L191
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L191:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L34
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L34:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L182
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L182:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L40
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L40:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L159
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L159:
  addq   $0x1,-0x20(%rbp)
L86:
  mov    -0x20(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jl     L93
  jmp    L207
L25:
  movq   $0x0,-0x20(%rbp)
  jmp    L152
L111:
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movq   D266(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L24
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L24:
  addq   $0x1,-0x20(%rbp)
L152:
  mov    -0x20(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jl     L111
  jmp    L0
L107:
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movq   D266(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L8
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L8:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movq   D266(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L198
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L198:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movq   D266(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L47
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L47:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movq   D266(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L149
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L149:
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x20(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  -0x8(%rbp),%xmm0
  movq   D266(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L179
  movsd  -0x8(%rbp),%xmm0
  movq   D202(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
L179:
  addq   $0x1,-0x20(%rbp)
L0:
  mov    -0x20(%rbp),%rax
  cmp    -0x40(%rbp),%rax
  jl     L107
L207:
  movsd  -0x18(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D202
data_type: qword
name: disassemble_data
arguments: data_label: D266
data_type: byte[8]

tool: D202: 9223372036854775807

tool: {"D266": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

assistant: ```c
double cg_update_inf(double *gold, double *gnew, double *d, long int n) {
  long int i, n5;
  double s, t;
  t = ((double)0);
  n5 = n % 5;
  if (d == 0) {
    for (i = 0; i < n5; i++) {
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
    }
    for (; i < n;) {
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
    }
  } else {
    for (i = 0; i < n5; i++) {
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
    }
    for (; i < n;) {
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
      s = gnew[i];
      gold[i] = s;
      d[i] = -s;
      if (t < fabs(s))
        t = fabs(s);
      i++;
    }
  }
  return (t);
}
```