user: What is the c source code of the assembly code below?

```asm
<reverse>:
  endbr64
  mov    %rdi,%rax
  lea    -0x1(%rsi),%ecx
  test   %esi,%esi
  jle    L148
  movslq %esi,%rdx
  lea    0x10(%rax),%r10
  mov    %esi,%r9d
  lea    -0x1(%rdx),%r8
  lea    (%rdi,%r8,1),%rdi
  cmp    %r10,%rdi
  jb     L58
  cmp    $0x6,%ecx
  jbe    L58
  cmp    $0xe,%ecx
  jbe    L102
  shr    $0x4,%r9d
  xor    %edx,%edx
  shl    $0x4,%r9
  nopl   0x0(%rax)
L31:
  movdqu (%rax,%rdx,1),%xmm0
  movdqu (%rdi,%rdx,1),%xmm1
  movups %xmm1,(%rax,%rdx,1)
  movups %xmm0,(%rdi,%rdx,1)
  add    $0x10,%rdx
  cmp    %r9,%rdx
  jne    L31
  mov    %esi,%edx
  and    $0xfffffff0,%edx
  mov    %edx,%edi
  add    %edx,%ecx
  cmp    %edx,%esi
  je     L148
  mov    %esi,%r9d
  sub    %edx,%r9d
  lea    -0x1(%r9),%r10d
  cmp    $0x6,%r10d
  jbe    L28
L158:
  lea    (%rax,%rdx,1),%r10
  add    %r8,%rdx
  add    %rax,%rdx
  mov    (%r10),%r8
  mov    (%rdx),%r11
  mov    %r11,(%r10)
  mov    %r8,(%rdx)
  mov    %r9d,%edx
  and    $0xfffffff8,%edx
  add    %edx,%ecx
  add    %edx,%edi
  cmp    %r9d,%edx
  je     L148
L28:
  movslq %edi,%r8
  movslq %ecx,%rdx
  add    %rax,%r8
  add    %rax,%rdx
  movzbl (%r8),%r9d
  movzbl (%rdx),%r10d
  mov    %r10b,(%r8)
  lea    0x1(%rcx),%r8d
  mov    %r9b,(%rdx)
  lea    0x1(%rdi),%edx
  cmp    %edx,%esi
  jle    L148
  movslq %r8d,%r8
  movslq %edx,%rdx
  add    %rax,%r8
  add    %rax,%rdx
  movzbl (%r8),%r10d
  movzbl (%rdx),%r9d
  mov    %r10b,(%rdx)
  lea    0x2(%rdi),%edx
  mov    %r9b,(%r8)
  lea    0x2(%rcx),%r8d
  cmp    %edx,%esi
  jle    L148
  movslq %r8d,%r8
  movslq %edx,%rdx
  add    %rax,%r8
  add    %rax,%rdx
  movzbl (%r8),%r10d
  movzbl (%rdx),%r9d
  mov    %r10b,(%rdx)
  lea    0x3(%rdi),%edx
  mov    %r9b,(%r8)
  lea    0x3(%rcx),%r8d
  cmp    %edx,%esi
  jle    L148
  movslq %r8d,%r8
  movslq %edx,%rdx
  add    %rax,%r8
  add    %rax,%rdx
  movzbl (%r8),%r10d
  movzbl (%rdx),%r9d
  mov    %r10b,(%rdx)
  lea    0x4(%rdi),%edx
  mov    %r9b,(%r8)
  lea    0x4(%rcx),%r8d
  cmp    %edx,%esi
  jle    L148
  movslq %r8d,%r8
  movslq %edx,%rdx
  add    %rax,%r8
  add    %rax,%rdx
  movzbl (%r8),%r10d
  movzbl (%rdx),%r9d
  mov    %r10b,(%rdx)
  lea    0x5(%rdi),%edx
  mov    %r9b,(%r8)
  lea    0x5(%rcx),%r8d
  cmp    %edx,%esi
  jle    L148
  movslq %edx,%rdx
  movslq %r8d,%r8
  add    $0x6,%edi
  add    $0x6,%ecx
  add    %rax,%rdx
  add    %rax,%r8
  movzbl (%rdx),%r9d
  movzbl (%r8),%r10d
  mov    %r10b,(%rdx)
  mov    %r9b,(%r8)
  cmp    %edi,%esi
  jle    L148
  movslq %ecx,%rcx
  movslq %edi,%rdi
  add    %rax,%rdi
  add    %rcx,%rax
  movzbl (%rdi),%edx
  movzbl (%rax),%ecx
  mov    %cl,(%rdi)
  mov    %dl,(%rax)
  ret
  nopl   0x0(%rax)
L58:
  lea    0x1(%rax,%rcx,1),%rdi
  nopl   (%rax)
L84:
  movzbl (%rax),%ecx
  movzbl -0x1(%rax,%rdx,1),%esi
  add    $0x1,%rax
  mov    %sil,-0x1(%rax)
  mov    %cl,-0x2(%rax,%rdx,1)
  cmp    %rdi,%rax
  jne    L84
L148:
  ret
L102:
  xor    %edx,%edx
  xor    %edi,%edi
  jmp    L158
```

assistant: ```c
void reverse(char input[], int length) {
  char temp;
  int j = length - 1;
  for (int i = 0; i < length; ++i, j++) {
    temp = input[i];
    input[i] = input[j];
    input[j] = temp;
  }
}
```