#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
void hnput(unsigned char *dst, unsigned long long src, size_t n) {
  unsigned int i;
  for (i = 0; n--; i++)
    dst[i] = (src >> (n * 8)) & 0xff;
}


x86 assembly (clang, -O0):
<hnput>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x18(%rbp)
cmp    $0x0,%rax
je     115f <hnput+0x5f>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
shl    $0x3,%rcx
shr    %cl,%rax
and    $0xff,%rax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1117 <hnput+0x17>
pop    %rbp
ret

x86 assembly (clang, -O2):
<hnput>:
push   %r14
push   %rbx
sub    $0x48,%rsp
test   %rdx,%rdx
je     1865 <hnput+0x765>
movabs $0xfffffffeffffffff,%rax
ff ff ff
lea    (%rdx,%rax,1),%rcx
add    $0x10,%rax
xor    %r8d,%r8d
cmp    %rax,%rcx
jb     17b9 <hnput+0x6b9>
mov    %rdx,%r8
and    $0xfffffffffffffff0,%r8
movq   %rdx,%xmm0
pshufd $0x44,%xmm0,%xmm1
movdqa 0xeb8(%rip),%xmm8
paddq  %xmm1,%xmm8
movdqa 0xebb(%rip),%xmm7
paddq  %xmm1,%xmm7
movdqa 0xebf(%rip),%xmm4
paddq  %xmm1,%xmm4
movdqa 0xec3(%rip),%xmm5
paddq  %xmm1,%xmm5
movdqa 0xec7(%rip),%xmm2
paddq  %xmm1,%xmm2
movdqa 0xecb(%rip),%xmm3
paddq  %xmm1,%xmm3
movdqa 0xece(%rip),%xmm10
paddq  %xmm1,%xmm10
paddq  0xed1(%rip),%xmm1
movq   %rsi,%xmm0
pshufd $0x44,%xmm0,%xmm13
lea    -0x10(%r8),%rax
mov    %rax,%r9
shr    $0x4,%r9
add    $0x1,%r9
test   %rax,%rax
je     186d <hnput+0x76d>
mov    %r9,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %r10d,%r10d
nopl   0x0(%rax)
movdqa %xmm8,-0x60(%rsp)
movdqa %xmm7,-0x50(%rsp)
movdqa %xmm4,-0x40(%rsp)
movdqa %xmm5,(%rsp)
movdqa %xmm3,0x10(%rsp)
movdqa %xmm10,0x20(%rsp)
movdqa %xmm1,%xmm15
movdqa %xmm1,0x30(%rsp)
movdqa -0x60(%rsp),%xmm8
psllq  $0x3,%xmm8
movdqa -0x50(%rsp),%xmm7
psllq  $0x3,%xmm7
movdqa -0x40(%rsp),%xmm0
psllq  $0x3,%xmm0
movdqa %xmm0,%xmm4
movdqa %xmm0,-0x20(%rsp)
psllq  $0x3,%xmm5
movdqa %xmm5,%xmm1
movdqa %xmm2,%xmm5
movdqa %xmm2,-0x10(%rsp)
psllq  $0x3,%xmm5
movdqa %xmm5,-0x80(%rsp)
movdqa %xmm3,%xmm11
psllq  $0x3,%xmm11
movdqa %xmm11,-0x30(%rsp)
psllq  $0x3,%xmm10
movdqa %xmm10,-0x70(%rsp)
movdqa 0xe0d(%rip),%xmm12
paddq  %xmm12,%xmm10
paddq  %xmm12,%xmm11
paddq  %xmm12,%xmm5
movdqa %xmm1,%xmm2
movdqa %xmm1,%xmm9
paddq  %xmm12,%xmm2
movdqa %xmm0,%xmm3
paddq  %xmm12,%xmm3
movdqa %xmm7,%xmm1
movdqa %xmm8,%xmm0
paddq  %xmm12,%xmm0
movdqa %xmm13,%xmm4
psrlq  %xmm0,%xmm4
paddq  %xmm12,%xmm1
pshufd $0xee,%xmm0,%xmm6
movdqa %xmm13,%xmm0
psrlq  %xmm6,%xmm0
movsd  %xmm4,%xmm0
movdqa %xmm13,%xmm4
psrlq  %xmm1,%xmm4
pshufd $0xee,%xmm1,%xmm6
movdqa %xmm13,%xmm1
psrlq  %xmm6,%xmm1
movdqa %xmm13,%xmm6
psrlq  %xmm3,%xmm6
movsd  %xmm4,%xmm1
pshufd $0xee,%xmm3,%xmm4
movdqa %xmm13,%xmm3
psrlq  %xmm4,%xmm3
movsd  %xmm6,%xmm3
movdqa %xmm13,%xmm4
psrlq  %xmm2,%xmm4
pshufd $0xee,%xmm2,%xmm6
movdqa %xmm13,%xmm2
psrlq  %xmm6,%xmm2
movdqa %xmm13,%xmm6
psrlq  %xmm5,%xmm6
movsd  %xmm4,%xmm2
pshufd $0xee,%xmm5,%xmm5
movdqa %xmm13,%xmm4
psrlq  %xmm5,%xmm4
movsd  %xmm6,%xmm4
movdqa %xmm13,%xmm5
psrlq  %xmm11,%xmm5
pshufd $0xee,%xmm11,%xmm11
movdqa %xmm13,%xmm6
psrlq  %xmm11,%xmm6
movdqa %xmm13,%xmm11
psrlq  %xmm10,%xmm11
movsd  %xmm5,%xmm6
pshufd $0xee,%xmm10,%xmm5
movdqa %xmm13,%xmm14
psrlq  %xmm5,%xmm14
movdqa %xmm15,%xmm10
psllq  $0x3,%xmm10
movdqa %xmm10,%xmm5
paddq  %xmm12,%xmm5
movdqa %xmm13,%xmm12
psrlq  %xmm5,%xmm12
movsd  %xmm11,%xmm14
pshufd $0xee,%xmm5,%xmm11
movdqa %xmm13,%xmm5
psrlq  %xmm11,%xmm5
movsd  %xmm12,%xmm5
movapd 0xce3(%rip),%xmm15
andpd  %xmm15,%xmm5
andpd  %xmm15,%xmm14
packuswb %xmm14,%xmm5
andpd  %xmm15,%xmm6
andpd  %xmm15,%xmm4
packuswb %xmm4,%xmm6
packuswb %xmm6,%xmm5
andpd  %xmm15,%xmm2
andpd  %xmm15,%xmm3
packuswb %xmm3,%xmm2
andpd  %xmm15,%xmm1
andpd  %xmm15,%xmm0
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm2
packuswb %xmm2,%xmm5
mov    %r10d,%eax
and    $0xffffffe0,%eax
movdqu %xmm5,(%rdi,%rax,1)
movdqa 0xc9b(%rip),%xmm0
paddq  %xmm0,%xmm10
movdqa -0x70(%rsp),%xmm1
paddq  %xmm0,%xmm1
movdqa %xmm1,-0x70(%rsp)
movdqa -0x30(%rsp),%xmm14
paddq  %xmm0,%xmm14
movdqa -0x80(%rsp),%xmm12
paddq  %xmm0,%xmm12
paddq  %xmm0,%xmm9
movdqa %xmm9,-0x80(%rsp)
paddq  %xmm0,%xmm7
paddq  %xmm0,%xmm8
movdqa %xmm13,%xmm2
psrlq  %xmm8,%xmm2
pshufd $0xee,%xmm8,%xmm1
movdqa %xmm13,%xmm11
psrlq  %xmm1,%xmm11
movdqa %xmm13,%xmm4
psrlq  %xmm7,%xmm4
movdqa -0x20(%rsp),%xmm6
paddq  %xmm0,%xmm6
pshufd $0xee,%xmm7,%xmm3
movdqa %xmm13,%xmm1
psrlq  %xmm3,%xmm1
movsd  %xmm2,%xmm11
movdqa %xmm13,%xmm5
psrlq  %xmm6,%xmm5
pshufd $0xee,%xmm6,%xmm2
movdqa %xmm13,%xmm9
psrlq  %xmm2,%xmm9
movdqa %xmm13,%xmm6
movdqa -0x80(%rsp),%xmm0
psrlq  %xmm0,%xmm6
movsd  %xmm4,%xmm1
pshufd $0xee,%xmm0,%xmm4
movdqa %xmm13,%xmm2
psrlq  %xmm4,%xmm2
movsd  %xmm5,%xmm9
movdqa %xmm13,%xmm5
movdqa %xmm12,%xmm0
psrlq  %xmm12,%xmm5
pshufd $0xee,%xmm12,%xmm7
movdqa %xmm13,%xmm4
psrlq  %xmm7,%xmm4
movdqa %xmm13,%xmm12
psrlq  %xmm14,%xmm12
movsd  %xmm6,%xmm2
pshufd $0xee,%xmm14,%xmm8
movdqa %xmm13,%xmm6
psrlq  %xmm8,%xmm6
movsd  %xmm5,%xmm4
movdqa %xmm13,%xmm0
movdqa -0x70(%rsp),%xmm3
psrlq  %xmm3,%xmm0
pshufd $0xee,%xmm3,%xmm5
movdqa %xmm13,%xmm3
psrlq  %xmm5,%xmm3
movdqa %xmm13,%xmm7
psrlq  %xmm10,%xmm7
movsd  %xmm12,%xmm6
movdqa 0x30(%rsp),%xmm12
pshufd $0xee,%xmm10,%xmm8
movdqa 0x20(%rsp),%xmm10
movdqa %xmm13,%xmm5
psrlq  %xmm8,%xmm5
movdqa -0x60(%rsp),%xmm8
movsd  %xmm0,%xmm3
movsd  %xmm7,%xmm5
movdqa -0x50(%rsp),%xmm7
andpd  %xmm15,%xmm5
andpd  %xmm15,%xmm3
packuswb %xmm3,%xmm5
andpd  %xmm15,%xmm6
andpd  %xmm15,%xmm4
packuswb %xmm4,%xmm6
packuswb %xmm6,%xmm5
andpd  %xmm15,%xmm2
andpd  %xmm15,%xmm9
packuswb %xmm9,%xmm2
andpd  %xmm15,%xmm1
andpd  %xmm15,%xmm11
packuswb %xmm11,%xmm1
movdqa 0x10(%rsp),%xmm3
packuswb %xmm1,%xmm2
packuswb %xmm2,%xmm5
movdqu %xmm5,0x10(%rdi,%rax,1)
movdqa (%rsp),%xmm5
add    $0x20,%r10
movdqa 0xae9(%rip),%xmm0
paddq  %xmm0,%xmm12
movdqa %xmm12,%xmm1
paddq  %xmm0,%xmm10
paddq  %xmm0,%xmm3
movdqa -0x10(%rsp),%xmm2
paddq  %xmm0,%xmm2
paddq  %xmm0,%xmm5
movdqa -0x40(%rsp),%xmm4
paddq  %xmm0,%xmm4
paddq  %xmm0,%xmm7
paddq  %xmm0,%xmm8
add    $0xfffffffffffffffe,%rcx
jne    11d0 <hnput+0xd0>
and    $0xffffffe0,%r10d
test   $0x1,%r9b
je     17ad <hnput+0x6ad>
psllq  $0x3,%xmm8
psllq  $0x3,%xmm7
movdqa %xmm4,%xmm6
psllq  $0x3,%xmm6
psllq  $0x3,%xmm5
movdqa %xmm2,%xmm15
psllq  $0x3,%xmm15
psllq  $0x3,%xmm3
psllq  $0x3,%xmm10
movdqa %xmm1,%xmm12
psllq  $0x3,%xmm12
movdqa 0xa2b(%rip),%xmm0
paddq  %xmm0,%xmm12
paddq  %xmm0,%xmm10
paddq  %xmm0,%xmm3
paddq  %xmm0,%xmm15
paddq  %xmm0,%xmm5
paddq  %xmm0,%xmm6
paddq  %xmm0,%xmm8
movdqa %xmm13,%xmm1
psrlq  %xmm8,%xmm1
paddq  %xmm0,%xmm7
pshufd $0xee,%xmm8,%xmm2
movdqa %xmm13,%xmm9
psrlq  %xmm2,%xmm9
movsd  %xmm1,%xmm9
movdqa %xmm13,%xmm2
psrlq  %xmm7,%xmm2
pshufd $0xee,%xmm7,%xmm0
movdqa %xmm13,%xmm1
psrlq  %xmm0,%xmm1
movdqa %xmm13,%xmm4
psrlq  %xmm6,%xmm4
movsd  %xmm2,%xmm1
pshufd $0xee,%xmm6,%xmm2
movdqa %xmm13,%xmm11
psrlq  %xmm2,%xmm11
movsd  %xmm4,%xmm11
movdqa %xmm13,%xmm4
psrlq  %xmm5,%xmm4
pshufd $0xee,%xmm5,%xmm5
movdqa %xmm13,%xmm2
psrlq  %xmm5,%xmm2
movdqa %xmm13,%xmm6
psrlq  %xmm15,%xmm6
movsd  %xmm4,%xmm2
pshufd $0xee,%xmm15,%xmm4
movdqa %xmm13,%xmm5
psrlq  %xmm4,%xmm5
movsd  %xmm6,%xmm5
movdqa %xmm13,%xmm4
psrlq  %xmm3,%xmm4
pshufd $0xee,%xmm3,%xmm6
movdqa %xmm13,%xmm7
psrlq  %xmm6,%xmm7
movdqa %xmm13,%xmm6
psrlq  %xmm10,%xmm6
movsd  %xmm4,%xmm7
pshufd $0xee,%xmm10,%xmm8
movdqa %xmm13,%xmm4
psrlq  %xmm8,%xmm4
movsd  %xmm6,%xmm4
movdqa %xmm13,%xmm6
psrlq  %xmm12,%xmm6
pshufd $0xee,%xmm12,%xmm0
psrlq  %xmm0,%xmm13
movsd  %xmm6,%xmm13
movapd 0x92d(%rip),%xmm0
andpd  %xmm0,%xmm13
andpd  %xmm0,%xmm4
packuswb %xmm4,%xmm13
andpd  %xmm0,%xmm7
andpd  %xmm0,%xmm5
packuswb %xmm5,%xmm7
packuswb %xmm7,%xmm13
andpd  %xmm0,%xmm2
andpd  %xmm0,%xmm11
packuswb %xmm11,%xmm2
andpd  %xmm0,%xmm1
andpd  %xmm0,%xmm9
packuswb %xmm9,%xmm1
packuswb %xmm1,%xmm2
packuswb %xmm2,%xmm13
movdqu %xmm13,(%rdi,%r10,1)
cmp    %rdx,%r8
je     1865 <hnput+0x765>
and    $0xf,%edx
lea    -0x1(%rdx),%r9
mov    %rdx,%r10
and    $0x3,%r10
je     17fc <hnput+0x6fc>
lea    -0x8(,%rdx,8),%rcx
ff
mov    %r8d,%r8d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rdx
mov    %rsi,%rax
shr    %cl,%rax
mov    %al,(%rdi,%r8,1)
add    $0xfffffffffffffff8,%rcx
add    $0x1,%r8
add    $0xffffffffffffffff,%r10
jne    17e0 <hnput+0x6e0>
cmp    $0x3,%r9
jb     1865 <hnput+0x765>
lea    -0x10(,%rdx,8),%r10
ff
mov    %r8d,%r8d
xor    %r9d,%r9d
lea    0x8(%r10),%ecx
mov    %rsi,%rax
shr    %cl,%rax
lea    (%r8,%r9,1),%r11
mov    %r11d,%ecx
mov    %al,(%rdi,%rcx,1)
lea    0x1(%r11),%r14d
mov    %rsi,%rbx
mov    %r10d,%ecx
shr    %cl,%rbx
lea    -0x8(%r10),%ecx
mov    %rsi,%rax
shr    %cl,%rax
mov    %bl,(%rdi,%r14,1)
lea    0x2(%r11),%ecx
mov    %al,(%rdi,%rcx,1)
add    $0x3,%r11d
lea    -0x10(%r10),%ecx
mov    %rsi,%rax
shr    %cl,%rax
mov    %al,(%rdi,%r11,1)
add    $0xffffffffffffffe0,%r10
add    $0x4,%r9
cmp    %r9,%rdx
jne    1810 <hnput+0x710>
add    $0x48,%rsp
pop    %rbx
pop    %r14
ret
xor    %r10d,%r10d
test   $0x1,%r9b
jne    1613 <hnput+0x513>
jmp    17ad <hnput+0x6ad>

LLVM IR (-O0):
define void @hnput(i8* %0, i64 %1, i64 %2) {
%4 = alloca i8*
%5 = alloca i64
%6 = alloca i64
%7 = alloca i32
store i8* %0, i8** %4
store i64 %1, i64* %5
store i64 %2, i64* %6
store i32 0, i32* %7
br label %8
8: ; preds = %23, %3
%9 = load i64, i64* %6
%10 = add i64 %9, -1
store i64 %10, i64* %6
%11 = icmp ne i64 %9, 0
br i1 %11, label %12, label %26
12: ; preds = %8
%13 = load i64, i64* %5
%14 = load i64, i64* %6
%15 = mul i64 %14, 8
%16 = lshr i64 %13, %15
%17 = and i64 %16, 255
%18 = trunc i64 %17 to i8
%19 = load i8*, i8** %4
%20 = load i32, i32* %7
%21 = zext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %19, i64 %21
store i8 %18, i8* %22
br label %23
23: ; preds = %12
%24 = load i32, i32* %7
%25 = add i32 %24, 1
store i32 %25, i32* %7
br label %8
26: ; preds = %8
ret void
}

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