void HPTBlt16x16O(unsigned short *dest, unsigned short *source, int ystep) {
  for (unsigned int y = 16; y > 0; y--) {
    *(dest) = *(source);
    *(dest + 1) = *(source + 1);
    *(dest + 2) = *(source + 2);
    *(dest + 3) = *(source + 3);
    *(dest + 4) = *(source + 4);
    *(dest + 5) = *(source + 5);
    *(dest + 6) = *(source + 6);
    *(dest + 7) = *(source + 7);
    *(dest + 8) = *(source + 8);
    *(dest + 9) = *(source + 9);
    *(dest + 10) = *(source + 10);
    *(dest + 11) = *(source + 11);
    *(dest + 12) = *(source + 12);
    *(dest + 13) = *(source + 13);
    *(dest + 14) = *(source + 14);
    *(dest + 15) = *(source + 15);
    source += ystep;
    dest += 480;
  }
}


x86 assembly (clang, -O0):
<HPTBlt16x16O>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x10,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jbe    124f <HPTBlt16x16O+0x14f>
mov    -0x10(%rbp),%rax
mov    (%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,(%rax)
mov    -0x10(%rbp),%rax
mov    0x2(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x2(%rax)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x4(%rax)
mov    -0x10(%rbp),%rax
mov    0x6(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x6(%rax)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x8(%rax)
mov    -0x10(%rbp),%rax
mov    0xa(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0xa(%rax)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0xc(%rax)
mov    -0x10(%rbp),%rax
mov    0xe(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0xe(%rax)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x10(%rax)
mov    -0x10(%rbp),%rax
mov    0x12(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x12(%rax)
mov    -0x10(%rbp),%rax
mov    0x14(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x14(%rax)
mov    -0x10(%rbp),%rax
mov    0x16(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x16(%rax)
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x18(%rax)
mov    -0x10(%rbp),%rax
mov    0x1a(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x1a(%rax)
mov    -0x10(%rbp),%rax
mov    0x1c(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x1c(%rax)
mov    -0x10(%rbp),%rax
mov    0x1e(%rax),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0x1e(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
add    $0x3c0,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    1116 <HPTBlt16x16O+0x16>
pop    %rbp
ret

x86 assembly (clang, -O2):
<HPTBlt16x16O>:
movslq %edx,%rax
add    $0x1e,%rsi
add    %rax,%rax
xor    %ecx,%ecx
nopl   0x0(%rax)
movzwl -0x1e(%rsi),%edx
mov    %dx,(%rdi,%rcx,1)
movzwl -0x1c(%rsi),%edx
mov    %dx,0x2(%rdi,%rcx,1)
movzwl -0x1a(%rsi),%edx
mov    %dx,0x4(%rdi,%rcx,1)
movzwl -0x18(%rsi),%edx
mov    %dx,0x6(%rdi,%rcx,1)
movzwl -0x16(%rsi),%edx
mov    %dx,0x8(%rdi,%rcx,1)
movzwl -0x14(%rsi),%edx
mov    %dx,0xa(%rdi,%rcx,1)
movzwl -0x12(%rsi),%edx
mov    %dx,0xc(%rdi,%rcx,1)
movzwl -0x10(%rsi),%edx
mov    %dx,0xe(%rdi,%rcx,1)
movzwl -0xe(%rsi),%edx
mov    %dx,0x10(%rdi,%rcx,1)
movzwl -0xc(%rsi),%edx
mov    %dx,0x12(%rdi,%rcx,1)
movzwl -0xa(%rsi),%edx
mov    %dx,0x14(%rdi,%rcx,1)
movzwl -0x8(%rsi),%edx
mov    %dx,0x16(%rdi,%rcx,1)
movzwl -0x6(%rsi),%edx
mov    %dx,0x18(%rdi,%rcx,1)
movzwl -0x4(%rsi),%edx
mov    %dx,0x1a(%rdi,%rcx,1)
movzwl -0x2(%rsi),%edx
mov    %dx,0x1c(%rdi,%rcx,1)
movzwl (%rsi),%edx
mov    %dx,0x1e(%rdi,%rcx,1)
add    $0x3c0,%rcx
add    %rax,%rsi
cmp    $0x3c00,%ecx
jne    1110 <HPTBlt16x16O+0x10>
ret

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

LLVM IR (-O2):
define void @HPTBlt16x16O(i16* nocapture writeonly %0, i16* nocapture %1, i32 %2) {
%4 = sext i32 %2 to i64
br label %6
5: ; preds = %6
ret void
6: ; preds = %3, %6
%7 = phi i32 [ 16, %3 ], [ %58, %6 ]
%8 = phi i16* [ %0, %3 ], [ %57, %6 ]
%9 = phi i16* [ %1, %3 ], [ %56, %6 ]
%10 = load i16, i16* %9
store i16 %10, i16* %8
%11 = getelementptr inbounds i16, i16* %9, i64 1
%12 = load i16, i16* %11
%13 = getelementptr inbounds i16, i16* %8, i64 1
store i16 %12, i16* %13
%14 = getelementptr inbounds i16, i16* %9, i64 2
%15 = load i16, i16* %14
%16 = getelementptr inbounds i16, i16* %8, i64 2
store i16 %15, i16* %16
%17 = getelementptr inbounds i16, i16* %9, i64 3
%18 = load i16, i16* %17
%19 = getelementptr inbounds i16, i16* %8, i64 3
store i16 %18, i16* %19
%20 = getelementptr inbounds i16, i16* %9, i64 4
%21 = load i16, i16* %20
%22 = getelementptr inbounds i16, i16* %8, i64 4
store i16 %21, i16* %22
%23 = getelementptr inbounds i16, i16* %9, i64 5
%24 = load i16, i16* %23
%25 = getelementptr inbounds i16, i16* %8, i64 5
store i16 %24, i16* %25
%26 = getelementptr inbounds i16, i16* %9, i64 6
%27 = load i16, i16* %26
%28 = getelementptr inbounds i16, i16* %8, i64 6
store i16 %27, i16* %28
%29 = getelementptr inbounds i16, i16* %9, i64 7
%30 = load i16, i16* %29
%31 = getelementptr inbounds i16, i16* %8, i64 7
store i16 %30, i16* %31
%32 = getelementptr inbounds i16, i16* %9, i64 8
%33 = load i16, i16* %32
%34 = getelementptr inbounds i16, i16* %8, i64 8
store i16 %33, i16* %34
%35 = getelementptr inbounds i16, i16* %9, i64 9
%36 = load i16, i16* %35
%37 = getelementptr inbounds i16, i16* %8, i64 9
store i16 %36, i16* %37
%38 = getelementptr inbounds i16, i16* %9, i64 10
%39 = load i16, i16* %38
%40 = getelementptr inbounds i16, i16* %8, i64 10
store i16 %39, i16* %40
%41 = getelementptr inbounds i16, i16* %9, i64 11
%42 = load i16, i16* %41
%43 = getelementptr inbounds i16, i16* %8, i64 11
store i16 %42, i16* %43
%44 = getelementptr inbounds i16, i16* %9, i64 12
%45 = load i16, i16* %44
%46 = getelementptr inbounds i16, i16* %8, i64 12
store i16 %45, i16* %46
%47 = getelementptr inbounds i16, i16* %9, i64 13
%48 = load i16, i16* %47
%49 = getelementptr inbounds i16, i16* %8, i64 13
store i16 %48, i16* %49
%50 = getelementptr inbounds i16, i16* %9, i64 14
%51 = load i16, i16* %50
%52 = getelementptr inbounds i16, i16* %8, i64 14
store i16 %51, i16* %52
%53 = getelementptr inbounds i16, i16* %9, i64 15
%54 = load i16, i16* %53
%55 = getelementptr inbounds i16, i16* %8, i64 15
store i16 %54, i16* %55
%56 = getelementptr inbounds i16, i16* %9, i64 %4
%57 = getelementptr inbounds i16, i16* %8, i64 480
%58 = add nsw i32 %7, -1
%59 = icmp eq i32 %58, 0
br i1 %59, label %5, label %6
}