user: What is the c source code of the assembly code below:

```asm
<foo>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  movq   %xmm4,%rbp
  movq   %xmm5,%r12
  movq   %xmm6,%r13
  movq   %xmm7,%r14
  mov    %rdi,%rbx
  ucomisd D119(%rip),%xmm0
  setp   %al
  mov    $0x1,%edx
  cmovne %edx,%eax
  test   %al,%al
  jne    L98
  ucomisd D93(%rip),%xmm1
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L98
  ucomisd D39(%rip),%xmm2
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L98
  ucomisd D81(%rip),%xmm3
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  je     L52
L98:
  mov    $0x0,%eax
  call   <abort@plt>
L52:
  movq   %rbp,%xmm4
  ucomisd D121(%rip),%xmm4
  setp   %al
  mov    $0x1,%edx
  cmovne %edx,%eax
  test   %al,%al
  jne    L95
  movq   %r12,%xmm6
  ucomisd D139(%rip),%xmm6
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L95
  movq   %r13,%xmm6
  ucomisd D79(%rip),%xmm6
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L95
  movq   %r14,%xmm1
  ucomisd D49(%rip),%xmm1
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  je     L23
L95:
  mov    $0x0,%eax
  call   <abort@plt>
L23:
  movss  0x30(%rsp),%xmm0
  ucomiss D116(%rip),%xmm0
  setp   %al
  mov    $0x1,%edx
  cmovne %edx,%eax
  test   %al,%al
  jne    L123
  movss  0x38(%rsp),%xmm0
  ucomiss D52(%rip),%xmm0
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L123
  movss  0x40(%rsp),%xmm0
  ucomiss D125(%rip),%xmm0
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  jne    L123
  movss  0x48(%rsp),%xmm0
  ucomiss D78(%rip),%xmm0
  setp   %al
  cmovne %edx,%eax
  test   %al,%al
  je     L128
L123:
  mov    $0x0,%eax
  call   <abort@plt>
L128:
  mov    $0x4,%edx
  lea    D20(%rip),%rsi
  mov    %rbx,%rdi
  call   <__builtin_memcmp@plt>
  test   %rax,%rax
  jne    L3
L77:
  mov    $0x4,%edx
  lea    D55(%rip),%rsi
  mov    %rbx,%rdi
  call   <__builtin_memcpy@plt>
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L3:
  mov    $0x0,%eax
  call   <abort@plt>
  jmp    L77
```

tool_calls: name: disassemble_data
arguments: data_tag: D119
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D93
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D39
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D81
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D121
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D139
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D79
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D49
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D116
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D52
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D125
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D78
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D20
data_type: string
name: disassemble_data
arguments: data_tag: D55
data_type: string

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

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

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

tool: {"D81": [0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40]}

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

tool: {"D139": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: {"D79": [0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x40]}

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

tool: {"D116": [0x00,0x00,0x20,0x41]}

tool: {"D52": [0x00,0x00,0x30,0x41]}

tool: {"D125": [0x00,0x00,0x40,0x41]}

tool: {"D78": [0x00,0x00,0x50,0x41]}

tool: D20: foo

tool: D55: bar

assistant: ```c
__attribute__((no)) void foo(double d0, double d1, double d2, double d3, double d4, double d5, double d6, double d7, float f0, float f1, float f2, float f3, char *p) {
  if (d0 != 0 || d1 != 1 || d2 != 2 || d3 != 3)
    abort();
  if (d4 != 4 || d5 != 5 || d6 != 6 || d7 != 7)
    abort();
  if (f0 != 10 || f1 != 11 || f2 != 12 || f3 != 13)
    abort();
  if (__builtin_memcmp(p, "foo", 4) != 0)
    abort();
  __builtin_memcpy(p, "bar", 4);
}
```