user: 下面的汇编指令对应的C源代码是什么:

```asm
<stbi_decode_DXT_color_block>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x20,-0x28(%rbp)
  mov    -0x50(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x50(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  add    %edx,%eax
  mov    %eax,-0x20(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x50(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  add    %edx,%eax
  mov    %eax,-0x1c(%rbp)
  lea    -0x2c(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  lea    -0x34(%rbp),%rsi
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <stbi_rgb_888_from_565@plt>
  mov    -0x34(%rbp),%eax
  mov    %al,-0x14(%rbp)
  mov    -0x30(%rbp),%eax
  mov    %al,-0x13(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %al,-0x12(%rbp)
  lea    -0x2c(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  lea    -0x34(%rbp),%rsi
  mov    -0x1c(%rbp),%eax
  mov    %eax,%edi
  call   <stbi_rgb_888_from_565@plt>
  mov    -0x34(%rbp),%eax
  mov    %al,-0x11(%rbp)
  mov    -0x30(%rbp),%eax
  mov    %al,-0x10(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %al,-0xf(%rbp)
  movzbl -0x14(%rbp),%eax
  movzbl %al,%eax
  lea    (%rax,%rax,1),%edx
  movzbl -0x11(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0xe(%rbp)
  movzbl -0x13(%rbp),%eax
  movzbl %al,%eax
  lea    (%rax,%rax,1),%edx
  movzbl -0x10(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0xd(%rbp)
  movzbl -0x12(%rbp),%eax
  movzbl %al,%eax
  lea    (%rax,%rax,1),%edx
  movzbl -0xf(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0xc(%rbp)
  movzbl -0x14(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x11(%rbp),%eax
  movzbl %al,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0xb(%rbp)
  movzbl -0x13(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x10(%rbp),%eax
  movzbl %al,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0xa(%rbp)
  movzbl -0x12(%rbp),%eax
  movzbl %al,%edx
  movzbl -0xf(%rbp),%eax
  movzbl %al,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0x9(%rbp)
  movl   $0x0,-0x24(%rbp)
  jmp    L8
L17:
  mov    -0x28(%rbp),%eax
  sar    $0x3,%eax
  movslq %eax,%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x28(%rbp),%eax
  and    $0x7,%eax
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    $0x3,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  addl   $0x2,-0x28(%rbp)
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%eax
  cltq
  movzbl -0x14(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  mov    -0x18(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x24(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  movslq %ecx,%rax
  movzbl -0x14(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  mov    -0x18(%rbp),%eax
  lea    0x2(%rax),%ecx
  mov    -0x24(%rbp),%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  movslq %ecx,%rax
  movzbl -0x14(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  addl   $0x4,-0x24(%rbp)
L8:
  cmpl   $0x3f,-0x24(%rbp)
  jle    L17
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L26
  call   <__stack_chk_fail@plt>
L26:
  leave
  ret
```

assistant: ```c
void stbi_decode_DXT_color_block(unsigned char uncompressed[16 * 4], unsigned char compressed[8]) {
  int next_bit = 4 * 8;
  int i, r, g, b;
  int c0, c1;
  unsigned char decode_colors[4 * 3];
  c0 = compressed[0] + (compressed[1] << 8);
  c1 = compressed[2] + (compressed[3] << 8);
  stbi_rgb_888_from_565(c0, &r, &g, &b);
  decode_colors[0] = r;
  decode_colors[1] = g;
  decode_colors[2] = b;
  stbi_rgb_888_from_565(c1, &r, &g, &b);
  decode_colors[3] = r;
  decode_colors[4] = g;
  decode_colors[5] = b;
  decode_colors[6] = (2 * decode_colors[0] + decode_colors[3]) / 3;
  decode_colors[7] = (2 * decode_colors[1] + decode_colors[4]) / 3;
  decode_colors[8] = (2 * decode_colors[2] + decode_colors[5]) / 3;
  decode_colors[9] = (decode_colors[0] + 2 * decode_colors[3]) / 3;
  decode_colors[10] = (decode_colors[1] + 2 * decode_colors[4]) / 3;
  decode_colors[11] = (decode_colors[2] + 2 * decode_colors[5]) / 3;
  for (i = 0; i < 16 * 4; i += 4) {
    int idx = ((compressed[next_bit >> 3] >> (next_bit & 7)) & 3) * 3;
    next_bit += 2;
    uncompressed[i + 0] = decode_colors[idx + 0];
    uncompressed[i + 1] = decode_colors[idx + 1];
    uncompressed[i + 2] = decode_colors[idx + 2];
  }
}
```