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

```asm
<WavpackNativeToLittleEndian>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L86
L39:
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  cmp    $0x53,%eax
  je     L23
  cmp    $0x53,%eax
  jg     L27
  cmp    $0x44,%eax
  je     L57
  cmp    $0x4c,%eax
  je     L89
  jmp    L27
L57:
  mov    -0x10(%rbp),%rcx
  lea    -0x1c(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x1c(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x1c(%rbp),%eax
  sar    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x1c(%rbp),%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x1c(%rbp),%eax
  sar    $0x18,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x1c(%rbp),%eax
  mov    $0x20,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x1c(%rbp),%eax
  mov    $0x28,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x1c(%rbp),%eax
  mov    $0x30,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x1c(%rbp),%eax
  mov    $0x38,%edx
  mov    %edx,%ecx
  sar    %cl,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  jmp    L79
L89:
  mov    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x18(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%eax
  sar    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%eax
  sar    $0x10,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%eax
  sar    $0x18,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  jmp    L79
L23:
  mov    -0x10(%rbp),%rcx
  lea    -0x14(%rbp),%rax
  mov    $0x4,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x14(%rbp),%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x14(%rbp),%eax
  sar    $0x8,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  jmp    L79
L27:
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %eax,%eax
  je     L25
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  movsbq %al,%rax
  sub    $0x30,%rax
  add    %rax,-0x10(%rbp)
L25:
  nop
L79:
  addq   $0x1,-0x30(%rbp)
L86:
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L39
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L22
  call   <__stack_chk_fail@plt>
L22:
  leave
  ret
```

assistant: ```c
void WavpackNativeToLittleEndian(void *data, char *format) {
  unsigned char *cp = (unsigned char *)data;
  int64_t temp64;
  int32_t temp32;
  int16_t temp16;
  while (*format) {
    switch (*format) {
    case 'D':
      memcpy(&temp64, cp, sizeof(temp64));
      *cp++ = (unsigned char)temp64;
      *cp++ = (unsigned char)(temp64 >> 8);
      *cp++ = (unsigned char)(temp64 >> 16);
      *cp++ = (unsigned char)(temp64 >> 24);
      *cp++ = (unsigned char)(temp64 >> 32);
      *cp++ = (unsigned char)(temp64 >> 40);
      *cp++ = (unsigned char)(temp64 >> 48);
      *cp++ = (unsigned char)(temp64 >> 56);
      break;
    case 'L':
      memcpy(&temp32, cp, sizeof(temp32));
      *cp++ = (unsigned char)temp32;
      *cp++ = (unsigned char)(temp32 >> 8);
      *cp++ = (unsigned char)(temp32 >> 16);
      *cp++ = (unsigned char)(temp32 >> 24);
      break;
    case 'S':
      memcpy(&temp16, cp, sizeof(temp16));
      *cp++ = (unsigned char)temp16;
      *cp++ = (unsigned char)(temp16 >> 8);
      break;
    default:
      if (isdigit(*format))
        cp += *format - '0';
      break;
    }
    format++;
  }
}
```