TMTF(int SpacecraftID, int VCID, int OCFFlag, int MCFrameCntr, int VCFrameCntr,
     int FSHFlag, int SyncFlag, int PktOrderFlag, int SegmentID, int FHP,
     long int OCF, int FECF, long int SequenceCount, int FrameLength,
     unsigned char *data) {
  int VersionField = 0;
  int DataFieldLength = FrameLength - 6 - OCFFlag * 4 - FECF * 2;
  int VersionId = 0;
  int TypeIdentifier = 0;
  int HeaderFlag = 0;
  int ApplicationId = VCID;
  int SegmentFlags = 3;
  int ErrorControl = 0;
  int PacketLength = DataFieldLength - 6 - ErrorControl * 2;
  int Index = 0;
  int i;
  data[Index] = (VersionField << 6) | ((SpacecraftID & 0x3f0) >> 4);
  Index++;
  data[Index] = ((SpacecraftID & 0xF) << 4) | (VCID << 1) | OCFFlag;
  Index++;
  data[Index] = MCFrameCntr & 0xff;
  Index++;
  data[Index] = VCFrameCntr & 0xff;
  Index++;
  data[Index] = (FSHFlag << 7) | (SyncFlag << 6) | (PktOrderFlag << 5) |
                (SegmentID << 3) | ((FHP & 0x700) >> 8);
  Index++;
  data[Index] = FHP & 0xff;
  Index++;
  data[Index] = (VersionId << 5) | (TypeIdentifier << 4) | (HeaderFlag << 3) |
                ((ApplicationId & 0x700) >> 8);
  Index++;
  data[Index] = ApplicationId & 0xff;
  Index++;
  data[Index] = (SegmentFlags << 6) | ((SequenceCount & 0x3F00) >> 8);
  Index++;
  data[Index] = SequenceCount & 0xff;
  Index++;
  data[Index] = ((PacketLength - 1) & 0xff00) >> 8;
  Index++;
  data[Index] = (PacketLength - 1) & 0xff;
  Index++;
  for (i = 0; i < PacketLength; i++) {
    data[Index] = i & 0xff;
    Index++;
  };
  if (OCFFlag) {
    data[Index] = (OCF >> 8 * 3) & 0xff;
    Index++;
    data[Index] = (OCF >> 8 * 2) & 0xff;
    Index++;
    data[Index] = (OCF >> 8 * 1) & 0xff;
    Index++;
    data[Index] = (OCF)&0xff;
    Index++;
  };
  if (FECF = 1) {
    data[Index] = 0;
    Index++;
    data[Index] = 0;
    Index++;
  };
}


x86 assembly (clang, -O0):
<TMTF>:
push   %rbp
mov    %rsp,%rbp
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
mov    0x48(%rbp),%eax
sub    $0x6,%eax
mov    -0x10(%rbp),%ecx
shl    $0x2,%ecx
sub    %ecx,%eax
mov    0x38(%rbp),%ecx
shl    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x34(%rbp)
movl   $0x3,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x6,%eax
mov    -0x3c(%rbp),%ecx
shl    $0x1,%ecx
sub    %ecx,%eax
mov    %eax,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x6,%eax
mov    -0x8(%rbp),%ecx
and    $0x3f0,%ecx
sar    $0x4,%ecx
or     %ecx,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x8(%rbp),%eax
and    $0xf,%eax
shl    $0x4,%eax
mov    -0xc(%rbp),%ecx
shl    $0x1,%ecx
or     %ecx,%eax
or     -0x10(%rbp),%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x14(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x18(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x7,%eax
mov    0x10(%rbp),%ecx
shl    $0x6,%ecx
or     %ecx,%eax
mov    0x18(%rbp),%ecx
shl    $0x5,%ecx
or     %ecx,%eax
mov    0x20(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    0x28(%rbp),%ecx
and    $0x700,%ecx
sar    $0x8,%ecx
or     %ecx,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    0x28(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x28(%rbp),%eax
shl    $0x5,%eax
mov    -0x2c(%rbp),%ecx
shl    $0x4,%ecx
or     %ecx,%eax
mov    -0x30(%rbp),%ecx
shl    $0x3,%ecx
or     %ecx,%eax
mov    -0x34(%rbp),%ecx
and    $0x700,%ecx
sar    $0x8,%ecx
or     %ecx,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x34(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x6,%eax
cltq
mov    0x40(%rbp),%rcx
and    $0x3f00,%rcx
sar    $0x8,%rcx
or     %rcx,%rax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    0x40(%rbp),%rax
and    $0xff,%rax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
sub    $0x1,%eax
and    $0xff00,%eax
sar    $0x8,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
sub    $0x1,%eax
and    $0xff,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    13b3 <TMTF+0x2b3>
mov    -0x48(%rbp),%eax
and    $0xff,%eax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    137b <TMTF+0x27b>
cmpl   $0x0,-0x10(%rbp)
je     1449 <TMTF+0x349>
mov    0x30(%rbp),%rax
sar    $0x18,%rax
and    $0xff,%rax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    0x30(%rbp),%rax
sar    $0x10,%rax
and    $0xff,%rax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    0x30(%rbp),%rax
sar    $0x8,%rax
and    $0xff,%rax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    0x30(%rbp),%rax
and    $0xff,%rax
mov    %al,%dl
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
movl   $0x1,0x38(%rbp)
mov    $0x1,%al
test   $0x1,%al
jne    145f <TMTF+0x35f>
jmp    1489 <TMTF+0x389>
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    0x50(%rbp),%rax
movslq -0x44(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<TMTF>:
push   %rbx
mov    0x50(%rsp),%rbx
mov    %edi,%eax
shr    $0x4,%eax
and    $0x3f,%al
mov    %al,(%rbx)
shl    $0x4,%edi
lea    (%rsi,%rsi,1),%eax
or     %edi,%eax
or     %edx,%eax
mov    %al,0x1(%rbx)
mov    %cl,0x2(%rbx)
mov    0x20(%rsp),%eax
mov    %r8b,0x3(%rbx)
mov    0x10(%rsp),%ecx
shl    $0x7,%r9d
shl    $0x6,%ecx
or     %r9d,%ecx
mov    0x18(%rsp),%edi
shl    $0x5,%edi
shl    $0x3,%eax
or     %edi,%eax
mov    0x28(%rsp),%edi
or     %ecx,%eax
mov    %edi,%ecx
shr    $0x8,%ecx
and    $0x7,%ecx
or     %eax,%ecx
mov    0x48(%rsp),%r8d
mov    %cl,0x4(%rbx)
mov    0x38(%rsp),%r9d
mov    %dil,0x5(%rbx)
mov    %esi,%eax
shr    $0x8,%eax
and    $0x7,%al
mov    %al,0x6(%rbx)
mov    0x40(%rsp),%rax
add    %r9d,%r9d
mov    %sil,0x7(%rbx)
mov    %rax,%rcx
shr    $0x8,%rcx
or     $0xc0,%cl
mov    %cl,0x8(%rbx)
lea    (%r9,%rdx,4),%ecx
mov    %al,0x9(%rbx)
mov    %r8d,%eax
sub    %ecx,%eax
add    $0xfffffffa,%eax
neg    %ecx
add    %r8d,%ecx
add    $0xfffffff3,%ecx
mov    %ch,0xa(%rbx)
mov    %cl,0xb(%rbx)
mov    $0xc,%ecx
cmp    $0x7,%eax
jl     1346 <TMTF+0x246>
mov    %r8d,%r10d
sub    %r9d,%r10d
lea    0x0(,%rdx,4),%eax
sub    %eax,%r10d
add    $0xfffffff3,%r10d
cmp    $0x1f,%r10d
jae    11d6 <TMTF+0xd6>
xor    %esi,%esi
mov    $0xc,%ecx
jmp    1321 <TMTF+0x221>
add    $0x1,%r10
mov    %r10,%rsi
and    $0xffffffffffffffe0,%rsi
lea    -0x20(%rsi),%rdi
mov    %rdi,%rcx
shr    $0x5,%rcx
add    $0x1,%rcx
mov    %ecx,%eax
and    $0x3,%eax
cmp    $0x60,%rdi
jae    120a <TMTF+0x10a>
movdqa 0xdfd(%rip),%xmm0
xor    %edi,%edi
jmp    12d9 <TMTF+0x1d9>
and    $0xfffffffffffffffc,%rcx
movdqa 0xdea(%rip),%xmm0
xor    %edi,%edi
movdqa 0xdef(%rip),%xmm8
movdqa 0xdf6(%rip),%xmm9
movdqa 0xdfd(%rip),%xmm10
movdqa 0xe05(%rip),%xmm4
movdqa 0xe0d(%rip),%xmm5
movdqa 0xe15(%rip),%xmm6
movdqa 0xe1d(%rip),%xmm7
movdqa 0xe25(%rip),%xmm1
nopl   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm2
paddb  %xmm8,%xmm2
movdqu %xmm0,0xc(%rbx,%rdi,1)
movdqu %xmm2,0x1c(%rbx,%rdi,1)
movdqa %xmm0,%xmm2
paddb  %xmm9,%xmm2
movdqa %xmm0,%xmm3
paddb  %xmm10,%xmm3
movdqu %xmm2,0x2c(%rbx,%rdi,1)
movdqu %xmm3,0x3c(%rbx,%rdi,1)
movdqa %xmm0,%xmm2
paddb  %xmm4,%xmm2
movdqa %xmm0,%xmm3
paddb  %xmm5,%xmm3
movdqu %xmm2,0x4c(%rbx,%rdi,1)
movdqu %xmm3,0x5c(%rbx,%rdi,1)
movdqa %xmm0,%xmm2
paddb  %xmm6,%xmm2
movdqa %xmm0,%xmm3
paddb  %xmm7,%xmm3
movdqu %xmm2,0x6c(%rbx,%rdi,1)
movdqu %xmm3,0x7c(%rbx,%rdi,1)
sub    $0xffffffffffffff80,%rdi
pxor   %xmm1,%xmm0
add    $0xfffffffffffffffc,%rcx
jne    1260 <TMTF+0x160>
test   %rax,%rax
je     1318 <TMTF+0x218>
movdqa 0xd2a(%rip),%xmm1
movdqa 0xd32(%rip),%xmm2
xchg   %ax,%ax
mov    %rdi,%rcx
or     $0xc,%rcx
movdqa %xmm0,%xmm3
paddb  %xmm1,%xmm3
movdqu %xmm0,(%rbx,%rcx,1)
movdqu %xmm3,0x10(%rbx,%rcx,1)
add    $0x20,%rdi
paddb  %xmm2,%xmm0
add    $0xffffffffffffffff,%rax
jne    12f0 <TMTF+0x1f0>
lea    0xc(%rsi),%rcx
cmp    %rsi,%r10
je     1346 <TMTF+0x246>
sub    %r8d,%r9d
lea    (%r9,%rdx,4),%eax
nopl   0x0(%rax,%rax,1)
mov    %sil,(%rbx,%rcx,1)
add    $0x1,%rcx
lea    (%rax,%rsi,1),%edi
add    $0x1,%edi
add    $0x1,%esi
cmp    $0xfffffff4,%edi
jne    1330 <TMTF+0x230>
test   %edx,%edx
je     1359 <TMTF+0x259>
mov    0x30(%rsp),%rax
mov    %ecx,%edx
bswap  %eax
mov    %eax,(%rbx,%rdx,1)
add    $0x4,%ecx
movslq %ecx,%rax
movw   $0x0,(%rbx,%rax,1)
pop    %rbx
ret

LLVM IR (-O0):
define i32 @TMTF(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i64 %10, i32 %11, i64 %12, i32 %13, i8* %14) {
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i64
%28 = alloca i32
%29 = alloca i64
%30 = alloca i32
%31 = alloca i8*
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
store i32 %0, i32* %17
store i32 %1, i32* %18
store i32 %2, i32* %19
store i32 %3, i32* %20
store i32 %4, i32* %21
store i32 %5, i32* %22
store i32 %6, i32* %23
store i32 %7, i32* %24
store i32 %8, i32* %25
store i32 %9, i32* %26
store i64 %10, i64* %27
store i32 %11, i32* %28
store i64 %12, i64* %29
store i32 %13, i32* %30
store i8* %14, i8** %31
store i32 0, i32* %32
%43 = load i32, i32* %30
%44 = sub nsw i32 %43, 6
%45 = load i32, i32* %19
%46 = mul nsw i32 %45, 4
%47 = sub nsw i32 %44, %46
%48 = load i32, i32* %28
%49 = mul nsw i32 %48, 2
%50 = sub nsw i32 %47, %49
store i32 %50, i32* %33
store i32 0, i32* %34
store i32 0, i32* %35
store i32 0, i32* %36
%51 = load i32, i32* %18
store i32 %51, i32* %37
store i32 3, i32* %38
store i32 0, i32* %39
%52 = load i32, i32* %33
%53 = sub nsw i32 %52, 6
%54 = load i32, i32* %39
%55 = mul nsw i32 %54, 2
%56 = sub nsw i32 %53, %55
store i32 %56, i32* %40
store i32 0, i32* %41
%57 = load i32, i32* %32
%58 = shl i32 %57, 6
%59 = load i32, i32* %17
%60 = and i32 %59, 1008
%61 = ashr i32 %60, 4
%62 = or i32 %58, %61
%63 = trunc i32 %62 to i8
%64 = load i8*, i8** %31
%65 = load i32, i32* %41
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i8, i8* %64, i64 %66
store i8 %63, i8* %67
%68 = load i32, i32* %41
%69 = add nsw i32 %68, 1
store i32 %69, i32* %41
%70 = load i32, i32* %17
%71 = and i32 %70, 15
%72 = shl i32 %71, 4
%73 = load i32, i32* %18
%74 = shl i32 %73, 1
%75 = or i32 %72, %74
%76 = load i32, i32* %19
%77 = or i32 %75, %76
%78 = trunc i32 %77 to i8
%79 = load i8*, i8** %31
%80 = load i32, i32* %41
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %79, i64 %81
store i8 %78, i8* %82
%83 = load i32, i32* %41
%84 = add nsw i32 %83, 1
store i32 %84, i32* %41
%85 = load i32, i32* %20
%86 = and i32 %85, 255
%87 = trunc i32 %86 to i8
%88 = load i8*, i8** %31
%89 = load i32, i32* %41
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i8, i8* %88, i64 %90
store i8 %87, i8* %91
%92 = load i32, i32* %41
%93 = add nsw i32 %92, 1
store i32 %93, i32* %41
%94 = load i32, i32* %21
%95 = and i32 %94, 255
%96 = trunc i32 %95 to i8
%97 = load i8*, i8** %31
%98 = load i32, i32* %41
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i8, i8* %97, i64 %99
store i8 %96, i8* %100
%101 = load i32, i32* %41
%102 = add nsw i32 %101, 1
store i32 %102, i32* %41
%103 = load i32, i32* %22
%104 = shl i32 %103, 7
%105 = load i32, i32* %23
%106 = shl i32 %105, 6
%107 = or i32 %104, %106
%108 = load i32, i32* %24
%109 = shl i32 %108, 5
%110 = or i32 %107, %109
%111 = load i32, i32* %25
%112 = shl i32 %111, 3
%113 = or i32 %110, %112
%114 = load i32, i32* %26
%115 = and i32 %114, 1792
%116 = ashr i32 %115, 8
%117 = or i32 %113, %116
%118 = trunc i32 %117 to i8
%119 = load i8*, i8** %31
%120 = load i32, i32* %41
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %119, i64 %121
store i8 %118, i8* %122
%123 = load i32, i32* %41
%124 = add nsw i32 %123, 1
store i32 %124, i32* %41
%125 = load i32, i32* %26
%126 = and i32 %125, 255
%127 = trunc i32 %126 to i8
%128 = load i8*, i8** %31
%129 = load i32, i32* %41
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i8, i8* %128, i64 %130
store i8 %127, i8* %131
%132 = load i32, i32* %41
%133 = add nsw i32 %132, 1
store i32 %133, i32* %41
%134 = load i32, i32* %34
%135 = shl i32 %134, 5
%136 = load i32, i32* %35
%137 = shl i32 %136, 4
%138 = or i32 %135, %137
%139 = load i32, i32* %36
%140 = shl i32 %139, 3
%141 = or i32 %138, %140
%142 = load i32, i32* %37
%143 = and i32 %142, 1792
%144 = ashr i32 %143, 8
%145 = or i32 %141, %144
%146 = trunc i32 %145 to i8
%147 = load i8*, i8** %31
%148 = load i32, i32* %41
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i8, i8* %147, i64 %149
store i8 %146, i8* %150
%151 = load i32, i32* %41
%152 = add nsw i32 %151, 1
store i32 %152, i32* %41
%153 = load i32, i32* %37
%154 = and i32 %153, 255
%155 = trunc i32 %154 to i8
%156 = load i8*, i8** %31
%157 = load i32, i32* %41
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i8, i8* %156, i64 %158
store i8 %155, i8* %159
%160 = load i32, i32* %41
%161 = add nsw i32 %160, 1
store i32 %161, i32* %41
%162 = load i32, i32* %38
%163 = shl i32 %162, 6
%164 = sext i32 %163 to i64
%165 = load i64, i64* %29
%166 = and i64 %165, 16128
%167 = ashr i64 %166, 8
%168 = or i64 %164, %167
%169 = trunc i64 %168 to i8
%170 = load i8*, i8** %31
%171 = load i32, i32* %41
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds i8, i8* %170, i64 %172
store i8 %169, i8* %173
%174 = load i32, i32* %41
%175 = add nsw i32 %174, 1
store i32 %175, i32* %41
%176 = load i64, i64* %29
%177 = and i64 %176, 255
%178 = trunc i64 %177 to i8
%179 = load i8*, i8** %31
%180 = load i32, i32* %41
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds i8, i8* %179, i64 %181
store i8 %178, i8* %182
%183 = load i32, i32* %41
%184 = add nsw i32 %183, 1
store i32 %184, i32* %41
%185 = load i32, i32* %40
%186 = sub nsw i32 %185, 1
%187 = and i32 %186, 65280
%188 = ashr i32 %187, 8
%189 = trunc i32 %188 to i8
%190 = load i8*, i8** %31
%191 = load i32, i32* %41
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds i8, i8* %190, i64 %192
store i8 %189, i8* %193
%194 = load i32, i32* %41
%195 = add nsw i32 %194, 1
store i32 %195, i32* %41
%196 = load i32, i32* %40
%197 = sub nsw i32 %196, 1
%198 = and i32 %197, 255
%199 = trunc i32 %198 to i8
%200 = load i8*, i8** %31
%201 = load i32, i32* %41
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds i8, i8* %200, i64 %202
store i8 %199, i8* %203
%204 = load i32, i32* %41
%205 = add nsw i32 %204, 1
store i32 %205, i32* %41
store i32 0, i32* %42
br label %206
206: ; preds = %220, %15
%207 = load i32, i32* %42
%208 = load i32, i32* %40
%209 = icmp slt i32 %207, %208
br i1 %209, label %210, label %223
210: ; preds = %206
%211 = load i32, i32* %42
%212 = and i32 %211, 255
%213 = trunc i32 %212 to i8
%214 = load i8*, i8** %31
%215 = load i32, i32* %41
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds i8, i8* %214, i64 %216
store i8 %213, i8* %217
%218 = load i32, i32* %41
%219 = add nsw i32 %218, 1
store i32 %219, i32* %41
br label %220
220: ; preds = %210
%221 = load i32, i32* %42
%222 = add nsw i32 %221, 1
store i32 %222, i32* %42
br label %206
223: ; preds = %206
%224 = load i32, i32* %19
%225 = icmp ne i32 %224, 0
br i1 %225, label %226, label %266
226: ; preds = %223
%227 = load i64, i64* %27
%228 = ashr i64 %227, 24
%229 = and i64 %228, 255
%230 = trunc i64 %229 to i8
%231 = load i8*, i8** %31
%232 = load i32, i32* %41
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i8, i8* %231, i64 %233
store i8 %230, i8* %234
%235 = load i32, i32* %41
%236 = add nsw i32 %235, 1
store i32 %236, i32* %41
%237 = load i64, i64* %27
%238 = ashr i64 %237, 16
%239 = and i64 %238, 255
%240 = trunc i64 %239 to i8
%241 = load i8*, i8** %31
%242 = load i32, i32* %41
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds i8, i8* %241, i64 %243
store i8 %240, i8* %244
%245 = load i32, i32* %41
%246 = add nsw i32 %245, 1
store i32 %246, i32* %41
%247 = load i64, i64* %27
%248 = ashr i64 %247, 8
%249 = and i64 %248, 255
%250 = trunc i64 %249 to i8
%251 = load i8*, i8** %31
%252 = load i32, i32* %41
%253 = sext i32 %252 to i64
%254 = getelementptr inbounds i8, i8* %251, i64 %253
store i8 %250, i8* %254
%255 = load i32, i32* %41
%256 = add nsw i32 %255, 1
store i32 %256, i32* %41
%257 = load i64, i64* %27
%258 = and i64 %257, 255
%259 = trunc i64 %258 to i8
%260 = load i8*, i8** %31
%261 = load i32, i32* %41
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds i8, i8* %260, i64 %262
store i8 %259, i8* %263
%264 = load i32, i32* %41
%265 = add nsw i32 %264, 1
store i32 %265, i32* %41
br label %266
266: ; preds = %226, %223
store i32 1, i32* %28
br i1 true, label %267, label %280
267: ; preds = %266
%268 = load i8*, i8** %31
%269 = load i32, i32* %41
%270 = sext i32 %269 to i64
%271 = getelementptr inbounds i8, i8* %268, i64 %270
store i8 0, i8* %271
%272 = load i32, i32* %41
%273 = add nsw i32 %272, 1
store i32 %273, i32* %41
%274 = load i8*, i8** %31
%275 = load i32, i32* %41
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds i8, i8* %274, i64 %276
store i8 0, i8* %277
%278 = load i32, i32* %41
%279 = add nsw i32 %278, 1
store i32 %279, i32* %41
br label %280
280: ; preds = %267, %266
%281 = load i32, i32* %16
ret i32 %281
}

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