user: 请将以下的汇编代码转换成C语言代码：

```asm
<compositeSourceAtop>:
  endbr64
  imul   %ecx,%edx
  mov    %rdi,%rax
  lea    0x0(,%rdx,4),%ecx
  movslq %ecx,%rcx
  add    %rsi,%rcx
  cmp    %rcx,%rsi
  jae    L45
  movsd  D53(%rip),%xmm7
  pxor   %xmm6,%xmm6
  movss  D66(%rip),%xmm9
  movss  D57(%rip),%xmm8
  jmp    L46
L97:
  movl   $0x0,-0x4(%rax)
L151:
  add    $0x4,%rsi
  cmp    %rsi,%rcx
  jbe    L45
L46:
  movzbl 0x3(%rax),%edx
  add    $0x4,%rax
  test   %edx,%edx
  je     L97
  movzbl 0x3(%rsi),%edi
  test   %edi,%edi
  je     L151
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  pxor   %xmm4,%xmm4
  cvtsi2sd %edi,%xmm0
  pxor   %xmm2,%xmm2
  movaps %xmm9,%xmm5
  cvtsi2sd %edx,%xmm1
  movzbl (%rsi),%edx
  pxor   %xmm3,%xmm3
  pxor   %xmm10,%xmm10
  cvtsi2ss %edx,%xmm4
  movzbl -0x4(%rax),%edx
  divsd  %xmm7,%xmm0
  cvtsi2ss %edx,%xmm2
  movzbl 0x1(%rsi),%edx
  cvtsi2ss %edx,%xmm3
  movzbl -0x3(%rax),%edx
  divsd  %xmm7,%xmm1
  cvtsd2ss %xmm0,%xmm0
  subss  %xmm0,%xmm5
  mulss  %xmm5,%xmm2
  cvtsd2ss %xmm1,%xmm1
  mulss  %xmm1,%xmm4
  mulss  %xmm1,%xmm3
  mulss  %xmm1,%xmm0
  addss  %xmm2,%xmm4
  comiss D57(%rip),%xmm4
  pxor   %xmm2,%xmm2
  cvtsi2ss %edx,%xmm2
  movzbl 0x2(%rsi),%edx
  mulss  %xmm5,%xmm2
  addss  %xmm2,%xmm3
  pxor   %xmm2,%xmm2
  cvtsi2ss %edx,%xmm2
  movzbl -0x2(%rax),%edx
  cvtsi2ss %edx,%xmm10
  mov    $0xff,%edx
  mulss  %xmm1,%xmm2
  mulss  %xmm5,%xmm1
  mulss  %xmm5,%xmm10
  addss  %xmm1,%xmm0
  addss  %xmm10,%xmm2
  mulss  %xmm8,%xmm0
  ja     L134
  xor    %edx,%edx
  comiss %xmm4,%xmm6
  ja     L134
  cvttss2si %xmm4,%edx
L134:
  comiss D57(%rip),%xmm3
  jbe    L73
  or     $0xff,%dh
L107:
  comiss D57(%rip),%xmm2
  jbe    L154
L21:
  or     $0xff0000,%edx
L159:
  comiss D57(%rip),%xmm0
  jbe    L164
L149:
  or     $0xff000000,%edx
L167:
  add    $0x4,%rsi
  mov    %edx,-0x4(%rax)
  cmp    %rsi,%rcx
  ja     L46
L45:
  ret
  nopl   0x0(%rax)
L73:
  comiss %xmm3,%xmm6
  ja     L107
  cvttss2si %xmm3,%edi
  shl    $0x8,%edi
  or     %edi,%edx
  comiss D57(%rip),%xmm2
  ja     L21
L154:
  comiss %xmm2,%xmm6
  ja     L159
  cvttss2si %xmm2,%edi
  shl    $0x10,%edi
  or     %edi,%edx
  comiss D57(%rip),%xmm0
  ja     L149
L164:
  comiss %xmm0,%xmm6
  ja     L167
  cvttss2si %xmm0,%edi
  shl    $0x18,%edi
  or     %edi,%edx
  jmp    L167
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D53
type: f64
name: extract_symbolic_data
arguments: data_label: D66
type: f32
name: extract_symbolic_data
arguments: data_label: D57
type: byte[4]

tool: D53: 255

tool: D66: 1

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

assistant: ```c
void compositeSourceAtop(unsigned char *dst, unsigned char *src, int width, int height) {
  unsigned char *end = src + ((width * height) << 2);
  unsigned int *dst32 = (unsigned int *)dst;
  int d, s;
  float rr, rg, rb, ra;
  float sa, sa_inv;
  float da;
  while (src < end) {
    d = *(dst + 3);
    if (d == 0) {
      *dst32++ = 0;
    } else {
      s = *(src + 3);
      if (s == 0) {
        dst32++;
      } else {
        da = d / 255.0;
        sa = s / 255.0;
        sa_inv = (1.0 - sa);
        rr = *src * da + *dst * sa_inv;
        rg = *(src + 1) * da + *(dst + 1) * sa_inv;
        rb = *(src + 2) * da + *(dst + 2) * sa_inv;
        ra = (sa * da + da * sa_inv) * 255.0;
        *dst32++ = (int)((rr) > 0xff ? 0xff : ((rr) < 0 ? 0 : (rr))) | (int)((rg) > 0xff ? 0xff : ((rg) < 0 ? 0 : (rg))) << 8 | (int)((rb) > 0xff ? 0xff : ((rb) < 0 ? 0 : (rb))) << 16 | (int)((ra) > 0xff ? 0xff : ((ra) < 0 ? 0 : (ra))) << 24;
      }
    }
    src += 4;
    dst += 4;
  }
}
```