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

```asm
<tgamma>:
  endbr64
  sub    $0x28,%rsp
  movapd %xmm0,%xmm1
  movsd  D136(%rip),%xmm0
  movsd  D70(%rip),%xmm4
  movsd  D181(%rip),%xmm3
  movsd  D28(%rip),%xmm5
  mov    $0x6,%edi
  subsd  %xmm0,%xmm1
  movapd %xmm0,%xmm2
  movsd  D8(%rip),%xmm0
  addsd  %xmm1,%xmm2
  addsd  %xmm1,%xmm4
  movsd  %xmm1,0x10(%rsp)
  addsd  %xmm1,%xmm3
  divsd  %xmm2,%xmm0
  movsd  D211(%rip),%xmm2
  addsd  %xmm3,%xmm5
  movsd  %xmm5,(%rsp)
  divsd  %xmm4,%xmm2
  movsd  D23(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  D85(%rip),%xmm0
  addsd  %xmm0,%xmm2
  movsd  D167(%rip),%xmm0
  divsd  %xmm4,%xmm0
  movsd  D217(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  %xmm2,%xmm0
  movsd  D65(%rip),%xmm2
  divsd  %xmm4,%xmm2
  movsd  D50(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  %xmm0,%xmm2
  movsd  D89(%rip),%xmm0
  divsd  %xmm4,%xmm0
  movsd  D177(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  %xmm2,%xmm0
  movsd  D208(%rip),%xmm2
  divsd  %xmm4,%xmm2
  movsd  D166(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  %xmm0,%xmm2
  movsd  D164(%rip),%xmm0
  divsd  %xmm4,%xmm0
  movsd  D182(%rip),%xmm4
  addsd  %xmm1,%xmm4
  addsd  %xmm2,%xmm0
  movsd  D22(%rip),%xmm2
  divsd  %xmm4,%xmm2
  addsd  %xmm0,%xmm2
  movsd  D178(%rip),%xmm0
  divsd  %xmm3,%xmm0
  movapd %xmm1,%xmm3
  addsd  D150(%rip),%xmm3
  addsd  %xmm2,%xmm0
  movsd  D142(%rip),%xmm2
  divsd  %xmm3,%xmm2
  addsd  %xmm0,%xmm2
  movsd  %xmm2,0x18(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm1
  addsd  D28(%rip),%xmm1
  movsd  %xmm0,0x8(%rsp)
  movsd  (%rsp),%xmm0
  call   <pow@plt>
  movsd  (%rsp),%xmm6
  xorpd  D197(%rip),%xmm6
  movsd  %xmm0,0x10(%rsp)
  movapd %xmm6,%xmm0
  call   <exp@plt>
  movsd  0x8(%rsp),%xmm7
  mulsd  0x10(%rsp),%xmm7
  movapd %xmm0,%xmm1
  movapd %xmm7,%xmm0
  mulsd  %xmm1,%xmm0
  mulsd  0x18(%rsp),%xmm0
  add    $0x28,%rsp
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D136
data_type: f64
name: parse_data
arguments: data_tag: D70
data_type: f32[2]
name: parse_data
arguments: data_tag: D181
data_type: f32[2]
name: parse_data
arguments: data_tag: D28
data_type: f64
name: parse_data
arguments: data_tag: D8
data_type: f64
name: parse_data
arguments: data_tag: D211
data_type: byte[8]
name: parse_data
arguments: data_tag: D23
data_type: f32[2]
name: parse_data
arguments: data_tag: D85
data_type: f64
name: parse_data
arguments: data_tag: D167
data_type: f64
name: parse_data
arguments: data_tag: D217
data_type: f32[2]
name: parse_data
arguments: data_tag: D65
data_type: byte[8]
name: parse_data
arguments: data_tag: D50
data_type: f32[2]
name: parse_data
arguments: data_tag: D89
data_type: f64
name: parse_data
arguments: data_tag: D177
data_type: f32[2]
name: parse_data
arguments: data_tag: D208
data_type: byte[8]
name: parse_data
arguments: data_tag: D166
data_type: f32[2]
name: parse_data
arguments: data_tag: D164
data_type: f64
name: parse_data
arguments: data_tag: D182
data_type: f32[2]
name: parse_data
arguments: data_tag: D22
data_type: byte[8]
name: parse_data
arguments: data_tag: D178
data_type: byte[8]
name: parse_data
arguments: data_tag: D150
data_type: f32[2]
name: parse_data
arguments: data_tag: D142
data_type: byte[8]
name: parse_data
arguments: data_tag: D197
data_type: f32[4]

tool: D136: 1

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

tool: {"D181": [0.0,2.53125]}

tool: D28: 0.5

tool: D8: 5716.400188274341

tool: {"D211": [0x4e,0x54,0x3e,0xf2,0xa6,0xef,0xcc,0xc0]}

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

tool: D85: 1.0000000000000002

tool: D167: 14291.492776574785

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

tool: {"D65": [0x4f,0xfa,0x05,0x04,0x29,0xcc,0xb8,0xc0]}

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

tool: D89: 1301.608286058322

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

tool: {"D208": [0xcc,0x5c,0xf6,0x23,0x4f,0x0b,0x5b,0xc0]}

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

tool: D164: 2.605696505611756

tool: {"D182": [0.0,2.5]}

tool: {"D22": [0xac,0x59,0x13,0xdc,0x0d,0x68,0x7e,0xbf]}

tool: {"D178": [0xa3,0x8c,0x9f,0x98,0xe6,0xe7,0x6c,0x3e]}

tool: {"D150": [0.0,2.5625]}

tool: {"D142": [0x56,0x10,0xb1,0xe5,0xeb,0x47,0x31,0xbe]}

tool: {"D197": [0.0,-0.0,0.0,0.0]}

assistant: ```c
double tgamma(double z) {
  static unsigned int c = 9;
  static double lanczos_coefficients[] = {1.000000000000000174663, 5716.400188274341379136, -14815.30426768413909044, 14291.49277657478554025, -6348.160217641458813289, 1301.608286058321874105, -108.1767053514369634679, 2.605696505611755827729, -0.7423452510201416151527e-2, 0.5384136432509564062961e-7, -0.4023533141268236372067e-8};
  double return_val = 0.0;
  z -= 1.0;
  double temp = z + c + 0.5;
  double A = lanczos_coefficients[0];
  int i = 0;
  for (i = 1; i < c + 2; ++i) {
    A += lanczos_coefficients[i] / (z + i);
  }
  return_val = sqrt(2 * 3.14159265358979323846) * pow(temp, z + 0.5) * exp(-temp) * A;
  return return_val;
}
```