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

```asm
<motion_vector>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%rbx
  mov    %rsi,0x8(%rsp)
  mov    %edx,%r14d
  mov    %ecx,%r13d
  mov    %r8d,%ebp
  mov    %r9d,%r15d
  mov    $0x0,%eax
  call   <Get_motion_code@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  je     L90
  test   %r14d,%r14d
  jne    L73
L90:
  mov    $0x0,%ecx
L36:
  mov    0x50(%rsp),%r8d
  mov    %r12d,%edx
  mov    %r14d,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <decode_motion_vector@plt>
  test   %ebp,%ebp
  jne    L6
L40:
  mov    $0x0,%eax
  call   <Get_motion_code@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  je     L105
  test   %r13d,%r13d
  jne    L99
L105:
  mov    $0x0,%ecx
L77:
  test   %r15d,%r15d
  je     L93
  sarl   0x4(%rbx)
  lea    0x4(%rbx),%rdi
  mov    0x50(%rsp),%r8d
  mov    %r12d,%edx
  mov    %r13d,%esi
  mov    $0x0,%eax
  call   <decode_motion_vector@plt>
  shll   0x4(%rbx)
L66:
  test   %ebp,%ebp
  jne    L18
L115:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L73:
  mov    %r14d,%edi
  mov    $0x0,%eax
  call   <Get_Bits@plt>
  mov    %eax,%ecx
  jmp    L36
L6:
  mov    $0x0,%eax
  call   <Get_dmvector@plt>
  mov    0x8(%rsp),%rdx
  mov    %eax,(%rdx)
  jmp    L40
L99:
  mov    %r13d,%edi
  mov    $0x0,%eax
  call   <Get_Bits@plt>
  mov    %eax,%ecx
  jmp    L77
L18:
  mov    $0x0,%eax
  call   <Get_dmvector@plt>
  mov    0x8(%rsp),%rbx
  mov    %eax,0x4(%rbx)
  jmp    L115
L93:
  lea    0x4(%rbx),%rdi
  mov    0x50(%rsp),%r8d
  mov    %r12d,%edx
  mov    %r13d,%esi
  mov    $0x0,%eax
  call   <decode_motion_vector@plt>
  jmp    L66
```

assistant: ```c
void motion_vector(signed int *PMV, signed int *dmvector, signed int h_r_size, signed int v_r_size, signed int dmv, signed int mvscale, signed int full_pel_vector) {
  signed int motion_code;
  signed int motion_residual;
  motion_code = Get_motion_code();
  unsigned int tmp_if_expr$2;
  unsigned int return_value_Get_Bits$1;
  if (!(h_r_size == 0)) {
    if (motion_code == 0)
      goto __CPROVER_DUMP_L1;
    return_value_Get_Bits$1 = Get_Bits(h_r_size);
    tmp_if_expr$2 = return_value_Get_Bits$1;
  } else {
  __CPROVER_DUMP_L1:;
    tmp_if_expr$2 = (unsigned int)0;
  }
  motion_residual = (signed int)tmp_if_expr$2;
  decode_motion_vector(&PMV[(signed long int)0], h_r_size, motion_code, motion_residual, full_pel_vector);
  if (!(dmv == 0))
    dmvector[(signed long int)0] = Get_dmvector();
  motion_code = Get_motion_code();
  unsigned int tmp_if_expr$4;
  unsigned int return_value_Get_Bits$3;
  if (!(v_r_size == 0)) {
    if (motion_code == 0)
      goto __CPROVER_DUMP_L4;
    return_value_Get_Bits$3 = Get_Bits(v_r_size);
    tmp_if_expr$4 = return_value_Get_Bits$3;
  } else {
  __CPROVER_DUMP_L4:;
    tmp_if_expr$4 = (unsigned int)0;
  }
  motion_residual = (signed int)tmp_if_expr$4;
  if (!(mvscale == 0))
    PMV[(signed long int)1] = PMV[(signed long int)1] >> 1;
  decode_motion_vector(&PMV[(signed long int)1], v_r_size, motion_code, motion_residual, full_pel_vector);
  if (!(mvscale == 0))
    PMV[(signed long int)1] = PMV[(signed long int)1] << 1;
  if (!(dmv == 0))
    dmvector[(signed long int)1] = Get_dmvector();
}
```