user: Converte this assembly snippet into its equivalent C code:

```asm
<fast_forward_dst>:
  endbr64
  mov    %rdi,%rax
  lea    -0x1(%rdx),%ecx
  mov    $0x1,%edi
  push   %rbx
  shl    %cl,%edi
  movswl (%rax),%r8d
  movswl 0x2(%rax),%ecx
  movswl 0x6(%rax),%r11d
  movswl 0x4(%rax),%r10d
  imul   $0x4a,%r10d,%r10d
  lea    (%r8,%r11,1),%ebx
  add    %ecx,%r11d
  sub    %ecx,%r8d
  imul   $0x1d,%ebx,%r9d
  imul   $0x37,%r11d,%ecx
  imul   $0x37,%ebx,%ebx
  imul   $0xffffffe3,%r11d,%r11d
  add    %ecx,%r9d
  mov    %edx,%ecx
  add    %r10d,%r9d
  add    %edi,%r9d
  sar    %cl,%r9d
  mov    %r9w,(%rsi)
  movswl 0x2(%rax),%ecx
  movswl (%rax),%r9d
  add    %ecx,%r9d
  movswl 0x6(%rax),%ecx
  sub    %ecx,%r9d
  mov    %edx,%ecx
  imul   $0x4a,%r9d,%r9d
  add    %edi,%r9d
  sar    %cl,%r9d
  mov    %r9w,0x8(%rsi)
  imul   $0x1d,%r8d,%r9d
  imul   $0x37,%r8d,%r8d
  add    %ebx,%r9d
  add    %r11d,%r8d
  sub    %r10d,%r9d
  add    %r10d,%r8d
  add    %edi,%r9d
  add    %edi,%r8d
  sar    %cl,%r9d
  sar    %cl,%r8d
  mov    %r9w,0x10(%rsi)
  mov    %r8w,0x18(%rsi)
  movswl 0xa(%rax),%ecx
  movswl 0x8(%rax),%r8d
  movswl 0xe(%rax),%r11d
  movswl 0xc(%rax),%r10d
  lea    (%r11,%r8,1),%ebx
  add    %ecx,%r11d
  sub    %ecx,%r8d
  imul   $0x1d,%ebx,%r9d
  imul   $0x37,%r11d,%ecx
  imul   $0x4a,%r10d,%r10d
  add    %ecx,%r9d
  imul   $0x37,%ebx,%ebx
  mov    %edx,%ecx
  add    %r10d,%r9d
  imul   $0xffffffe3,%r11d,%r11d
  add    %edi,%r9d
  sar    %cl,%r9d
  mov    %r9w,0x2(%rsi)
  movswl 0xa(%rax),%ecx
  movswl 0x8(%rax),%r9d
  add    %ecx,%r9d
  movswl 0xe(%rax),%ecx
  sub    %ecx,%r9d
  mov    %edx,%ecx
  imul   $0x4a,%r9d,%r9d
  add    %edi,%r9d
  sar    %cl,%r9d
  mov    %r9w,0xa(%rsi)
  imul   $0x1d,%r8d,%r9d
  imul   $0x37,%r8d,%r8d
  add    %ebx,%r9d
  add    %r11d,%r8d
  sub    %r10d,%r9d
  add    %r10d,%r8d
  add    %edi,%r9d
  add    %edi,%r8d
  sar    %cl,%r9d
  sar    %cl,%r8d
  mov    %r9w,0x12(%rsi)
  mov    %r8w,0x1a(%rsi)
  movswl 0x12(%rax),%ecx
  movswl 0x10(%rax),%r8d
  movswl 0x16(%rax),%r11d
  movswl 0x14(%rax),%r10d
  lea    (%r8,%r11,1),%ebx
  add    %ecx,%r11d
  sub    %ecx,%r8d
  imul   $0x1d,%ebx,%r9d
  imul   $0x37,%r11d,%ecx
  imul   $0x4a,%r10d,%r10d
  add    %ecx,%r9d
  mov    %edx,%ecx
  add    %r10d,%r9d
  add    %edi,%r9d
  sar    %cl,%r9d
  mov    %r9w,0x4(%rsi)
  movswl 0x12(%rax),%ecx
  movswl 0x10(%rax),%r9d
  add    %ecx,%r9d
  movswl 0x16(%rax),%ecx
  sub    %ecx,%r9d
  mov    %edx,%ecx
  imul   $0x4a,%r9d,%r9d
  imul   $0x37,%ebx,%ebx
  imul   $0xffffffe3,%r11d,%r11d
  add    %edi,%r9d
  sar    %cl,%r9d
  mov    %r9w,0xc(%rsi)
  imul   $0x1d,%r8d,%r9d
  imul   $0x37,%r8d,%r8d
  add    %ebx,%r9d
  add    %r11d,%r8d
  sub    %r10d,%r9d
  add    %r10d,%r8d
  add    %edi,%r9d
  add    %edi,%r8d
  sar    %cl,%r9d
  sar    %cl,%r8d
  mov    %r9w,0x14(%rsi)
  mov    %r8w,0x1c(%rsi)
  movswl 0x1a(%rax),%ecx
  movswl 0x18(%rax),%r8d
  movswl 0x1e(%rax),%r10d
  movswl 0x1c(%rax),%r9d
  lea    (%r8,%r10,1),%r11d
  add    %ecx,%r10d
  sub    %ecx,%r8d
  imul   $0x1d,%r11d,%ebx
  imul   $0x37,%r10d,%ecx
  imul   $0x4a,%r9d,%r9d
  imul   $0x37,%r11d,%r11d
  add    %ecx,%ebx
  mov    %edx,%ecx
  add    %r9d,%ebx
  add    %edi,%ebx
  sar    %cl,%ebx
  mov    %bx,0x6(%rsi)
  movswl 0x1a(%rax),%ebx
  movswl 0x18(%rax),%ecx
  add    %ebx,%ecx
  movswl 0x1e(%rax),%ebx
  mov    %ecx,%eax
  mov    %edx,%ecx
  sub    %ebx,%eax
  pop    %rbx
  imul   $0x4a,%eax,%eax
  add    %edi,%eax
  sar    %cl,%eax
  mov    %ax,0xe(%rsi)
  imul   $0x1d,%r8d,%eax
  add    %r11d,%eax
  sub    %r9d,%eax
  imul   $0xffffffe3,%r10d,%r10d
  add    %edi,%eax
  sar    %cl,%eax
  mov    %ax,0x16(%rsi)
  imul   $0x37,%r8d,%eax
  add    %r10d,%eax
  add    %r9d,%eax
  add    %edi,%eax
  sar    %cl,%eax
  mov    %ax,0x1e(%rsi)
  ret
```

assistant: ```c
void fast_forward_dst(short *block, short *coeff, int32_t shift) {
  int32_t i, c[4];
  int32_t rnd_factor = 1 << (shift - 1);
  for (i = 0; i < 4; i++) {
    c[0] = block[4 * i + 0] + block[4 * i + 3];
    c[1] = block[4 * i + 1] + block[4 * i + 3];
    c[2] = block[4 * i + 0] - block[4 * i + 1];
    c[3] = 74 * block[4 * i + 2];
    coeff[i] = (short)((29 * c[0] + 55 * c[1] + c[3] + rnd_factor) >> shift);
    coeff[4 + i] = (short)((74 * (block[4 * i + 0] + block[4 * i + 1] - block[4 * i + 3]) + rnd_factor) >> shift);
    coeff[8 + i] = (short)((29 * c[2] + 55 * c[0] - c[3] + rnd_factor) >> shift);
    coeff[12 + i] = (short)((55 * c[2] - 29 * c[1] + c[3] + rnd_factor) >> shift);
  }
}
```