int swap_bytes(int wordsize, unsigned char *buffer, long len) {
  register unsigned char byte1, byte2, byte3, byte4;
  register unsigned char *buffer1 = buffer;
  register unsigned char *buffer2 = buffer + 1;
  register unsigned char *buffer3 = buffer + 2;
  register unsigned char *buffer4 = buffer + 3;
  register long i = 0, j = 0, k = 0;
  switch (wordsize) {
  case 1:
    return 0;
    break;
  case 2:
    len -= 8;
    while (i < len) {
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      buffer1[i] = byte2;
      buffer2[i] = byte1;
      i += 2;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      buffer1[i] = byte2;
      buffer2[i] = byte1;
      i += 2;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      buffer1[i] = byte2;
      buffer2[i] = byte1;
      i += 2;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      buffer1[i] = byte2;
      buffer2[i] = byte1;
      i += 2;
    }
    len += 8;
    while (i < len) {
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      buffer1[i] = byte2;
      buffer2[i] = byte1;
      i += 2;
    }
    return 0;
    break;
  case 3:
    len -= 12;
    while (i < len) {
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      buffer1[i] = byte3;
      buffer2[i] = byte2;
      buffer3[i] = byte1;
      i += 3;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      buffer1[i] = byte3;
      buffer2[i] = byte2;
      buffer3[i] = byte1;
      i += 3;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      buffer1[i] = byte3;
      buffer2[i] = byte2;
      buffer3[i] = byte1;
      i += 3;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      buffer1[i] = byte3;
      buffer2[i] = byte2;
      buffer3[i] = byte1;
      i += 3;
    }
    len += 12;
    while (i < len) {
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      buffer1[i] = byte3;
      buffer2[i] = byte2;
      buffer3[i] = byte1;
      i += 3;
    }
    return 0;
    break;
  case 4:
    len -= 16;
    while (i < len) {
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      byte4 = buffer4[i];
      buffer1[i] = byte4;
      buffer2[i] = byte1;
      buffer3[i] = byte2;
      buffer4[i] = byte3;
      i += 4;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      byte4 = buffer4[i];
      buffer1[i] = byte4;
      buffer2[i] = byte1;
      buffer3[i] = byte2;
      buffer4[i] = byte3;
      i += 4;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      byte4 = buffer4[i];
      buffer1[i] = byte4;
      buffer2[i] = byte1;
      buffer3[i] = byte2;
      buffer4[i] = byte3;
      i += 4;
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      byte4 = buffer4[i];
      buffer1[i] = byte4;
      buffer2[i] = byte1;
      buffer3[i] = byte2;
      buffer4[i] = byte3;
      i += 4;
    }
    len += 16;
    while (i < len) {
      byte1 = buffer1[i];
      byte2 = buffer2[i];
      byte3 = buffer3[i];
      byte4 = buffer4[i];
      buffer1[i] = byte4;
      buffer2[i] = byte1;
      buffer3[i] = byte2;
      buffer4[i] = byte3;
      i += 4;
    }
    return 0;
    break;
  }
  return 1;
}


x86 assembly (clang, -O0):
<swap_bytes>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x40(%rbp)
movq   $0x0,-0x48(%rbp)
movq   $0x0,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x60(%rbp)
sub    $0x3,%eax
ja     1806 <swap_bytes+0x706>
mov    -0x60(%rbp),%rax
lea    0xe8d(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x0,-0x4(%rbp)
jmp    180d <swap_bytes+0x70d>
mov    -0x18(%rbp),%rax
sub    $0x8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    12b7 <swap_bytes+0x1b7>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x1a(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x1a(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x1a(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x1a(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
jmp    1194 <swap_bytes+0x94>
mov    -0x18(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    131a <swap_bytes+0x21a>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x1a(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x48(%rbp)
jmp    12c3 <swap_bytes+0x1c3>
movl   $0x0,-0x4(%rbp)
jmp    180d <swap_bytes+0x70d>
mov    -0x18(%rbp),%rax
sub    $0xc,%rax
mov    %rax,-0x18(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    14c5 <swap_bytes+0x3c5>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x1b(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x1b(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x1b(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x1b(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x48(%rbp)
jmp    1332 <swap_bytes+0x232>
mov    -0x18(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x18(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    1544 <swap_bytes+0x444>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x1b(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x48(%rbp)
jmp    14d1 <swap_bytes+0x3d1>
movl   $0x0,-0x4(%rbp)
jmp    180d <swap_bytes+0x70d>
mov    -0x18(%rbp),%rax
sub    $0x10,%rax
mov    %rax,-0x18(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    175f <swap_bytes+0x65f>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1c(%rbp)
mov    -0x1c(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1b(%rbp),%dl
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1c(%rbp)
mov    -0x1c(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1b(%rbp),%dl
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1c(%rbp)
mov    -0x1c(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1b(%rbp),%dl
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1c(%rbp)
mov    -0x1c(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1b(%rbp),%dl
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
jmp    155c <swap_bytes+0x45c>
mov    -0x18(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x18(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    17fa <swap_bytes+0x6fa>
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1b(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1c(%rbp)
mov    -0x1c(%rbp),%dl
mov    -0x28(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x19(%rbp),%dl
mov    -0x30(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1a(%rbp),%dl
mov    -0x38(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1b(%rbp),%dl
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x48(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x48(%rbp)
jmp    176b <swap_bytes+0x66b>
movl   $0x0,-0x4(%rbp)
jmp    180d <swap_bytes+0x70d>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<swap_bytes>:
add    $0xffffffff,%edi
cmp    $0x3,%edi
ja     11c9 <swap_bytes+0xc9>
xor    %eax,%eax
lea    0xeeb(%rip),%rcx
movslq (%rcx,%rdi,4),%rdi
add    %rcx,%rdi
jmp    *%rdi
xor    %eax,%eax
cmp    $0x9,%rdx
jl     1220 <swap_bytes+0x120>
lea    -0x8(%rdx),%rdi
xor    %ecx,%ecx
rolw   $0x8,(%rsi,%rcx,1)
rolw   $0x8,0x2(%rsi,%rcx,1)
rolw   $0x8,0x4(%rsi,%rcx,1)
rolw   $0x8,0x6(%rsi,%rcx,1)
add    $0x8,%rcx
cmp    %rdi,%rcx
jl     1130 <swap_bytes+0x30>
jmp    1239 <swap_bytes+0x139>
xor    %eax,%eax
cmp    $0xd,%rdx
jl     11f7 <swap_bytes+0xf7>
lea    -0xc(%rdx),%r9
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
movzbl (%rsi,%rdi,1),%r8d
movzbl 0x2(%rsi,%rdi,1),%ecx
mov    %cl,(%rsi,%rdi,1)
mov    %r8b,0x2(%rsi,%rdi,1)
movzbl 0x3(%rsi,%rdi,1),%r8d
movzbl 0x5(%rsi,%rdi,1),%ecx
mov    %cl,0x3(%rsi,%rdi,1)
mov    %r8b,0x5(%rsi,%rdi,1)
movzbl 0x6(%rsi,%rdi,1),%r8d
movzbl 0x8(%rsi,%rdi,1),%ecx
mov    %cl,0x6(%rsi,%rdi,1)
mov    %r8b,0x8(%rsi,%rdi,1)
movzbl 0x9(%rsi,%rdi,1),%r8d
movzbl 0xb(%rsi,%rdi,1),%ecx
mov    %cl,0x9(%rsi,%rdi,1)
mov    %r8b,0xb(%rsi,%rdi,1)
add    $0xc,%rdi
cmp    %r9,%rdi
jl     1170 <swap_bytes+0x70>
jmp    1216 <swap_bytes+0x116>
mov    $0x1,%eax
jmp    1301 <swap_bytes+0x201>
xor    %eax,%eax
cmp    $0x11,%rdx
jl     1243 <swap_bytes+0x143>
lea    -0x11(%rdx),%rcx
mov    %rcx,%r8
shr    $0x4,%r8
add    $0x1,%r8
cmp    $0x10,%rcx
jae    124a <swap_bytes+0x14a>
xor    %edi,%edi
jmp    12a4 <swap_bytes+0x1a4>
xor    %edi,%edi
jmp    1216 <swap_bytes+0x116>
nopl   0x0(%rax,%rax,1)
movzbl (%rsi,%rdi,1),%r8d
movzbl 0x2(%rsi,%rdi,1),%ecx
mov    %cl,(%rsi,%rdi,1)
mov    %r8b,0x2(%rsi,%rdi,1)
add    $0x3,%rdi
cmp    %rdx,%rdi
jl     1200 <swap_bytes+0x100>
jmp    1301 <swap_bytes+0x201>
xor    %ecx,%ecx
jmp    1239 <swap_bytes+0x139>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
rolw   $0x8,(%rsi,%rcx,1)
add    $0x2,%rcx
cmp    %rdx,%rcx
jl     1230 <swap_bytes+0x130>
jmp    1301 <swap_bytes+0x201>
xor    %edi,%edi
jmp    12fc <swap_bytes+0x1fc>
mov    %r8,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqu (%rsi,%rdi,1),%xmm0
movdqu 0x10(%rsi,%rdi,1),%xmm1
movdqa %xmm0,%xmm2
psrld  $0x18,%xmm2
pslld  $0x8,%xmm0
por    %xmm2,%xmm0
movdqu %xmm0,(%rsi,%rdi,1)
movdqa %xmm1,%xmm0
psrld  $0x18,%xmm0
pslld  $0x8,%xmm1
por    %xmm0,%xmm1
movdqu %xmm1,0x10(%rsi,%rdi,1)
add    $0x20,%rdi
add    $0xfffffffffffffffe,%rcx
jne    1260 <swap_bytes+0x160>
test   $0x1,%r8b
je     12fc <swap_bytes+0x1fc>
movdqu (%rsi,%rdi,1),%xmm0
movdqa %xmm0,%xmm1
psrld  $0x18,%xmm1
pslld  $0x8,%xmm0
por    %xmm1,%xmm0
movdqu %xmm0,(%rsi,%rdi,1)
add    $0x10,%rdi
jmp    12fc <swap_bytes+0x1fc>
nopl   0x0(%rax)
movzbl (%rsi,%rdi,1),%r10d
movzbl 0x1(%rsi,%rdi,1),%r8d
movzbl 0x2(%rsi,%rdi,1),%r9d
movzbl 0x3(%rsi,%rdi,1),%ecx
mov    %cl,(%rsi,%rdi,1)
mov    %r10b,0x1(%rsi,%rdi,1)
mov    %r8b,0x2(%rsi,%rdi,1)
mov    %r9b,0x3(%rsi,%rdi,1)
add    $0x4,%rdi
cmp    %rdx,%rdi
jl     12d0 <swap_bytes+0x1d0>
ret

LLVM IR (-O0):
define i32 @swap_bytes(i32 %0, i8* %1, i64 %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i8
%9 = alloca i8
%10 = alloca i8
%11 = alloca i8
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i64
%17 = alloca i64
%18 = alloca i64
store i32 %0, i32* %5
store i8* %1, i8** %6
store i64 %2, i64* %7
%19 = load i8*, i8** %6
store i8* %19, i8** %12
%20 = load i8*, i8** %6
%21 = getelementptr inbounds i8, i8* %20, i64 1
store i8* %21, i8** %13
%22 = load i8*, i8** %6
%23 = getelementptr inbounds i8, i8* %22, i64 2
store i8* %23, i8** %14
%24 = load i8*, i8** %6
%25 = getelementptr inbounds i8, i8* %24, i64 3
store i8* %25, i8** %15
store i64 0, i64* %16
store i64 0, i64* %17
store i64 0, i64* %18
%26 = load i32, i32* %5
switch i32 %26, label %469 [
i32 1, label %27
i32 2, label %28
i32 3, label %135
i32 4, label %282
]
27: ; preds = %3
store i32 0, i32* %4
br label %470
28: ; preds = %3
%29 = load i64, i64* %7
%30 = sub nsw i64 %29, 8
store i64 %30, i64* %7
br label %31
31: ; preds = %35, %28
%32 = load i64, i64* %16
%33 = load i64, i64* %7
%34 = icmp slt i64 %32, %33
br i1 %34, label %35, label %108
35: ; preds = %31
%36 = load i8*, i8** %12
%37 = load i64, i64* %16
%38 = getelementptr inbounds i8, i8* %36, i64 %37
%39 = load i8, i8* %38
store i8 %39, i8* %8
%40 = load i8*, i8** %13
%41 = load i64, i64* %16
%42 = getelementptr inbounds i8, i8* %40, i64 %41
%43 = load i8, i8* %42
store i8 %43, i8* %9
%44 = load i8, i8* %9
%45 = load i8*, i8** %12
%46 = load i64, i64* %16
%47 = getelementptr inbounds i8, i8* %45, i64 %46
store i8 %44, i8* %47
%48 = load i8, i8* %8
%49 = load i8*, i8** %13
%50 = load i64, i64* %16
%51 = getelementptr inbounds i8, i8* %49, i64 %50
store i8 %48, i8* %51
%52 = load i64, i64* %16
%53 = add nsw i64 %52, 2
store i64 %53, i64* %16
%54 = load i8*, i8** %12
%55 = load i64, i64* %16
%56 = getelementptr inbounds i8, i8* %54, i64 %55
%57 = load i8, i8* %56
store i8 %57, i8* %8
%58 = load i8*, i8** %13
%59 = load i64, i64* %16
%60 = getelementptr inbounds i8, i8* %58, i64 %59
%61 = load i8, i8* %60
store i8 %61, i8* %9
%62 = load i8, i8* %9
%63 = load i8*, i8** %12
%64 = load i64, i64* %16
%65 = getelementptr inbounds i8, i8* %63, i64 %64
store i8 %62, i8* %65
%66 = load i8, i8* %8
%67 = load i8*, i8** %13
%68 = load i64, i64* %16
%69 = getelementptr inbounds i8, i8* %67, i64 %68
store i8 %66, i8* %69
%70 = load i64, i64* %16
%71 = add nsw i64 %70, 2
store i64 %71, i64* %16
%72 = load i8*, i8** %12
%73 = load i64, i64* %16
%74 = getelementptr inbounds i8, i8* %72, i64 %73
%75 = load i8, i8* %74
store i8 %75, i8* %8
%76 = load i8*, i8** %13
%77 = load i64, i64* %16
%78 = getelementptr inbounds i8, i8* %76, i64 %77
%79 = load i8, i8* %78
store i8 %79, i8* %9
%80 = load i8, i8* %9
%81 = load i8*, i8** %12
%82 = load i64, i64* %16
%83 = getelementptr inbounds i8, i8* %81, i64 %82
store i8 %80, i8* %83
%84 = load i8, i8* %8
%85 = load i8*, i8** %13
%86 = load i64, i64* %16
%87 = getelementptr inbounds i8, i8* %85, i64 %86
store i8 %84, i8* %87
%88 = load i64, i64* %16
%89 = add nsw i64 %88, 2
store i64 %89, i64* %16
%90 = load i8*, i8** %12
%91 = load i64, i64* %16
%92 = getelementptr inbounds i8, i8* %90, i64 %91
%93 = load i8, i8* %92
store i8 %93, i8* %8
%94 = load i8*, i8** %13
%95 = load i64, i64* %16
%96 = getelementptr inbounds i8, i8* %94, i64 %95
%97 = load i8, i8* %96
store i8 %97, i8* %9
%98 = load i8, i8* %9
%99 = load i8*, i8** %12
%100 = load i64, i64* %16
%101 = getelementptr inbounds i8, i8* %99, i64 %100
store i8 %98, i8* %101
%102 = load i8, i8* %8
%103 = load i8*, i8** %13
%104 = load i64, i64* %16
%105 = getelementptr inbounds i8, i8* %103, i64 %104
store i8 %102, i8* %105
%106 = load i64, i64* %16
%107 = add nsw i64 %106, 2
store i64 %107, i64* %16
br label %31
108: ; preds = %31
%109 = load i64, i64* %7
%110 = add nsw i64 %109, 8
store i64 %110, i64* %7
br label %111
111: ; preds = %115, %108
%112 = load i64, i64* %16
%113 = load i64, i64* %7
%114 = icmp slt i64 %112, %113
br i1 %114, label %115, label %134
115: ; preds = %111
%116 = load i8*, i8** %12
%117 = load i64, i64* %16
%118 = getelementptr inbounds i8, i8* %116, i64 %117
%119 = load i8, i8* %118
store i8 %119, i8* %8
%120 = load i8*, i8** %13
%121 = load i64, i64* %16
%122 = getelementptr inbounds i8, i8* %120, i64 %121
%123 = load i8, i8* %122
store i8 %123, i8* %9
%124 = load i8, i8* %9
%125 = load i8*, i8** %12
%126 = load i64, i64* %16
%127 = getelementptr inbounds i8, i8* %125, i64 %126
store i8 %124, i8* %127
%128 = load i8, i8* %8
%129 = load i8*, i8** %13
%130 = load i64, i64* %16
%131 = getelementptr inbounds i8, i8* %129, i64 %130
store i8 %128, i8* %131
%132 = load i64, i64* %16
%133 = add nsw i64 %132, 2
store i64 %133, i64* %16
br label %111
134: ; preds = %111
store i32 0, i32* %4
br label %470
135: ; preds = %3
%136 = load i64, i64* %7
%137 = sub nsw i64 %136, 12
store i64 %137, i64* %7
br label %138
138: ; preds = %142, %135
%139 = load i64, i64* %16
%140 = load i64, i64* %7
%141 = icmp slt i64 %139, %140
br i1 %141, label %142, label %247
142: ; preds = %138
%143 = load i8*, i8** %12
%144 = load i64, i64* %16
%145 = getelementptr inbounds i8, i8* %143, i64 %144
%146 = load i8, i8* %145
store i8 %146, i8* %8
%147 = load i8*, i8** %13
%148 = load i64, i64* %16
%149 = getelementptr inbounds i8, i8* %147, i64 %148
%150 = load i8, i8* %149
store i8 %150, i8* %9
%151 = load i8*, i8** %14
%152 = load i64, i64* %16
%153 = getelementptr inbounds i8, i8* %151, i64 %152
%154 = load i8, i8* %153
store i8 %154, i8* %10
%155 = load i8, i8* %10
%156 = load i8*, i8** %12
%157 = load i64, i64* %16
%158 = getelementptr inbounds i8, i8* %156, i64 %157
store i8 %155, i8* %158
%159 = load i8, i8* %9
%160 = load i8*, i8** %13
%161 = load i64, i64* %16
%162 = getelementptr inbounds i8, i8* %160, i64 %161
store i8 %159, i8* %162
%163 = load i8, i8* %8
%164 = load i8*, i8** %14
%165 = load i64, i64* %16
%166 = getelementptr inbounds i8, i8* %164, i64 %165
store i8 %163, i8* %166
%167 = load i64, i64* %16
%168 = add nsw i64 %167, 3
store i64 %168, i64* %16
%169 = load i8*, i8** %12
%170 = load i64, i64* %16
%171 = getelementptr inbounds i8, i8* %169, i64 %170
%172 = load i8, i8* %171
store i8 %172, i8* %8
%173 = load i8*, i8** %13
%174 = load i64, i64* %16
%175 = getelementptr inbounds i8, i8* %173, i64 %174
%176 = load i8, i8* %175
store i8 %176, i8* %9
%177 = load i8*, i8** %14
%178 = load i64, i64* %16
%179 = getelementptr inbounds i8, i8* %177, i64 %178
%180 = load i8, i8* %179
store i8 %180, i8* %10
%181 = load i8, i8* %10
%182 = load i8*, i8** %12
%183 = load i64, i64* %16
%184 = getelementptr inbounds i8, i8* %182, i64 %183
store i8 %181, i8* %184
%185 = load i8, i8* %9
%186 = load i8*, i8** %13
%187 = load i64, i64* %16
%188 = getelementptr inbounds i8, i8* %186, i64 %187
store i8 %185, i8* %188
%189 = load i8, i8* %8
%190 = load i8*, i8** %14
%191 = load i64, i64* %16
%192 = getelementptr inbounds i8, i8* %190, i64 %191
store i8 %189, i8* %192
%193 = load i64, i64* %16
%194 = add nsw i64 %193, 3
store i64 %194, i64* %16
%195 = load i8*, i8** %12
%196 = load i64, i64* %16
%197 = getelementptr inbounds i8, i8* %195, i64 %196
%198 = load i8, i8* %197
store i8 %198, i8* %8
%199 = load i8*, i8** %13
%200 = load i64, i64* %16
%201 = getelementptr inbounds i8, i8* %199, i64 %200
%202 = load i8, i8* %201
store i8 %202, i8* %9
%203 = load i8*, i8** %14
%204 = load i64, i64* %16
%205 = getelementptr inbounds i8, i8* %203, i64 %204
%206 = load i8, i8* %205
store i8 %206, i8* %10
%207 = load i8, i8* %10
%208 = load i8*, i8** %12
%209 = load i64, i64* %16
%210 = getelementptr inbounds i8, i8* %208, i64 %209
store i8 %207, i8* %210
%211 = load i8, i8* %9
%212 = load i8*, i8** %13
%213 = load i64, i64* %16
%214 = getelementptr inbounds i8, i8* %212, i64 %213
store i8 %211, i8* %214
%215 = load i8, i8* %8
%216 = load i8*, i8** %14
%217 = load i64, i64* %16
%218 = getelementptr inbounds i8, i8* %216, i64 %217
store i8 %215, i8* %218
%219 = load i64, i64* %16
%220 = add nsw i64 %219, 3
store i64 %220, i64* %16
%221 = load i8*, i8** %12
%222 = load i64, i64* %16
%223 = getelementptr inbounds i8, i8* %221, i64 %222
%224 = load i8, i8* %223
store i8 %224, i8* %8
%225 = load i8*, i8** %13
%226 = load i64, i64* %16
%227 = getelementptr inbounds i8, i8* %225, i64 %226
%228 = load i8, i8* %227
store i8 %228, i8* %9
%229 = load i8*, i8** %14
%230 = load i64, i64* %16
%231 = getelementptr inbounds i8, i8* %229, i64 %230
%232 = load i8, i8* %231
store i8 %232, i8* %10
%233 = load i8, i8* %10
%234 = load i8*, i8** %12
%235 = load i64, i64* %16
%236 = getelementptr inbounds i8, i8* %234, i64 %235
store i8 %233, i8* %236
%237 = load i8, i8* %9
%238 = load i8*, i8** %13
%239 = load i64, i64* %16
%240 = getelementptr inbounds i8, i8* %238, i64 %239
store i8 %237, i8* %240
%241 = load i8, i8* %8
%242 = load i8*, i8** %14
%243 = load i64, i64* %16
%244 = getelementptr inbounds i8, i8* %242, i64 %243
store i8 %241, i8* %244
%245 = load i64, i64* %16
%246 = add nsw i64 %245, 3
store i64 %246, i64* %16
br label %138
247: ; preds = %138
%248 = load i64, i64* %7
%249 = add nsw i64 %248, 12
store i64 %249, i64* %7
br label %250
250: ; preds = %254, %247
%251 = load i64, i64* %16
%252 = load i64, i64* %7
%253 = icmp slt i64 %251, %252
br i1 %253, label %254, label %281
254: ; preds = %250
%255 = load i8*, i8** %12
%256 = load i64, i64* %16
%257 = getelementptr inbounds i8, i8* %255, i64 %256
%258 = load i8, i8* %257
store i8 %258, i8* %8
%259 = load i8*, i8** %13
%260 = load i64, i64* %16
%261 = getelementptr inbounds i8, i8* %259, i64 %260
%262 = load i8, i8* %261
store i8 %262, i8* %9
%263 = load i8*, i8** %14
%264 = load i64, i64* %16
%265 = getelementptr inbounds i8, i8* %263, i64 %264
%266 = load i8, i8* %265
store i8 %266, i8* %10
%267 = load i8, i8* %10
%268 = load i8*, i8** %12
%269 = load i64, i64* %16
%270 = getelementptr inbounds i8, i8* %268, i64 %269
store i8 %267, i8* %270
%271 = load i8, i8* %9
%272 = load i8*, i8** %13
%273 = load i64, i64* %16
%274 = getelementptr inbounds i8, i8* %272, i64 %273
store i8 %271, i8* %274
%275 = load i8, i8* %8
%276 = load i8*, i8** %14
%277 = load i64, i64* %16
%278 = getelementptr inbounds i8, i8* %276, i64 %277
store i8 %275, i8* %278
%279 = load i64, i64* %16
%280 = add nsw i64 %279, 3
store i64 %280, i64* %16
br label %250
281: ; preds = %250
store i32 0, i32* %4
br label %470
282: ; preds = %3
%283 = load i64, i64* %7
%284 = sub nsw i64 %283, 16
store i64 %284, i64* %7
br label %285
285: ; preds = %289, %282
%286 = load i64, i64* %16
%287 = load i64, i64* %7
%288 = icmp slt i64 %286, %287
br i1 %288, label %289, label %426
289: ; preds = %285
%290 = load i8*, i8** %12
%291 = load i64, i64* %16
%292 = getelementptr inbounds i8, i8* %290, i64 %291
%293 = load i8, i8* %292
store i8 %293, i8* %8
%294 = load i8*, i8** %13
%295 = load i64, i64* %16
%296 = getelementptr inbounds i8, i8* %294, i64 %295
%297 = load i8, i8* %296
store i8 %297, i8* %9
%298 = load i8*, i8** %14
%299 = load i64, i64* %16
%300 = getelementptr inbounds i8, i8* %298, i64 %299
%301 = load i8, i8* %300
store i8 %301, i8* %10
%302 = load i8*, i8** %15
%303 = load i64, i64* %16
%304 = getelementptr inbounds i8, i8* %302, i64 %303
%305 = load i8, i8* %304
store i8 %305, i8* %11
%306 = load i8, i8* %11
%307 = load i8*, i8** %12
%308 = load i64, i64* %16
%309 = getelementptr inbounds i8, i8* %307, i64 %308
store i8 %306, i8* %309
%310 = load i8, i8* %8
%311 = load i8*, i8** %13
%312 = load i64, i64* %16
%313 = getelementptr inbounds i8, i8* %311, i64 %312
store i8 %310, i8* %313
%314 = load i8, i8* %9
%315 = load i8*, i8** %14
%316 = load i64, i64* %16
%317 = getelementptr inbounds i8, i8* %315, i64 %316
store i8 %314, i8* %317
%318 = load i8, i8* %10
%319 = load i8*, i8** %15
%320 = load i64, i64* %16
%321 = getelementptr inbounds i8, i8* %319, i64 %320
store i8 %318, i8* %321
%322 = load i64, i64* %16
%323 = add nsw i64 %322, 4
store i64 %323, i64* %16
%324 = load i8*, i8** %12
%325 = load i64, i64* %16
%326 = getelementptr inbounds i8, i8* %324, i64 %325
%327 = load i8, i8* %326
store i8 %327, i8* %8
%328 = load i8*, i8** %13
%329 = load i64, i64* %16
%330 = getelementptr inbounds i8, i8* %328, i64 %329
%331 = load i8, i8* %330
store i8 %331, i8* %9
%332 = load i8*, i8** %14
%333 = load i64, i64* %16
%334 = getelementptr inbounds i8, i8* %332, i64 %333
%335 = load i8, i8* %334
store i8 %335, i8* %10
%336 = load i8*, i8** %15
%337 = load i64, i64* %16
%338 = getelementptr inbounds i8, i8* %336, i64 %337
%339 = load i8, i8* %338
store i8 %339, i8* %11
%340 = load i8, i8* %11
%341 = load i8*, i8** %12
%342 = load i64, i64* %16
%343 = getelementptr inbounds i8, i8* %341, i64 %342
store i8 %340, i8* %343
%344 = load i8, i8* %8
%345 = load i8*, i8** %13
%346 = load i64, i64* %16
%347 = getelementptr inbounds i8, i8* %345, i64 %346
store i8 %344, i8* %347
%348 = load i8, i8* %9
%349 = load i8*, i8** %14
%350 = load i64, i64* %16
%351 = getelementptr inbounds i8, i8* %349, i64 %350
store i8 %348, i8* %351
%352 = load i8, i8* %10
%353 = load i8*, i8** %15
%354 = load i64, i64* %16
%355 = getelementptr inbounds i8, i8* %353, i64 %354
store i8 %352, i8* %355
%356 = load i64, i64* %16
%357 = add nsw i64 %356, 4
store i64 %357, i64* %16
%358 = load i8*, i8** %12
%359 = load i64, i64* %16
%360 = getelementptr inbounds i8, i8* %358, i64 %359
%361 = load i8, i8* %360
store i8 %361, i8* %8
%362 = load i8*, i8** %13
%363 = load i64, i64* %16
%364 = getelementptr inbounds i8, i8* %362, i64 %363
%365 = load i8, i8* %364
store i8 %365, i8* %9
%366 = load i8*, i8** %14
%367 = load i64, i64* %16
%368 = getelementptr inbounds i8, i8* %366, i64 %367
%369 = load i8, i8* %368
store i8 %369, i8* %10
%370 = load i8*, i8** %15
%371 = load i64, i64* %16
%372 = getelementptr inbounds i8, i8* %370, i64 %371
%373 = load i8, i8* %372
store i8 %373, i8* %11
%374 = load i8, i8* %11
%375 = load i8*, i8** %12
%376 = load i64, i64* %16
%377 = getelementptr inbounds i8, i8* %375, i64 %376
store i8 %374, i8* %377
%378 = load i8, i8* %8
%379 = load i8*, i8** %13
%380 = load i64, i64* %16
%381 = getelementptr inbounds i8, i8* %379, i64 %380
store i8 %378, i8* %381
%382 = load i8, i8* %9
%383 = load i8*, i8** %14
%384 = load i64, i64* %16
%385 = getelementptr inbounds i8, i8* %383, i64 %384
store i8 %382, i8* %385
%386 = load i8, i8* %10
%387 = load i8*, i8** %15
%388 = load i64, i64* %16
%389 = getelementptr inbounds i8, i8* %387, i64 %388
store i8 %386, i8* %389
%390 = load i64, i64* %16
%391 = add nsw i64 %390, 4
store i64 %391, i64* %16
%392 = load i8*, i8** %12
%393 = load i64, i64* %16
%394 = getelementptr inbounds i8, i8* %392, i64 %393
%395 = load i8, i8* %394
store i8 %395, i8* %8
%396 = load i8*, i8** %13
%397 = load i64, i64* %16
%398 = getelementptr inbounds i8, i8* %396, i64 %397
%399 = load i8, i8* %398
store i8 %399, i8* %9
%400 = load i8*, i8** %14
%401 = load i64, i64* %16
%402 = getelementptr inbounds i8, i8* %400, i64 %401
%403 = load i8, i8* %402
store i8 %403, i8* %10
%404 = load i8*, i8** %15
%405 = load i64, i64* %16
%406 = getelementptr inbounds i8, i8* %404, i64 %405
%407 = load i8, i8* %406
store i8 %407, i8* %11
%408 = load i8, i8* %11
%409 = load i8*, i8** %12
%410 = load i64, i64* %16
%411 = getelementptr inbounds i8, i8* %409, i64 %410
store i8 %408, i8* %411
%412 = load i8, i8* %8
%413 = load i8*, i8** %13
%414 = load i64, i64* %16
%415 = getelementptr inbounds i8, i8* %413, i64 %414
store i8 %412, i8* %415
%416 = load i8, i8* %9
%417 = load i8*, i8** %14
%418 = load i64, i64* %16
%419 = getelementptr inbounds i8, i8* %417, i64 %418
store i8 %416, i8* %419
%420 = load i8, i8* %10
%421 = load i8*, i8** %15
%422 = load i64, i64* %16
%423 = getelementptr inbounds i8, i8* %421, i64 %422
store i8 %420, i8* %423
%424 = load i64, i64* %16
%425 = add nsw i64 %424, 4
store i64 %425, i64* %16
br label %285
426: ; preds = %285
%427 = load i64, i64* %7
%428 = add nsw i64 %427, 16
store i64 %428, i64* %7
br label %429
429: ; preds = %433, %426
%430 = load i64, i64* %16
%431 = load i64, i64* %7
%432 = icmp slt i64 %430, %431
br i1 %432, label %433, label %468
433: ; preds = %429
%434 = load i8*, i8** %12
%435 = load i64, i64* %16
%436 = getelementptr inbounds i8, i8* %434, i64 %435
%437 = load i8, i8* %436
store i8 %437, i8* %8
%438 = load i8*, i8** %13
%439 = load i64, i64* %16
%440 = getelementptr inbounds i8, i8* %438, i64 %439
%441 = load i8, i8* %440
store i8 %441, i8* %9
%442 = load i8*, i8** %14
%443 = load i64, i64* %16
%444 = getelementptr inbounds i8, i8* %442, i64 %443
%445 = load i8, i8* %444
store i8 %445, i8* %10
%446 = load i8*, i8** %15
%447 = load i64, i64* %16
%448 = getelementptr inbounds i8, i8* %446, i64 %447
%449 = load i8, i8* %448
store i8 %449, i8* %11
%450 = load i8, i8* %11
%451 = load i8*, i8** %12
%452 = load i64, i64* %16
%453 = getelementptr inbounds i8, i8* %451, i64 %452
store i8 %450, i8* %453
%454 = load i8, i8* %8
%455 = load i8*, i8** %13
%456 = load i64, i64* %16
%457 = getelementptr inbounds i8, i8* %455, i64 %456
store i8 %454, i8* %457
%458 = load i8, i8* %9
%459 = load i8*, i8** %14
%460 = load i64, i64* %16
%461 = getelementptr inbounds i8, i8* %459, i64 %460
store i8 %458, i8* %461
%462 = load i8, i8* %10
%463 = load i8*, i8** %15
%464 = load i64, i64* %16
%465 = getelementptr inbounds i8, i8* %463, i64 %464
store i8 %462, i8* %465
%466 = load i64, i64* %16
%467 = add nsw i64 %466, 4
store i64 %467, i64* %16
br label %429
468: ; preds = %429
store i32 0, i32* %4
br label %470
469: ; preds = %3
store i32 1, i32* %4
br label %470
470: ; preds = %469, %468, %281, %134, %27
%471 = load i32, i32* %4
ret i32 %471
}

LLVM IR (-O2):
define i32 @swap_bytes(i32 %0, i8* nocapture %1, i64 %2) {
%4 = getelementptr inbounds i8, i8* %1, i64 1
%5 = getelementptr inbounds i8, i8* %1, i64 2
%6 = getelementptr inbounds i8, i8* %1, i64 3
switch i32 %0, label %134 [
i32 1, label %135
i32 2, label %7
i32 3, label %44
i32 4, label %81
]
7: ; preds = %3
%8 = add nsw i64 %2, -8
%9 = icmp sgt i64 %2, 8
br i1 %9, label %13, label %10
10: ; preds = %13, %7
%11 = phi i64 [ 0, %7 ], [ %34, %13 ]
%12 = icmp slt i64 %11, %2
br i1 %12, label %36, label %135
13: ; preds = %7, %13
%14 = phi i64 [ %34, %13 ], [ 0, %7 ]
%15 = getelementptr inbounds i8, i8* %1, i64 %14
%16 = load i8, i8* %15
%17 = getelementptr inbounds i8, i8* %4, i64 %14
%18 = load i8, i8* %17
store i8 %18, i8* %15
store i8 %16, i8* %17
%19 = or i64 %14, 2
%20 = getelementptr inbounds i8, i8* %1, i64 %19
%21 = load i8, i8* %20
%22 = getelementptr inbounds i8, i8* %4, i64 %19
%23 = load i8, i8* %22
store i8 %23, i8* %20
store i8 %21, i8* %22
%24 = or i64 %14, 4
%25 = getelementptr inbounds i8, i8* %1, i64 %24
%26 = load i8, i8* %25
%27 = getelementptr inbounds i8, i8* %4, i64 %24
%28 = load i8, i8* %27
store i8 %28, i8* %25
store i8 %26, i8* %27
%29 = or i64 %14, 6
%30 = getelementptr inbounds i8, i8* %1, i64 %29
%31 = load i8, i8* %30
%32 = getelementptr inbounds i8, i8* %4, i64 %29
%33 = load i8, i8* %32
store i8 %33, i8* %30
store i8 %31, i8* %32
%34 = add nuw nsw i64 %14, 8
%35 = icmp slt i64 %34, %8
br i1 %35, label %13, label %10
36: ; preds = %10, %36
%37 = phi i64 [ %42, %36 ], [ %11, %10 ]
%38 = getelementptr inbounds i8, i8* %1, i64 %37
%39 = load i8, i8* %38
%40 = getelementptr inbounds i8, i8* %4, i64 %37
%41 = load i8, i8* %40
store i8 %41, i8* %38
store i8 %39, i8* %40
%42 = add nuw nsw i64 %37, 2
%43 = icmp slt i64 %42, %2
br i1 %43, label %36, label %135
44: ; preds = %3
%45 = add nsw i64 %2, -12
%46 = icmp sgt i64 %2, 12
br i1 %46, label %50, label %47
47: ; preds = %50, %44
%48 = phi i64 [ 0, %44 ], [ %71, %50 ]
%49 = icmp slt i64 %48, %2
br i1 %49, label %73, label %135
50: ; preds = %44, %50
%51 = phi i64 [ %71, %50 ], [ 0, %44 ]
%52 = getelementptr inbounds i8, i8* %1, i64 %51
%53 = load i8, i8* %52
%54 = getelementptr inbounds i8, i8* %5, i64 %51
%55 = load i8, i8* %54
store i8 %55, i8* %52
store i8 %53, i8* %54
%56 = or i64 %51, 3
%57 = getelementptr inbounds i8, i8* %1, i64 %56
%58 = load i8, i8* %57
%59 = getelementptr inbounds i8, i8* %5, i64 %56
%60 = load i8, i8* %59
store i8 %60, i8* %57
store i8 %58, i8* %59
%61 = add nuw nsw i64 %51, 6
%62 = getelementptr inbounds i8, i8* %1, i64 %61
%63 = load i8, i8* %62
%64 = getelementptr inbounds i8, i8* %5, i64 %61
%65 = load i8, i8* %64
store i8 %65, i8* %62
store i8 %63, i8* %64
%66 = add nuw nsw i64 %51, 9
%67 = getelementptr inbounds i8, i8* %1, i64 %66
%68 = load i8, i8* %67
%69 = getelementptr inbounds i8, i8* %5, i64 %66
%70 = load i8, i8* %69
store i8 %70, i8* %67
store i8 %68, i8* %69
%71 = add nuw nsw i64 %51, 12
%72 = icmp slt i64 %71, %45
br i1 %72, label %50, label %47
73: ; preds = %47, %73
%74 = phi i64 [ %79, %73 ], [ %48, %47 ]
%75 = getelementptr inbounds i8, i8* %1, i64 %74
%76 = load i8, i8* %75
%77 = getelementptr inbounds i8, i8* %5, i64 %74
%78 = load i8, i8* %77
store i8 %78, i8* %75
store i8 %76, i8* %77
%79 = add nuw nsw i64 %74, 3
%80 = icmp slt i64 %79, %2
br i1 %80, label %73, label %135
81: ; preds = %3
%82 = icmp sgt i64 %2, 16
br i1 %82, label %83, label %102
83: ; preds = %81
%84 = add i64 %2, -17
%85 = lshr i64 %84, 4
%86 = add nuw nsw i64 %85, 1
%87 = and i64 %86, 1
%88 = icmp ult i64 %84, 16
br i1 %88, label %91, label %89
89: ; preds = %83
%90 = and i64 %86, 2305843009213693950
br label %105
91: ; preds = %105, %83
%92 = phi i64 [ undef, %83 ], [ %119, %105 ]
%93 = phi i64 [ 0, %83 ], [ %119, %105 ]
%94 = icmp eq i64 %87, 0
br i1 %94, label %102, label %95
95: ; preds = %91
%96 = getelementptr inbounds i8, i8* %1, i64 %93
%97 = bitcast i8* %96 to <16 x i8>*
%98 = load <16 x i8>, <16 x i8>* %97
%99 = shufflevector <16 x i8> %98, <16 x i8> poison, <16 x i32> <i32 3, i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 11, i32 8, i32 9, i32 10, i32 15, i32 12, i32 13, i32 14>
%100 = bitcast i8* %96 to <16 x i8>*
store <16 x i8> %99, <16 x i8>* %100
%101 = add nuw nsw i64 %93, 16
br label %102
102: ; preds = %95, %91, %81
%103 = phi i64 [ 0, %81 ], [ %92, %91 ], [ %101, %95 ]
%104 = icmp slt i64 %103, %2
br i1 %104, label %122, label %135
105: ; preds = %105, %89
%106 = phi i64 [ 0, %89 ], [ %119, %105 ]
%107 = phi i64 [ 0, %89 ], [ %120, %105 ]
%108 = getelementptr inbounds i8, i8* %1, i64 %106
%109 = bitcast i8* %108 to <16 x i8>*
%110 = load <16 x i8>, <16 x i8>* %109
%111 = shufflevector <16 x i8> %110, <16 x i8> poison, <16 x i32> <i32 3, i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 11, i32 8, i32 9, i32 10, i32 15, i32 12, i32 13, i32 14>
%112 = bitcast i8* %108 to <16 x i8>*
store <16 x i8> %111, <16 x i8>* %112
%113 = or i64 %106, 16
%114 = getelementptr inbounds i8, i8* %1, i64 %113
%115 = bitcast i8* %114 to <16 x i8>*
%116 = load <16 x i8>, <16 x i8>* %115
%117 = shufflevector <16 x i8> %116, <16 x i8> poison, <16 x i32> <i32 3, i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 11, i32 8, i32 9, i32 10, i32 15, i32 12, i32 13, i32 14>
%118 = bitcast i8* %114 to <16 x i8>*
store <16 x i8> %117, <16 x i8>* %118
%119 = add nuw nsw i64 %106, 32
%120 = add i64 %107, 2
%121 = icmp eq i64 %120, %90
br i1 %121, label %91, label %105
122: ; preds = %102, %122
%123 = phi i64 [ %132, %122 ], [ %103, %102 ]
%124 = getelementptr inbounds i8, i8* %1, i64 %123
%125 = load i8, i8* %124
%126 = getelementptr inbounds i8, i8* %4, i64 %123
%127 = load i8, i8* %126
%128 = getelementptr inbounds i8, i8* %5, i64 %123
%129 = load i8, i8* %128
%130 = getelementptr inbounds i8, i8* %6, i64 %123
%131 = load i8, i8* %130
store i8 %131, i8* %124
store i8 %125, i8* %126
store i8 %127, i8* %128
store i8 %129, i8* %130
%132 = add nuw nsw i64 %123, 4
%133 = icmp slt i64 %132, %2
br i1 %133, label %122, label %135
134: ; preds = %3
br label %135
135: ; preds = %122, %73, %36, %102, %47, %10, %3, %134
%136 = phi i32 [ 1, %134 ], [ 0, %3 ], [ 0, %10 ], [ 0, %47 ], [ 0, %102 ], [ 0, %36 ], [ 0, %73 ], [ 0, %122 ]
ret i32 %136
}