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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  D127(%rip),%xmm0
  movss  %xmm0,-0xa0(%rbp)
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <__builtin_nan@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x9c(%rbp)
  movss  D163(%rip),%xmm0
  movss  %xmm0,-0x98(%rbp)
  mov    $0x0,%eax
  call   <__builtin_inf@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x94(%rbp)
  movss  D77(%rip),%xmm0
  movss  %xmm0,-0x90(%rbp)
  movss  D68(%rip),%xmm0
  movss  %xmm0,-0x8c(%rbp)
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <__builtin_nan@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x84(%rbp)
  movsd  D154(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <__builtin_nan@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  D125(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  mov    $0x0,%eax
  call   <__builtin_inf@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  D166(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  D111(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <__builtin_nan@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x38(%rbp)
  lea    -0x90(%rbp),%rdx
  lea    -0xa0(%rbp),%rcx
  lea    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_fmaxf@plt>
  movss  -0x80(%rbp),%xmm0
  ucomiss D127(%rip),%xmm0
  jp     L166
  ucomiss D127(%rip),%xmm0
  jne    L166
  movss  -0x7c(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L166
  movss  -0x78(%rbp),%xmm0
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm0,%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L166
  movss  -0x74(%rbp),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  call   <__builtin_isinf@plt>
  test   %rax,%rax
  jne    L7
L166:
  mov    $0x0,%eax
  call   <abort@plt>
L7:
  lea    -0x90(%rbp),%rdx
  lea    -0xa0(%rbp),%rcx
  lea    -0x80(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_fminf@plt>
  movss  -0x80(%rbp),%xmm0
  movss  D77(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L172
  movss  D77(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  jne    L172
  movss  -0x7c(%rbp),%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd %xmm0,%xmm5
  movq   %xmm5,%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L172
  movss  -0x78(%rbp),%xmm0
  pxor   %xmm6,%xmm6
  cvtss2sd %xmm0,%xmm6
  movq   %xmm6,%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L172
  movss  -0x74(%rbp),%xmm0
  pxor   %xmm7,%xmm7
  cvtss2sd %xmm0,%xmm7
  movq   %xmm7,%rax
  movq   %rax,%xmm0
  call   <__builtin_isinf@plt>
  test   %rax,%rax
  je     L104
L172:
  mov    $0x0,%eax
  call   <abort@plt>
L104:
  lea    -0x50(%rbp),%rdx
  lea    -0x70(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_fmax@plt>
  lea    -0x50(%rbp),%rax
  lea    0x10(%rax),%rdx
  lea    -0x70(%rbp),%rax
  lea    0x10(%rax),%rcx
  lea    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_fmax@plt>
  movsd  -0x30(%rbp),%xmm0
  ucomisd D154(%rip),%xmm0
  jp     L60
  ucomisd D154(%rip),%xmm0
  jne    L60
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L60
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L60
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <__builtin_isinf@plt>
  test   %rax,%rax
  jne    L62
L60:
  mov    $0x0,%eax
  call   <abort@plt>
L62:
  lea    -0x50(%rbp),%rdx
  lea    -0x70(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_fmin@plt>
  lea    -0x50(%rbp),%rax
  lea    0x10(%rax),%rdx
  lea    -0x70(%rbp),%rax
  lea    0x10(%rax),%rcx
  lea    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_fmin@plt>
  movsd  -0x30(%rbp),%xmm0
  movsd  D166(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L179
  movsd  D166(%rip),%xmm1
  ucomisd %xmm1,%xmm0
  jne    L179
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L179
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <__builtin_isnan@plt>
  test   %rax,%rax
  jne    L179
  mov    -0x18(%rbp),%rax
  movq   %rax,%xmm0
  call   <__builtin_isinf@plt>
  test   %rax,%rax
  je     L139
L179:
  mov    $0x0,%eax
  call   <abort@plt>
L139:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L66
  call   <__stack_chk_fail@plt>
L66:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D127
datatype: byte[4]
name: unpack_data
arguments: tag: D54
datatype: string
name: unpack_data
arguments: tag: D163
datatype: byte[4]
name: unpack_data
arguments: tag: D77
datatype: byte[4]
name: unpack_data
arguments: tag: D68
datatype: byte[4]
name: unpack_data
arguments: tag: D154
datatype: byte[8]
name: unpack_data
arguments: tag: D125
datatype: byte[8]
name: unpack_data
arguments: tag: D166
datatype: byte[8]
name: unpack_data
arguments: tag: D111
datatype: byte[8]

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

tool: 

tool: {"D163": [0x00,0x00,0x40,0xc0]}

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

tool: {"D68": [0x00,0x00,0xe0,0x40]}

tool: {"D154": [0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40]}

tool: {"D125": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xc0]}

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

tool: {"D111": [0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x40]}

assistant: ```c
int main() {
  float a_f[4] = {4, __builtin_nan(""), -3, __builtin_inf()};
  float b_f[4] = {1, 7, __builtin_nan(""), 0};
  float r_f[4];
  double a_d[4] = {4, __builtin_nan(""), -3, __builtin_inf()};
  double b_d[4] = {1, 7, __builtin_nan(""), 0};
  double r_d[4];
  test_fmaxf(r_f, a_f, b_f);
  if (r_f[0] != 4 || __builtin_isnan(r_f[1]) || __builtin_isnan(r_f[2]) || !__builtin_isinf(r_f[3]))
    abort();
  test_fminf(r_f, a_f, b_f);
  if (r_f[0] != 1 || __builtin_isnan(r_f[1]) || __builtin_isnan(r_f[2]) || __builtin_isinf(r_f[3]))
    abort();
  test_fmax(r_d, a_d, b_d);
  test_fmax(&r_d[2], &a_d[2], &b_d[2]);
  if (r_d[0] != 4 || __builtin_isnan(r_d[1]) || __builtin_isnan(r_d[2]) || !__builtin_isinf(r_d[3]))
    abort();
  test_fmin(r_d, a_d, b_d);
  test_fmin(&r_d[2], &a_d[2], &b_d[2]);
  if (r_d[0] != 1 || __builtin_isnan(r_d[1]) || __builtin_isnan(r_d[2]) || __builtin_isinf(r_d[3]))
    abort();
  return 0;
}
```