user: Please show me the C implementation that matches the assembly code listed below:

```asm
<convert_elf_shdrs>:
  endbr64
  mov    %rdi,%rax
  test   %esi,%esi
  jle    L5
  movslq %esi,%rsi
  lea    (%rsi,%rsi,4),%rdx
  lea    (%rdi,%rdx,8),%rcx
  nopw   0x0(%rax,%rax,1)
L6:
  mov    (%rax),%edx
  mov    0x14(%rax),%esi
  add    $0x28,%rax
  mov    -0xc(%rax),%edi
  bswap  %edx
  movd   %edx,%xmm1
  mov    -0x24(%rax),%edx
  bswap  %esi
  bswap  %edi
  movd   %esi,%xmm6
  movd   %edi,%xmm5
  bswap  %edx
  mov    %edx,%r8d
  mov    -0x20(%rax),%edx
  movd   %r8d,%xmm4
  bswap  %edx
  movd   %edx,%xmm2
  mov    -0x1c(%rax),%edx
  punpckldq %xmm4,%xmm1
  bswap  %edx
  mov    %edx,%r9d
  mov    -0x18(%rax),%edx
  movd   %r9d,%xmm3
  bswap  %edx
  punpckldq %xmm3,%xmm2
  movd   %edx,%xmm0
  mov    -0x10(%rax),%edx
  punpcklqdq %xmm2,%xmm1
  punpckldq %xmm6,%xmm0
  bswap  %edx
  movups %xmm1,-0x28(%rax)
  movd   %edx,%xmm1
  mov    -0x8(%rax),%edx
  punpckldq %xmm5,%xmm1
  bswap  %edx
  mov    %edx,-0x8(%rax)
  mov    -0x4(%rax),%edx
  punpcklqdq %xmm1,%xmm0
  movups %xmm0,-0x18(%rax)
  bswap  %edx
  mov    %edx,-0x4(%rax)
  cmp    %rax,%rcx
  jne    L6
L5:
  ret
```

assistant: ```c
void convert_elf_shdrs(Elf32_Shdr *s, int num) {
  int i;
  for (i = 0; i < num; i++, s++) {
    s->sh_name = ((unsigned int)((((unsigned int)(s->sh_name) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_name) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_name) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_name) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_type = ((unsigned int)((((unsigned int)(s->sh_type) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_type) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_type) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_type) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_flags = ((unsigned int)((((unsigned int)(s->sh_flags) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_flags) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_flags) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_flags) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_addr = ((unsigned int)((((unsigned int)(s->sh_addr) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_addr) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_addr) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_addr) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_offset = ((unsigned int)((((unsigned int)(s->sh_offset) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_offset) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_offset) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_offset) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_size = ((unsigned int)((((unsigned int)(s->sh_size) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_size) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_size) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_size) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_link = ((unsigned int)((((unsigned int)(s->sh_link) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_link) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_link) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_link) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_info = ((unsigned int)((((unsigned int)(s->sh_info) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_info) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_info) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_info) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_addralign = ((unsigned int)((((unsigned int)(s->sh_addralign) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_addralign) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_addralign) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_addralign) & (unsigned int)0xff000000UL) >> 24)));
    s->sh_entsize = ((unsigned int)((((unsigned int)(s->sh_entsize) & (unsigned int)0x000000ffUL) << 24) | (((unsigned int)(s->sh_entsize) & (unsigned int)0x0000ff00UL) << 8) | (((unsigned int)(s->sh_entsize) & (unsigned int)0x00ff0000UL) >> 8) | (((unsigned int)(s->sh_entsize) & (unsigned int)0xff000000UL) >> 24)));
  }
}
```