user: Demonstrate the C code that generates the assembly output below:

```asm
<evals2>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %rdx,-0x88(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movl   $0x0,-0x70(%rbp)
  jmp    L97
L32:
  mov    -0x70(%rbp),%eax
  mov    %eax,-0x6c(%rbp)
  jmp    L158
L88:
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rax,%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  movq   D36(%rip),%xmm1
  andpd  %xmm1,%xmm0
  comisd -0x68(%rbp),%xmm0
  jbe    L71
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rax,%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  movq   D36(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
L71:
  addl   $0x1,-0x6c(%rbp)
L158:
  cmpl   $0x1,-0x6c(%rbp)
  jle    L88
  addl   $0x1,-0x70(%rbp)
L97:
  cmpl   $0x1,-0x70(%rbp)
  jle    L32
  pxor   %xmm0,%xmm0
  ucomisd -0x68(%rbp),%xmm0
  jp     L1
  pxor   %xmm0,%xmm0
  ucomisd -0x68(%rbp),%xmm0
  je     L73
L1:
  movl   $0x0,-0x70(%rbp)
  jmp    L162
L117:
  movl   $0x0,-0x6c(%rbp)
  jmp    L152
L87:
  mov    -0x70(%rbp),%eax
  cltq
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rax,%rdx
  mov    -0x6c(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  divsd  -0x68(%rbp),%xmm0
  mov    -0x6c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x70(%rbp),%eax
  cltq
  add    %rax,%rax
  add    %rdx,%rax
  movsd  %xmm0,-0x40(%rbp,%rax,8)
  addl   $0x1,-0x6c(%rbp)
L152:
  cmpl   $0x1,-0x6c(%rbp)
  jle    L87
  addl   $0x1,-0x70(%rbp)
L162:
  cmpl   $0x1,-0x70(%rbp)
  jle    L117
L73:
  movsd  -0x40(%rbp),%xmm0
  movq   D22(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  -0x28(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x40(%rbp),%xmm1
  movsd  -0x28(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x30(%rbp),%xmm2
  movsd  -0x30(%rbp),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x60(%rbp),%xmm0
  jbe    L172
  mov    $0xffffffff,%ebx
  jmp    L29
L172:
  mov    $0x1,%ebx
L29:
  movsd  -0x60(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  -0x58(%rbp),%xmm2
  movsd  D30(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  imul   %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movapd %xmm0,%xmm1
  addsd  -0x60(%rbp),%xmm1
  movsd  D35(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x58(%rbp),%xmm0
  divsd  -0x50(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x48(%rbp),%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x48(%rbp),%xmm0
  comisd -0x50(%rbp),%xmm0
  jbe    L38
  movsd  -0x50(%rbp),%xmm0
  jmp    L41
L38:
  movsd  -0x48(%rbp),%xmm0
L41:
  mov    -0x80(%rbp),%rax
  movsd  %xmm0,(%rax)
  movsd  -0x50(%rbp),%xmm0
  comisd -0x48(%rbp),%xmm0
  jbe    L79
  movsd  -0x50(%rbp),%xmm0
  jmp    L39
L79:
  movsd  -0x48(%rbp),%xmm0
L39:
  mov    -0x88(%rbp),%rax
  movsd  %xmm0,(%rax)
  nop
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L150
  call   <__stack_chk_fail@plt>
L150:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D36
data_type: qword
name: retrieve_data
arguments: tag: D22
data_type: f32[2]
name: retrieve_data
arguments: tag: D30
data_type: f32[2]
name: retrieve_data
arguments: tag: D35
data_type: f32[2]

tool: D36: 9223372036854775807

tool: {"D22": [0.0,-0.0]}

tool: {"D30": [0.0,2.25]}

tool: {"D35": [0.0,-1.75]}

assistant: ```c
void evals2(double H[2][2], double *eval1, double *eval2) {
  double M[2][2];
  double b, c;
  double root1, root2;
  double xmax;
  int i, j;
  M[0][0] = M[1][0] = M[0][1] = M[1][1] = 0.0;
  xmax = 0.0;
  for (i = 0; i < 2; i++) {
    for (j = i; j < 2; j++) {
      if (fabs(H[i][j]) > xmax) {
        xmax = fabs(H[i][j]);
      }
    }
  }
  if (xmax != 0) {
    for (i = 0; i < 2; i++) {
      for (j = 0; j < 2; j++) {
        M[i][j] = H[i][j] / xmax;
      }
    }
  }
  b = -M[0][0] - M[1][1];
  c = M[0][0] * M[1][1] - M[1][0] * M[1][0];
  root1 = -.5 * (b + ((b) < 0 ? -1 : 1) * sqrt(b * b - 4 * c));
  root2 = c / root1;
  root1 *= xmax;
  root2 *= xmax;
  *eval1 = ((root1) < (root2) ? (root1) : (root2));
  *eval2 = ((root1) > (root2) ? (root1) : (root2));
}
```