int Base42_CopyFlipC(char *ibuf, char *obuf, int n) {
  int *cs, *ct, *cse;
  int i0, i1, i2, i3;
  cs = (int *)ibuf;
  cse = cs + n;
  ct = (int *)obuf;
  while (cs < cse) {
    i0 = *cs++;
    *ct++ = (i0 & 0xFF00FF00) | ((i0 >> 16) & 0x000000FF) |
            ((i0 << 16) & 0x00FF0000);
    i0 = *cs++;
    *ct++ = (i0 & 0xFF00FF00) | ((i0 >> 16) & 0x000000FF) |
            ((i0 << 16) & 0x00FF0000);
    i0 = *cs++;
    *ct++ = (i0 & 0xFF00FF00) | ((i0 >> 16) & 0x000000FF) |
            ((i0 << 16) & 0x00FF0000);
    i0 = *cs++;
    *ct++ = (i0 & 0xFF00FF00) | ((i0 >> 16) & 0x000000FF) |
            ((i0 << 16) & 0x00FF0000);
  }
}


x86 assembly (clang, -O0):
<Base42_CopyFlipC>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    1265 <Base42_CopyFlipC+0x165>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
and    $0xff00ff00,%ecx
mov    -0x3c(%rbp),%eax
sar    $0x10,%eax
and    $0xff,%eax
or     %eax,%ecx
mov    -0x3c(%rbp),%eax
shl    $0x10,%eax
and    $0xff0000,%eax
or     %eax,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
and    $0xff00ff00,%ecx
mov    -0x3c(%rbp),%eax
sar    $0x10,%eax
and    $0xff,%eax
or     %eax,%ecx
mov    -0x3c(%rbp),%eax
shl    $0x10,%eax
and    $0xff0000,%eax
or     %eax,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
and    $0xff00ff00,%ecx
mov    -0x3c(%rbp),%eax
sar    $0x10,%eax
and    $0xff,%eax
or     %eax,%ecx
mov    -0x3c(%rbp),%eax
shl    $0x10,%eax
and    $0xff0000,%eax
or     %eax,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x4,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
and    $0xff00ff00,%ecx
mov    -0x3c(%rbp),%eax
sar    $0x10,%eax
and    $0xff,%eax
or     %eax,%ecx
mov    -0x3c(%rbp),%eax
shl    $0x10,%eax
and    $0xff0000,%eax
or     %eax,%ecx
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x4,%rdx
mov    %rdx,-0x30(%rbp)
mov    %ecx,(%rax)
jmp    1132 <Base42_CopyFlipC+0x32>
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<Base42_CopyFlipC>:
movslq %edx,%rax
lea    (%rdi,%rax,4),%r8
cmp    %rdi,%r8
jbe    11c7 <Base42_CopyFlipC+0xc7>
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%rdi,%rcx,1),%r9d
mov    %r9d,%edx
movzbl %r9b,%eax
and    $0xff00ff00,%r9d
shr    $0x10,%edx
movzbl %dl,%edx
or     %r9d,%edx
shl    $0x10,%eax
or     %edx,%eax
mov    %eax,(%rsi,%rcx,1)
mov    0x4(%rdi,%rcx,1),%r9d
mov    %r9d,%edx
movzbl %r9b,%eax
and    $0xff00ff00,%r9d
shr    $0x10,%edx
movzbl %dl,%edx
or     %r9d,%edx
shl    $0x10,%eax
or     %edx,%eax
mov    %eax,0x4(%rsi,%rcx,1)
mov    0x8(%rdi,%rcx,1),%r9d
mov    %r9d,%edx
movzbl %r9b,%eax
and    $0xff00ff00,%r9d
shr    $0x10,%edx
movzbl %dl,%edx
or     %r9d,%edx
shl    $0x10,%eax
or     %edx,%eax
mov    %eax,0x8(%rsi,%rcx,1)
mov    0xc(%rdi,%rcx,1),%r9d
mov    %r9d,%edx
movzbl %r9b,%eax
and    $0xff00ff00,%r9d
shr    $0x10,%edx
movzbl %dl,%edx
or     %r9d,%edx
shl    $0x10,%eax
or     %edx,%eax
mov    %eax,0xc(%rsi,%rcx,1)
lea    (%rdi,%rcx,1),%rax
add    $0x10,%rax
add    $0x10,%rcx
cmp    %r8,%rax
jb     1120 <Base42_CopyFlipC+0x20>
ret

LLVM IR (-O0):
define i32 @Base42_CopyFlipC(i8* %0, i8* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca i32*
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
%15 = load i8*, i8** %5
%16 = bitcast i8* %15 to i32*
store i32* %16, i32** %8
%17 = load i32*, i32** %8
%18 = load i32, i32* %7
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds i32, i32* %17, i64 %19
store i32* %20, i32** %10
%21 = load i8*, i8** %6
%22 = bitcast i8* %21 to i32*
store i32* %22, i32** %9
br label %23
23: ; preds = %27, %3
%24 = load i32*, i32** %8
%25 = load i32*, i32** %10
%26 = icmp ult i32* %24, %25
br i1 %26, label %27, label %88
27: ; preds = %23
%28 = load i32*, i32** %8
%29 = getelementptr inbounds i32, i32* %28, i32 1
store i32* %29, i32** %8
%30 = load i32, i32* %28
store i32 %30, i32* %11
%31 = load i32, i32* %11
%32 = and i32 %31, -16711936
%33 = load i32, i32* %11
%34 = ashr i32 %33, 16
%35 = and i32 %34, 255
%36 = or i32 %32, %35
%37 = load i32, i32* %11
%38 = shl i32 %37, 16
%39 = and i32 %38, 16711680
%40 = or i32 %36, %39
%41 = load i32*, i32** %9
%42 = getelementptr inbounds i32, i32* %41, i32 1
store i32* %42, i32** %9
store i32 %40, i32* %41
%43 = load i32*, i32** %8
%44 = getelementptr inbounds i32, i32* %43, i32 1
store i32* %44, i32** %8
%45 = load i32, i32* %43
store i32 %45, i32* %11
%46 = load i32, i32* %11
%47 = and i32 %46, -16711936
%48 = load i32, i32* %11
%49 = ashr i32 %48, 16
%50 = and i32 %49, 255
%51 = or i32 %47, %50
%52 = load i32, i32* %11
%53 = shl i32 %52, 16
%54 = and i32 %53, 16711680
%55 = or i32 %51, %54
%56 = load i32*, i32** %9
%57 = getelementptr inbounds i32, i32* %56, i32 1
store i32* %57, i32** %9
store i32 %55, i32* %56
%58 = load i32*, i32** %8
%59 = getelementptr inbounds i32, i32* %58, i32 1
store i32* %59, i32** %8
%60 = load i32, i32* %58
store i32 %60, i32* %11
%61 = load i32, i32* %11
%62 = and i32 %61, -16711936
%63 = load i32, i32* %11
%64 = ashr i32 %63, 16
%65 = and i32 %64, 255
%66 = or i32 %62, %65
%67 = load i32, i32* %11
%68 = shl i32 %67, 16
%69 = and i32 %68, 16711680
%70 = or i32 %66, %69
%71 = load i32*, i32** %9
%72 = getelementptr inbounds i32, i32* %71, i32 1
store i32* %72, i32** %9
store i32 %70, i32* %71
%73 = load i32*, i32** %8
%74 = getelementptr inbounds i32, i32* %73, i32 1
store i32* %74, i32** %8
%75 = load i32, i32* %73
store i32 %75, i32* %11
%76 = load i32, i32* %11
%77 = and i32 %76, -16711936
%78 = load i32, i32* %11
%79 = ashr i32 %78, 16
%80 = and i32 %79, 255
%81 = or i32 %77, %80
%82 = load i32, i32* %11
%83 = shl i32 %82, 16
%84 = and i32 %83, 16711680
%85 = or i32 %81, %84
%86 = load i32*, i32** %9
%87 = getelementptr inbounds i32, i32* %86, i32 1
store i32* %87, i32** %9
store i32 %85, i32* %86
br label %23
88: ; preds = %23
%89 = load i32, i32* %4
ret i32 %89
}

LLVM IR (-O2):
define i32 @Base42_CopyFlipC(i8* %0, i8* nocapture writeonly %1, i32 %2) {
%4 = bitcast i8* %0 to i32*
%5 = sext i32 %2 to i64
%6 = getelementptr inbounds i32, i32* %4, i64 %5
%7 = icmp ugt i32* %6, %4
br i1 %7, label %8, label %54
8: ; preds = %3
%9 = bitcast i8* %1 to i32*
br label %10
10: ; preds = %8, %10
%11 = phi i32* [ %43, %10 ], [ %4, %8 ]
%12 = phi i32* [ %52, %10 ], [ %9, %8 ]
%13 = getelementptr inbounds i32, i32* %11, i64 1
%14 = load i32, i32* %11
%15 = and i32 %14, -16711936
%16 = lshr i32 %14, 16
%17 = and i32 %16, 255
%18 = or i32 %17, %15
%19 = shl i32 %14, 16
%20 = and i32 %19, 16711680
%21 = or i32 %18, %20
%22 = getelementptr inbounds i32, i32* %12, i64 1
store i32 %21, i32* %12
%23 = getelementptr inbounds i32, i32* %11, i64 2
%24 = load i32, i32* %13
%25 = and i32 %24, -16711936
%26 = lshr i32 %24, 16
%27 = and i32 %26, 255
%28 = or i32 %27, %25
%29 = shl i32 %24, 16
%30 = and i32 %29, 16711680
%31 = or i32 %28, %30
%32 = getelementptr inbounds i32, i32* %12, i64 2
store i32 %31, i32* %22
%33 = getelementptr inbounds i32, i32* %11, i64 3
%34 = load i32, i32* %23
%35 = and i32 %34, -16711936
%36 = lshr i32 %34, 16
%37 = and i32 %36, 255
%38 = or i32 %37, %35
%39 = shl i32 %34, 16
%40 = and i32 %39, 16711680
%41 = or i32 %38, %40
%42 = getelementptr inbounds i32, i32* %12, i64 3
store i32 %41, i32* %32
%43 = getelementptr inbounds i32, i32* %11, i64 4
%44 = load i32, i32* %33
%45 = and i32 %44, -16711936
%46 = lshr i32 %44, 16
%47 = and i32 %46, 255
%48 = or i32 %47, %45
%49 = shl i32 %44, 16
%50 = and i32 %49, 16711680
%51 = or i32 %48, %50
%52 = getelementptr inbounds i32, i32* %12, i64 4
store i32 %51, i32* %42
%53 = icmp ult i32* %43, %6
br i1 %53, label %10, label %54
54: ; preds = %10, %3
ret i32 undef
}