user: What would the C source look like for the assembly code provided here?

```asm
<alphaBlendwith>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x24(%rbp)
  mov    %esi,-0x28(%rbp)
  mov    -0x24(%rbp),%eax
  shr    $0x18,%eax
  mov    %eax,-0x18(%rbp)
  cmpl   $0x0,-0x18(%rbp)
  jne    L18
  mov    -0x28(%rbp),%eax
  jmp    L39
L18:
  cmpl   $0xff,-0x18(%rbp)
  jne    L1
  mov    -0x24(%rbp),%eax
  jmp    L39
L1:
  mov    $0xff,%eax
  sub    -0x18(%rbp),%eax
  mov    %eax,-0x14(%rbp)
  movl   $0xff,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    -0x10(%rbp),%eax
  and    %eax,%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  imul   %eax,%esi
  mov    -0x28(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    -0x10(%rbp),%eax
  and    %eax,%edx
  mov    -0x14(%rbp),%eax
  imul   %edx,%eax
  add    %esi,%eax
  add    $0xfe,%eax
  mov    %eax,%edx
  mov    $0x80808081,%eax
  imul   %rdx,%rax
  shr    $0x20,%rax
  mov    %eax,%edx
  shr    $0x7,%edx
  mov    -0x10(%rbp),%eax
  and    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    -0x4(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  or     %eax,-0xc(%rbp)
  movl   $0x8,-0x8(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    -0x10(%rbp),%eax
  and    %eax,%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  imul   %eax,%esi
  mov    -0x28(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    -0x10(%rbp),%eax
  and    %eax,%edx
  mov    -0x14(%rbp),%eax
  imul   %edx,%eax
  add    %esi,%eax
  add    $0xfe,%eax
  mov    %eax,%edx
  mov    $0x80808081,%eax
  imul   %rdx,%rax
  shr    $0x20,%rax
  mov    %eax,%edx
  shr    $0x7,%edx
  mov    -0x10(%rbp),%eax
  and    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    -0x4(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  or     %eax,-0xc(%rbp)
  movl   $0x10,-0x8(%rbp)
  mov    -0x24(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    -0x10(%rbp),%eax
  and    %eax,%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  imul   %eax,%esi
  mov    -0x28(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    -0x10(%rbp),%eax
  and    %eax,%edx
  mov    -0x14(%rbp),%eax
  imul   %edx,%eax
  add    %esi,%eax
  add    $0xfe,%eax
  mov    %eax,%edx
  mov    $0x80808081,%eax
  imul   %rdx,%rax
  shr    $0x20,%rax
  mov    %eax,%edx
  shr    $0x7,%edx
  mov    -0x10(%rbp),%eax
  and    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    -0x4(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  or     %eax,-0xc(%rbp)
  movl   $0x18,-0x8(%rbp)
  mov    -0x18(%rbp),%edx
  mov    %edx,%eax
  shl    $0x8,%eax
  sub    %edx,%eax
  mov    %eax,%esi
  mov    -0x28(%rbp),%edx
  mov    -0x8(%rbp),%eax
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    -0x10(%rbp),%eax
  and    %eax,%edx
  mov    -0x14(%rbp),%eax
  imul   %edx,%eax
  add    %esi,%eax
  add    $0xfe,%eax
  mov    %eax,%edx
  mov    $0x80808081,%eax
  imul   %rdx,%rax
  shr    $0x20,%rax
  mov    %eax,%edx
  shr    $0x7,%edx
  mov    -0x10(%rbp),%eax
  and    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    -0x4(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  or     %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
L39:
  pop    %rbp
  ret
```

assistant: ```c
int alphaBlendwith(int sourceWord, int destinationWord) {
  int result;
  int unAlpha;
  int shift;
  int colorMask;
  int blend;
  int alpha;
  alpha = ((unsigned)sourceWord) >> 24;
  if (alpha == 0) {
    return destinationWord;
  }
  if (alpha == 255) {
    return sourceWord;
  }
  unAlpha = 255 - alpha;
  colorMask = 255;
  result = 0;
  shift = 0;
  blend = ((((((((unsigned)sourceWord) >> shift) & colorMask) * alpha) + (((((unsigned)destinationWord) >> shift) & colorMask) * unAlpha)) + 254) / 255) & colorMask;
  result = result | (blend << shift);
  shift = 8;
  blend = ((((((((unsigned)sourceWord) >> shift) & colorMask) * alpha) + (((((unsigned)destinationWord) >> shift) & colorMask) * unAlpha)) + 254) / 255) & colorMask;
  result = result | (blend << shift);
  shift = 16;
  blend = ((((((((unsigned)sourceWord) >> shift) & colorMask) * alpha) + (((((unsigned)destinationWord) >> shift) & colorMask) * unAlpha)) + 254) / 255) & colorMask;
  result = result | (blend << shift);
  shift = 24;
  blend = ((((alpha * 255) + (((((unsigned)destinationWord) >> shift) & colorMask) * unAlpha)) + 254) / 255) & colorMask;
  result = result | (blend << shift);
  return result;
}
```