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     L76
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L53
L76:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L53:
  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     L6
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L3
L6:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L3:
  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     L81
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L104
L81:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L104:
  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     L88
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  js     L25
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L9
L25:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L9:
  movsd  D14(%rip),%xmm1
  mulsd  %xmm0,%xmm1
  mov    -0x8(%rbp),%rax
  test   %rax,%rax
  js     L113
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L89
L113:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L89:
  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     L21
  movsd  D0(%rip),%xmm0
  jmp    L61
L21:
  pxor   %xmm0,%xmm0
L61:
  mov    -0x20(%rbp),%rax
  add    $0x18,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L88:
  nop
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D14
datatype: f64
name: unpack_data
arguments: data_label: D0
datatype: byte[8]

tool: D14: 100

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