user: Translate the below assembly code into C programming language:

```asm
<_mergeSort>:
  endbr64
  cmp    %edx,%ecx
  jg     L34
  xor    %eax,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L34:
  lea    (%rcx,%rdx,1),%eax
  push   %r15
  mov    %rdi,%r15
  push   %r14
  push   %r13
  mov    %eax,%r13d
  push   %r12
  shr    $0x1f,%r13d
  mov    %edx,%r12d
  push   %rbp
  add    %eax,%r13d
  xor    %ebp,%ebp
  push   %rbx
  sar    %r13d
  mov    %ecx,%ebx
  sub    $0x28,%rsp
  cmp    %r13d,%edx
  jl     L125
  add    $0x1,%r13d
  cmp    %ebx,%r13d
  jl     L59
L69:
  mov    %ebx,%r8d
  mov    %r13d,%ecx
  mov    %r12d,%edx
  mov    %r15,%rdi
  call   <merge@plt>
  add    $0x28,%rsp
  pop    %rbx
  add    %rbp,%rax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L125:
  lea    (%rdx,%r13,1),%eax
  xor    %r14d,%r14d
  mov    %eax,%r9d
  shr    $0x1f,%r9d
  add    %eax,%r9d
  sar    %r9d
  mov    %r9d,%ebp
  cmp    %r9d,%edx
  jl     L54
L71:
  lea    0x1(%rbp),%r9d
  cmp    %r9d,%r13d
  jg     L122
L104:
  mov    %r13d,%r8d
  mov    %r9d,%ecx
  mov    %r12d,%edx
  mov    %r15,%rdi
  mov    %rsi,(%rsp)
  add    $0x1,%r13d
  call   <merge@plt>
  mov    (%rsp),%rsi
  lea    (%rax,%r14,1),%rbp
  cmp    %ebx,%r13d
  jge    L69
L59:
  lea    0x0(%r13,%rbx,1),%eax
  xor    %r14d,%r14d
  mov    %eax,%r9d
  shr    $0x1f,%r9d
  add    %eax,%r9d
  sar    %r9d
  cmp    %r9d,%r13d
  jl     L87
L17:
  add    $0x1,%r9d
  cmp    %r9d,%ebx
  jg     L6
L101:
  mov    %ebx,%r8d
  mov    %r9d,%ecx
  mov    %r13d,%edx
  mov    %r15,%rdi
  mov    %rsi,(%rsp)
  call   <merge@plt>
  mov    (%rsp),%rsi
  add    %r14,%rax
  add    %rax,%rbp
  jmp    L69
  nopw   0x0(%rax,%rax,1)
L54:
  lea    (%rdx,%r9,1),%eax
  mov    %rsi,0x8(%rsp)
  mov    %eax,%r9d
  shr    $0x1f,%r9d
  add    %eax,%r9d
  mov    %r9d,%r14d
  sar    %r14d
  mov    %r14d,%ecx
  add    $0x1,%r14d
  call   <_mergeSort>
  mov    0x8(%rsp),%rsi
  mov    %r14d,%edx
  mov    %ebp,%ecx
  mov    %r15,%rdi
  mov    %rax,(%rsp)
  call   <_mergeSort>
  mov    0x8(%rsp),%rsi
  mov    %r14d,%ecx
  mov    %r12d,%edx
  add    (%rsp),%rax
  mov    %ebp,%r8d
  mov    %r15,%rdi
  mov    %rax,(%rsp)
  call   <merge@plt>
  mov    (%rsp),%rdx
  mov    0x8(%rsp),%rsi
  lea    (%rdx,%rax,1),%r14
  jmp    L71
  nopl   0x0(%rax,%rax,1)
L6:
  lea    (%rbx,%r9,1),%eax
  mov    %r9d,%edx
  mov    %r15,%rdi
  mov    %r9d,0x1c(%rsp)
  mov    %eax,%r10d
  mov    %rsi,0x8(%rsp)
  shr    $0x1f,%r10d
  add    %eax,%r10d
  sar    %r10d
  mov    %r10d,%ecx
  mov    %r10d,0x10(%rsp)
  call   <_mergeSort>
  mov    0x10(%rsp),%r10d
  mov    %ebx,%ecx
  mov    %r15,%rdi
  mov    0x8(%rsp),%rsi
  mov    %rax,(%rsp)
  add    $0x1,%r10d
  mov    %r10d,%edx
  mov    %r10d,0x10(%rsp)
  call   <_mergeSort>
  mov    0x1c(%rsp),%r9d
  mov    %ebx,%r8d
  mov    %r15,%rdi
  mov    0x10(%rsp),%ecx
  mov    0x8(%rsp),%rsi
  add    (%rsp),%rax
  mov    %r9d,%edx
  mov    %r9d,0x10(%rsp)
  mov    %rax,(%rsp)
  call   <merge@plt>
  add    (%rsp),%rax
  mov    0x10(%rsp),%r9d
  mov    0x8(%rsp),%rsi
  add    %rax,%r14
  jmp    L101
  nopl   0x0(%rax)
L87:
  lea    0x0(%r13,%r9,1),%eax
  mov    %r13d,%edx
  mov    %r15,%rdi
  mov    %r9d,0x10(%rsp)
  mov    %eax,%r10d
  mov    %rsi,0x8(%rsp)
  shr    $0x1f,%r10d
  add    %eax,%r10d
  mov    %r10d,%r14d
  sar    %r14d
  mov    %r14d,%ecx
  add    $0x1,%r14d
  call   <_mergeSort>
  mov    0x10(%rsp),%ecx
  mov    %r14d,%edx
  mov    %r15,%rdi
  mov    0x8(%rsp),%rsi
  mov    %rax,(%rsp)
  call   <_mergeSort>
  mov    0x8(%rsp),%rsi
  mov    %r14d,%ecx
  mov    %r13d,%edx
  mov    0x10(%rsp),%r8d
  add    (%rsp),%rax
  mov    %r15,%rdi
  mov    %rax,(%rsp)
  call   <merge@plt>
  mov    (%rsp),%rcx
  mov    0x10(%rsp),%r9d
  mov    0x8(%rsp),%rsi
  lea    (%rcx,%rax,1),%r14
  jmp    L17
L122:
  lea    0x0(%r13,%r9,1),%eax
  mov    %r9d,%edx
  mov    %r15,%rdi
  mov    %r9d,0x1c(%rsp)
  mov    %eax,%r10d
  mov    %rsi,0x10(%rsp)
  shr    $0x1f,%r10d
  add    %eax,%r10d
  sar    %r10d
  mov    %r10d,%ebp
  mov    %r10d,%ecx
  call   <_mergeSort>
  lea    0x1(%rbp),%r10d
  mov    %r13d,%ecx
  mov    %r15,%rdi
  mov    0x10(%rsp),%rsi
  mov    %r10d,%edx
  mov    %r10d,0x8(%rsp)
  mov    %rax,(%rsp)
  call   <_mergeSort>
  mov    0x1c(%rsp),%r9d
  mov    %r13d,%r8d
  mov    %r15,%rdi
  mov    (%rsp),%rbp
  mov    0x10(%rsp),%rsi
  mov    0x8(%rsp),%ecx
  mov    %r9d,%edx
  mov    %r9d,0x8(%rsp)
  mov    %rsi,(%rsp)
  add    %rax,%rbp
  call   <merge@plt>
  mov    0x8(%rsp),%r9d
  mov    (%rsp),%rsi
  add    %rax,%rbp
  add    %rbp,%r14
  jmp    L104
```

assistant: ```c
long long int _mergeSort(int arr[], int temp[], int left, int right) {
  int mid;
  long long inv_count = 0;
  if (right > left) {
    mid = (right + left) / 2;
    inv_count = _mergeSort(arr, temp, left, mid);
    inv_count += _mergeSort(arr, temp, mid + 1, right);
    inv_count += merge(arr, temp, left, mid + 1, right);
  }
  return inv_count;
}
```