void HPTPartialBltVO(unsigned short *tempf1, unsigned short *tempd1, int x_size,
                     int y_size, int ystep) {
  unsigned short tempus;
  for (int ycount = (y_size - 1); ycount >= 0; ycount--) {
    for (int xcount_temp = ((x_size)-1); xcount_temp >= 0; xcount_temp--) {
      tempus = *(tempd1 + (xcount_temp));
      *(tempf1 + (xcount_temp)) = tempus;
    }
    tempd1 -= ystep;
    tempf1 += 480;
  }
}


x86 assembly (clang, -O0):
<HPTPartialBltVO>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jl     11a0 <HPTPartialBltVO+0xa0>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x28(%rbp)
jl     116a <HPTPartialBltVO+0x6a>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,2),%ax
mov    %ax,-0x1e(%rbp)
mov    -0x1e(%rbp),%dx
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    1132 <HPTPartialBltVO+0x32>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
add    $0x3c0,%rax
mov    %rax,-0x8(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    111f <HPTPartialBltVO+0x1f>
pop    %rbp
ret

x86 assembly (clang, -O2):
<HPTPartialBltVO>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %ecx,%ecx
jle    12f8 <HPTPartialBltVO+0x1f8>
mov    %rsi,%r12
movslq %r8d,%rsi
mov    %rsi,-0x8(%rsp)
neg    %rsi
mov    %edx,%r10d
lea    -0x1(%r10),%r13
lea    -0x1(%rdx),%eax
lea    0x1(%rax),%rbp
mov    %rbp,-0x38(%rsp)
sub    %r10,%rbp
mov    %rbp,-0x40(%rsp)
mov    %r10d,%ebp
and    $0xfffffff0,%ebp
mov    %rbp,-0x10(%rsp)
add    $0xfffffffffffffff0,%rbp
mov    %rbp,-0x18(%rsp)
shr    $0x4,%rbp
add    $0x1,%rbp
cmp    %r13d,%eax
setb   %bl
mov    %r13,%rax
shr    $0x20,%rax
setne  %al
or     %bl,%al
mov    %al,-0x41(%rsp)
mov    %r10d,%eax
and    $0xf,%eax
mov    %rax,-0x28(%rsp)
mov    %rbp,%rax
mov    %rbp,-0x20(%rsp)
and    $0xfffffffffffffffe,%rbp
mov    %rbp,-0x30(%rsp)
mov    $0xffffffef,%r15d
add    %r10,%r15
xor    %r11d,%r11d
mov    %rdi,%r9
mov    %r12,%r14
jmp    11bd <HPTPartialBltVO+0xbd>
nopl   (%rax)
lea    -0x1(%rcx),%eax
lea    (%r14,%rsi,2),%r14
add    $0x3c0,%r9
add    $0x1,%r11
cmp    $0x1,%ecx
mov    %eax,%ecx
jle    12f8 <HPTPartialBltVO+0x1f8>
test   %edx,%edx
jle    11a0 <HPTPartialBltVO+0xa0>
cmp    $0x10,%edx
setb   %bl
or     -0x41(%rsp),%bl
mov    %r10,%rbx
jne    12c0 <HPTPartialBltVO+0x1c0>
imul   $0x1e0,%r11,%rbx
mov    -0x40(%rsp),%rax
lea    (%rax,%rbx,1),%r8
mov    %r11,%rbp
imul   -0x8(%rsp),%rbp
mov    -0x38(%rsp),%rax
sub    %rbp,%rax
lea    (%rdi,%r8,2),%r8
lea    (%r12,%rax,2),%rax
cmp    %rax,%r8
jae    1223 <HPTPartialBltVO+0x123>
add    -0x38(%rsp),%rbx
mov    -0x40(%rsp),%rax
sub    %rbp,%rax
lea    (%rdi,%rbx,2),%rbp
lea    (%r12,%rax,2),%rax
mov    %r10,%rbx
cmp    %rbp,%rax
jb     12c0 <HPTPartialBltVO+0x1c0>
cmpq   $0x0,-0x18(%rsp)
je     12ec <HPTPartialBltVO+0x1ec>
mov    %r12,%rbx
mov    -0x30(%rsp),%r12
xor    %r8d,%r8d
nopw   0x0(%rax,%rax,1)
lea    (%r8,%r13,1),%eax
movups -0x1e(%r14,%rax,2),%xmm0
movups -0xe(%r14,%rax,2),%xmm1
movups %xmm1,-0xe(%r9,%rax,2)
movups %xmm0,-0x1e(%r9,%rax,2)
lea    (%r15,%r8,1),%eax
movups -0x1e(%r14,%rax,2),%xmm0
movups -0xe(%r14,%rax,2),%xmm1
movups %xmm1,-0xe(%r9,%rax,2)
movups %xmm0,-0x1e(%r9,%rax,2)
add    $0xffffffffffffffe0,%r8
add    $0xfffffffffffffffe,%r12
jne    1240 <HPTPartialBltVO+0x140>
neg    %r8
mov    %rbx,%r12
testb  $0x1,-0x20(%rsp)
je     12ae <HPTPartialBltVO+0x1ae>
not    %r8d
lea    (%r10,%r8,1),%eax
movups -0x1e(%r14,%rax,2),%xmm0
movups -0xe(%r14,%rax,2),%xmm1
movups %xmm1,-0xe(%r9,%rax,2)
movups %xmm0,-0x1e(%r9,%rax,2)
mov    -0x28(%rsp),%rbx
cmp    %r10,-0x10(%rsp)
je     11a0 <HPTPartialBltVO+0xa0>
xchg   %ax,%ax
add    $0x1,%rbx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    -0x2(%rbx),%eax
movzwl (%r14,%rax,2),%ebp
mov    %bp,(%r9,%rax,2)
add    $0xffffffffffffffff,%rbx
cmp    $0x1,%rbx
jg     12d0 <HPTPartialBltVO+0x1d0>
jmp    11a0 <HPTPartialBltVO+0xa0>
xor    %r8d,%r8d
testb  $0x1,-0x20(%rsp)
jne    128f <HPTPartialBltVO+0x18f>
jmp    12ae <HPTPartialBltVO+0x1ae>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @HPTPartialBltVO(i16* %0, i16* %1, i32 %2, i32 %3, i32 %4) {
%6 = alloca i16*
%7 = alloca i16*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i16
%12 = alloca i32
%13 = alloca i32
store i16* %0, i16** %6
store i16* %1, i16** %7
store i32 %2, i32* %8
store i32 %3, i32* %9
store i32 %4, i32* %10
%14 = load i32, i32* %9
%15 = sub nsw i32 %14, 1
store i32 %15, i32* %12
br label %16
16: ; preds = %47, %5
%17 = load i32, i32* %12
%18 = icmp sge i32 %17, 0
br i1 %18, label %19, label %50
19: ; preds = %16
%20 = load i32, i32* %8
%21 = sub nsw i32 %20, 1
store i32 %21, i32* %13
br label %22
22: ; preds = %36, %19
%23 = load i32, i32* %13
%24 = icmp sge i32 %23, 0
br i1 %24, label %25, label %39
25: ; preds = %22
%26 = load i16*, i16** %7
%27 = load i32, i32* %13
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i16, i16* %26, i64 %28
%30 = load i16, i16* %29
store i16 %30, i16* %11
%31 = load i16, i16* %11
%32 = load i16*, i16** %6
%33 = load i32, i32* %13
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds i16, i16* %32, i64 %34
store i16 %31, i16* %35
br label %36
36: ; preds = %25
%37 = load i32, i32* %13
%38 = add nsw i32 %37, -1
store i32 %38, i32* %13
br label %22
39: ; preds = %22
%40 = load i32, i32* %10
%41 = load i16*, i16** %7
%42 = sext i32 %40 to i64
%43 = sub i64 0, %42
%44 = getelementptr inbounds i16, i16* %41, i64 %43
store i16* %44, i16** %7
%45 = load i16*, i16** %6
%46 = getelementptr inbounds i16, i16* %45, i64 480
store i16* %46, i16** %6
br label %47
47: ; preds = %39
%48 = load i32, i32* %12
%49 = add nsw i32 %48, -1
store i32 %49, i32* %12
br label %16
50: ; preds = %16
ret void
}

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