user: What would the C source look like for the assembly code provided here:

```asm
<calc_operation>:
  endbr64
  test   %rdi,%rdi
  je     L77
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  movq   %xmm0,%r12
  movq   %xmm1,%rbp
  lea    D93(%rip),%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L144
  movq   %r12,%xmm0
  movq   %rbp,%xmm5
  addsd  %xmm5,%xmm0
L88:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L144:
  lea    D76(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L34
  movq   %r12,%xmm0
  movq   %rbp,%xmm6
  subsd  %xmm6,%xmm0
  jmp    L88
L34:
  lea    D112(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L1
  movq   %r12,%xmm0
  movq   %rbp,%xmm7
  mulsd  %xmm7,%xmm0
  jmp    L88
L1:
  lea    D41(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L207
  movq   %rbp,%xmm4
  ucomisd D30(%rip),%xmm4
  jp     L95
  pxor   %xmm0,%xmm0
  je     L88
L95:
  movq   %r12,%xmm0
  movq   %rbp,%xmm2
  divsd  %xmm2,%xmm0
  jmp    L88
L207:
  lea    D2(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L204
  movq   %rbp,%xmm2
  ucomisd D30(%rip),%xmm2
  jp     L61
  pxor   %xmm0,%xmm0
  je     L88
L61:
  movq   %r12,%xmm2
  movq   %rbp,%xmm3
  divsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
  movsd  D54(%rip),%xmm3
  movapd %xmm2,%xmm1
  andpd  %xmm3,%xmm1
  movsd  D119(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L88
  cvttsd2si %xmm2,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm0
  cmpnlesd %xmm2,%xmm0
  movsd  D101(%rip),%xmm4
  andpd  %xmm4,%xmm0
  subsd  %xmm0,%xmm1
  andnpd %xmm2,%xmm3
  orpd   %xmm3,%xmm1
  movapd %xmm1,%xmm0
  jmp    L88
L204:
  lea    D44(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L198
  movq   %rbp,%xmm3
  ucomisd D30(%rip),%xmm3
  jp     L111
  pxor   %xmm0,%xmm0
  je     L88
L111:
  movq   %rbp,%xmm1
  movq   %r12,%xmm0
  call   <fmod@plt>
  jmp    L88
L198:
  lea    D26(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  pxor   %xmm0,%xmm0
  test   %rax,%rax
  jne    L88
  movq   %rbp,%xmm1
  movq   %r12,%xmm0
  call   <pow@plt>
  jmp    L88
L77:
  pxor   %xmm0,%xmm0
  ret
```

tool_calls: name: unpack_data
arguments: tag: D93
type_infered: string
name: unpack_data
arguments: tag: D76
type_infered: string
name: unpack_data
arguments: tag: D112
type_infered: string
name: unpack_data
arguments: tag: D41
type_infered: string
name: unpack_data
arguments: tag: D30
type_infered: byte[8]
name: unpack_data
arguments: tag: D2
type_infered: string
name: unpack_data
arguments: tag: D54
type_infered: byte[8]
name: unpack_data
arguments: tag: D119
type_infered: byte[8]
name: unpack_data
arguments: tag: D101
type_infered: byte[8]
name: unpack_data
arguments: tag: D44
type_infered: string
name: unpack_data
arguments: tag: D26
type_infered: string

tool: D93: +

tool: D76: -

tool: D112: *

tool: D41: /

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

tool: D2: //

tool: {"D54": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f]}

tool: {"D119": [0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x43]}

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

tool: D44: %

tool: D26: **

assistant: ```c
double calc_operation(const char *oper, double value1, double value2) {
  if (!oper)
    return 0;
  if (strcmp(oper, "+") == 0)
    return value1 + value2;
  if (strcmp(oper, "-") == 0)
    return value1 - value2;
  if (strcmp(oper, "*") == 0)
    return value1 * value2;
  if (strcmp(oper, "/") == 0)
    return (value2 != 0) ? value1 / value2 : 0;
  if (strcmp(oper, "//") == 0)
    return (value2 != 0) ? floor(value1 / value2) : 0;
  if (strcmp(oper, "%") == 0)
    return (value2 != 0) ? fmod(value1, value2) : 0;
  if (strcmp(oper, "**") == 0)
    return pow(value1, value2);
  return 0;
}
```