user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<hsva_to_rgba>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  movss  0x4(%rax),%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x30(%rbp),%rax
  movss  0x8(%rax),%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  lea    0xc(%rax),%rdx
  mov    -0x30(%rbp),%rax
  movss  0xc(%rax),%xmm0
  movss  %xmm0,(%rdx)
  movss  -0x14(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mov    D66(%rip),%eax
  movd   %eax,%xmm0
  call   <fmaxf@plt>
  mov    %eax,%edi
  mov    D137(%rip),%eax
  movd   %eax,%xmm0
  call   <fminf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x14(%rbp)
  movss  -0x10(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mov    D66(%rip),%eax
  movd   %eax,%xmm0
  call   <fmaxf@plt>
  mov    %eax,%edi
  mov    D137(%rip),%eax
  movd   %eax,%xmm0
  call   <fminf@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x10(%rbp)
  movss  -0x18(%rbp),%xmm1
  movss  D75(%rip),%xmm0
  addss  %xmm0,%xmm1
  movd   %xmm1,%eax
  mov    $0x168,%edi
  movd   %eax,%xmm0
  call   <fmodf@plt>
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x14(%rbp),%xmm0
  jp     L103
  pxor   %xmm0,%xmm0
  ucomiss -0x14(%rbp),%xmm0
  jne    L103
  mov    -0x28(%rbp),%rax
  lea    0x8(%rax),%rdx
  movss  -0x10(%rbp),%xmm0
  movss  %xmm0,(%rdx)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  movss  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L148
L103:
  movss  -0x10(%rbp),%xmm0
  mulss  -0x14(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0x18(%rbp),%xmm0
  movss  D88(%rip),%xmm1
  divss  %xmm1,%xmm0
  movd   %xmm0,%eax
  mov    $0x2,%edi
  movd   %eax,%xmm0
  call   <fmodf@plt>
  movq   %xmm0,%rax
  movsd  D50(%rip),%xmm0
  movq   %rax,%xmm2
  subsd  %xmm0,%xmm2
  movq   %xmm2,%rax
  movq   %rax,%xmm0
  call   <fabsf@plt>
  movss  D137(%rip),%xmm1
  subss  %xmm0,%xmm1
  movss  -0xc(%rbp),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x10(%rbp),%xmm0
  subss  -0xc(%rbp),%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x18(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jb     L44
  movss  D88(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L44
  movss  -0xc(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  -0x8(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L148
L44:
  movss  -0x18(%rbp),%xmm0
  comiss D88(%rip),%xmm0
  jb     L41
  movss  D93(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L41
  movss  -0x8(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  -0xc(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L148
L41:
  movss  -0x18(%rbp),%xmm0
  comiss D93(%rip),%xmm0
  jb     L80
  movss  D127(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L80
  mov    -0x28(%rbp),%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  -0xc(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  -0x8(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L148
L80:
  movss  -0x18(%rbp),%xmm0
  comiss D127(%rip),%xmm0
  jb     L94
  movss  D27(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L94
  mov    -0x28(%rbp),%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  -0x8(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  -0xc(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L148
L94:
  movss  -0x18(%rbp),%xmm0
  comiss D27(%rip),%xmm0
  jb     L200
  movss  D54(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L200
  movss  -0x8(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  -0xc(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L148
L200:
  movss  -0x18(%rbp),%xmm0
  comiss D54(%rip),%xmm0
  jb     L35
  movss  D75(%rip),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L35
  movss  -0xc(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  -0x8(%rbp),%xmm0
  addss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  jmp    L148
L35:
  mov    -0x28(%rbp),%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,(%rax)
L148:
  leave
  ret
```

tool_calls: name: read_data
arguments: tag: D66
type_guessed: f32
name: read_data
arguments: tag: D137
type_guessed: f32
name: read_data
arguments: tag: D75
type_guessed: f32
name: read_data
arguments: tag: D88
type_guessed: f32
name: read_data
arguments: tag: D50
type_guessed: f32[2]
name: read_data
arguments: tag: D93
type_guessed: f32
name: read_data
arguments: tag: D127
type_guessed: f32
name: read_data
arguments: tag: D27
type_guessed: f32
name: read_data
arguments: tag: D54
type_guessed: f32

tool: D66: 0

tool: D137: 1

tool: D75: 360

tool: D88: 60

tool: {"D50": [0.0,1.875]}

tool: D93: 120

tool: D127: 180

tool: D27: 240

tool: D54: 300

assistant: ```c
void hsva_to_rgba(float *rgba, float *hsva) {
  float h = hsva[0];
  float s = hsva[1];
  float v = hsva[2];
  rgba[3] = hsva[3];
  s = fminf(1.f, fmaxf(0.f, s));
  v = fminf(1.f, fmaxf(0.f, v));
  h = fmodf(h + 360.f, 360.f);
  if (s == 0) {
    rgba[0] = rgba[1] = rgba[2] = v;
    return;
  }
  float c = v * s;
  float x = c * (1.f - fabsf(fmodf(h / 60.f, 2) - 1.0));
  float m = v - c;
  if (h >= 0.0 && h < 60.0) {
    rgba[0] = c + m;
    rgba[1] = x + m;
    rgba[2] = m;
    ;
  } else if (h >= 60.0 && h < 120.0) {
    rgba[0] = x + m;
    rgba[1] = c + m;
    rgba[2] = m;
    ;
  } else if (h >= 120.0 && h < 180.0) {
    rgba[0] = m;
    rgba[1] = c + m;
    rgba[2] = x + m;
    ;
  } else if (h >= 180.0 && h < 240.0) {
    rgba[0] = m;
    rgba[1] = x + m;
    rgba[2] = c + m;
    ;
  } else if (h >= 240.0 && h < 300.0) {
    rgba[0] = x + m;
    rgba[1] = m;
    rgba[2] = c + m;
    ;
  } else if (h >= 300.0 && h < 360.0) {
    rgba[0] = c + m;
    rgba[1] = m;
    rgba[2] = x + m;
    ;
  } else {
    rgba[0] = m;
    rgba[1] = m;
    rgba[2] = m;
    ;
  }
}
```