user: Converte this assembly snippet into its equivalent C code:

```asm
<Lab2RGB>:
  endbr64
  push   %r12
  pxor   %xmm0,%xmm0
  mov    %rdx,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x10,%rsp
  movss  (%rsi),%xmm2
  movss  (%rdx),%xmm4
  cvtss2sd (%rdi),%xmm0
  comisd D267(%rip),%xmm0
  jbe    L34
  addsd  D71(%rip),%xmm0
  divsd  D25(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movaps %xmm0,%xmm3
  mulss  %xmm0,%xmm3
  mulss  %xmm0,%xmm3
  comiss D18(%rip),%xmm3
  ja     L44
L4:
  movss  D229(%rip),%xmm0
  mulss  %xmm3,%xmm0
  addss  D86(%rip),%xmm0
L129:
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm0
  cvtss2sd %xmm2,%xmm1
  divsd  D349(%rip),%xmm1
  addsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm4,%xmm2
  divsd  D149(%rip),%xmm2
  subsd  %xmm2,%xmm0
  cvtsd2ss %xmm1,%xmm1
  comiss D128(%rip),%xmm1
  cvtsd2ss %xmm0,%xmm0
  jbe    L104
  movss  D9(%rip),%xmm2
  mulss  %xmm1,%xmm2
  mulss  %xmm1,%xmm2
  mulss  %xmm2,%xmm1
L53:
  comiss D128(%rip),%xmm0
  jbe    L99
  movss  D206(%rip),%xmm2
  mulss  %xmm0,%xmm2
  mulss  %xmm0,%xmm2
  mulss  %xmm2,%xmm0
L122:
  pxor   %xmm2,%xmm2
  cvtss2sd %xmm1,%xmm1
  cvtss2sd %xmm3,%xmm3
  xor    %edi,%edi
  cvtss2sd %xmm0,%xmm2
  movsd  D270(%rip),%xmm4
  movsd  D114(%rip),%xmm0
  movsd  D58(%rip),%xmm5
  mulsd  %xmm3,%xmm4
  mulsd  %xmm1,%xmm0
  mulsd  %xmm3,%xmm5
  mulsd  D225(%rip),%xmm3
  subsd  %xmm4,%xmm0
  movsd  D180(%rip),%xmm4
  mulsd  %xmm2,%xmm4
  subsd  %xmm4,%xmm0
  movsd  D23(%rip),%xmm4
  mulsd  %xmm1,%xmm4
  mulsd  D64(%rip),%xmm1
  cvtsd2ss %xmm0,%xmm0
  addsd  %xmm5,%xmm4
  movsd  D235(%rip),%xmm5
  subsd  %xmm3,%xmm1
  mulsd  %xmm2,%xmm5
  mulsd  D72(%rip),%xmm2
  addsd  %xmm5,%xmm4
  addsd  %xmm2,%xmm1
  cvtsd2ss %xmm4,%xmm4
  movss  %xmm4,0x4(%rsp)
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0xc(%rsp)
  call   <powf@plt>
  movss  0x4(%rsp),%xmm4
  xor    %edi,%edi
  movss  %xmm0,0x8(%rsp)
  movaps %xmm4,%xmm0
  call   <powf@plt>
  movss  0xc(%rsp),%xmm1
  xor    %edi,%edi
  movss  %xmm0,0x4(%rsp)
  movaps %xmm1,%xmm0
  call   <powf@plt>
  movss  0x8(%rsp),%xmm5
  movsd  D124(%rip),%xmm1
  pxor   %xmm2,%xmm2
  movss  D154(%rip),%xmm4
  movss  0x4(%rsp),%xmm3
  cvtss2sd %xmm5,%xmm2
  mulsd  %xmm1,%xmm2
  comisd %xmm1,%xmm2
  ja     L67
  pxor   %xmm6,%xmm6
  pxor   %xmm4,%xmm4
  comisd %xmm2,%xmm6
  jbe    L124
L67:
  pxor   %xmm2,%xmm2
  movss  %xmm4,(%rbx)
  movss  D154(%rip),%xmm4
  cvtss2sd %xmm3,%xmm2
  mulsd  %xmm1,%xmm2
  comisd %xmm1,%xmm2
  ja     L75
  pxor   %xmm5,%xmm5
  pxor   %xmm4,%xmm4
  comisd %xmm2,%xmm5
  jbe    L10
L75:
  pxor   %xmm2,%xmm2
  movss  D154(%rip),%xmm3
  movss  %xmm4,0x0(%rbp)
  cvtss2sd %xmm0,%xmm2
  mulsd  %xmm1,%xmm2
  comisd %xmm1,%xmm2
  ja     L158
  pxor   %xmm1,%xmm1
  pxor   %xmm3,%xmm3
  comisd %xmm2,%xmm1
  jbe    L69
L158:
  movss  %xmm3,(%r12)
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax)
L99:
  subss  D86(%rip),%xmm0
  mulss  D344(%rip),%xmm0
  jmp    L122
  nopl   (%rax)
L104:
  subss  D86(%rip),%xmm1
  mulss  D181(%rip),%xmm1
  jmp    L53
  nopl   (%rax)
L34:
  pxor   %xmm3,%xmm3
  divsd  D167(%rip),%xmm0
  cvtsd2ss %xmm0,%xmm3
  comiss D18(%rip),%xmm3
  jbe    L4
L44:
  movss  D310(%rip),%xmm1
  movaps %xmm3,%xmm0
  movss  %xmm4,0xc(%rsp)
  movss  %xmm2,0x8(%rsp)
  movss  %xmm3,0x4(%rsp)
  call   <pow@plt>
  movss  0x4(%rsp),%xmm3
  movss  0x8(%rsp),%xmm2
  movss  0xc(%rsp),%xmm4
  jmp    L129
  cs nopw 0x0(%rax,%rax,1)
L69:
  movss  D154(%rip),%xmm3
  mulss  %xmm0,%xmm3
  movss  %xmm3,(%r12)
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L10:
  mulss  D154(%rip),%xmm3
  movaps %xmm3,%xmm4
  jmp    L75
L124:
  mulss  D154(%rip),%xmm5
  movaps %xmm5,%xmm4
  jmp    L67
```

tool_calls: name: disassemble_data
arguments: data_tag: D267
data_type: f64[2]
name: disassemble_data
arguments: data_tag: D71
data_type: f64
name: disassemble_data
arguments: data_tag: D25
data_type: f64
name: disassemble_data
arguments: data_tag: D18
data_type: f32
name: disassemble_data
arguments: data_tag: D229
data_type: f32
name: disassemble_data
arguments: data_tag: D86
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D349
data_type: f64
name: disassemble_data
arguments: data_tag: D149
data_type: f64
name: disassemble_data
arguments: data_tag: D128
data_type: f32
name: disassemble_data
arguments: data_tag: D9
data_type: f32
name: disassemble_data
arguments: data_tag: D206
data_type: f32
name: disassemble_data
arguments: data_tag: D270
data_type: f64
name: disassemble_data
arguments: data_tag: D114
data_type: f64
name: disassemble_data
arguments: data_tag: D58
data_type: f64
name: disassemble_data
arguments: data_tag: D225
data_type: f64
name: disassemble_data
arguments: data_tag: D180
data_type: f64
name: disassemble_data
arguments: data_tag: D23
data_type: byte[8]
name: disassemble_data
arguments: data_tag: D64
data_type: f64
name: disassemble_data
arguments: data_tag: D235
data_type: f64
name: disassemble_data
arguments: data_tag: D72
data_type: f64
name: disassemble_data
arguments: data_tag: D124
data_type: f64
name: disassemble_data
arguments: data_tag: D154
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D344
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D181
data_type: byte[4]
name: disassemble_data
arguments: data_tag: D167
data_type: f64
name: disassemble_data
arguments: data_tag: D310
data_type: byte[4]

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

tool: D71: 16

tool: D25: 116

tool: D18: 0.008856

tool: D229: 7.787

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

tool: D349: 500

tool: D149: 200

tool: D128: 0.206893

tool: D9: 0.950456

tool: D206: 1.088854

tool: D270: 1.53715

tool: D114: 3.240479

tool: D58: 1.875992

tool: D225: 0.204043

tool: D180: 0.498535

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

tool: D64: 0.055648

tool: D235: 0.041556

tool: D72: 1.057311

tool: D124: 255

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

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

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

tool: D167: 903.3

tool: {"D310": [0xab,0xaa,0xaa,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))));
}
```