user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  sub    $0x4a0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  lea    -0x3e0(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x78,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x4a0(%rbp)
  movss  D145(%rip),%xmm0
  movss  %xmm0,-0x49c(%rbp)
  movss  D141(%rip),%xmm0
  movss  %xmm0,-0x498(%rbp)
  movss  D217(%rip),%xmm0
  movss  %xmm0,-0x494(%rbp)
  movss  D100(%rip),%xmm0
  movss  %xmm0,-0x490(%rbp)
  movss  D141(%rip),%xmm0
  movss  %xmm0,-0x48c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x488(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x484(%rbp)
  movss  D239(%rip),%xmm0
  movss  %xmm0,-0x480(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x47c(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x478(%rbp)
  movss  D154(%rip),%xmm0
  movss  %xmm0,-0x474(%rbp)
  movss  D302(%rip),%xmm0
  movss  %xmm0,-0x470(%rbp)
  movss  D16(%rip),%xmm0
  movss  %xmm0,-0x46c(%rbp)
  movss  D263(%rip),%xmm0
  movss  %xmm0,-0x468(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x464(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x460(%rbp)
  movss  D229(%rip),%xmm0
  movss  %xmm0,-0x45c(%rbp)
  movss  D97(%rip),%xmm0
  movss  %xmm0,-0x458(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x454(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x450(%rbp)
  movss  D220(%rip),%xmm0
  movss  %xmm0,-0x44c(%rbp)
  movss  D159(%rip),%xmm0
  movss  %xmm0,-0x448(%rbp)
  movss  D16(%rip),%xmm0
  movss  %xmm0,-0x444(%rbp)
  movss  D302(%rip),%xmm0
  movss  %xmm0,-0x440(%rbp)
  movss  D382(%rip),%xmm0
  movss  %xmm0,-0x43c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x438(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x434(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x430(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x42c(%rbp)
  movss  D199(%rip),%xmm0
  movss  %xmm0,-0x428(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x424(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x420(%rbp)
  movss  D11(%rip),%xmm0
  movss  %xmm0,-0x41c(%rbp)
  movss  D1(%rip),%xmm0
  movss  %xmm0,-0x418(%rbp)
  movss  D1(%rip),%xmm0
  movss  %xmm0,-0x414(%rbp)
  movss  D100(%rip),%xmm0
  movss  %xmm0,-0x410(%rbp)
  movss  D141(%rip),%xmm0
  movss  %xmm0,-0x40c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x408(%rbp)
  movss  D100(%rip),%xmm0
  movss  %xmm0,-0x404(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x400(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x3fc(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x3f8(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x3f4(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x3f0(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x3ec(%rbp)
  movss  D187(%rip),%xmm0
  movss  %xmm0,-0x3e8(%rbp)
  movss  D6(%rip),%xmm0
  movss  %xmm0,-0x3e4(%rbp)
  lea    -0x3e0(%rbp),%rsi
  lea    -0x4a0(%rbp),%rax
  mov    $0x5,%ecx
  mov    $0x10,%edx
  mov    %rax,%rdi
  call   <cubic1@plt>
  lea    -0x3e0(%rbp),%rax
  lea    0x140(%rax),%rsi
  lea    -0x4a0(%rbp),%rax
  add    $0x40,%rax
  mov    $0x5,%ecx
  mov    $0x10,%edx
  mov    %rax,%rdi
  call   <cubic1@plt>
  lea    -0x3e0(%rbp),%rax
  lea    0x280(%rax),%rsi
  lea    -0x4a0(%rbp),%rax
  sub    $0xffffffffffffff80,%rax
  mov    $0x5,%ecx
  mov    $0x10,%edx
  mov    %rax,%rdi
  call   <cubic1@plt>
  movl   $0x0,-0x4a4(%rbp)
  jmp    L18
L88:
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0xa0,%rax
  movss  -0x3e0(%rbp,%rax,4),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L6
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0xa0,%rax
  movss  -0x3e0(%rbp,%rax,4),%xmm1
  movss  D423(%rip),%xmm0
  comiss %xmm1,%xmm0
  seta   %al
  jmp    L14
L6:
  mov    $0x1,%eax
L14:
  test   %al,%al
  je     L114
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0xa0,%rax
  movss  -0x3e0(%rbp,%rax,4),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L100
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0xa0,%rax
  mov    -0x3e0(%rbp,%rax,4),%eax
  jmp    L144
L100:
  mov    D274(%rip),%eax
  jmp    L144
L114:
  mov    D423(%rip),%eax
L144:
  movd   %eax,%xmm0
  call   <round@plt>
  mov    %eax,%r12d
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0x50,%rax
  movss  -0x3e0(%rbp,%rax,4),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L137
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0x50,%rax
  movss  -0x3e0(%rbp,%rax,4),%xmm1
  movss  D423(%rip),%xmm0
  comiss %xmm1,%xmm0
  seta   %al
  jmp    L76
L137:
  mov    $0x1,%eax
L76:
  test   %al,%al
  je     L139
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0x50,%rax
  movss  -0x3e0(%rbp,%rax,4),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L58
  mov    -0x4a4(%rbp),%eax
  cltq
  add    $0x50,%rax
  mov    -0x3e0(%rbp,%rax,4),%eax
  jmp    L78
L58:
  mov    D274(%rip),%eax
  jmp    L78
L139:
  mov    D423(%rip),%eax
L78:
  movd   %eax,%xmm0
  call   <round@plt>
  mov    %eax,%ebx
  mov    -0x4a4(%rbp),%eax
  cltq
  movss  -0x3e0(%rbp,%rax,4),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L110
  mov    -0x4a4(%rbp),%eax
  cltq
  movss  -0x3e0(%rbp,%rax,4),%xmm1
  movss  D423(%rip),%xmm0
  comiss %xmm1,%xmm0
  seta   %al
  jmp    L145
L110:
  mov    $0x1,%eax
L145:
  test   %al,%al
  je     L120
  mov    -0x4a4(%rbp),%eax
  cltq
  movss  -0x3e0(%rbp,%rax,4),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L61
  mov    -0x4a4(%rbp),%eax
  cltq
  mov    -0x3e0(%rbp,%rax,4),%eax
  jmp    L35
L61:
  mov    D274(%rip),%eax
  jmp    L35
L120:
  mov    D423(%rip),%eax
L35:
  movd   %eax,%xmm0
  call   <round@plt>
  mov    %r12d,%ecx
  mov    %ebx,%edx
  mov    %eax,%esi
  lea    D416(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  addl   $0x1,-0x4a4(%rbp)
L18:
  cmpl   $0x4f,-0x4a4(%rbp)
  jle    L88
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L10
  call   <__stack_chk_fail@plt>
L10:
  add    $0x4a0,%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D145
data_type: byte[4]
name: disassemble_data
arguments: data_label: D141
data_type: byte[4]
name: disassemble_data
arguments: data_label: D217
data_type: byte[4]
name: disassemble_data
arguments: data_label: D100
data_type: byte[4]
name: disassemble_data
arguments: data_label: D6
data_type: byte[4]
name: disassemble_data
arguments: data_label: D239
data_type: byte[4]
name: disassemble_data
arguments: data_label: D154
data_type: byte[4]
name: disassemble_data
arguments: data_label: D302
data_type: byte[4]
name: disassemble_data
arguments: data_label: D16
data_type: byte[4]
name: disassemble_data
arguments: data_label: D263
data_type: byte[4]
name: disassemble_data
arguments: data_label: D229
data_type: byte[4]
name: disassemble_data
arguments: data_label: D97
data_type: byte[4]
name: disassemble_data
arguments: data_label: D220
data_type: byte[4]
name: disassemble_data
arguments: data_label: D159
data_type: byte[4]
name: disassemble_data
arguments: data_label: D382
data_type: byte[4]
name: disassemble_data
arguments: data_label: D199
data_type: byte[4]
name: disassemble_data
arguments: data_label: D11
data_type: byte[4]
name: disassemble_data
arguments: data_label: D1
data_type: byte[4]
name: disassemble_data
arguments: data_label: D187
data_type: byte[4]
name: disassemble_data
arguments: data_label: D423
data_type: byte[4]
name: disassemble_data
arguments: data_label: D274
data_type: byte[4]
name: disassemble_data
arguments: data_label: D416
data_type: string

tool: {"D145": [0x00,0x00,0x80,0x40]}

tool: {"D141": [0x00,0x00,0x80,0x3f]}

tool: {"D217": [0x00,0x00,0x40,0x40]}

tool: {"D100": [0x00,0x00,0x00,0x40]}

tool: {"D6": [0x00,0x00,0x7d,0x43]}

tool: {"D239": [0x00,0x00,0x65,0x43]}

tool: {"D154": [0x00,0x00,0x54,0x43]}

tool: {"D302": [0x00,0x00,0x3c,0x43]}

tool: {"D16": [0x00,0x00,0x78,0x43]}

tool: {"D263": [0x00,0x00,0x18,0x43]}

tool: {"D229": [0x00,0x00,0x69,0x43]}

tool: {"D97": [0x00,0x00,0x1f,0x43]}

tool: {"D220": [0x00,0x00,0x45,0x43]}

tool: {"D159": [0x00,0x00,0x0e,0x43]}

tool: {"D382": [0x00,0x00,0x15,0x43]}

tool: {"D199": [0x00,0x00,0xa8,0x42]}

tool: {"D11": [0x00,0x00,0x67,0x43]}

tool: {"D1": [0x00,0x00,0x74,0x43]}

tool: {"D187": [0x00,0x00,0x46,0x43]}

tool: {"D423": [0x00,0x00,0x7f,0x43]}

tool: {"D274": [0x00,0x00,0x00,0x00]}

tool: D416: {0x%02x,0x%02x,0x%02x}


assistant: ```c
int main() {
  float smooth[3][80] = {};
  float orig[3][16] = {{0x00, 0x04, 0x01, 0x03, 0x02, 0x01, 0x00, 0xfd, 0xe5, 0xfd, 0xfd, 0xd4, 0xbc, 0xf8, 0x98, 0xfd}, {0x00, 0xe9, 0x9f, 0x00, 0xfd, 0xc5, 0x8e, 0xf8, 0xbc, 0x95, 0x00, 0x00, 0x00, 0x00, 0x54, 0xfd}, {0x00, 0xe7, 0xf4, 0xf4, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xc6, 0xfd}};
  cubic1(orig[0], smooth[0], 16, 5);
  cubic1(orig[1], smooth[1], 16, 5);
  cubic1(orig[2], smooth[2], 16, 5);
  for (int i = 0; i < 80; i++)
    printf("{0x%02x,0x%02x,0x%02x}\n", (uint8_t)round((((((smooth[0][i])) > ((0x00)) ? ((smooth[0][i])) : ((0x00)))) < ((0xff)) ? ((((smooth[0][i])) > ((0x00)) ? ((smooth[0][i])) : ((0x00)))) : ((0xff)))), (uint8_t)round((((((smooth[1][i])) > ((0x00)) ? ((smooth[1][i])) : ((0x00)))) < ((0xff)) ? ((((smooth[1][i])) > ((0x00)) ? ((smooth[1][i])) : ((0x00)))) : ((0xff)))), (uint8_t)round((((((smooth[2][i])) > ((0x00)) ? ((smooth[2][i])) : ((0x00)))) < ((0xff)) ? ((((smooth[2][i])) > ((0x00)) ? ((smooth[2][i])) : ((0x00)))) : ((0xff)))));
}
```