user: 请从给定的汇编指令推导出C源代码:

```asm
<EmitRGBATileLine>:
  endbr64
  push   %r13
  mov    %ecx,%r13d
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0x58,%rsp
  mov    0x100(%rdx),%edx
  mov    (%rbx),%esi
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  mov    0x0(%rbp),%edi
  call   <GetRGBA@plt>
  mov    0x100(%rbx),%edx
  mov    0x4(%rbp),%edi
  mov    (%rbx),%esi
  mov    %eax,(%rsp)
  call   <GetRGBA@plt>
  mov    0x104(%rbx),%edx
  mov    0x4(%rbx),%esi
  mov    0x8(%rbp),%edi
  mov    %eax,0x4(%rsp)
  call   <GetRGBA@plt>
  mov    0x104(%rbx),%edx
  mov    0x4(%rbx),%esi
  mov    0xc(%rbp),%edi
  mov    %eax,0x8(%rsp)
  call   <GetRGBA@plt>
  mov    0x108(%rbx),%edx
  mov    0x8(%rbx),%esi
  mov    0x10(%rbp),%edi
  mov    %eax,0xc(%rsp)
  call   <GetRGBA@plt>
  mov    0x108(%rbx),%edx
  mov    0x8(%rbx),%esi
  mov    0x14(%rbp),%edi
  mov    %eax,0x10(%rsp)
  call   <GetRGBA@plt>
  mov    0x10c(%rbx),%edx
  mov    0xc(%rbx),%esi
  mov    0x18(%rbp),%edi
  mov    %eax,0x14(%rsp)
  call   <GetRGBA@plt>
  mov    0x10c(%rbx),%edx
  mov    0xc(%rbx),%esi
  mov    0x1c(%rbp),%edi
  mov    %eax,0x18(%rsp)
  call   <GetRGBA@plt>
  mov    0x110(%rbx),%edx
  mov    0x10(%rbx),%esi
  mov    0x100(%rbp),%edi
  mov    %eax,0x1c(%rsp)
  call   <GetRGBA@plt>
  mov    0x110(%rbx),%edx
  mov    0x10(%rbx),%esi
  mov    0x104(%rbp),%edi
  mov    %eax,0x20(%rsp)
  call   <GetRGBA@plt>
  mov    0x114(%rbx),%edx
  mov    0x14(%rbx),%esi
  mov    0x108(%rbp),%edi
  mov    %eax,0x24(%rsp)
  call   <GetRGBA@plt>
  mov    0x114(%rbx),%edx
  mov    0x14(%rbx),%esi
  mov    0x10c(%rbp),%edi
  mov    %eax,0x28(%rsp)
  call   <GetRGBA@plt>
  mov    0x118(%rbx),%edx
  mov    0x18(%rbx),%esi
  mov    0x110(%rbp),%edi
  mov    %eax,0x2c(%rsp)
  call   <GetRGBA@plt>
  mov    0x118(%rbx),%edx
  mov    0x18(%rbx),%esi
  mov    0x114(%rbp),%edi
  mov    %eax,0x30(%rsp)
  call   <GetRGBA@plt>
  mov    0x11c(%rbx),%edx
  mov    0x1c(%rbx),%esi
  mov    0x118(%rbp),%edi
  mov    %eax,0x34(%rsp)
  call   <GetRGBA@plt>
  mov    0x11c(%rbx),%edx
  mov    0x1c(%rbx),%esi
  mov    0x11c(%rbp),%edi
  mov    %eax,0x38(%rsp)
  call   <GetRGBA@plt>
  mov    %rsp,%rsi
  mov    $0x10,%ecx
  mov    %r13d,%edx
  mov    %r12,%rdi
  mov    %eax,0x3c(%rsp)
  call   <dram_store_u16@plt>
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L6
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L6:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void EmitRGBATileLine(struct hle_t *hle, const int16_t *y, const int16_t *u, uint32_t address) {
  uint16_t rgba[16];
  const int16_t *const v = u + 64;
  const int16_t *const y2 = y + 64;
  rgba[0] = GetRGBA(y[0], u[0], v[0]);
  rgba[1] = GetRGBA(y[1], u[0], v[0]);
  rgba[2] = GetRGBA(y[2], u[1], v[1]);
  rgba[3] = GetRGBA(y[3], u[1], v[1]);
  rgba[4] = GetRGBA(y[4], u[2], v[2]);
  rgba[5] = GetRGBA(y[5], u[2], v[2]);
  rgba[6] = GetRGBA(y[6], u[3], v[3]);
  rgba[7] = GetRGBA(y[7], u[3], v[3]);
  rgba[8] = GetRGBA(y2[0], u[4], v[4]);
  rgba[9] = GetRGBA(y2[1], u[4], v[4]);
  rgba[10] = GetRGBA(y2[2], u[5], v[5]);
  rgba[11] = GetRGBA(y2[3], u[5], v[5]);
  rgba[12] = GetRGBA(y2[4], u[6], v[6]);
  rgba[13] = GetRGBA(y2[5], u[6], v[6]);
  rgba[14] = GetRGBA(y2[6], u[7], v[7]);
  rgba[15] = GetRGBA(y2[7], u[7], v[7]);
  dram_store_u16(hle, rgba, address, 16);
}
```