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

```asm
<Lab2XYZ>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  movsd  %xmm0,-0x28(%rbp)
  movsd  %xmm1,-0x30(%rbp)
  movsd  %xmm2,-0x38(%rbp)
  mov    %rdi,-0x40(%rbp)
  mov    %rsi,-0x48(%rbp)
  mov    %rdx,-0x50(%rbp)
  movsd  -0x28(%rbp),%xmm1
  movsd  D94(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D92(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  comisd D70(%rip),%xmm0
  jbe    L13
  movsd  D180(%rip),%xmm0
  mov    -0x18(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    -0x48(%rbp),%rdx
  mov    %rax,(%rdx)
  jmp    L5
L13:
  movsd  -0x18(%rbp),%xmm0
  movsd  D101(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  D162(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  movsd  %xmm0,(%rax)
L5:
  movsd  -0x30(%rbp),%xmm0
  movsd  D125(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  -0x18(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  comisd D70(%rip),%xmm0
  jbe    L52
  movsd  D180(%rip),%xmm0
  mov    -0x10(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    -0x40(%rbp),%rdx
  mov    %rax,(%rdx)
  jmp    L31
L52:
  movsd  -0x10(%rbp),%xmm0
  movsd  D101(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  D162(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
L31:
  movsd  -0x38(%rbp),%xmm0
  movsd  D96(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  -0x18(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x8(%rbp),%xmm0
  comisd D70(%rip),%xmm0
  jbe    L34
  movsd  D180(%rip),%xmm0
  mov    -0x8(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    -0x50(%rbp),%rdx
  mov    %rax,(%rdx)
  jmp    L6
L34:
  movsd  -0x8(%rbp),%xmm0
  movsd  D101(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  D162(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movsd  %xmm0,(%rax)
L6:
  mov    -0x40(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D154(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x48(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D171(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x48(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x50(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D65(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x50(%rbp),%rax
  movsd  %xmm0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D94
data_type: f64
name: parse_data
arguments: data_tag: D92
data_type: f64
name: parse_data
arguments: data_tag: D70
data_type: f64[2]
name: parse_data
arguments: data_tag: D180
data_type: f64
name: parse_data
arguments: data_tag: D101
data_type: byte[8]
name: parse_data
arguments: data_tag: D162
data_type: f64
name: parse_data
arguments: data_tag: D125
data_type: f64
name: parse_data
arguments: data_tag: D96
data_type: f64
name: parse_data
arguments: data_tag: D154
data_type: byte[8]
name: parse_data
arguments: data_tag: D171
data_type: f64
name: parse_data
arguments: data_tag: D65
data_type: byte[8]

tool: D94: 16

tool: D92: 116

tool: {"D70": [0.206893,3.0]}

tool: D180: 3

tool: {"D101": [0x96,0x7b,0x1a,0x61,0xb9,0xa7,0xc1,0x3f]}

tool: D162: 7.787

tool: D125: 500

tool: D96: 200

tool: {"D154": [0xb9,0xa5,0xd5,0x90,0xb8,0x4b,0x6e,0x40]}

tool: D171: 255

tool: {"D65": [0xdf,0xc3,0x25,0xc7,0x1d,0x5a,0x71,0x40]}

assistant: ```c
void Lab2XYZ(double L, double a, double b, double *X, double *Y, double *Z) {
  double fX, fY, fZ;
  fY = (L + 16.0) / 116.0;
  if (fY > 0.206893)
    *Y = pow(fY, 3.0);
  else
    *Y = (fY - 16.0 / 116.0) / 7.787;
  fX = a / 500.0 + fY;
  if (fX > 0.206893)
    *X = pow(fX, 3.0);
  else
    *X = (fX - 16.0 / 116.0) / 7.787;
  fZ = fY - b / 200.0;
  if (fZ > 0.206893)
    *Z = pow(fZ, 3.0);
  else
    *Z = (fZ - 16.0 / 116.0) / 7.787;
  (*X) *= (0.950456 * 255.0);
  (*Y) *= 255.0;
  (*Z) *= (1.088754 * 255.0);
}
```