user: 请从给定的汇编指令推导出C源代码：

```asm
<HSLtoRGB>:
  endbr64
  push   %r12
  mov    $0xc,%edi
  sub    $0x10,%rsp
  movss  %xmm1,0x8(%rsp)
  movss  %xmm2,0x4(%rsp)
  movss  %xmm0,0xc(%rsp)
  call   <malloc@plt>
  movss  D85(%rip),%xmm7
  movss  0x4(%rsp),%xmm2
  movss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm6
  mov    %rax,%r12
  comiss %xmm2,%xmm7
  jbe    L125
  movss  D115(%rip),%xmm5
  addss  %xmm5,%xmm1
  movaps %xmm1,%xmm3
  mulss  %xmm2,%xmm3
L133:
  movsd  D61(%rip),%xmm0
  pxor   %xmm11,%xmm11
  addss  %xmm2,%xmm2
  cvtss2sd %xmm6,%xmm11
  movapd %xmm11,%xmm4
  addsd  %xmm0,%xmm4
  subss  %xmm3,%xmm2
  cvtsd2ss %xmm4,%xmm4
  comiss %xmm5,%xmm4
  jbe    L149
  subss  %xmm5,%xmm4
L149:
  movapd %xmm11,%xmm9
  subsd  %xmm0,%xmm9
  pxor   %xmm0,%xmm0
  cvtsd2ss %xmm9,%xmm9
  comiss %xmm9,%xmm0
  jbe    L201
  addss  %xmm5,%xmm9
L201:
  movsd  D24(%rip),%xmm10
  pxor   %xmm1,%xmm1
  movaps %xmm3,%xmm8
  cvtss2sd %xmm4,%xmm1
  comisd %xmm1,%xmm10
  jbe    L111
  subss  %xmm2,%xmm8
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm2,%xmm0
  cvtss2sd %xmm8,%xmm8
  mulsd  D73(%rip),%xmm8
  mulsd  %xmm1,%xmm8
  addsd  %xmm0,%xmm8
  cvtsd2ss %xmm8,%xmm8
L84:
  comisd %xmm11,%xmm10
  movaps %xmm3,%xmm1
  jbe    L148
  subss  %xmm2,%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm2,%xmm0
  cvtss2sd %xmm1,%xmm1
  mulsd  D73(%rip),%xmm1
  mulsd  %xmm11,%xmm1
  addsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
L143:
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm9,%xmm4
  comisd %xmm4,%xmm10
  jbe    L76
  subss  %xmm2,%xmm3
  cvtss2sd %xmm2,%xmm2
  cvtss2sd %xmm3,%xmm3
  mulsd  D73(%rip),%xmm3
  mulsd  %xmm4,%xmm3
  addsd  %xmm2,%xmm3
  cvtsd2ss %xmm3,%xmm3
L181:
  comiss %xmm8,%xmm5
  mov    $0xff,%eax
  ja     L40
L110:
  comiss %xmm1,%xmm5
  mov    %eax,(%r12)
  mov    $0xff,%eax
  ja     L231
L226:
  comiss %xmm3,%xmm5
  mov    %eax,0x4(%r12)
  mov    $0xff,%eax
  ja     L184
L95:
  mov    %eax,0x8(%r12)
  add    $0x10,%rsp
  mov    %r12,%rax
  pop    %r12
  ret
  nopl   0x0(%rax)
L125:
  movaps %xmm2,%xmm3
  movss  D115(%rip),%xmm5
  addss  %xmm1,%xmm3
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm3
  jmp    L133
  nopl   0x0(%rax)
L76:
  comiss %xmm9,%xmm7
  ja     L181
  movsd  D39(%rip),%xmm0
  comisd %xmm4,%xmm0
  jbe    L51
  subss  %xmm2,%xmm3
  subsd  %xmm4,%xmm0
  cvtss2sd %xmm2,%xmm2
  comiss %xmm8,%xmm5
  mov    $0xff,%eax
  cvtss2sd %xmm3,%xmm3
  mulsd  %xmm0,%xmm3
  mulsd  D73(%rip),%xmm3
  addsd  %xmm2,%xmm3
  cvtsd2ss %xmm3,%xmm3
  jbe    L110
  nopl   0x0(%rax,%rax,1)
L40:
  movss  D153(%rip),%xmm0
  movss  %xmm5,0xc(%rsp)
  movss  %xmm3,0x8(%rsp)
  mulss  %xmm8,%xmm0
  movss  %xmm1,0x4(%rsp)
  call   <roundf@plt>
  movss  0x4(%rsp),%xmm1
  movss  0xc(%rsp),%xmm5
  mov    %eax,(%r12)
  movss  0x8(%rsp),%xmm3
  mov    $0xff,%eax
  comiss %xmm1,%xmm5
  jbe    L226
L231:
  movss  D153(%rip),%xmm0
  movss  %xmm5,0x8(%rsp)
  movss  %xmm3,0x4(%rsp)
  mulss  %xmm1,%xmm0
  call   <roundf@plt>
  movss  0x4(%rsp),%xmm3
  movss  0x8(%rsp),%xmm5
  mov    %eax,0x4(%r12)
  mov    $0xff,%eax
  comiss %xmm3,%xmm5
  jbe    L95
L184:
  movss  D153(%rip),%xmm0
  mulss  %xmm3,%xmm0
  call   <roundf@plt>
  mov    %eax,0x8(%r12)
  add    $0x10,%rsp
  mov    %r12,%rax
  pop    %r12
  ret
  nopl   0x0(%rax)
L148:
  comiss %xmm6,%xmm7
  ja     L143
  movsd  D39(%rip),%xmm0
  comisd %xmm11,%xmm0
  jbe    L1
  subsd  %xmm11,%xmm0
  subss  %xmm2,%xmm1
  cvtss2sd %xmm1,%xmm1
  mulsd  %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  mulsd  D73(%rip),%xmm1
  cvtss2sd %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  jmp    L143
  nopw   0x0(%rax,%rax,1)
L111:
  comiss %xmm4,%xmm7
  ja     L84
  movsd  D39(%rip),%xmm0
  comisd %xmm1,%xmm0
  jbe    L99
  subsd  %xmm1,%xmm0
  subss  %xmm2,%xmm8
  cvtss2sd %xmm8,%xmm8
  mulsd  %xmm0,%xmm8
  pxor   %xmm0,%xmm0
  mulsd  D73(%rip),%xmm8
  cvtss2sd %xmm2,%xmm0
  addsd  %xmm0,%xmm8
  cvtsd2ss %xmm8,%xmm8
  jmp    L84
  nopw   0x0(%rax,%rax,1)
L51:
  movaps %xmm2,%xmm3
  jmp    L181
  nopl   0x0(%rax,%rax,1)
L1:
  movaps %xmm2,%xmm1
  jmp    L143
  nopl   0x0(%rax,%rax,1)
L99:
  movaps %xmm2,%xmm8
  jmp    L84
```

tool_calls: name: unpack_data
arguments: label: D85
datatype: f32
name: unpack_data
arguments: label: D115
datatype: f32
name: unpack_data
arguments: label: D61
datatype: byte[8]
name: unpack_data
arguments: label: D24
datatype: byte[8]
name: unpack_data
arguments: label: D73
datatype: f64
name: unpack_data
arguments: label: D39
datatype: byte[8]
name: unpack_data
arguments: label: D153
datatype: f32

tool: D85: 0.5

tool: D115: 1

tool: {"D61": [0x55,0x55,0x55,0x55,0x55,0x55,0xd5,0x3f]}

tool: {"D24": [0x55,0x55,0x55,0x55,0x55,0x55,0xc5,0x3f]}

tool: D73: 6

tool: {"D39": [0x55,0x55,0x55,0x55,0x55,0x55,0xe5,0x3f]}

tool: D153: 255

assistant: ```c
int *HSLtoRGB(float hue, float saturation, float lightness) {
  float red, green, blue;
  float temp1, temp2, tempRed, tempGreen, tempBlue;
  int *rgb = malloc(3 * sizeof(int));
  if (lightness < 0.5)
    temp2 = lightness * (1 + saturation);
  else
    temp2 = (lightness + saturation) - (lightness * saturation);
  temp1 = 2 * lightness - temp2;
  tempRed = hue + 1.0 / 3.0;
  if (tempRed > 1)
    tempRed--;
  tempGreen = hue;
  tempBlue = hue - 1.0 / 3.0;
  if (tempBlue < 0)
    tempBlue++;
  if (tempRed < 1.0 / 6.0)
    red = temp1 + (temp2 - temp1) * 6.0 * tempRed;
  else if (tempRed < 0.5)
    red = temp2;
  else if (tempRed < 2.0 / 3.0)
    red = temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempRed) * 6.0;
  else
    red = temp1;
  if (tempGreen < 1.0 / 6.0)
    green = temp1 + (temp2 - temp1) * 6.0 * tempGreen;
  else if (tempGreen < 0.5)
    green = temp2;
  else if (tempGreen < 2.0 / 3.0)
    green = temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempGreen) * 6.0;
  else
    green = temp1;
  if (tempBlue < 1.0 / 6.0)
    blue = temp1 + (temp2 - temp1) * 6.0 * tempBlue;
  else if (tempBlue < 0.5)
    blue = temp2;
  else if (tempBlue < 2.0 / 3.0)
    blue = temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempBlue) * 6.0;
  else
    blue = temp1;
  rgb[0] = red < 1.0 ? roundf(red * 255.0) : 255;
  rgb[1] = green < 1.0 ? roundf(green * 255.0) : 255;
  rgb[2] = blue < 1.0 ? roundf(blue * 255.0) : 255;
  return rgb;
}
```