user: 请将以下的汇编代码转换成C语言代码：

```asm
<conv_spherical_to_mercator>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  movss  %xmm0,0x4(%rsp)
  comiss D144(%rip),%xmm0
  ja     L8
  movaps %xmm0,%xmm3
  mov    %edi,%ebx
  mov    %rsi,%r12
  mov    %rdx,%rbp
  movss  D40(%rip),%xmm0
  comiss %xmm3,%xmm0
  jae    L8
  cvtss2sd %xmm1,%xmm1
  comisd D46(%rip),%xmm1
  ja     L8
  movsd  D0(%rip),%xmm0
  comisd %xmm1,%xmm0
  jae    L8
  mulsd  D28(%rip),%xmm1
  divsd  D10(%rip),%xmm1
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm1,%xmm0
  mulss  D31(%rip),%xmm0
  cvtss2sd %xmm0,%xmm0
  addsd  D56(%rip),%xmm0
  call   <tan@plt>
  call   <log@plt>
  movsd  %xmm0,0x8(%rsp)
  add    $0x7,%ebx
  pxor   %xmm4,%xmm4
  cvtsi2sd %ebx,%xmm4
  movq   %xmm4,%rbx
  movapd %xmm4,%xmm1
  mov    D136(%rip),%rax
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd 0x4(%rsp),%xmm1
  mulsd  D28(%rip),%xmm1
  divsd  D10(%rip),%xmm1
  cvtsd2ss %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  divsd  D28(%rip),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,(%r12)
  movq   %rbx,%xmm1
  mov    D136(%rip),%rax
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm2
  pxor   %xmm1,%xmm1
  cvtsd2ss 0x8(%rsp),%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm0
  mulsd  %xmm2,%xmm0
  divsd  D28(%rip),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,0x0(%rbp)
  mov    $0x0,%eax
  jmp    L34
L8:
  mov    $0x14,%ecx
  lea    D52(%rip),%rdx
  lea    D30(%rip),%rsi
  lea    D74(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xf,%eax
L34:
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D144
data_type: byte[4]
name: unpack_data
arguments: data_tag: D40
data_type: byte[4]
name: unpack_data
arguments: data_tag: D46
data_type: f64[2]
name: unpack_data
arguments: data_tag: D0
data_type: byte[8]
name: unpack_data
arguments: data_tag: D28
data_type: f64
name: unpack_data
arguments: data_tag: D10
data_type: byte[8]
name: unpack_data
arguments: data_tag: D31
data_type: byte[4]
name: unpack_data
arguments: data_tag: D56
data_type: byte[8]
name: unpack_data
arguments: data_tag: D136
data_type: byte[8]
name: unpack_data
arguments: data_tag: D52
data_type: string
name: unpack_data
arguments: data_tag: D30
data_type: string
name: unpack_data
arguments: data_tag: D74
data_type: string

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

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

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

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

tool: D28: 3.14159265358979

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

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

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

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

tool: D52: /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: D30: conv_spherical_to_mercator

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