user: Please show me the C implementation that matches the assembly code listed below:

```asm
<fzz_test3>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    $0x1,%esi
  mov    $0x2,%edi
  call   <fzz_init@plt>
  lea    D56(%rip),%rdx
  mov    $0x3,%esi
  mov    $0x0,%edi
  call   <fzz_initInputFcns@plt>
  lea    D60(%rip),%rdx
  mov    $0x3,%esi
  mov    $0x1,%edi
  call   <fzz_initInputFcns@plt>
  lea    D23(%rip),%rdx
  mov    $0x3,%esi
  mov    $0x0,%edi
  call   <fzz_initOutputFcns@plt>
  lea    D147(%rip),%r12
  mov    %r12,%rdx
  pxor   %xmm2,%xmm2
  mov    D370(%rip),%rax
  movq   %rax,%xmm1
  mov    D378(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <fzz_setInputFcn@plt>
  lea    D284(%rip),%rbp
  mov    %rbp,%rdx
  mov    D365(%rip),%rax
  movq   %rax,%xmm2
  pxor   %xmm1,%xmm1
  mov    D370(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x0,%esi
  mov    $0x1,%edi
  call   <fzz_setInputFcn@plt>
  lea    D166(%rip),%rbx
  mov    %rbx,%rdx
  mov    D283(%rip),%rax
  movq   %rax,%xmm2
  mov    D365(%rip),%rax
  movq   %rax,%xmm1
  pxor   %xmm0,%xmm0
  mov    $0x0,%esi
  mov    $0x2,%edi
  call   <fzz_setInputFcn@plt>
  mov    %r12,%rdx
  pxor   %xmm2,%xmm2
  mov    D370(%rip),%rax
  movq   %rax,%xmm1
  mov    D378(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%esi
  mov    $0x0,%edi
  call   <fzz_setInputFcn@plt>
  mov    %rbp,%rdx
  mov    D365(%rip),%rax
  movq   %rax,%xmm2
  pxor   %xmm1,%xmm1
  mov    D370(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <fzz_setInputFcn@plt>
  mov    %rbx,%rdx
  mov    D283(%rip),%rax
  movq   %rax,%xmm2
  mov    D365(%rip),%rax
  movq   %rax,%xmm1
  pxor   %xmm0,%xmm0
  mov    $0x1,%esi
  mov    $0x2,%edi
  call   <fzz_setInputFcn@plt>
  mov    %r12,%rdx
  pxor   %xmm2,%xmm2
  mov    D370(%rip),%rax
  movq   %rax,%xmm1
  mov    D378(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <fzz_setOutputFcn@plt>
  mov    %rbp,%rdx
  mov    D365(%rip),%rax
  movq   %rax,%xmm2
  pxor   %xmm1,%xmm1
  mov    D370(%rip),%rax
  movq   %rax,%xmm0
  mov    $0x0,%esi
  mov    $0x1,%edi
  call   <fzz_setOutputFcn@plt>
  mov    %rbx,%rdx
  mov    D283(%rip),%rax
  movq   %rax,%xmm2
  mov    D365(%rip),%rax
  movq   %rax,%xmm1
  pxor   %xmm0,%xmm0
  mov    $0x0,%esi
  mov    $0x2,%edi
  call   <fzz_setOutputFcn@plt>
  lea    D208(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D47(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D238(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D106(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D225(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D429(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D186(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D120(%rip),%rdi
  call   <fzz_addRule@plt>
  lea    D91(%rip),%rdi
  call   <fzz_addRule@plt>
  mov    $0x0,%eax
  call   <fzz_printSystem@plt>
  lea    D197(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x9,%ebp
  movabs $0xbff0000000000000,%rbx
  lea    D396(%rip),%r12
L6:
  movq   %rbx,%xmm0
  mov    %r12,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movq   %rbx,%xmm4
  addsd  D42(%rip),%xmm4
  movq   %xmm4,%rbx
  sub    $0x1,%ebp
  jne    L6
  lea    D372(%rip),%rdi
  call   <puts@plt>
  mov    $0x9,%r14d
  mov    D370(%rip),%r12
  lea    D396(%rip),%r13
L8:
  movq   %r12,%xmm0
  mov    %r13,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x9,%ebp
  mov    D370(%rip),%rbx
L5:
  movq   %r12,%xmm0
  mov    $0x0,%edi
  call   <fzz_setInput@plt>
  movq   %rbx,%xmm0
  mov    $0x1,%edi
  call   <fzz_setInput@plt>
  mov    $0x0,%eax
  call   <fzz_calculateOutput@plt>
  mov    $0x0,%edi
  call   <fzz_getOutput@plt>
  mov    %r13,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movq   %rbx,%xmm3
  addsd  D42(%rip),%xmm3
  movq   %xmm3,%rbx
  sub    $0x1,%ebp
  jne    L5
  mov    $0xa,%edi
  call   <putchar@plt>
  movq   %r12,%xmm5
  addsd  D42(%rip),%xmm5
  movq   %xmm5,%r12
  sub    $0x1,%r14d
  jne    L8
  lea    D319(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  call   <fzz_deinit@plt>
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
```

tool_calls: name: read_data
arguments: tag: D56
type_guessed: string
name: read_data
arguments: tag: D60
type_guessed: string
name: read_data
arguments: tag: D23
type_guessed: string
name: read_data
arguments: tag: D147
type_guessed: string
name: read_data
arguments: tag: D370
type_guessed: f32[2]
name: read_data
arguments: tag: D378
type_guessed: f32[2]
name: read_data
arguments: tag: D284
type_guessed: string
name: read_data
arguments: tag: D365
type_guessed: f64
name: read_data
arguments: tag: D166
type_guessed: string
name: read_data
arguments: tag: D283
type_guessed: f64
name: read_data
arguments: tag: D208
type_guessed: string
name: read_data
arguments: tag: D47
type_guessed: string
name: read_data
arguments: tag: D238
type_guessed: string
name: read_data
arguments: tag: D106
type_guessed: string
name: read_data
arguments: tag: D225
type_guessed: string
name: read_data
arguments: tag: D429
type_guessed: string
name: read_data
arguments: tag: D186
type_guessed: string
name: read_data
arguments: tag: D120
type_guessed: string
name: read_data
arguments: tag: D91
type_guessed: string
name: read_data
arguments: tag: D197
type_guessed: string
name: read_data
arguments: tag: D396
type_guessed: string
name: read_data
arguments: tag: D42
type_guessed: f64
name: read_data
arguments: tag: D372
type_guessed: string
name: read_data
arguments: tag: D319
type_guessed: string

tool: D56: input1

tool: D60: input2

tool: D23: output

tool: D147: negative

tool: {"D370": [0.0,-1.875]}

tool: {"D378": [0.0,-2.0]}

tool: D284: zero

tool: D365: 1

tool: D166: pozitive

tool: D283: 2

tool: D208: if input1 is negative and input2 is negative then output is negative

tool: D47: if input1 is negative and input2 is zero then output is negative

tool: D238: if input1 is negative and input2 is pozitive then output is zero

tool: D106: if input1 is zero and input2 is negative then output is negative

tool: D225: if input1 is zero and input2 is zero then output is zero

tool: D429: if input1 is zero and input2 is pozitive then output is pozitive

tool: D186: if input1 is pozitive and input2 is negative then output is zero

tool: D120: if input1 is pozitive and input2 is zero then output is pozitive

tool: D91: if input1 is pozitive and input2 is pozitive then output is pozitive

tool: D197: 
Calculated outputs:
 x1\x2 |

tool: D396:  %+1.2f |

tool: D42: 0.25

tool: D372: 
--------------------------------------------------------------------------------

tool: D319: --------------------------------------------------------------------------------

assistant: ```c
void fzz_test3() {
  double x1 = 0;
  double x2 = 0;
  fzz_init(2, 1);
  fzz_initInputFcns(0, 3, "input1");
  fzz_initInputFcns(1, 3, "input2");
  fzz_initOutputFcns(0, 3, "output");
  fzz_setInputFcn(0, 0, -2.0, -1.0, 0.0, "negative");
  fzz_setInputFcn(1, 0, -1.0, 0.0, 1.0, "zero");
  fzz_setInputFcn(2, 0, 0.0, 1.0, 2.0, "pozitive");
  fzz_setInputFcn(0, 1, -2.0, -1.0, 0.0, "negative");
  fzz_setInputFcn(1, 1, -1.0, 0.0, 1.0, "zero");
  fzz_setInputFcn(2, 1, 0.0, 1.0, 2.0, "pozitive");
  fzz_setOutputFcn(0, 0, -2.0, -1.0, 0.0, "negative");
  fzz_setOutputFcn(1, 0, -1.0, 0.0, 1.0, "zero");
  fzz_setOutputFcn(2, 0, 0.0, 1.0, 2.0, "pozitive");
  fzz_addRule("if input1 is negative and input2 is negative then output is negative");
  fzz_addRule("if input1 is negative and input2 is zero then output is negative");
  fzz_addRule("if input1 is negative and input2 is pozitive then output is zero");
  fzz_addRule("if input1 is zero and input2 is negative then output is negative");
  fzz_addRule("if input1 is zero and input2 is zero then output is zero");
  fzz_addRule("if input1 is zero and input2 is pozitive then output is pozitive");
  fzz_addRule("if input1 is pozitive and input2 is negative then output is zero");
  fzz_addRule("if input1 is pozitive and input2 is zero then output is pozitive");
  fzz_addRule("if input1 is pozitive and input2 is pozitive then output is pozitive");
  fzz_printSystem();
  printf("\nCalculated outputs:\n x1\\x2 |");
  for (x2 = -1; x2 < 1.1; x2 += 0.25) {
    printf(" %+1.2f |", x2);
  }
  printf("\n--------------------------------------------------------------------------------\n");
  for (x1 = -1; x1 < 1.1; x1 += 0.25) {
    printf(" %+1.2f |", x1);
    for (x2 = -1; x2 < 1.1; x2 += 0.25) {
      fzz_setInput(0, x1);
      fzz_setInput(1, x2);
      fzz_calculateOutput();
      printf(" %+1.2f |", fzz_getOutput(0));
    }
    printf("\n");
  }
  printf("--------------------------------------------------------------------------------\n");
  fzz_deinit();
}
```