user: What is the c source code of the assembly code below:

```asm
<BTIC4B_DecImageClrDec2T_RCT>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x34(%rbp)
  mov    %esi,-0x38(%rbp)
  mov    %edx,-0x3c(%rbp)
  mov    %ecx,-0x40(%rbp)
  mov    %r8d,-0x44(%rbp)
  mov    %r9d,-0x48(%rbp)
  mov    -0x44(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x44(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x48(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x48(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    0x10(%rbp),%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x40(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%edx
  mov    0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x34(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L8
  mov    -0x10(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x24(%rbp)
  jmp    L2
L8:
  mov    -0x3c(%rbp),%edx
  mov    -0x40(%rbp),%eax
  add    %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x2c(%rbp),%edx
  mov    -0x40(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x3c(%rbp),%edx
  mov    -0x40(%rbp),%eax
  add    %edx,%eax
  sar    $0x2,%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  mov    -0x20(%rbp),%edx
  mov    -0x40(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x24(%rbp)
L2:
  mov    -0x30(%rbp),%eax
  or     -0x2c(%rbp),%eax
  or     -0x28(%rbp),%eax
  sar    $0x8,%eax
  test   %eax,%eax
  je     L34
  mov    -0x30(%rbp),%eax
  mov    %eax,%edi
  call   <lqtvq_clamp255@plt>
  mov    %eax,-0x30(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %eax,%edi
  call   <lqtvq_clamp255@plt>
  mov    %eax,-0x2c(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <lqtvq_clamp255@plt>
  mov    %eax,-0x28(%rbp)
L34:
  mov    -0x24(%rbp),%eax
  or     -0x20(%rbp),%eax
  or     -0x1c(%rbp),%eax
  sar    $0x8,%eax
  test   %eax,%eax
  je     L21
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <lqtvq_clamp255@plt>
  mov    %eax,-0x24(%rbp)
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <lqtvq_clamp255@plt>
  mov    %eax,-0x20(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edi
  call   <lqtvq_clamp255@plt>
  mov    %eax,-0x1c(%rbp)
L21:
  mov    0x18(%rbp),%rax
  mov    -0x30(%rbp),%edx
  mov    %edx,(%rax)
  mov    0x20(%rbp),%rax
  mov    -0x2c(%rbp),%edx
  mov    %edx,(%rax)
  mov    0x28(%rbp),%rax
  mov    -0x28(%rbp),%edx
  mov    %edx,(%rax)
  mov    0x30(%rbp),%rax
  mov    -0x24(%rbp),%edx
  mov    %edx,(%rax)
  mov    0x38(%rbp),%rax
  mov    -0x20(%rbp),%edx
  mov    %edx,(%rax)
  mov    0x40(%rbp),%rax
  mov    -0x1c(%rbp),%edx
  mov    %edx,(%rax)
  nop
  leave
  ret
```

assistant: ```c
void BTIC4B_DecImageClrDec2T_RCT(int tag, int acy, int acu, int acv, int dcy, int dcu, int dcv, int *rr0, int *rg0, int *rb0, int *rr1, int *rg1, int *rb1) {
  int mcy, mcu, mcv;
  int ncy, ncu, ncv;
  int cr0, cg0, cb0;
  int cr3, cg3, cb3;
  mcy = acy - (dcy >> 1);
  ncy = mcy + dcy;
  mcu = acu - (dcu >> 1);
  ncu = mcu + dcu;
  mcv = acv - (dcv >> 1);
  ncv = mcv + dcv;
  if (tag & 0x40) {
    cg0 = mcy - ((mcu + mcv) >> 2);
    cb0 = cg0 + mcu;
    cr0 = cg0 + mcv;
    cg3 = ncy - ((ncu + ncv) >> 2);
    cb3 = cg3 + ncu;
    cr3 = cg3 + ncv;
  } else {
    cg0 = mcy - ((acu + acv) >> 2);
    cb0 = cg0 + acu;
    cr0 = cg0 + acv;
    cg3 = ncy - ((acu + acv) >> 2);
    cb3 = cg3 + acu;
    cr3 = cg3 + acv;
  }
  if ((cr0 | cg0 | cb0) >> 8) {
    cr0 = lqtvq_clamp255(cr0);
    cg0 = lqtvq_clamp255(cg0);
    cb0 = lqtvq_clamp255(cb0);
  }
  if ((cr3 | cg3 | cb3) >> 8) {
    cr3 = lqtvq_clamp255(cr3);
    cg3 = lqtvq_clamp255(cg3);
    cb3 = lqtvq_clamp255(cb3);
  }
  *rr0 = cr0;
  *rg0 = cg0;
  *rb0 = cb0;
  *rr1 = cr3;
  *rg1 = cg3;
  *rb1 = cb3;
}
```