void RGB444toRGB444_ROW_COPY(unsigned char *dest_ptr, int dest_dx,
                             unsigned char *src_ptr, int src_dx) {
  register unsigned char *d = dest_ptr;
  register unsigned char *s = src_ptr;
  register int count = dest_dx;
  while (((unsigned int)d & 3) && ((unsigned int)s & 3) && count) {
    register unsigned int da_rgb;
    register unsigned int sa_rgb;
    sa_rgb = *(unsigned short *)(s);
    da_rgb = sa_rgb;
    s += 2;
    *(unsigned short *)(d) = da_rgb;
    d += 2;
    count--;
  }
  while (count >= 4) {
    register unsigned int da_rgb;
    register unsigned int sa_rgb;
    sa_rgb = *(unsigned short *)(s);
    da_rgb = sa_rgb;
    *(unsigned short *)(d) = da_rgb;
    sa_rgb = *(unsigned short *)(s + 2);
    da_rgb = sa_rgb;
    *(unsigned short *)(d + 2) = da_rgb;
    sa_rgb = *(unsigned short *)(s + 4);
    da_rgb = sa_rgb;
    *(unsigned short *)(d + 2 * 2) = da_rgb;
    sa_rgb = *(unsigned short *)(s + 6);
    da_rgb = sa_rgb;
    *(unsigned short *)(d + 3 * 2) = da_rgb;
    s += 8;
    d += 4 * 2;
    count -= 4;
  }
  while (count) {
    register unsigned int da_rgb;
    register unsigned int sa_rgb;
    sa_rgb = *(unsigned short *)(s);
    da_rgb = sa_rgb;
    s += 2;
    *(unsigned short *)(d) = da_rgb;
    d += 2;
    count--;
  }
}


x86 assembly (clang, -O0):
<RGB444toRGB444_ROW_COPY>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x28(%rbp),%rax
mov    %eax,%ecx
and    $0x3,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x4d(%rbp)
je     1160 <RGB444toRGB444_ROW_COPY+0x60>
mov    -0x30(%rbp),%rax
mov    %eax,%ecx
and    $0x3,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x4d(%rbp)
je     1160 <RGB444toRGB444_ROW_COPY+0x60>
cmpl   $0x0,-0x34(%rbp)
setne  %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    1170 <RGB444toRGB444_ROW_COPY+0x70>
jmp    11b3 <RGB444toRGB444_ROW_COPY+0xb3>
mov    -0x30(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    1128 <RGB444toRGB444_ROW_COPY+0x28>
jmp    11b8 <RGB444toRGB444_ROW_COPY+0xb8>
cmpl   $0x4,-0x34(%rbp)
jl     1262 <RGB444toRGB444_ROW_COPY+0x162>
mov    -0x30(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,(%rax)
mov    -0x30(%rbp),%rax
movzwl 0x2(%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,0x2(%rax)
mov    -0x30(%rbp),%rax
movzwl 0x4(%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,0x4(%rax)
mov    -0x30(%rbp),%rax
movzwl 0x6(%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,0x6(%rax)
mov    -0x30(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x34(%rbp)
jmp    11b8 <RGB444toRGB444_ROW_COPY+0xb8>
jmp    1267 <RGB444toRGB444_ROW_COPY+0x167>
cmpl   $0x0,-0x34(%rbp)
je     12b4 <RGB444toRGB444_ROW_COPY+0x1b4>
mov    -0x30(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x30(%rbp)
mov    -0x48(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,(%rax)
mov    -0x28(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x28(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    1267 <RGB444toRGB444_ROW_COPY+0x167>
pop    %rbp
ret

x86 assembly (clang, -O2):
<RGB444toRGB444_ROW_COPY>:
test   $0x3,%dil
je     113f <RGB444toRGB444_ROW_COPY+0x3f>
lea    0x2(%rdi),%r9
mov    %rdx,%rax
nopl   (%rax)
test   $0x3,%al
je     113f <RGB444toRGB444_ROW_COPY+0x3f>
test   %esi,%esi
je     113f <RGB444toRGB444_ROW_COPY+0x3f>
movzwl (%rdx),%r8d
add    $0x2,%rdx
mov    %r8w,(%rdi)
add    $0x2,%rdi
add    $0xffffffff,%esi
mov    %r9,%rcx
add    $0x2,%rcx
add    $0x2,%rax
test   $0x3,%r9b
mov    %rcx,%r9
jne    1110 <RGB444toRGB444_ROW_COPY+0x10>
cmp    $0x4,%esi
jl     1180 <RGB444toRGB444_ROW_COPY+0x80>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %esi,%eax
movzwl (%rdx),%ecx
mov    %cx,(%rdi)
movzwl 0x2(%rdx),%ecx
mov    %cx,0x2(%rdi)
movzwl 0x4(%rdx),%ecx
mov    %cx,0x4(%rdi)
movzwl 0x6(%rdx),%ecx
mov    %cx,0x6(%rdi)
add    $0x8,%rdx
add    $0x8,%rdi
lea    -0x4(%rax),%esi
cmp    $0x7,%eax
ja     1150 <RGB444toRGB444_ROW_COPY+0x50>
test   %esi,%esi
je     12d6 <RGB444toRGB444_ROW_COPY+0x1d6>
lea    -0x1(%rsi),%r10d
cmp    $0xf,%r10d
jb     123c <RGB444toRGB444_ROW_COPY+0x13c>
lea    (%rdx,%r10,2),%rax
add    $0x2,%rax
cmp    %rax,%rdi
jae    11b4 <RGB444toRGB444_ROW_COPY+0xb4>
lea    (%rdi,%r10,2),%rax
add    $0x2,%rax
cmp    %rax,%rdx
jb     123c <RGB444toRGB444_ROW_COPY+0x13c>
add    $0x1,%r10
mov    %r10,%r8
and    $0xfffffffffffffff0,%r8
lea    -0x10(%r8),%rax
mov    %rax,%r9
shr    $0x4,%r9
add    $0x1,%r9
test   %rax,%rax
je     12d7 <RGB444toRGB444_ROW_COPY+0x1d7>
mov    %r9,%rax
and    $0xfffffffffffffffe,%rax
xor    %ecx,%ecx
movups (%rdx,%rcx,1),%xmm0
movups 0x10(%rdx,%rcx,1),%xmm1
movups %xmm0,(%rdi,%rcx,1)
movups %xmm1,0x10(%rdi,%rcx,1)
movups 0x20(%rdx,%rcx,1),%xmm0
movups 0x30(%rdx,%rcx,1),%xmm1
movups %xmm0,0x20(%rdi,%rcx,1)
movups %xmm1,0x30(%rdi,%rcx,1)
add    $0x40,%rcx
add    $0xfffffffffffffffe,%rax
jne    11e0 <RGB444toRGB444_ROW_COPY+0xe0>
test   $0x1,%r9b
je     1228 <RGB444toRGB444_ROW_COPY+0x128>
movups (%rdx,%rcx,1),%xmm0
movups 0x10(%rdx,%rcx,1),%xmm1
movups %xmm0,(%rdi,%rcx,1)
movups %xmm1,0x10(%rdi,%rcx,1)
cmp    %r8,%r10
je     12d6 <RGB444toRGB444_ROW_COPY+0x1d6>
lea    (%rdi,%r8,2),%rdi
lea    (%rdx,%r8,2),%rdx
sub    %r8d,%esi
lea    -0x1(%rsi),%r8d
test   $0x7,%sil
je     1269 <RGB444toRGB444_ROW_COPY+0x169>
mov    %esi,%r9d
and    $0x7,%r9d
xor    %ecx,%ecx
nop
movzwl (%rdx),%eax
add    $0x2,%rdx
mov    %ax,(%rdi)
add    $0x2,%rdi
add    $0x1,%rcx
cmp    %ecx,%r9d
jne    1250 <RGB444toRGB444_ROW_COPY+0x150>
sub    %ecx,%esi
cmp    $0x7,%r8d
jb     12d6 <RGB444toRGB444_ROW_COPY+0x1d6>
mov    %esi,%eax
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzwl (%rdx,%rcx,2),%esi
mov    %si,(%rdi,%rcx,2)
movzwl 0x2(%rdx,%rcx,2),%esi
mov    %si,0x2(%rdi,%rcx,2)
movzwl 0x4(%rdx,%rcx,2),%esi
mov    %si,0x4(%rdi,%rcx,2)
movzwl 0x6(%rdx,%rcx,2),%esi
mov    %si,0x6(%rdi,%rcx,2)
movzwl 0x8(%rdx,%rcx,2),%esi
mov    %si,0x8(%rdi,%rcx,2)
movzwl 0xa(%rdx,%rcx,2),%esi
mov    %si,0xa(%rdi,%rcx,2)
movzwl 0xc(%rdx,%rcx,2),%esi
mov    %si,0xc(%rdi,%rcx,2)
movzwl 0xe(%rdx,%rcx,2),%esi
mov    %si,0xe(%rdi,%rcx,2)
add    $0x8,%rcx
cmp    %ecx,%eax
jne    1280 <RGB444toRGB444_ROW_COPY+0x180>
ret
xor    %ecx,%ecx
test   $0x1,%r9b
jne    1216 <RGB444toRGB444_ROW_COPY+0x116>
jmp    1228 <RGB444toRGB444_ROW_COPY+0x128>

LLVM IR (-O0):
define void @RGB444toRGB444_ROW_COPY(i8* %0, i32 %1, i8* %2, i32 %3) {
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i8*
%10 = alloca i8*
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
store i8* %0, i8** %5
store i32 %1, i32* %6
store i8* %2, i8** %7
store i32 %3, i32* %8
%18 = load i8*, i8** %5
store i8* %18, i8** %9
%19 = load i8*, i8** %7
store i8* %19, i8** %10
%20 = load i32, i32* %6
store i32 %20, i32* %11
br label %21
21: ; preds = %36, %4
%22 = load i8*, i8** %9
%23 = ptrtoint i8* %22 to i32
%24 = and i32 %23, 3
%25 = icmp ne i32 %24, 0
br i1 %25, label %26, label %34
26: ; preds = %21
%27 = load i8*, i8** %10
%28 = ptrtoint i8* %27 to i32
%29 = and i32 %28, 3
%30 = icmp ne i32 %29, 0
br i1 %30, label %31, label %34
31: ; preds = %26
%32 = load i32, i32* %11
%33 = icmp ne i32 %32, 0
br label %34
34: ; preds = %31, %26, %21
%35 = phi i1 [ false, %26 ], [ false, %21 ], [ %33, %31 ]
br i1 %35, label %36, label %52
36: ; preds = %34
%37 = load i8*, i8** %10
%38 = bitcast i8* %37 to i16*
%39 = load i16, i16* %38
%40 = zext i16 %39 to i32
store i32 %40, i32* %13
%41 = load i32, i32* %13
store i32 %41, i32* %12
%42 = load i8*, i8** %10
%43 = getelementptr inbounds i8, i8* %42, i64 2
store i8* %43, i8** %10
%44 = load i32, i32* %12
%45 = trunc i32 %44 to i16
%46 = load i8*, i8** %9
%47 = bitcast i8* %46 to i16*
store i16 %45, i16* %47
%48 = load i8*, i8** %9
%49 = getelementptr inbounds i8, i8* %48, i64 2
store i8* %49, i8** %9
%50 = load i32, i32* %11
%51 = add nsw i32 %50, -1
store i32 %51, i32* %11
br label %21
52: ; preds = %34
br label %53
53: ; preds = %56, %52
%54 = load i32, i32* %11
%55 = icmp sge i32 %54, 4
br i1 %55, label %56, label %105
56: ; preds = %53
%57 = load i8*, i8** %10
%58 = bitcast i8* %57 to i16*
%59 = load i16, i16* %58
%60 = zext i16 %59 to i32
store i32 %60, i32* %15
%61 = load i32, i32* %15
store i32 %61, i32* %14
%62 = load i32, i32* %14
%63 = trunc i32 %62 to i16
%64 = load i8*, i8** %9
%65 = bitcast i8* %64 to i16*
store i16 %63, i16* %65
%66 = load i8*, i8** %10
%67 = getelementptr inbounds i8, i8* %66, i64 2
%68 = bitcast i8* %67 to i16*
%69 = load i16, i16* %68
%70 = zext i16 %69 to i32
store i32 %70, i32* %15
%71 = load i32, i32* %15
store i32 %71, i32* %14
%72 = load i32, i32* %14
%73 = trunc i32 %72 to i16
%74 = load i8*, i8** %9
%75 = getelementptr inbounds i8, i8* %74, i64 2
%76 = bitcast i8* %75 to i16*
store i16 %73, i16* %76
%77 = load i8*, i8** %10
%78 = getelementptr inbounds i8, i8* %77, i64 4
%79 = bitcast i8* %78 to i16*
%80 = load i16, i16* %79
%81 = zext i16 %80 to i32
store i32 %81, i32* %15
%82 = load i32, i32* %15
store i32 %82, i32* %14
%83 = load i32, i32* %14
%84 = trunc i32 %83 to i16
%85 = load i8*, i8** %9
%86 = getelementptr inbounds i8, i8* %85, i64 4
%87 = bitcast i8* %86 to i16*
store i16 %84, i16* %87
%88 = load i8*, i8** %10
%89 = getelementptr inbounds i8, i8* %88, i64 6
%90 = bitcast i8* %89 to i16*
%91 = load i16, i16* %90
%92 = zext i16 %91 to i32
store i32 %92, i32* %15
%93 = load i32, i32* %15
store i32 %93, i32* %14
%94 = load i32, i32* %14
%95 = trunc i32 %94 to i16
%96 = load i8*, i8** %9
%97 = getelementptr inbounds i8, i8* %96, i64 6
%98 = bitcast i8* %97 to i16*
store i16 %95, i16* %98
%99 = load i8*, i8** %10
%100 = getelementptr inbounds i8, i8* %99, i64 8
store i8* %100, i8** %10
%101 = load i8*, i8** %9
%102 = getelementptr inbounds i8, i8* %101, i64 8
store i8* %102, i8** %9
%103 = load i32, i32* %11
%104 = sub nsw i32 %103, 4
store i32 %104, i32* %11
br label %53
105: ; preds = %53
br label %106
106: ; preds = %109, %105
%107 = load i32, i32* %11
%108 = icmp ne i32 %107, 0
br i1 %108, label %109, label %125
109: ; preds = %106
%110 = load i8*, i8** %10
%111 = bitcast i8* %110 to i16*
%112 = load i16, i16* %111
%113 = zext i16 %112 to i32
store i32 %113, i32* %17
%114 = load i32, i32* %17
store i32 %114, i32* %16
%115 = load i8*, i8** %10
%116 = getelementptr inbounds i8, i8* %115, i64 2
store i8* %116, i8** %10
%117 = load i32, i32* %16
%118 = trunc i32 %117 to i16
%119 = load i8*, i8** %9
%120 = bitcast i8* %119 to i16*
store i16 %118, i16* %120
%121 = load i8*, i8** %9
%122 = getelementptr inbounds i8, i8* %121, i64 2
store i8* %122, i8** %9
%123 = load i32, i32* %11
%124 = add nsw i32 %123, -1
store i32 %124, i32* %11
br label %106
125: ; preds = %106
ret void
}

LLVM IR (-O2):
define void @RGB444toRGB444_ROW_COPY(i8* %0, i32 %1, i8* %2, i32 %3) {
%5 = ptrtoint i8* %0 to i64
%6 = and i64 %5, 3
%7 = icmp eq i64 %6, 0
br i1 %7, label %27, label %8
8: ; preds = %4, %17
%9 = phi i8* [ %22, %17 ], [ %0, %4 ]
%10 = phi i8* [ %20, %17 ], [ %2, %4 ]
%11 = phi i32 [ %23, %17 ], [ %1, %4 ]
%12 = ptrtoint i8* %10 to i64
%13 = and i64 %12, 3
%14 = icmp ne i64 %13, 0
%15 = icmp ne i32 %11, 0
%16 = select i1 %14, i1 %15, i1 false
br i1 %16, label %17, label %27
17: ; preds = %8
%18 = bitcast i8* %10 to i16*
%19 = load i16, i16* %18
%20 = getelementptr inbounds i8, i8* %10, i64 2
%21 = bitcast i8* %9 to i16*
store i16 %19, i16* %21
%22 = getelementptr inbounds i8, i8* %9, i64 2
%23 = add nsw i32 %11, -1
%24 = ptrtoint i8* %22 to i64
%25 = and i64 %24, 3
%26 = icmp eq i64 %25, 0
br i1 %26, label %27, label %8
27: ; preds = %8, %17, %4
%28 = phi i32 [ %1, %4 ], [ %23, %17 ], [ %11, %8 ]
%29 = phi i8* [ %2, %4 ], [ %20, %17 ], [ %10, %8 ]
%30 = phi i8* [ %0, %4 ], [ %22, %17 ], [ %9, %8 ]
%31 = icmp sgt i32 %28, 3
br i1 %31, label %141, label %32
32: ; preds = %141, %27
%33 = phi i32 [ %28, %27 ], [ %165, %141 ]
%34 = phi i8* [ %29, %27 ], [ %163, %141 ]
%35 = phi i8* [ %30, %27 ], [ %164, %141 ]
%36 = icmp eq i32 %33, 0
br i1 %36, label %213, label %37
37: ; preds = %32
%38 = add i32 %33, -1
%39 = zext i32 %38 to i64
%40 = add nuw nsw i64 %39, 1
%41 = icmp ult i32 %38, 15
br i1 %41, label %116, label %42
42: ; preds = %37
%43 = add i32 %33, -1
%44 = zext i32 %43 to i64
%45 = shl nuw nsw i64 %44, 1
%46 = add nuw nsw i64 %45, 2
%47 = getelementptr i8, i8* %35, i64 %46
%48 = getelementptr i8, i8* %34, i64 %46
%49 = icmp ult i8* %35, %48
%50 = icmp ult i8* %34, %47
%51 = and i1 %49, %50
br i1 %51, label %116, label %52
52: ; preds = %42
%53 = and i64 %40, 8589934576
%54 = shl nuw nsw i64 %53, 1
%55 = getelementptr i8, i8* %35, i64 %54
%56 = shl nuw nsw i64 %53, 1
%57 = getelementptr i8, i8* %34, i64 %56
%58 = trunc i64 %53 to i32
%59 = sub i32 %33, %58
%60 = add nsw i64 %53, -16
%61 = lshr exact i64 %60, 4
%62 = add nuw nsw i64 %61, 1
%63 = and i64 %62, 1
%64 = icmp eq i64 %60, 0
br i1 %64, label %100, label %65
65: ; preds = %52
%66 = and i64 %62, 2305843009213693950
br label %67
67: ; preds = %67, %65
%68 = phi i64 [ 0, %65 ], [ %95, %67 ]
%69 = phi i64 [ 0, %65 ], [ %96, %67 ]
%70 = shl i64 %68, 1
%71 = getelementptr i8, i8* %35, i64 %70
%72 = shl i64 %68, 1
%73 = getelementptr i8, i8* %34, i64 %72
%74 = bitcast i8* %73 to <8 x i16>*
%75 = load <8 x i16>, <8 x i16>* %74
%76 = getelementptr i8, i8* %73, i64 16
%77 = bitcast i8* %76 to <8 x i16>*
%78 = load <8 x i16>, <8 x i16>* %77
%79 = bitcast i8* %71 to <8 x i16>*
store <8 x i16> %75, <8 x i16>* %79
%80 = getelementptr i8, i8* %71, i64 16
%81 = bitcast i8* %80 to <8 x i16>*
store <8 x i16> %78, <8 x i16>* %81
%82 = or i64 %68, 16
%83 = shl i64 %82, 1
%84 = getelementptr i8, i8* %35, i64 %83
%85 = shl i64 %82, 1
%86 = getelementptr i8, i8* %34, i64 %85
%87 = bitcast i8* %86 to <8 x i16>*
%88 = load <8 x i16>, <8 x i16>* %87
%89 = getelementptr i8, i8* %86, i64 16
%90 = bitcast i8* %89 to <8 x i16>*
%91 = load <8 x i16>, <8 x i16>* %90
%92 = bitcast i8* %84 to <8 x i16>*
store <8 x i16> %88, <8 x i16>* %92
%93 = getelementptr i8, i8* %84, i64 16
%94 = bitcast i8* %93 to <8 x i16>*
store <8 x i16> %91, <8 x i16>* %94
%95 = add nuw i64 %68, 32
%96 = add i64 %69, 2
%97 = icmp eq i64 %96, %66
br i1 %97, label %98, label %67
98: ; preds = %67
%99 = shl i64 %95, 1
br label %100
100: ; preds = %98, %52
%101 = phi i64 [ 0, %52 ], [ %99, %98 ]
%102 = icmp eq i64 %63, 0
br i1 %102, label %114, label %103
103: ; preds = %100
%104 = getelementptr i8, i8* %35, i64 %101
%105 = getelementptr i8, i8* %34, i64 %101
%106 = bitcast i8* %105 to <8 x i16>*
%107 = load <8 x i16>, <8 x i16>* %106
%108 = getelementptr i8, i8* %105, i64 16
%109 = bitcast i8* %108 to <8 x i16>*
%110 = load <8 x i16>, <8 x i16>* %109
%111 = bitcast i8* %104 to <8 x i16>*
store <8 x i16> %107, <8 x i16>* %111
%112 = getelementptr i8, i8* %104, i64 16
%113 = bitcast i8* %112 to <8 x i16>*
store <8 x i16> %110, <8 x i16>* %113
br label %114
114: ; preds = %100, %103
%115 = icmp eq i64 %40, %53
br i1 %115, label %213, label %116
116: ; preds = %42, %37, %114
%117 = phi i8* [ %35, %42 ], [ %35, %37 ], [ %55, %114 ]
%118 = phi i8* [ %34, %42 ], [ %34, %37 ], [ %57, %114 ]
%119 = phi i32 [ %33, %42 ], [ %33, %37 ], [ %59, %114 ]
%120 = add i32 %119, -1
%121 = and i32 %119, 7
%122 = icmp eq i32 %121, 0
br i1 %122, label %136, label %123
123: ; preds = %116, %123
%124 = phi i8* [ %132, %123 ], [ %117, %116 ]
%125 = phi i8* [ %130, %123 ], [ %118, %116 ]
%126 = phi i32 [ %133, %123 ], [ %119, %116 ]
%127 = phi i32 [ %134, %123 ], [ 0, %116 ]
%128 = bitcast i8* %125 to i16*
%129 = load i16, i16* %128
%130 = getelementptr inbounds i8, i8* %125, i64 2
%131 = bitcast i8* %124 to i16*
store i16 %129, i16* %131
%132 = getelementptr inbounds i8, i8* %124, i64 2
%133 = add nsw i32 %126, -1
%134 = add i32 %127, 1
%135 = icmp eq i32 %134, %121
br i1 %135, label %136, label %123
136: ; preds = %123, %116
%137 = phi i8* [ %117, %116 ], [ %132, %123 ]
%138 = phi i8* [ %118, %116 ], [ %130, %123 ]
%139 = phi i32 [ %119, %116 ], [ %133, %123 ]
%140 = icmp ult i32 %120, 7
br i1 %140, label %213, label %167
141: ; preds = %27, %141
%142 = phi i8* [ %164, %141 ], [ %30, %27 ]
%143 = phi i8* [ %163, %141 ], [ %29, %27 ]
%144 = phi i32 [ %165, %141 ], [ %28, %27 ]
%145 = bitcast i8* %143 to i16*
%146 = load i16, i16* %145
%147 = bitcast i8* %142 to i16*
store i16 %146, i16* %147
%148 = getelementptr inbounds i8, i8* %143, i64 2
%149 = bitcast i8* %148 to i16*
%150 = load i16, i16* %149
%151 = getelementptr inbounds i8, i8* %142, i64 2
%152 = bitcast i8* %151 to i16*
store i16 %150, i16* %152
%153 = getelementptr inbounds i8, i8* %143, i64 4
%154 = bitcast i8* %153 to i16*
%155 = load i16, i16* %154
%156 = getelementptr inbounds i8, i8* %142, i64 4
%157 = bitcast i8* %156 to i16*
store i16 %155, i16* %157
%158 = getelementptr inbounds i8, i8* %143, i64 6
%159 = bitcast i8* %158 to i16*
%160 = load i16, i16* %159
%161 = getelementptr inbounds i8, i8* %142, i64 6
%162 = bitcast i8* %161 to i16*
store i16 %160, i16* %162
%163 = getelementptr inbounds i8, i8* %143, i64 8
%164 = getelementptr inbounds i8, i8* %142, i64 8
%165 = add nsw i32 %144, -4
%166 = icmp ugt i32 %144, 7
br i1 %166, label %141, label %32
167: ; preds = %136, %167
%168 = phi i8* [ %210, %167 ], [ %137, %136 ]
%169 = phi i8* [ %208, %167 ], [ %138, %136 ]
%170 = phi i32 [ %211, %167 ], [ %139, %136 ]
%171 = bitcast i8* %169 to i16*
%172 = load i16, i16* %171
%173 = getelementptr inbounds i8, i8* %169, i64 2
%174 = bitcast i8* %168 to i16*
store i16 %172, i16* %174
%175 = getelementptr inbounds i8, i8* %168, i64 2
%176 = bitcast i8* %173 to i16*
%177 = load i16, i16* %176
%178 = getelementptr inbounds i8, i8* %169, i64 4
%179 = bitcast i8* %175 to i16*
store i16 %177, i16* %179
%180 = getelementptr inbounds i8, i8* %168, i64 4
%181 = bitcast i8* %178 to i16*
%182 = load i16, i16* %181
%183 = getelementptr inbounds i8, i8* %169, i64 6
%184 = bitcast i8* %180 to i16*
store i16 %182, i16* %184
%185 = getelementptr inbounds i8, i8* %168, i64 6
%186 = bitcast i8* %183 to i16*
%187 = load i16, i16* %186
%188 = getelementptr inbounds i8, i8* %169, i64 8
%189 = bitcast i8* %185 to i16*
store i16 %187, i16* %189
%190 = getelementptr inbounds i8, i8* %168, i64 8
%191 = bitcast i8* %188 to i16*
%192 = load i16, i16* %191
%193 = getelementptr inbounds i8, i8* %169, i64 10
%194 = bitcast i8* %190 to i16*
store i16 %192, i16* %194
%195 = getelementptr inbounds i8, i8* %168, i64 10
%196 = bitcast i8* %193 to i16*
%197 = load i16, i16* %196
%198 = getelementptr inbounds i8, i8* %169, i64 12
%199 = bitcast i8* %195 to i16*
store i16 %197, i16* %199
%200 = getelementptr inbounds i8, i8* %168, i64 12
%201 = bitcast i8* %198 to i16*
%202 = load i16, i16* %201
%203 = getelementptr inbounds i8, i8* %169, i64 14
%204 = bitcast i8* %200 to i16*
store i16 %202, i16* %204
%205 = getelementptr inbounds i8, i8* %168, i64 14
%206 = bitcast i8* %203 to i16*
%207 = load i16, i16* %206
%208 = getelementptr inbounds i8, i8* %169, i64 16
%209 = bitcast i8* %205 to i16*
store i16 %207, i16* %209
%210 = getelementptr inbounds i8, i8* %168, i64 16
%211 = add nsw i32 %170, -8
%212 = icmp eq i32 %211, 0
br i1 %212, label %213, label %167
213: ; preds = %136, %167, %114, %32
ret void
}