user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<conv_spherical_to_mercator>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  comiss D81(%rip),%xmm0
  ja     L8
  movaps %xmm0,%xmm2
  movss  D133(%rip),%xmm0
  comiss %xmm2,%xmm0
  jae    L8
  cvtss2sd %xmm1,%xmm1
  comisd D63(%rip),%xmm1
  ja     L8
  movsd  D142(%rip),%xmm0
  comisd %xmm1,%xmm0
  jae    L8
  mov    %rsi,%rbx
  mov    %rdx,%rbp
  mov    %edi,%r12d
  movss  %xmm2,0x1c(%rsp)
  movsd  D80(%rip),%xmm0
  add    $0x7,%r12d
  mulsd  %xmm1,%xmm0
  divsd  D103(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  mulss  D147(%rip),%xmm0
  cvtss2sd %xmm0,%xmm0
  addsd  D77(%rip),%xmm0
  call   <tan@plt>
  call   <log@plt>
  pxor   %xmm1,%xmm1
  movsd  D28(%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  D80(%rip),%xmm2
  divsd  D103(%rip),%xmm2
  cvtsd2ss %xmm2,%xmm2
  cvtss2sd %xmm2,%xmm2
  mulsd  %xmm0,%xmm2
  divsd  D80(%rip),%xmm2
  cvttsd2si %xmm2,%eax
  mov    %eax,(%rbx)
  mov    D28(%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  D80(%rip),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,0x0(%rbp)
  add    $0x20,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nop
L8:
  mov    $0x14,%ecx
  lea    D11(%rip),%rdx
  lea    D119(%rip),%rsi
  xor    %eax,%eax
  lea    D146(%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: D81
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D133
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D63
type_infered: f64[2]
name: disassemble_data
arguments: data_tag: D142
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D80
type_infered: f64
name: disassemble_data
arguments: data_tag: D103
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D147
type_infered: byte[4]
name: disassemble_data
arguments: data_tag: D77
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D28
type_infered: byte[8]
name: disassemble_data
arguments: data_tag: D11
type_infered: string
name: disassemble_data
arguments: data_tag: D119
type_infered: string
name: disassemble_data
arguments: data_tag: D146
type_infered: string

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

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

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

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

tool: D80: 3.14159265358979

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

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

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

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

tool: D11: /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: D119: conv_spherical_to_mercator

tool: D146: 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;
}
```