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

```asm
<shove8888>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,-0xc(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L27
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D108(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L27
  mov    $0x1,%eax
  jmp    L26
L27:
  mov    $0x0,%eax
L26:
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L16
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  movsd  D108(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L16
  mov    $0x1,%eax
  jmp    L54
L16:
  mov    $0x0,%eax
L54:
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L46
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  movsd  D108(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L46
  mov    $0x1,%eax
  jmp    L115
L46:
  mov    $0x0,%eax
L115:
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jb     L69
  mov    -0x8(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  movsd  D108(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L69
  mov    $0x1,%eax
  jmp    L44
L69:
  mov    $0x0,%eax
L44:
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x8(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D9(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D91(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  shl    $0x18,%edx
  mov    %edx,(%rax)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  movsd  D9(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D91(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  shl    $0x10,%eax
  and    $0xff0000,%eax
  mov    %eax,%ecx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x8(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  movsd  D9(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D91(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  shl    $0x8,%eax
  movzwl %ax,%edx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x8(%rbp),%rax
  add    $0x18,%rax
  movsd  (%rax),%xmm1
  movsd  D9(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  D91(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  movzbl %al,%edx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  or     %ecx,%edx
  mov    %edx,(%rax)
  nop
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D108
type: f64
name: retrieve_data
arguments: tag: D9
type: f32[2]
name: retrieve_data
arguments: tag: D91
type: f64

tool: D108: 1

tool: {"D9": [0.0,3.748046875]}

tool: D91: 0.5

assistant: ```c
void shove8888(const GLfloat shoveComponents[], int index, void *packedPixel) {
  assert(0.0 <= shoveComponents[0] && shoveComponents[0] <= 1.0);
  assert(0.0 <= shoveComponents[1] && shoveComponents[1] <= 1.0);
  assert(0.0 <= shoveComponents[2] && shoveComponents[2] <= 1.0);
  assert(0.0 <= shoveComponents[3] && shoveComponents[3] <= 1.0);
  ((GLuint *)packedPixel)[index] = ((GLuint)((shoveComponents[0] * 255) + 0.5) << 24) & 0xff000000;
  ((GLuint *)packedPixel)[index] |= ((GLuint)((shoveComponents[1] * 255) + 0.5) << 16) & 0x00ff0000;
  ((GLuint *)packedPixel)[index] |= ((GLuint)((shoveComponents[2] * 255) + 0.5) << 8) & 0x0000ff00;
  ((GLuint *)packedPixel)[index] |= ((GLuint)((shoveComponents[3] * 255) + 0.5)) & 0x000000ff;
}
```