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

```asm
<PeriLargeCalcSide>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %edi,%eax
  mov    %edx,%edi
  mov    %ecx,%edx
  mov    %fs:0x28,%rcx
  mov    %rcx,0x48(%rsp)
  xor    %ecx,%ecx
  movsd  D6(%rip),%xmm1
  movsd  %xmm1,(%rsp)
  movsd  %xmm1,0x8(%rsp)
  movsd  D92(%rip),%xmm0
  movsd  %xmm0,0x10(%rsp)
  movsd  %xmm0,0x18(%rsp)
  movsd  %xmm1,0x20(%rsp)
  movsd  %xmm0,0x28(%rsp)
  movsd  %xmm0,0x30(%rsp)
  mov    D80(%rip),%rbx
  mov    %rbx,0x38(%rsp)
  cmp    %eax,%edi
  setl   %r10b
  cmp    %r9d,%eax
  setle  %r11b
  cmp    %edx,%eax
  setl   %cl
  test   %r11b,%cl
  je     L112
  mov    D147(%rip),%rbx
  test   %r10b,%r10b
  jne    L190
L112:
  mov    D44(%rip),%rbx
L190:
  cmp    %r8d,%eax
  setle  %cl
  cmp    %esi,%eax
  setl   %bpl
  test   %cl,%bpl
  je     L209
  test   %r10b,%r10b
  jne    L73
L209:
  cmp    %eax,%edi
  jle    L252
  cmp    %edx,%eax
  jle    L4
  cmp    %r9d,%eax
  jge    L4
  movq   %rbx,%xmm3
  subsd  D72(%rip),%xmm3
  movq   %xmm3,%rbx
L225:
  cmp    %esi,%edx
  mov    %esi,%ecx
  cmovge %edx,%ecx
  cmp    %ecx,%eax
  jl     L212
  movq   %rbx,%xmm4
  subsd  D92(%rip),%xmm4
  movq   %xmm4,%rbx
L146:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L208
  movq   %rbx,%xmm0
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  ret
L73:
  movq   %rbx,%xmm2
  subsd  D79(%rip),%xmm2
  movq   %xmm2,%rbx
L261:
  cmp    %edx,%eax
  setle  %al
  movzbl %al,%eax
  movzbl %cl,%ecx
  add    %ecx,%ecx
  lea    (%rcx,%rax,4),%eax
  lea    (%r11,%rax,1),%rax
  and    $0x1f,%eax
  movsd  (%rsp,%rax,8),%xmm0
  pxor   %xmm1,%xmm1
  ucomisd %xmm0,%xmm1
  ja     L250
  sqrtsd %xmm0,%xmm0
L134:
  movq   %rbx,%xmm5
  addsd  %xmm0,%xmm5
  movq   %xmm5,%rbx
  jmp    L146
L4:
  cmp    %r8d,%esi
  mov    %r8d,%ecx
  cmovle %esi,%ecx
  cmp    %eax,%ecx
  jle    L225
  cmp    %r9d,%edx
  mov    %r9d,%ecx
  cmovle %edx,%ecx
  cmp    %ecx,%eax
  jge    L44
  movq   %rbx,%xmm7
  subsd  D17(%rip),%xmm7
  movq   %xmm7,%rbx
  jmp    L225
L44:
  movq   %rbx,%xmm5
  subsd  D55(%rip),%xmm5
  movq   %xmm5,%rbx
  jmp    L225
L212:
  cmp    %r8d,%r9d
  mov    %r8d,%ecx
  cmovge %r9d,%ecx
  cmp    %ecx,%eax
  jl     L247
  movq   %rbx,%xmm6
  subsd  D92(%rip),%xmm6
  movq   %xmm6,%rbx
  jmp    L146
L247:
  cmp    %esi,%r9d
  cmovl  %esi,%r9d
  cmp    %r9d,%eax
  jl     L197
  movq   %rbx,%xmm2
  subsd  D92(%rip),%xmm2
  movq   %xmm2,%rbx
  jmp    L146
L197:
  cmp    %r8d,%edx
  cmovge %edx,%r8d
  cmp    %r8d,%eax
  jl     L146
  movq   %rbx,%xmm3
  subsd  D92(%rip),%xmm3
  movq   %xmm3,%rbx
  jmp    L146
L252:
  je     L146
  cmp    %esi,%eax
  jle    L261
  cmp    %r9d,%edx
  cmovle %edx,%r9d
  cmp    %r9d,%eax
  jg     L204
  movq   %rbx,%xmm6
  addsd  D110(%rip),%xmm6
  movq   %xmm6,%rbx
  jmp    L146
L204:
  movq   %rbx,%xmm7
  addsd  D92(%rip),%xmm7
  movq   %xmm7,%rbx
  jmp    L146
L250:
  call   <sqrt@plt>
  jmp    L134
L208:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D6
data_type: f64
name: retrieve_data
arguments: data_tag: D92
data_type: f64
name: retrieve_data
arguments: data_tag: D80
data_type: f64
name: retrieve_data
arguments: data_tag: D147
data_type: byte[8]
name: retrieve_data
arguments: data_tag: D44
data_type: f64
name: retrieve_data
arguments: data_tag: D72
data_type: byte[8]
name: retrieve_data
arguments: data_tag: D79
data_type: byte[8]
name: retrieve_data
arguments: data_tag: D17
data_type: byte[8]
name: retrieve_data
arguments: data_tag: D55
data_type: byte[8]
name: retrieve_data
arguments: data_tag: D110
data_type: byte[8]

tool: D6: 4

tool: D92: 2

tool: D80: 2.7017787186

tool: {"D147": [0x66,0x88,0x01,0x33,0xc3,0xbe,0xe2,0xbf]}

tool: D44: 0

tool: {"D72": [0x66,0x88,0x01,0x33,0xc3,0xbe,0xf2,0x3f]}

tool: {"D79": [0x66,0x88,0x01,0x33,0xc3,0xbe,0xe2,0x3f]}

tool: {"D17": [0x06,0x5b,0x61,0xa1,0xa1,0x4c,0xfa,0x3f]}

tool: {"D55": [0xcd,0x3b,0x7f,0x66,0x9e,0xa0,0x06,0x40]}

tool: {"D110": [0xcd,0x3b,0x7f,0x66,0x9e,0xa0,0xf6,0x3f]}

assistant: ```c
double PeriLargeCalcSide(int h, int a, int b, int c, int d, int e) {
  double addarray[8] = {4.0, 4.0, 2.0, 2.0, 4.0, 2.0, 2.0, 2.7017787186};
  double l = 0.0;
  if ((b < h) && (c > h) && (e >= h))
    l += sqrt(2.0) - 2.0;
  if ((b < h) && (a > h) && (d >= h))
    l += sqrt(2.0) - 2.0;
  if (b > h) {
    if ((c < h) && (e > h))
      l += sqrt(8.0) - 4.0;
    else if ((a > h) && (d > h)) {
      if ((c > h) && (e > h))
        l -= sqrt(20.0) - sqrt(8.0);
      else
        l -= sqrt(8.0);
    }
    if ((a <= h) && (c <= h))
      l -= 2.0;
    else if ((d <= h) && (e <= h))
      l -= 2.0;
    else if ((a <= h) && (e <= h))
      l -= 2.0;
    else if ((c <= h) && (d <= h))
      l -= 2.0;
  }
  if (b >= h)
    return (l);
  else {
    if (a < h) {
      if ((c >= h) && (e >= h))
        return (l + sqrt(2.0));
      return (l + 2.0);
    } else
      return (l + sqrt(addarray[(((c) >= (h) ? 1 : 0) << 2) + (((d) >= (h) ? 1 : 0) << 1) + ((e) >= (h) ? 1 : 0)]));
  }
}
```