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

```asm
<PMatT92>:
  endbr64
  push   %rbp
  movapd %xmm0,%xmm3
  mov    %rdi,%rbp
  sub    $0x30,%rsp
  movsd  D69(%rip),%xmm4
  subsd  %xmm2,%xmm4
  movapd %xmm4,%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D86(%rip),%xmm0
  divsd  %xmm0,%xmm3
  movsd  D36(%rip),%xmm0
  comisd %xmm3,%xmm0
  ja     L21
L24:
  movsd  D51(%rip),%xmm0
  comisd %xmm3,%xmm0
  ja     L14
  movq   D87(%rip),%xmm6
  movapd %xmm3,%xmm0
  movsd  %xmm2,0x28(%rsp)
  movsd  %xmm4,0x18(%rsp)
  xorpd  %xmm6,%xmm0
  movsd  %xmm1,0x20(%rsp)
  movsd  %xmm3,0x10(%rsp)
  call   <exp@plt>
  movsd  0x20(%rsp),%xmm1
  addsd  D69(%rip),%xmm1
  movq   D87(%rip),%xmm6
  movsd  0x10(%rsp),%xmm3
  movsd  %xmm0,0x8(%rsp)
  movsd  D86(%rip),%xmm0
  xorpd  %xmm6,%xmm1
  mulsd  %xmm3,%xmm1
  mulsd  %xmm1,%xmm0
  call   <exp@plt>
  movsd  0x18(%rsp),%xmm4
  xor    %eax,%eax
  movsd  D86(%rip),%xmm3
  movsd  0x28(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm5
  mulsd  %xmm4,%xmm3
  movsd  D69(%rip),%xmm1
  mulsd  %xmm0,%xmm4
  movapd %xmm2,%xmm7
  mulsd  D86(%rip),%xmm2
  addsd  %xmm5,%xmm1
  mulsd  %xmm0,%xmm7
  movapd %xmm3,%xmm6
  mulsd  %xmm1,%xmm6
  mulsd  %xmm2,%xmm1
  movapd %xmm6,%xmm8
  subsd  %xmm4,%xmm6
  movapd %xmm1,%xmm0
  addsd  %xmm7,%xmm8
  subsd  %xmm7,%xmm1
  addsd  %xmm4,%xmm0
  movsd  %xmm6,0x70(%rbp)
  movsd  %xmm8,0x50(%rbp)
  movsd  %xmm0,0x78(%rbp)
  movsd  %xmm0,0x28(%rbp)
  movsd  D69(%rip),%xmm0
  movsd  %xmm8,0x0(%rbp)
  subsd  %xmm5,%xmm0
  movsd  %xmm6,0x20(%rbp)
  movsd  %xmm1,0x58(%rbp)
  movsd  %xmm1,0x8(%rbp)
  mulsd  %xmm0,%xmm3
  mulsd  %xmm0,%xmm2
  movsd  %xmm3,0x30(%rbp)
  movsd  %xmm3,0x60(%rbp)
  movsd  %xmm3,0x40(%rbp)
  movsd  %xmm3,0x10(%rbp)
  movsd  %xmm2,0x48(%rbp)
  movsd  %xmm2,0x18(%rbp)
  movsd  %xmm2,0x68(%rbp)
  movsd  %xmm2,0x38(%rbp)
  add    $0x30,%rsp
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L14:
  mov    %rbp,%rdi
  mov    $0x4,%esi
  call   <identity@plt>
  add    $0x30,%rsp
  xor    %eax,%eax
  pop    %rbp
  ret
  nopl   (%rax)
L21:
  movapd %xmm3,%xmm0
  lea    D28(%rip),%rdi
  movsd  %xmm2,0x20(%rsp)
  movsd  %xmm1,0x18(%rsp)
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  call   <printf@plt>
  movsd  0x20(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm3
  jmp    L24
```

tool_calls: name: parse_data
arguments: data_tag: D69
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D86
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D36
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D51
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D87
type_guessed: byte[8]
name: parse_data
arguments: data_tag: D28
type_guessed: string

tool: {"D69": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D86": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f]}

tool: {"D36": [0x9a,0x99,0x99,0x99,0x99,0x99,0xb9,0xbf]}

tool: {"D51": [0x30,0x05,0x8e,0xe4,0x2e,0xff,0x2b,0x2b]}

tool: {"D87": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: D28: 
t = %.5f in PMatT92

assistant: ```c
int PMatT92(double P[], double t, double kappa, double pGC) {
  double e1, e2;
  t /= (pGC * (1 - pGC) * kappa + .5);
  if (t < -0.1)
    printf("\nt = %.5f in PMatT92", t);
  if (t < 1e-100) {
    identity(P, 4);
    return (0);
  }
  e1 = exp(-t);
  e2 = exp(-(kappa + 1) * t / 2);
  P[0 * 4 + 0] = P[2 * 4 + 2] = (1 - pGC) / 2 * (1 + e1) + pGC * e2;
  P[1 * 4 + 1] = P[3 * 4 + 3] = pGC / 2 * (1 + e1) + (1 - pGC) * e2;
  P[1 * 4 + 0] = P[3 * 4 + 2] = (1 - pGC) / 2 * (1 + e1) - (1 - pGC) * e2;
  P[0 * 4 + 1] = P[2 * 4 + 3] = pGC / 2 * (1 + e1) - pGC * e2;
  P[0 * 4 + 2] = P[2 * 4 + 0] = P[3 * 4 + 0] = P[1 * 4 + 2] = (1 - pGC) / 2 * (1 - e1);
  P[1 * 4 + 3] = P[3 * 4 + 1] = P[0 * 4 + 3] = P[2 * 4 + 1] = pGC / 2 * (1 - e1);
  return (0);
}
```