user: 下面的汇编指令对应的C源代码是什么:

```asm
<hsl_to_rgb>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  movss  %xmm0,-0x14(%rbp)
  movss  %xmm1,-0x18(%rbp)
  movss  %xmm2,-0x1c(%rbp)
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x18(%rbp),%xmm0
  jp     L49
  pxor   %xmm0,%xmm0
  ucomiss -0x18(%rbp),%xmm0
  jne    L49
  movss  -0x1c(%rbp),%xmm1
  movss  D41(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %dl,(%rax)
  movss  -0x1c(%rbp),%xmm1
  movss  D41(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%rax
  mov    %dl,(%rax)
  movss  -0x1c(%rbp),%xmm1
  movss  D41(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %dl,(%rax)
  jmp    L47
L49:
  movss  D61(%rip),%xmm0
  comiss -0x1c(%rbp),%xmm0
  jbe    L31
  movss  -0x18(%rbp),%xmm1
  movss  D45(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  -0x1c(%rbp),%xmm1
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  jmp    L4
L31:
  movss  -0x1c(%rbp),%xmm0
  addss  -0x18(%rbp),%xmm0
  movss  -0x18(%rbp),%xmm1
  mulss  -0x1c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
L4:
  movss  -0x1c(%rbp),%xmm0
  addss  %xmm0,%xmm0
  subss  -0x8(%rbp),%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x14(%rbp),%xmm1
  movss  D40(%rip),%xmm0
  addss  %xmm0,%xmm1
  movss  -0x8(%rbp),%xmm0
  mov    -0x4(%rbp),%eax
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <hue_to_rgb@plt>
  neg    %eax
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    %dl,(%rax)
  movss  -0x14(%rbp),%xmm1
  movss  -0x8(%rbp),%xmm0
  mov    -0x4(%rbp),%eax
  movaps %xmm1,%xmm2
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <hue_to_rgb@plt>
  neg    %eax
  mov    %eax,%edx
  mov    -0x30(%rbp),%rax
  mov    %dl,(%rax)
  movss  -0x14(%rbp),%xmm0
  movss  D40(%rip),%xmm1
  movaps %xmm0,%xmm2
  subss  %xmm1,%xmm2
  movss  -0x8(%rbp),%xmm0
  mov    -0x4(%rbp),%eax
  movaps %xmm0,%xmm1
  movd   %eax,%xmm0
  call   <hue_to_rgb@plt>
  neg    %eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %dl,(%rax)
L47:
  nop
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D41
type_infered: byte[4]
name: read_data
arguments: data_tag: D61
type_infered: byte[4]
name: read_data
arguments: data_tag: D45
type_infered: byte[4]
name: read_data
arguments: data_tag: D40
type_infered: byte[4]

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

tool: {"D61": [0x00,0x00,0x00,0x3f]}

tool: {"D45": [0x00,0x00,0x80,0x3f]}

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

assistant: ```c
void hsl_to_rgb(float H, float S, float L, unsigned char *R, unsigned char *G, unsigned char *B) {
  float var_1, var_2;
  if (S == 0) {
    *R = (unsigned char)(L * 255);
    *G = (unsigned char)(L * 255);
    *B = (unsigned char)(L * 255);
  } else {
    if (L < 0.5f) {
      var_2 = L * (1 + S);
    } else {
      var_2 = (L + S) - (S * L);
    }
    var_1 = 2 * L - var_2;
    *R = (unsigned char)(255 * hue_to_rgb(var_1, var_2, H + (1.0f / 3.0f)));
    *G = (unsigned char)(255 * hue_to_rgb(var_1, var_2, H));
    *B = (unsigned char)(255 * hue_to_rgb(var_1, var_2, H - (1.0f / 3.0f)));
  }
}
```