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

```asm
<set_part_record>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8d,-0x34(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rdx
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  imul   %rdx,%rax
  test   %rax,%rax
  js     L32
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L38
L32:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L38:
  mov    -0x20(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x30(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rdx),%rcx
  sub    %rcx,%rax
  mov    %rax,%rdx
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  imul   %rdx,%rax
  mov    -0x20(%rbp),%rdx
  lea    0x8(%rdx),%rcx
  test   %rax,%rax
  js     L17
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L64
L17:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L64:
  movsd  %xmm0,(%rcx)
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  imul   %rdx,%rax
  mov    -0x20(%rbp),%rdx
  lea    0x10(%rdx),%rcx
  test   %rax,%rax
  js     L116
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L31
L116:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L31:
  movsd  %xmm0,(%rcx)
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x30(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rdx),%rdx
  sub    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x30(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rdx),%rdx
  sub    %rdx,%rax
  mov    %rax,%rcx
  mov    -0x30(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  add    %rcx,%rax
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L83
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  js     L52
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L21
L52:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L21:
  movsd  D19(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  mov    -0x8(%rbp),%rax
  test   %rax,%rax
  js     L9
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L45
L9:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L45:
  divsd  %xmm0,%xmm1
  mov    -0x10(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    $0x0,%edx
  divq   -0x8(%rbp)
  mov    %rdx,%rax
  test   %rax,%rax
  je     L109
  movsd  D11(%rip),%xmm0
  jmp    L110
L109:
  pxor   %xmm0,%xmm0
L110:
  mov    -0x20(%rbp),%rax
  add    $0x18,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L83:
  nop
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D19
type: f64
name: extract_symbolic_data
arguments: data_label: D11
type: byte[8]

tool: D19: 100

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

assistant: ```c
void set_part_record(struct module *mod, double st_array[], unsigned long long pre_array[], unsigned long long cur_array[], int inter) {
  st_array[0] = cur_array[3] * cur_array[0];
  st_array[1] = (cur_array[2] - cur_array[1]) * cur_array[0];
  st_array[2] = cur_array[2] * cur_array[0];
  unsigned long long used = cur_array[2] - cur_array[1];
  unsigned long long nonroot_total = cur_array[2] - cur_array[1] + cur_array[3];
  if (nonroot_total != 0)
    st_array[3] = (used * 100.0) / nonroot_total + ((used * 100) % nonroot_total != 0);
}
```