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

```asm
<RGB2HSV>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movss  %xmm0,-0x14(%rbp)
  movss  %xmm1,-0x18(%rbp)
  movss  %xmm2,-0x1c(%rbp)
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  movss  -0x14(%rbp),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L199
  movss  -0x18(%rbp),%xmm0
  jmp    L0
L199:
  movss  -0x14(%rbp),%xmm0
L0:
  movss  %xmm0,-0xc(%rbp)
  movss  -0xc(%rbp),%xmm0
  comiss -0x1c(%rbp),%xmm0
  jbe    L29
  movss  -0x1c(%rbp),%xmm0
  jmp    L94
L29:
  movss  -0xc(%rbp),%xmm0
L94:
  movss  %xmm0,-0xc(%rbp)
  movss  -0x14(%rbp),%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L107
  movss  -0x14(%rbp),%xmm0
  jmp    L135
L107:
  movss  -0x18(%rbp),%xmm0
L135:
  movss  %xmm0,-0x8(%rbp)
  movss  -0x8(%rbp),%xmm0
  comiss -0x1c(%rbp),%xmm0
  jbe    L210
  movss  -0x8(%rbp),%xmm0
  jmp    L10
L210:
  movss  -0x1c(%rbp),%xmm0
L10:
  movss  %xmm0,-0x8(%rbp)
  mov    -0x38(%rbp),%rax
  movss  -0x8(%rbp),%xmm0
  movss  %xmm0,(%rax)
  movss  -0x8(%rbp),%xmm0
  subss  -0xc(%rbp),%xmm0
  movss  %xmm0,-0x4(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jp     L70
  pxor   %xmm0,%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jne    L70
  mov    -0x30(%rbp),%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x38(%rbp),%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  jmp    L187
L70:
  pxor   %xmm0,%xmm0
  ucomiss -0x4(%rbp),%xmm0
  jp     L106
  pxor   %xmm0,%xmm0
  ucomiss -0x4(%rbp),%xmm0
  jne    L106
  mov    -0x28(%rbp),%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x38(%rbp),%rax
  movss  -0x8(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x30(%rbp),%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  jmp    L187
L106:
  movss  -0x4(%rbp),%xmm0
  divss  -0x8(%rbp),%xmm0
  mov    -0x30(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x14(%rbp),%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jp     L193
  movss  -0x14(%rbp),%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jne    L193
  movss  -0x18(%rbp),%xmm0
  comiss -0x1c(%rbp),%xmm0
  jb     L175
  movss  -0x18(%rbp),%xmm0
  subss  -0x1c(%rbp),%xmm0
  divss  -0x4(%rbp),%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L215
L175:
  movss  -0x18(%rbp),%xmm0
  subss  -0x1c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  divss  -0x4(%rbp),%xmm1
  movss  D6(%rip),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L215
L193:
  movss  -0x18(%rbp),%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jp     L84
  movss  -0x18(%rbp),%xmm0
  ucomiss -0x8(%rbp),%xmm0
  jne    L84
  movss  -0x1c(%rbp),%xmm0
  subss  -0x14(%rbp),%xmm0
  movaps %xmm0,%xmm1
  divss  -0x4(%rbp),%xmm1
  movss  D32(%rip),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  jmp    L215
L84:
  movss  -0x14(%rbp),%xmm0
  subss  -0x18(%rbp),%xmm0
  movaps %xmm0,%xmm1
  divss  -0x4(%rbp),%xmm1
  movss  D21(%rip),%xmm0
  addss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
L215:
  mov    -0x28(%rbp),%rax
  movss  (%rax),%xmm1
  movss  D33(%rip),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x28(%rbp),%rax
  movss  %xmm0,(%rax)
  nop
L187:
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: label: D6
datatype: byte[4]
name: retrieve_data
arguments: label: D32
datatype: byte[4]
name: retrieve_data
arguments: label: D21
datatype: byte[4]
name: retrieve_data
arguments: label: D33
datatype: byte[4]

tool: {"D6": [0x00,0x00,0xc0,0x40]}

tool: {"D32": [0x00,0x00,0x00,0x40]}

tool: {"D21": [0x00,0x00,0x80,0x40]}

tool: {"D33": [0x00,0x00,0x70,0x42]}

assistant: ```c
void RGB2HSV(float r, float g, float b, float *h, float *s, float *v) {
  float min, max;
  float delta;
  min = (r > g ? g : r);
  min = (min > b ? b : min);
  max = (r > g ? r : g);
  max = (max > b ? max : b);
  *v = (float)max;
  delta = (float)max - (float)min;
  if (max == 0) {
    *s = 0.0;
    *h = 0;
    *v = 0;
    return;
  }
  if (delta == 0) {
    *h = 0;
    *v = max;
    *s = 0;
    return;
  }
  *s = delta / (float)max;
  if (r == max) {
    if (g >= b)
      *h = ((float)g - (float)b) / delta;
    else
      *h = 6 + ((float)g - (float)b) / delta;
  } else if (g == max)
    *h = 2 + ((float)b - (float)r) / delta;
  else
    *h = 4 + ((float)r - (float)g) / delta;
  *h *= 60;
  return;
}
```