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

```asm
<blend>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  movss  %xmm0,-0x28(%rbp)
  mov    %esi,%ecx
  movss  %xmm1,-0x30(%rbp)
  mov    %edx,%eax
  mov    %edi,%edx
  mov    %dx,-0x24(%rbp)
  mov    %ecx,%edx
  mov    %dx,-0x2c(%rbp)
  mov    %ax,-0x34(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movswl -0x24(%rbp),%eax
  lea    -0xc(%rbp),%rcx
  lea    -0x10(%rbp),%rdx
  lea    -0x14(%rbp),%rsi
  mov    %eax,%edi
  call   <color_content@plt>
  movswl -0x2c(%rbp),%eax
  lea    -0xa(%rbp),%rcx
  lea    -0xe(%rbp),%rdx
  lea    -0x12(%rbp),%rsi
  mov    %eax,%edi
  call   <color_content@plt>
  pxor   %xmm0,%xmm0
  ucomiss -0x28(%rbp),%xmm0
  jp     L26
  pxor   %xmm0,%xmm0
  ucomiss -0x28(%rbp),%xmm0
  jne    L26
  movzwl -0x12(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  cvttss2si %xmm0,%eax
  jmp    L35
L26:
  movzwl -0x14(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x28(%rbp),%xmm1
  movzwl -0x12(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  -0x30(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  D20(%rip),%xmm1
  divss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
L35:
  mov    %ax,-0x14(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x28(%rbp),%xmm0
  jp     L71
  pxor   %xmm0,%xmm0
  ucomiss -0x28(%rbp),%xmm0
  jne    L71
  movzwl -0xe(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  cvttss2si %xmm0,%eax
  jmp    L84
L71:
  movzwl -0x10(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x28(%rbp),%xmm1
  movzwl -0xe(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  -0x30(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  D20(%rip),%xmm1
  divss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
L84:
  mov    %ax,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0x28(%rbp),%xmm0
  jp     L56
  pxor   %xmm0,%xmm0
  ucomiss -0x28(%rbp),%xmm0
  jne    L56
  movzwl -0xa(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  cvttss2si %xmm0,%eax
  jmp    L96
L56:
  movzwl -0xc(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x28(%rbp),%xmm1
  movzwl -0xa(%rbp),%eax
  cwtl
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  -0x30(%rbp),%xmm0
  addss  %xmm1,%xmm0
  movss  D20(%rip),%xmm1
  divss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
L96:
  mov    %ax,-0xc(%rbp)
  movzwl -0xc(%rbp),%eax
  movswl %ax,%ecx
  movzwl -0x10(%rbp),%eax
  movswl %ax,%edx
  movzwl -0x14(%rbp),%eax
  movswl %ax,%esi
  movswl -0x34(%rbp),%eax
  mov    %eax,%edi
  call   <init_color@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L25
  call   <__stack_chk_fail@plt>
L25:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D20
type: byte[4]

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

assistant: ```c
void blend(short color1, float i1, short color2, float i2, short dest) {
  short r1, r2;
  short g1, g2;
  short b1, b2;
  color_content(color1, &r1, &g1, &b1);
  color_content(color2, &r2, &g2, &b2);
  r1 = (i1 == 0.0) ? r2 : (((i1 * r1) + (i2 * r2)) / 2);
  g1 = (i1 == 0.0) ? g2 : (((i1 * g1) + (i2 * g2)) / 2);
  b1 = (i1 == 0.0) ? b2 : (((i1 * b1) + (i2 * b2)) / 2);
  init_color(dest, r1, g1, b1);
}
```