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

```asm
<conv_spherical_to_mercator>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  comiss D92(%rip),%xmm0
  ja     L38
  movaps %xmm0,%xmm2
  movss  D79(%rip),%xmm0
  comiss %xmm2,%xmm0
  jae    L38
  cvtss2sd %xmm1,%xmm1
  comisd D120(%rip),%xmm1
  ja     L38
  movsd  D114(%rip),%xmm0
  comisd %xmm1,%xmm0
  jae    L38
  mov    %rsi,%rbx
  mov    %rdx,%rbp
  mov    %edi,%r12d
  movss  %xmm2,0x1c(%rsp)
  movsd  D136(%rip),%xmm0
  add    $0x7,%r12d
  mulsd  %xmm1,%xmm0
  divsd  D146(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  mulss  D34(%rip),%xmm0
  cvtss2sd %xmm0,%xmm0
  addsd  D82(%rip),%xmm0
  call   <tan@plt>
  call   <log@plt>
  pxor   %xmm1,%xmm1
  movsd  D156(%rip),%xmm4
  cvtsi2sd %r12d,%xmm1
  movsd  %xmm0,0x10(%rsp)
  movapd %xmm4,%xmm0
  movsd  %xmm1,0x8(%rsp)
  call   <pow@plt>
  movss  0x1c(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm1
  cvtss2sd %xmm2,%xmm2
  mulsd  D136(%rip),%xmm2
  divsd  D146(%rip),%xmm2
  cvtsd2ss %xmm2,%xmm2
  cvtss2sd %xmm2,%xmm2
  mulsd  %xmm0,%xmm2
  divsd  D136(%rip),%xmm2
  cvttsd2si %xmm2,%eax
  mov    %eax,(%rbx)
  mov    D156(%rip),%rax
  movq   %rax,%xmm0
  call   <pow@plt>
  movsd  0x10(%rsp),%xmm3
  movapd %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm3,%xmm3
  cvtss2sd %xmm3,%xmm0
  mulsd  %xmm1,%xmm0
  divsd  D136(%rip),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,0x0(%rbp)
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nop
L38:
  mov    $0x14,%ecx
  lea    D96(%rip),%rdx
  lea    D25(%rip),%rsi
  xor    %eax,%eax
  lea    D77(%rip),%rdi
  call   <printf@plt>
  add    $0x20,%rsp
  mov    $0xf,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D92
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D79
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D120
type_infered: f64[2]
name: disassemble_data
arguments: data_tag: D114
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D136
type_infered: f64
name: disassemble_data
arguments: data_tag: D146
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D34
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D82
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D156
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D96
type_infered: string
name: disassemble_data
arguments: data_tag: D25
type_infered: string
name: disassemble_data
arguments: data_tag: D77
type_infered: string

tool: {"D92": [0x00,0x00,0x34,0x43]}

tool: {"D79": [0x00,0x00,0x34,0xc3]}

tool: {"D120": [85.05115,-85.05115]}

tool: {"D114": [0x30,0x4c,0xa6,0x0a,0x46,0x43,0x55,0xc0]}

tool: D136: 3.14159265358979

tool: {"D146": [0x00,0x00,0x00,0x00,0x00,0x80,0x66,0x40]}

tool: {"D34": [0x00,0x00,0x00,0x3f]}

tool: {"D82": [0x11,0x2d,0x44,0x54,0xfb,0x21,0xe9,0x3f]}

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

tool: D96: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/javellej/LocationFinder/refs/heads/master/src/coordinates.c

tool: D25: conv_spherical_to_mercator

tool: D77: Exception raised in '%s' : file %s line %d


assistant: ```c
int conv_spherical_to_mercator(float i_lng, float i_lat, int i_zoom, int *o_x, int *o_y) {
  int retCode;
  float lng_rd, lat_rd;
  float mer_x, mer_y;
  if ((i_lng > 180) || (i_lng <= -180) || (i_lat > 85.05115) || (i_lat <= -85.05115)) {
    do {
      retCode = (15);
      if (retCode) {
        printf("Exception raised in '%s' : file %s line %d\n", __func__, "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/javellej/LocationFinder/refs/heads/master/src/coordinates.c", 20);
        goto ERROR;
      }
    } while (0);
  }
  lng_rd = i_lng * 3.14159265358979 / 180;
  lat_rd = i_lat * 3.14159265358979 / 180;
  mer_x = lng_rd;
  mer_y = log(tan(3.14159265358979 / 4 + lat_rd / 2));
  *o_x = (int)(mer_x * pow(2, i_zoom + 7) / 3.14159265358979);
  *o_y = (int)(mer_y * pow(2, i_zoom + 7) / 3.14159265358979);
  return 0;
ERROR:
  return retCode;
}
```