user: 请将这段汇编代码片段转换成等效的C代码：

```asm
<convert_elf_phdrs>:
  endbr64
  test   %esi,%esi
  jle    L2
  lea    -0x1(%rsi),%eax
  movdqa D1(%rip),%xmm4
  movdqa D5(%rip),%xmm3
  shl    $0x5,%rax
  lea    0x20(%rdi,%rax,1),%rax
  nopl   0x0(%rax,%rax,1)
L3:
  movdqu (%rdi),%xmm2
  movdqu 0x10(%rdi),%xmm1
  add    $0x20,%rdi
  movdqa %xmm2,%xmm0
  movdqa %xmm2,%xmm5
  pslld  $0x8,%xmm0
  psrad  $0x8,%xmm5
  pand   %xmm3,%xmm5
  pand   %xmm4,%xmm0
  por    %xmm5,%xmm0
  movdqa %xmm2,%xmm5
  psrad  $0x18,%xmm5
  pslld  $0x18,%xmm2
  por    %xmm5,%xmm2
  por    %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  movups %xmm0,-0x20(%rdi)
  movdqa %xmm1,%xmm0
  psrad  $0x8,%xmm2
  pslld  $0x8,%xmm0
  pand   %xmm3,%xmm2
  pand   %xmm4,%xmm0
  por    %xmm2,%xmm0
  movdqa %xmm1,%xmm2
  psrad  $0x18,%xmm2
  pslld  $0x18,%xmm1
  por    %xmm2,%xmm1
  por    %xmm1,%xmm0
  movups %xmm0,-0x10(%rdi)
  cmp    %rax,%rdi
  jne    L3
L2:
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D1
type: byte[16]
name: unpack_data
arguments: data_tag: D5
type: byte[16]

tool: {"D1": [0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00]}

tool: {"D5": [0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00]}

assistant: ```c
void convert_elf_phdrs(Elf32_Phdr *p, int num) {
  int i;
  for (i = 0; i < num; i++, p++) {
    p->p_type = ((unsigned int)((((uint32_t)(p->p_type) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_type) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_type) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_type) & (uint32_t)0xff000000UL) >> 24)));
    p->p_offset = ((unsigned int)((((uint32_t)(p->p_offset) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_offset) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_offset) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_offset) & (uint32_t)0xff000000UL) >> 24)));
    p->p_vaddr = ((unsigned int)((((uint32_t)(p->p_vaddr) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_vaddr) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_vaddr) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_vaddr) & (uint32_t)0xff000000UL) >> 24)));
    p->p_paddr = ((unsigned int)((((uint32_t)(p->p_paddr) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_paddr) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_paddr) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_paddr) & (uint32_t)0xff000000UL) >> 24)));
    p->p_filesz = ((unsigned int)((((uint32_t)(p->p_filesz) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_filesz) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_filesz) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_filesz) & (uint32_t)0xff000000UL) >> 24)));
    p->p_memsz = ((unsigned int)((((uint32_t)(p->p_memsz) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_memsz) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_memsz) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_memsz) & (uint32_t)0xff000000UL) >> 24)));
    p->p_flags = ((unsigned int)((((uint32_t)(p->p_flags) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_flags) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_flags) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_flags) & (uint32_t)0xff000000UL) >> 24)));
    p->p_align = ((unsigned int)((((uint32_t)(p->p_align) & (uint32_t)0x000000ffUL) << 24) | (((uint32_t)(p->p_align) & (uint32_t)0x0000ff00UL) << 8) | (((uint32_t)(p->p_align) & (uint32_t)0x00ff0000UL) >> 8) | (((uint32_t)(p->p_align) & (uint32_t)0xff000000UL) >> 24)));
  }
}
```