user: Translate the below assembly code into C programming language:

```asm
<lgamma>:
  endbr64
  sub    $0x18,%rsp
  movapd %xmm0,%xmm1
  movsd  D33(%rip),%xmm0
  movsd  D49(%rip),%xmm2
  movsd  D14(%rip),%xmm4
  movsd  %xmm1,(%rsp)
  addsd  %xmm1,%xmm0
  addsd  %xmm1,%xmm4
  divsd  %xmm0,%xmm2
  movsd  D24(%rip),%xmm0
  movapd %xmm0,%xmm3
  movsd  D131(%rip),%xmm0
  divsd  %xmm4,%xmm3
  movsd  D149(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  D178(%rip),%xmm2
  addsd  %xmm2,%xmm3
  movsd  D8(%rip),%xmm2
  addsd  %xmm1,%xmm2
  divsd  %xmm2,%xmm0
  subsd  %xmm0,%xmm3
  movsd  D164(%rip),%xmm0
  movapd %xmm0,%xmm2
  movsd  D44(%rip),%xmm0
  divsd  %xmm4,%xmm2
  movsd  D135(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  %xmm3,%xmm2
  movsd  D170(%rip),%xmm3
  addsd  %xmm1,%xmm3
  divsd  %xmm3,%xmm0
  subsd  %xmm0,%xmm2
  movsd  D22(%rip),%xmm0
  movapd %xmm0,%xmm3
  movsd  D13(%rip),%xmm0
  divsd  %xmm4,%xmm3
  addsd  %xmm2,%xmm3
  movsd  D129(%rip),%xmm2
  addsd  %xmm1,%xmm2
  divsd  %xmm2,%xmm0
  movsd  D110(%rip),%xmm2
  divsd  %xmm1,%xmm2
  subsd  %xmm0,%xmm3
  movapd %xmm2,%xmm0
  addsd  %xmm3,%xmm0
  addsd  D102(%rip),%xmm0
  call   <log@plt>
  movsd  (%rsp),%xmm1
  movsd  %xmm0,0x8(%rsp)
  movsd  D159(%rip),%xmm0
  addsd  %xmm1,%xmm0
  call   <log@plt>
  movsd  0x8(%rsp),%xmm2
  movsd  (%rsp),%xmm1
  subsd  D6(%rip),%xmm2
  movapd %xmm0,%xmm3
  movapd %xmm2,%xmm0
  subsd  %xmm1,%xmm0
  subsd  D122(%rip),%xmm1
  add    $0x18,%rsp
  mulsd  %xmm3,%xmm1
  addsd  %xmm1,%xmm0
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D33
type_infered: f32[2]
name: disassemble_data
arguments: tag: D49
type_infered: byte[8]
name: disassemble_data
arguments: tag: D14
type_infered: f32[2]
name: disassemble_data
arguments: tag: D24
type_infered: byte[8]
name: disassemble_data
arguments: tag: D131
type_infered: f64
name: disassemble_data
arguments: tag: D149
type_infered: f32[2]
name: disassemble_data
arguments: tag: D178
type_infered: f32[2]
name: disassemble_data
arguments: tag: D8
type_infered: f32[2]
name: disassemble_data
arguments: tag: D164
type_infered: f64
name: disassemble_data
arguments: tag: D44
type_infered: f64
name: disassemble_data
arguments: tag: D135
type_infered: f32[2]
name: disassemble_data
arguments: tag: D170
type_infered: f32[2]
name: disassemble_data
arguments: tag: D22
type_infered: f64
name: disassemble_data
arguments: tag: D13
type_infered: f64
name: disassemble_data
arguments: tag: D129
type_infered: f32[2]
name: disassemble_data
arguments: tag: D110
type_infered: f64
name: disassemble_data
arguments: tag: D102
type_infered: f64
name: disassemble_data
arguments: tag: D159
type_infered: f64
name: disassemble_data
arguments: tag: D6
type_infered: f64
name: disassemble_data
arguments: tag: D122
type_infered: f64

tool: {"D33": [0.0,2.4375]}

tool: {"D49": [0xc8,0xdb,0xe1,0x69,0xe5,0x45,0x86,0x3e]}

tool: {"D14": [0.0,2.375]}

tool: {"D24": [0xe3,0x7e,0x18,0x5c,0xc7,0xd5,0xe4,0x3e]}

tool: D131: 0.1385710331296526

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

tool: {"D178": [0.0,0.0]}

tool: {"D8": [0.0,2.3125]}

tool: D164: 12.50734324009056

tool: D44: 176.6150291498386

tool: {"D135": [0.0,2.0]}

tool: {"D170": [0.0,2.125]}

tool: D22: 771.3234287757674

tool: D13: 1259.139216722289

tool: {"D129": [0.0,1.875]}

tool: D110: 676.5203681218835

tool: D102: 0.9999999999995183

tool: D159: 6.5

tool: D6: 5.581061466795328

tool: D122: 0.5

assistant: ```c
double lgamma(double z) {
  double x = 0;
  x += 0.1659470187408462e-06 / (z + 7);
  x += 0.9934937113930748e-05 / (z + 6);
  x -= 0.1385710331296526 / (z + 5);
  x += 12.50734324009056 / (z + 4);
  x -= 176.6150291498386 / (z + 3);
  x += 771.3234287757674 / (z + 2);
  x -= 1259.139216722289 / (z + 1);
  x += 676.5203681218835 / z;
  x += 0.9999999999995183;
  return log(x) - 5.58106146679532777 - z + (z - 0.5) * log(z + 6.5);
}
```