user: Converte this assembly snippet into its equivalent C code:

```asm
<calc_point>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  xor    %r13d,%r13d
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  xor    %ebp,%ebp
  push   %rbx
  mov    %edx,%ebx
  sub    $0x18,%rsp
  mov    %edi,0x4(%rsp)
  mov    %r13d,%edi
  mov    %esi,0x8(%rsp)
  mov    %edx,0xc(%rsp)
  call   <mpf_init@plt>
  mov    %r12d,%edi
  call   <mpf_init@plt>
  mov    %ebp,%edi
  call   <mpf_init@plt>
  xor    %edi,%edi
  call   <mpf_init@plt>
  mov    %ebp,%edi
  call   <mpf_init@plt>
  xor    %edi,%edi
  call   <mpf_init@plt>
  xor    %edi,%edi
  call   <mpf_init@plt>
  pxor   %xmm0,%xmm0
  mov    %r13d,%edi
  call   <mpf_set_d@plt>
  pxor   %xmm0,%xmm0
  mov    %r12d,%edi
  call   <mpf_set_d@plt>
  test   %ebx,%ebx
  mov    $0x0,%ebx
  jg     L27
  jmp    L37
  nopl   0x0(%rax)
L6:
  add    $0x1,%ebx
  cmp    %ebx,0xc(%rsp)
  je     L37
L27:
  xor    %r13d,%r13d
  xor    %r15d,%r15d
  xor    %r12d,%r12d
  xor    %r14d,%r14d
  mov    %r13d,%edx
  mov    %r13d,%esi
  mov    %r15d,%edi
  xor    %ebp,%ebp
  call   <mpf_mul@plt>
  mov    %r12d,%edx
  mov    %r12d,%esi
  mov    %r14d,%edi
  call   <mpf_mul@plt>
  xor    %r8d,%r8d
  mov    %r14d,%edx
  mov    %r15d,%esi
  mov    %r8d,%edi
  mov    %r8d,(%rsp)
  call   <mpf_sub@plt>
  mov    (%rsp),%r8d
  mov    0x4(%rsp),%edx
  mov    %r8d,%esi
  mov    %r8d,%edi
  call   <mpf_add@plt>
  mov    $0x2,%edx
  mov    %r13d,%esi
  mov    %ebp,%edi
  call   <mpf_mul_ui@plt>
  mov    %r12d,%edx
  mov    %ebp,%esi
  mov    %ebp,%edi
  call   <mpf_mul@plt>
  mov    0x8(%rsp),%edx
  mov    %ebp,%esi
  mov    %ebp,%edi
  call   <mpf_add@plt>
  mov    (%rsp),%esi
  mov    %r13d,%edi
  call   <mpf_set@plt>
  mov    %ebp,%esi
  mov    %r12d,%edi
  call   <mpf_set@plt>
  mov    %ebp,%edi
  mov    %r14d,%edx
  mov    %r15d,%esi
  call   <mpf_add@plt>
  mov    D5(%rip),%rax
  mov    %ebp,%edi
  movq   %rax,%xmm0
  call   <mpf_cmp_d@plt>
  test   %eax,%eax
  jle    L6
L37:
  xor    %edi,%edi
  xor    %ebp,%ebp
  call   <mpf_clear@plt>
  xor    %edi,%edi
  call   <mpf_clear@plt>
  mov    %ebp,%edi
  call   <mpf_clear@plt>
  xor    %edi,%edi
  call   <mpf_clear@plt>
  mov    %ebp,%edi
  call   <mpf_clear@plt>
  xor    %edi,%edi
  call   <mpf_clear@plt>
  xor    %edi,%edi
  call   <mpf_clear@plt>
  add    $0x18,%rsp
  mov    %ebx,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D5
type: f32[2]

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

assistant: ```c
int calc_point(mpf_t cx, mpf_t cy, int iterations) {
  mpf_t zx, zy, zxn, zyn, zx2, zy2, zx2_fast, t1;
  double er = 2.0;
  int i, k;
  mpf_init(zx);
  mpf_init(zy);
  mpf_init(t1);
  mpf_init(zxn);
  mpf_init(zyn);
  mpf_init(zx2);
  mpf_init(zy2);
  mpf_set_d(zx, 0.0);
  mpf_set_d(zy, 0.0);
  for (i = 0; i < iterations; i++) {
    mpf_mul(zx2, zx, zx);
    mpf_mul(zy2, zy, zy);
    mpf_sub(zxn, zx2, zy2);
    mpf_add(zxn, zxn, cx);
    mpf_mul_ui(zyn, zx, 2);
    mpf_mul(zyn, zyn, zy);
    mpf_add(zyn, zyn, cy);
    mpf_set(zx, zxn);
    mpf_set(zy, zyn);
    mpf_add(t1, zx2, zy2);
    k = mpf_cmp_d(t1, er * er);
    if (k > 0) {
      break;
    }
  }
  mpf_clear(zx);
  mpf_clear(zy);
  mpf_clear(t1);
  mpf_clear(zxn);
  mpf_clear(zyn);
  mpf_clear(zx2);
  mpf_clear(zy2);
  return i;
}
```