void file_loadfile(int clustno, int size, char *buf, int *fat, char *img) {
  int i;
  for (;;) {
    if (size <= 512) {
      for (i = 0; i < size; ++i)
        buf[i] = img[clustno * 512 + i];
      break;
    }
    for (i = 0; i < 512; ++i)
      buf[i] = img[clustno * 512 + i];
    size -= 512;
    buf += 512;
    clustno = fat[clustno];
  }
}


x86 assembly (clang, -O0):
<file_loadfile>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
cmpl   $0x200,-0x8(%rbp)
jg     1167 <file_loadfile+0x67>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1162 <file_loadfile+0x62>
mov    -0x20(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x9,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    112a <file_loadfile+0x2a>
jmp    11d3 <file_loadfile+0xd3>
movl   $0x0,-0x24(%rbp)
cmpl   $0x200,-0x24(%rbp)
jge    11a7 <file_loadfile+0xa7>
mov    -0x20(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x9,%ecx
add    -0x24(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    116e <file_loadfile+0x6e>
mov    -0x8(%rbp),%eax
sub    $0x200,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%rax
add    $0x200,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x4(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4(%rbp)
jmp    1116 <file_loadfile+0x16>
pop    %rbp
ret

x86 assembly (clang, -O2):
<file_loadfile>:
push   %r15
push   %r14
push   %rbx
cmp    $0x201,%esi
jge    11c5 <file_loadfile+0xc5>
mov    %rdx,%r15
mov    %esi,%ebx
test   %ebx,%ebx
jle    11bf <file_loadfile+0xbf>
movslq %edi,%r9
shl    $0x9,%r9
mov    %ebx,%r14d
cmp    $0x8,%ebx
jb     114e <file_loadfile+0x4e>
lea    (%r8,%r9,1),%r11
lea    (%r9,%r14,1),%rdx
add    %r8,%rdx
cmp    %rdx,%r15
jae    1498 <file_loadfile+0x398>
lea    (%r15,%r14,1),%rdx
cmp    %rdx,%r11
jae    1498 <file_loadfile+0x398>
xor    %esi,%esi
mov    %rsi,%rdx
not    %rdx
add    %r14,%rdx
mov    %r14,%rdi
and    $0x3,%rdi
je     1182 <file_loadfile+0x82>
lea    (%r8,%r9,1),%rbx
cs nopw 0x0(%rax,%rax,1)
movzbl (%rbx,%rsi,1),%ecx
mov    %cl,(%r15,%rsi,1)
add    $0x1,%rsi
add    $0xffffffffffffffff,%rdi
jne    1170 <file_loadfile+0x70>
cmp    $0x3,%rdx
jb     11bf <file_loadfile+0xbf>
lea    (%r9,%r8,1),%rdx
add    $0x3,%rdx
movzbl -0x3(%rdx,%rsi,1),%ecx
mov    %cl,(%r15,%rsi,1)
movzbl -0x2(%rdx,%rsi,1),%ecx
mov    %cl,0x1(%r15,%rsi,1)
movzbl -0x1(%rdx,%rsi,1),%ecx
mov    %cl,0x2(%r15,%rsi,1)
movzbl (%rdx,%rsi,1),%ecx
mov    %cl,0x3(%r15,%rsi,1)
add    $0x4,%rsi
cmp    %rsi,%r14
jne    1190 <file_loadfile+0x90>
pop    %rbx
pop    %r14
pop    %r15
ret
lea    0x200(%r8),%r9
xor    %r10d,%r10d
mov    %rdx,%r15
jmp    1424 <file_loadfile+0x324>
nopw   0x0(%rax,%rax,1)
movups (%r8,%rdi,1),%xmm0
movups 0x10(%r8,%rdi,1),%xmm1
movups %xmm0,(%r15)
movups %xmm1,0x10(%r15)
mov    %rdi,%rbx
or     $0x20,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x20(%r15)
movups %xmm1,0x30(%r15)
mov    %rdi,%rbx
or     $0x40,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x40(%r15)
movups %xmm1,0x50(%r15)
mov    %rdi,%rbx
or     $0x60,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x60(%r15)
movups %xmm1,0x70(%r15)
mov    %rdi,%rbx
or     $0x80,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x80(%r15)
movups %xmm1,0x90(%r15)
mov    %rdi,%rbx
or     $0xa0,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0xa0(%r15)
movups %xmm1,0xb0(%r15)
mov    %rdi,%rbx
or     $0xc0,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0xc0(%r15)
movups %xmm1,0xd0(%r15)
mov    %rdi,%rbx
or     $0xe0,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0xe0(%r15)
movups %xmm1,0xf0(%r15)
mov    %rdi,%rbx
or     $0x100,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x100(%r15)
movups %xmm1,0x110(%r15)
mov    %rdi,%rbx
or     $0x120,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x120(%r15)
movups %xmm1,0x130(%r15)
mov    %rdi,%rbx
or     $0x140,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x140(%r15)
movups %xmm1,0x150(%r15)
mov    %rdi,%rbx
or     $0x160,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x160(%r15)
movups %xmm1,0x170(%r15)
mov    %rdi,%rbx
or     $0x180,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x180(%r15)
movups %xmm1,0x190(%r15)
mov    %rdi,%rbx
or     $0x1a0,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x1a0(%r15)
movups %xmm1,0x1b0(%r15)
mov    %rdi,%rbx
or     $0x1c0,%rbx
movups (%r8,%rbx,1),%xmm0
movups 0x10(%r8,%rbx,1),%xmm1
movups %xmm0,0x1c0(%r15)
movups %xmm1,0x1d0(%r15)
or     $0x1e0,%rdi
movups (%r8,%rdi,1),%xmm0
movups 0x10(%r8,%rdi,1),%xmm1
movups %xmm0,0x1e0(%r15)
movups %xmm1,0x1f0(%r15)
lea    -0x200(%rsi),%ebx
add    $0x200,%r15
mov    (%rcx,%r11,4),%edi
add    $0x1,%r10
cmp    $0x401,%esi
mov    %ebx,%esi
jl     1116 <file_loadfile+0x16>
movslq %edi,%r11
mov    %r11,%rdi
shl    $0x9,%rdi
lea    (%r9,%rdi,1),%rbx
cmp    %rbx,%r15
jae    11e0 <file_loadfile+0xe0>
mov    %r10,%rbx
shl    $0x9,%rbx
lea    (%rbx,%rdx,1),%r14
add    $0x200,%r14
lea    (%r8,%rdi,1),%rbx
cmp    %r14,%rbx
jae    11e0 <file_loadfile+0xe0>
mov    $0x3,%edi
nop
movzbl -0x3(%rbx,%rdi,1),%eax
mov    %al,-0x3(%r15,%rdi,1)
movzbl -0x2(%rbx,%rdi,1),%eax
mov    %al,-0x2(%r15,%rdi,1)
movzbl -0x1(%rbx,%rdi,1),%eax
mov    %al,-0x1(%r15,%rdi,1)
movzbl (%rbx,%rdi,1),%eax
mov    %al,(%r15,%rdi,1)
add    $0x4,%rdi
cmp    $0x203,%rdi
jne    1460 <file_loadfile+0x360>
jmp    1401 <file_loadfile+0x301>
cmp    $0x20,%ebx
jae    14a4 <file_loadfile+0x3a4>
xor    %esi,%esi
jmp    158e <file_loadfile+0x48e>
mov    %r14d,%esi
and    $0xffffffe0,%esi
lea    -0x20(%rsi),%rdi
mov    %rdi,%rdx
shr    $0x5,%rdx
add    $0x1,%rdx
mov    %edx,%r10d
and    $0x3,%r10d
cmp    $0x60,%rdi
jae    14ca <file_loadfile+0x3ca>
xor    %ebx,%ebx
jmp    1540 <file_loadfile+0x440>
and    $0xfffffffffffffffc,%rdx
lea    (%r9,%r8,1),%rdi
add    $0x70,%rdi
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movups -0x70(%rdi,%rbx,1),%xmm0
movups -0x60(%rdi,%rbx,1),%xmm1
movups %xmm0,(%r15,%rbx,1)
movups %xmm1,0x10(%r15,%rbx,1)
movups -0x50(%rdi,%rbx,1),%xmm0
movups -0x40(%rdi,%rbx,1),%xmm1
movups %xmm0,0x20(%r15,%rbx,1)
movups %xmm1,0x30(%r15,%rbx,1)
movups -0x30(%rdi,%rbx,1),%xmm0
movups -0x20(%rdi,%rbx,1),%xmm1
movups %xmm0,0x40(%r15,%rbx,1)
movups %xmm1,0x50(%r15,%rbx,1)
movups -0x10(%rdi,%rbx,1),%xmm0
movups (%rdi,%rbx,1),%xmm1
movups %xmm0,0x60(%r15,%rbx,1)
movups %xmm1,0x70(%r15,%rbx,1)
sub    $0xffffffffffffff80,%rbx
add    $0xfffffffffffffffc,%rdx
jne    14e0 <file_loadfile+0x3e0>
test   %r10,%r10
je     157b <file_loadfile+0x47b>
lea    (%rbx,%r15,1),%rdx
add    $0x10,%rdx
add    %r9,%rbx
lea    (%r8,%rbx,1),%rdi
add    $0x10,%rdi
shl    $0x5,%r10
xor    %ebx,%ebx
xchg   %ax,%ax
movups -0x10(%rdi,%rbx,1),%xmm0
movups (%rdi,%rbx,1),%xmm1
movups %xmm0,-0x10(%rdx,%rbx,1)
movups %xmm1,(%rdx,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%r10
jne    1560 <file_loadfile+0x460>
cmp    %r14,%rsi
je     11bf <file_loadfile+0xbf>
test   $0x18,%r14b
je     1150 <file_loadfile+0x50>
mov    %rsi,%rdx
mov    %r14d,%esi
and    $0xfffffff8,%esi
nopw   0x0(%rax,%rax,1)
mov    (%r11,%rdx,1),%rdi
mov    %rdi,(%r15,%rdx,1)
add    $0x8,%rdx
cmp    %rdx,%rsi
jne    15a0 <file_loadfile+0x4a0>
cmp    %r14,%rsi
je     11bf <file_loadfile+0xbf>
jmp    1150 <file_loadfile+0x50>

LLVM IR (-O0):
define void @file_loadfile(i32 %0, i32 %1, i8* %2, i32* %3, i8* %4) {
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i32*
%10 = alloca i8*
%11 = alloca i32
store i32 %0, i32* %6
store i32 %1, i32* %7
store i8* %2, i8** %8
store i32* %3, i32** %9
store i8* %4, i8** %10
br label %12
12: ; preds = %57, %5
%13 = load i32, i32* %7
%14 = icmp sle i32 %13, 512
br i1 %14, label %15, label %37
15: ; preds = %12
store i32 0, i32* %11
br label %16
16: ; preds = %33, %15
%17 = load i32, i32* %11
%18 = load i32, i32* %7
%19 = icmp slt i32 %17, %18
br i1 %19, label %20, label %36
20: ; preds = %16
%21 = load i8*, i8** %10
%22 = load i32, i32* %6
%23 = mul nsw i32 %22, 512
%24 = load i32, i32* %11
%25 = add nsw i32 %23, %24
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i8, i8* %21, i64 %26
%28 = load i8, i8* %27
%29 = load i8*, i8** %8
%30 = load i32, i32* %11
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %29, i64 %31
store i8 %28, i8* %32
br label %33
33: ; preds = %20
%34 = load i32, i32* %11
%35 = add nsw i32 %34, 1
store i32 %35, i32* %11
br label %16
36: ; preds = %16
br label %67
37: ; preds = %12
store i32 0, i32* %11
br label %38
38: ; preds = %54, %37
%39 = load i32, i32* %11
%40 = icmp slt i32 %39, 512
br i1 %40, label %41, label %57
41: ; preds = %38
%42 = load i8*, i8** %10
%43 = load i32, i32* %6
%44 = mul nsw i32 %43, 512
%45 = load i32, i32* %11
%46 = add nsw i32 %44, %45
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %42, i64 %47
%49 = load i8, i8* %48
%50 = load i8*, i8** %8
%51 = load i32, i32* %11
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %50, i64 %52
store i8 %49, i8* %53
br label %54
54: ; preds = %41
%55 = load i32, i32* %11
%56 = add nsw i32 %55, 1
store i32 %56, i32* %11
br label %38
57: ; preds = %38
%58 = load i32, i32* %7
%59 = sub nsw i32 %58, 512
store i32 %59, i32* %7
%60 = load i8*, i8** %8
%61 = getelementptr inbounds i8, i8* %60, i64 512
store i8* %61, i8** %8
%62 = load i32*, i32** %9
%63 = load i32, i32* %6
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i32, i32* %62, i64 %64
%66 = load i32, i32* %65
store i32 %66, i32* %6
br label %12
67: ; preds = %36
ret void
}

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