user: What would the C source look like for the assembly code provided here:

```asm
<__int64_t_decode_array>:
  endbr64
  lea    0x0(,%r8,4),%r11d
  cmp    %edx,%r11d
  jg     L30
  test   %r8d,%r8d
  jle    L6
  push   %rbx
  lea    -0x1(%r8),%ebx
  mov    %rcx,%r10
  cmp    $0x3,%ebx
  jbe    L27
  mov    %ebx,%edx
  movslq %esi,%rax
  shr    $0x2,%edx
  lea    0x20(%rdi,%rax,8),%rax
  lea    -0x1(%rdx),%r9d
  lea    0x100(%rax),%rdx
  shl    $0x8,%r9
  add    %rdx,%r9
  jmp    L39
L74:
  add    $0x100,%rdx
L39:
  movdqu (%rax),%xmm1
  movdqu 0x10(%rax),%xmm4
  add    $0x10,%rcx
  movdqu 0x20(%rax),%xmm3
  movdqu 0x40(%rax),%xmm5
  movdqa %xmm1,%xmm2
  punpckhqdq %xmm4,%xmm1
  movdqu 0x60(%rax),%xmm0
  movdqu 0xa0(%rax),%xmm11
  punpcklqdq %xmm4,%xmm2
  movdqu 0x30(%rax),%xmm4
  movdqa %xmm3,%xmm14
  movdqa %xmm5,%xmm10
  movdqa %xmm0,%xmm7
  movdqa %xmm11,%xmm13
  movdqa %xmm11,%xmm15
  movdqu 0xb0(%rax),%xmm9
  punpcklqdq %xmm4,%xmm14
  punpckhqdq %xmm4,%xmm3
  movdqu 0x50(%rax),%xmm4
  movdqu 0xd0(%rax),%xmm6
  movaps %xmm3,-0x30(%rsp)
  punpcklqdq %xmm9,%xmm13
  punpckhqdq %xmm9,%xmm15
  movdqu 0x80(%rax),%xmm3
  punpcklqdq %xmm4,%xmm10
  punpckhqdq %xmm4,%xmm5
  movdqu 0x70(%rax),%xmm4
  movdqu 0x90(%rax),%xmm12
  movdqu 0xe0(%rax),%xmm8
  movaps %xmm1,-0x20(%rsp)
  movdqa %xmm10,%xmm11
  punpcklqdq %xmm4,%xmm7
  punpckhqdq %xmm4,%xmm0
  movdqu 0xc0(%rax),%xmm4
  movdqa %xmm7,%xmm1
  movaps %xmm0,-0x40(%rsp)
  movdqa %xmm3,%xmm7
  movdqu 0xf0(%rax),%xmm0
  movdqa %xmm4,%xmm9
  punpckhqdq %xmm6,%xmm4
  punpcklqdq %xmm12,%xmm7
  movaps %xmm1,-0x10(%rsp)
  punpcklqdq %xmm6,%xmm9
  movdqa %xmm2,%xmm6
  punpckhqdq %xmm12,%xmm3
  mov    %rdx,%rax
  punpcklqdq %xmm1,%xmm11
  movdqa %xmm8,%xmm12
  punpcklqdq %xmm14,%xmm6
  punpcklqdq %xmm0,%xmm12
  punpckhqdq %xmm0,%xmm8
  punpcklqdq %xmm11,%xmm6
  movdqa %xmm7,%xmm0
  movdqa %xmm9,%xmm11
  movdqa %xmm5,%xmm1
  punpcklqdq %xmm12,%xmm11
  punpcklqdq %xmm13,%xmm0
  punpcklqdq -0x40(%rsp),%xmm1
  punpcklqdq %xmm11,%xmm0
  punpckhqdq %xmm14,%xmm2
  punpckhqdq %xmm13,%xmm7
  shufps $0x88,%xmm0,%xmm6
  punpckhqdq %xmm12,%xmm9
  movdqa -0x20(%rsp),%xmm0
  punpcklqdq -0x30(%rsp),%xmm0
  punpckhqdq -0x40(%rsp),%xmm5
  pslld  $0x18,%xmm6
  punpcklqdq %xmm9,%xmm7
  punpcklqdq %xmm1,%xmm0
  movdqa %xmm3,%xmm1
  punpckhqdq -0x10(%rsp),%xmm10
  punpcklqdq %xmm15,%xmm1
  punpckhqdq %xmm15,%xmm3
  movdqa %xmm1,%xmm11
  movdqa %xmm4,%xmm1
  punpcklqdq %xmm10,%xmm2
  punpcklqdq %xmm8,%xmm1
  punpckhqdq %xmm8,%xmm4
  shufps $0x88,%xmm7,%xmm2
  punpcklqdq %xmm1,%xmm11
  movdqa -0x20(%rsp),%xmm1
  punpckhqdq -0x30(%rsp),%xmm1
  punpcklqdq %xmm4,%xmm3
  shufps $0x88,%xmm11,%xmm0
  pslld  $0x10,%xmm0
  pslld  $0x8,%xmm2
  paddd  %xmm6,%xmm0
  punpcklqdq %xmm5,%xmm1
  paddd  %xmm2,%xmm0
  shufps $0x88,%xmm3,%xmm1
  paddd  %xmm1,%xmm0
  movups %xmm0,-0x10(%rcx)
  cmp    %r9,%rdx
  jne    L74
  and    $0xfffffffc,%ebx
  mov    %ebx,%ecx
  lea    (%rsi,%rbx,8),%esi
L80:
  add    $0x4,%esi
  movslq %ecx,%rbx
  movslq %esi,%rsi
  lea    0x0(,%rbx,4),%r9
  lea    0x0(,%rsi,8),%rax
  mov    (%rdi,%rsi,8),%rsi
  mov    0x8(%rdi,%rax,1),%edx
  shl    $0x18,%esi
  shl    $0x10,%edx
  add    %esi,%edx
  mov    0x10(%rdi,%rax,1),%esi
  shl    $0x8,%esi
  add    %esi,%edx
  add    0x18(%rdi,%rax,1),%edx
  mov    %edx,(%r10,%rbx,4)
  lea    0x1(%rcx),%edx
  cmp    %r8d,%edx
  jge    L46
  mov    0x40(%rdi,%rax,1),%edx
  mov    0x48(%rdi,%rax,1),%esi
  shl    $0x18,%edx
  shl    $0x10,%esi
  add    %esi,%edx
  mov    0x50(%rdi,%rax,1),%esi
  shl    $0x8,%esi
  add    %esi,%edx
  add    0x58(%rdi,%rax,1),%edx
  mov    %edx,0x4(%r10,%r9,1)
  lea    0x2(%rcx),%edx
  cmp    %edx,%r8d
  jle    L46
  mov    0x80(%rdi,%rax,1),%edx
  mov    0x88(%rdi,%rax,1),%esi
  add    $0x3,%ecx
  shl    $0x10,%esi
  shl    $0x18,%edx
  add    %esi,%edx
  mov    0x90(%rdi,%rax,1),%esi
  shl    $0x8,%esi
  add    %esi,%edx
  add    0x98(%rdi,%rax,1),%edx
  mov    %edx,0x8(%r10,%r9,1)
  cmp    %ecx,%r8d
  jle    L46
  mov    0xc8(%rdi,%rax,1),%edx
  mov    0xc0(%rdi,%rax,1),%ecx
  shl    $0x10,%edx
  shl    $0x18,%ecx
  add    %ecx,%edx
  mov    0xd0(%rdi,%rax,1),%ecx
  shl    $0x8,%ecx
  add    %ecx,%edx
  add    0xd8(%rdi,%rax,1),%edx
  mov    %edx,0xc(%r10,%r9,1)
L46:
  mov    %r11d,%eax
  pop    %rbx
  ret
L30:
  mov    $0xffffffff,%r11d
L6:
  mov    %r11d,%eax
  ret
L27:
  xor    %ecx,%ecx
  jmp    L80
```

assistant: ```c
int __int64_t_decode_array(const void *_buf, int offset, int maxlen, int64_t *p, int elements) {
  int total_size = sizeof(int64_t) * elements;
  uint8_t *buf = (uint8_t *)_buf;
  int pos = offset;
  int element;
  if (maxlen < total_size)
    return -1;
  for (element = 0; element < elements; element++) {
    int64_t a = (((int32_t)buf[pos + 0]) << 24) + (((int32_t)buf[pos + 1]) << 16) + ((int32_t)buf[pos + 2] << 8) + (int32_t)buf[pos + 3];
    pos += 4;
    int64_t b = (((int32_t)buf[pos + 0]) << 24) + (((int32_t)buf[pos + 1]) << 16) + ((int32_t)buf[pos + 2] << 8) + (int32_t)buf[pos + 3];
    pos += 4;
    p[element] = (a << 32) + (b & 0xffffffff);
  }
  return total_size;
}
```