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

```asm
<Lab2RGB>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  mov    %rdi,%r12
  mov    %rsi,%rbp
  mov    %rdx,%rbx
  movss  (%rsi),%xmm6
  movss  %xmm6,0x8(%rsp)
  movss  (%rdx),%xmm7
  movss  %xmm7,0xc(%rsp)
  pxor   %xmm0,%xmm0
  cvtss2sd (%rdi),%xmm0
  comisd D366(%rip),%xmm0
  jbe    L97
  addsd  D251(%rip),%xmm0
  divsd  D273(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movaps %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  mulss  %xmm0,%xmm1
  movss  %xmm1,0x4(%rsp)
L117:
  movss  0x4(%rsp),%xmm6
  comiss D140(%rip),%xmm6
  ja     L87
  movss  0x4(%rsp),%xmm0
  mulss  D135(%rip),%xmm0
  addss  D24(%rip),%xmm0
L148:
  cvtss2sd %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd 0x8(%rsp),%xmm1
  divsd  D175(%rip),%xmm1
  addsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd 0xc(%rsp),%xmm2
  divsd  D250(%rip),%xmm2
  subsd  %xmm2,%xmm0
  cvtsd2ss %xmm0,%xmm0
  comiss D232(%rip),%xmm1
  jbe    L158
  movaps %xmm1,%xmm2
  mulss  D359(%rip),%xmm2
  mulss  %xmm1,%xmm2
  mulss  %xmm2,%xmm1
L131:
  comiss D232(%rip),%xmm0
  jbe    L80
  movaps %xmm0,%xmm2
  mulss  D270(%rip),%xmm2
  mulss  %xmm0,%xmm2
  mulss  %xmm2,%xmm0
L45:
  cvtss2sd %xmm1,%xmm1
  pxor   %xmm3,%xmm3
  cvtss2sd 0x4(%rsp),%xmm3
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm0,%xmm2
  movapd %xmm1,%xmm0
  mulsd  D177(%rip),%xmm0
  movapd %xmm3,%xmm4
  mulsd  D242(%rip),%xmm4
  subsd  %xmm4,%xmm0
  movapd %xmm2,%xmm4
  mulsd  D416(%rip),%xmm4
  subsd  %xmm4,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movapd %xmm1,%xmm4
  mulsd  D25(%rip),%xmm4
  movapd %xmm3,%xmm5
  mulsd  D280(%rip),%xmm5
  addsd  %xmm5,%xmm4
  movapd %xmm2,%xmm5
  mulsd  D82(%rip),%xmm5
  addsd  %xmm5,%xmm4
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm4,%xmm7
  movss  %xmm7,0x4(%rsp)
  mulsd  D149(%rip),%xmm1
  mulsd  D111(%rip),%xmm3
  subsd  %xmm3,%xmm1
  mulsd  D181(%rip),%xmm2
  addsd  %xmm2,%xmm1
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm1,%xmm6
  movss  %xmm6,0x8(%rsp)
  mov    $0x0,%edi
  call   <powf@plt>
  movss  %xmm0,0xc(%rsp)
  mov    $0x0,%edi
  movss  0x4(%rsp),%xmm0
  call   <powf@plt>
  movss  %xmm0,0x4(%rsp)
  mov    $0x0,%edi
  movss  0x8(%rsp),%xmm0
  call   <powf@plt>
  movaps %xmm0,%xmm1
  movss  0xc(%rsp),%xmm6
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm6,%xmm0
  movsd  D337(%rip),%xmm2
  mulsd  %xmm2,%xmm0
  movss  D348(%rip),%xmm3
  comisd %xmm2,%xmm0
  ja     L150
  pxor   %xmm3,%xmm3
  pxor   %xmm2,%xmm2
  comisd %xmm0,%xmm2
  ja     L150
  comisd D337(%rip),%xmm0
  ja     L171
  mulss  D348(%rip),%xmm6
  movaps %xmm6,%xmm3
L150:
  movss  %xmm3,(%r12)
  movss  0x4(%rsp),%xmm7
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm7,%xmm0
  movsd  D337(%rip),%xmm2
  mulsd  %xmm2,%xmm0
  movss  D348(%rip),%xmm3
  comisd %xmm2,%xmm0
  ja     L180
  pxor   %xmm3,%xmm3
  pxor   %xmm2,%xmm2
  comisd %xmm0,%xmm2
  ja     L180
  comisd D337(%rip),%xmm0
  ja     L57
  mulss  D348(%rip),%xmm7
  movaps %xmm7,%xmm3
L180:
  movss  %xmm3,0x0(%rbp)
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm1,%xmm0
  movsd  D337(%rip),%xmm2
  mulsd  %xmm2,%xmm0
  movss  D348(%rip),%xmm3
  comisd %xmm2,%xmm0
  ja     L187
  pxor   %xmm3,%xmm3
  pxor   %xmm2,%xmm2
  comisd %xmm0,%xmm2
  ja     L187
  comisd D337(%rip),%xmm0
  ja     L98
  movaps %xmm1,%xmm3
  mulss  D348(%rip),%xmm3
L187:
  movss  %xmm3,(%rbx)
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L97:
  divsd  D264(%rip),%xmm0
  pxor   %xmm7,%xmm7
  cvtsd2ss %xmm0,%xmm7
  movss  %xmm7,0x4(%rsp)
  jmp    L117
L87:
  movss  D143(%rip),%xmm1
  movaps %xmm6,%xmm0
  call   <pow@plt>
  jmp    L148
L158:
  subss  D24(%rip),%xmm1
  mulss  D33(%rip),%xmm1
  jmp    L131
L80:
  subss  D24(%rip),%xmm0
  mulss  D161(%rip),%xmm0
  jmp    L45
L171:
  movss  D348(%rip),%xmm3
  jmp    L150
L57:
  movss  D348(%rip),%xmm3
  jmp    L180
L98:
  movss  D348(%rip),%xmm3
  jmp    L187
```

tool_calls: name: retrieve_data
arguments: label: D366
data_type: f64[2]
name: retrieve_data
arguments: label: D251
data_type: f64
name: retrieve_data
arguments: label: D273
data_type: f64
name: retrieve_data
arguments: label: D140
data_type: f32
name: retrieve_data
arguments: label: D135
data_type: f32
name: retrieve_data
arguments: label: D24
data_type: byte[4]
name: retrieve_data
arguments: label: D175
data_type: f64
name: retrieve_data
arguments: label: D250
data_type: f64
name: retrieve_data
arguments: label: D232
data_type: f32
name: retrieve_data
arguments: label: D359
data_type: f32
name: retrieve_data
arguments: label: D270
data_type: f32
name: retrieve_data
arguments: label: D177
data_type: f64
name: retrieve_data
arguments: label: D242
data_type: f64
name: retrieve_data
arguments: label: D416
data_type: f64
name: retrieve_data
arguments: label: D25
data_type: byte[8]
name: retrieve_data
arguments: label: D280
data_type: f64
name: retrieve_data
arguments: label: D82
data_type: f64
name: retrieve_data
arguments: label: D149
data_type: f64
name: retrieve_data
arguments: label: D111
data_type: f64
name: retrieve_data
arguments: label: D181
data_type: f64
name: retrieve_data
arguments: label: D337
data_type: f64
name: retrieve_data
arguments: label: D348
data_type: byte[4]
name: retrieve_data
arguments: label: D264
data_type: f64
name: retrieve_data
arguments: label: D143
data_type: byte[4]
name: retrieve_data
arguments: label: D33
data_type: byte[4]
name: retrieve_data
arguments: label: D161
data_type: byte[4]

tool: {"D366": [7.9996,16.0]}

tool: D251: 16

tool: D273: 116

tool: D140: 0.008856

tool: D135: 7.787

tool: {"D24": [0xcb,0x3d,0x0d,0x3e]}

tool: D175: 500

tool: D250: 200

tool: D232: 0.206893

tool: D359: 0.950456

tool: D270: 1.088854

tool: D177: 3.240479

tool: D242: 1.53715

tool: D416: 0.498535

tool: {"D25": [0xf3,0x74,0xae,0x28,0x25,0x04,0xef,0xbf]}

tool: D280: 1.875992

tool: D82: 0.041556

tool: D149: 0.055648

tool: D111: 0.204043

tool: D181: 1.057311

tool: D337: 255

tool: {"D348": [0x00,0x00,0x7f,0x43]}

tool: D264: 903.3

tool: {"D143": [0xab,0xaa,0xaa,0x3e]}

tool: {"D33": [0xe5,0xf8,0xf9,0x3d]}

tool: {"D161": [0x85,0x2f,0x0f,0x3e]}

assistant: ```c
void Lab2RGB(float *l, float *a, float *b) {
  float thresh1 = 0.008856;
  float thresh2 = 0.206893;
  float Xn = 0.950456;
  float Yn = 1.000;
  float Zn = 1.088854;
  float r13 = 1.0 / 3.0;
  float r16116 = 16.0 / 116.0;
  float cnst = 7.787;
  float X, Y, Z;
  float L = *l;
  float A = *a;
  float B = *b;
  float P = (L + 16.0) / 116.0;
  if (L > 7.9996) {
    Y = Yn * P * P * P;
  } else {
    Y = L / 903.3;
  }
  float yr = Y / Yn, fy;
  if (yr > thresh1) {
    fy = pow(yr, r13);
  } else {
    fy = cnst * yr + r16116;
  }
  float fx = A / 500.0 + fy;
  float fz = fy - B / 200.0;
  if (fx > thresh2) {
    X = Xn * fx * fx * fx;
  } else {
    X = Xn / cnst * (fx - r16116);
  }
  if (fz > thresh2) {
    Z = Zn * fz * fz * fz;
  } else {
    Z = Zn / cnst * (fz - r16116);
  }
  float R1 = 3.240479 * X - 1.537150 * Y - 0.498535 * Z;
  float G1 = -0.969256 * X + 1.875992 * Y + 0.041556 * Z;
  float B1 = 0.055648 * X - 0.204043 * Y + 1.057311 * Z;
  R1 = powf(R1, 1 / 2.2);
  G1 = powf(G1, 1 / 2.2);
  B1 = powf(B1, 1 / 2.2);
  *l = (((0.0) > ((((255.0) < (255.0 * R1)) ? (255.0) : (255.0 * R1)))) ? (0.0) : ((((255.0) < (255.0 * R1)) ? (255.0) : (255.0 * R1))));
  *a = (((0.0) > ((((255.0) < (255.0 * G1)) ? (255.0) : (255.0 * G1)))) ? (0.0) : ((((255.0) < (255.0 * G1)) ? (255.0) : (255.0 * G1))));
  *b = (((0.0) > ((((255.0) < (255.0 * B1)) ? (255.0) : (255.0 * B1)))) ? (0.0) : ((((255.0) < (255.0 * B1)) ? (255.0) : (255.0 * B1))));
}
```