#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 */
typedef int int64_t;

/* Variables and functions */
int toml_ucs_to_utf8(int64_t code, char buf[6]) {
  if (0xd800 <= code && code <= 0xdfff)
    return -1;
  if (0xfffe <= code && code <= 0xffff)
    return -1;
  if (code < 0)
    return -1;
  if (code <= 0x7F) {
    buf[0] = (unsigned char)code;
    return 1;
  }
  if (code <= 0x000007FF) {
    buf[0] = 0xc0 | (code >> 6);
    buf[1] = 0x80 | (code & 0x3f);
    return 2;
  }
  if (code <= 0x0000FFFF) {
    buf[0] = 0xe0 | (code >> 12);
    buf[1] = 0x80 | ((code >> 6) & 0x3f);
    buf[2] = 0x80 | (code & 0x3f);
    return 3;
  }
  if (code <= 0x001FFFFF) {
    buf[0] = 0xf0 | (code >> 18);
    buf[1] = 0x80 | ((code >> 12) & 0x3f);
    buf[2] = 0x80 | ((code >> 6) & 0x3f);
    buf[3] = 0x80 | (code & 0x3f);
    return 4;
  }
  if (code <= 0x03FFFFFF) {
    buf[0] = 0xf8 | (code >> 24);
    buf[1] = 0x80 | ((code >> 18) & 0x3f);
    buf[2] = 0x80 | ((code >> 12) & 0x3f);
    buf[3] = 0x80 | ((code >> 6) & 0x3f);
    buf[4] = 0x80 | (code & 0x3f);
    return 5;
  }
  if (code <= 0x7FFFFFFF) {
    buf[0] = 0xfc | (code >> 30);
    buf[1] = 0x80 | ((code >> 24) & 0x3f);
    buf[2] = 0x80 | ((code >> 18) & 0x3f);
    buf[3] = 0x80 | ((code >> 12) & 0x3f);
    buf[4] = 0x80 | ((code >> 6) & 0x3f);
    buf[5] = 0x80 | (code & 0x3f);
    return 6;
  }
  return -1;
}


x86 assembly (clang, -O0):
<toml_ucs_to_utf8>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    $0xd800,%eax
cmp    -0x8(%rbp),%eax
jg     1132 <toml_ucs_to_utf8+0x32>
cmpl   $0xdfff,-0x8(%rbp)
jg     1132 <toml_ucs_to_utf8+0x32>
movl   $0xffffffff,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
mov    $0xfffe,%eax
cmp    -0x8(%rbp),%eax
jg     1159 <toml_ucs_to_utf8+0x59>
cmpl   $0xffff,-0x8(%rbp)
jg     1159 <toml_ucs_to_utf8+0x59>
movl   $0xffffffff,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
cmpl   $0x0,-0x8(%rbp)
jge    116f <toml_ucs_to_utf8+0x6f>
movl   $0xffffffff,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
cmpl   $0x7f,-0x8(%rbp)
jg     1190 <toml_ucs_to_utf8+0x90>
mov    -0x8(%rbp),%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
cmpl   $0x7ff,-0x8(%rbp)
jg     11d0 <toml_ucs_to_utf8+0xd0>
mov    -0x8(%rbp),%eax
sar    $0x6,%eax
or     $0xc0,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
movl   $0x2,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
cmpl   $0xffff,-0x8(%rbp)
jg     1227 <toml_ucs_to_utf8+0x127>
mov    -0x8(%rbp),%eax
sar    $0xc,%eax
or     $0xe0,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x8(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
movl   $0x3,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
cmpl   $0x1fffff,-0x8(%rbp)
jg     1295 <toml_ucs_to_utf8+0x195>
mov    -0x8(%rbp),%eax
sar    $0x12,%eax
or     $0xf0,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x8(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x8(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x3(%rax)
movl   $0x4,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
cmpl   $0x3ffffff,-0x8(%rbp)
jg     131a <toml_ucs_to_utf8+0x21a>
mov    -0x8(%rbp),%eax
sar    $0x18,%eax
or     $0xf8,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%eax
sar    $0x12,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x8(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x8(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x8(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x4(%rax)
movl   $0x5,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
cmpl   $0x7fffffff,-0x8(%rbp)
jg     13b6 <toml_ucs_to_utf8+0x2b6>
mov    -0x8(%rbp),%eax
sar    $0x1e,%eax
or     $0xfc,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x8(%rbp),%eax
sar    $0x18,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x8(%rbp),%eax
sar    $0x12,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
mov    -0x8(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x3(%rax)
mov    -0x8(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x4(%rax)
mov    -0x8(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x5(%rax)
movl   $0x6,-0x4(%rbp)
jmp    13bd <toml_ucs_to_utf8+0x2bd>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<toml_ucs_to_utf8>:
mov    %edi,%ecx
and    $0xfffff800,%ecx
mov    $0xffffffff,%eax
cmp    $0xd800,%ecx
je     1256 <toml_ucs_to_utf8+0x156>
test   %edi,%edi
js     1256 <toml_ucs_to_utf8+0x156>
mov    %edi,%ecx
and    $0xfffffffe,%ecx
cmp    $0xfffe,%ecx
je     1256 <toml_ucs_to_utf8+0x156>
cmp    $0x7f,%edi
ja     1140 <toml_ucs_to_utf8+0x40>
mov    %dil,(%rsi)
mov    $0x1,%eax
ret
mov    %edi,%eax
cmp    $0x7ff,%edi
ja     1163 <toml_ucs_to_utf8+0x63>
shr    $0x6,%eax
or     $0xc0,%al
mov    %al,(%rsi)
and    $0x3f,%dil
or     $0x80,%dil
mov    %dil,0x1(%rsi)
mov    $0x2,%eax
ret
cmp    $0xffff,%edi
jg     1190 <toml_ucs_to_utf8+0x90>
shr    $0xc,%eax
or     $0xe0,%al
mov    %al,(%rsi)
mov    %edi,%eax
shr    $0x6,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x1(%rsi)
and    $0x3f,%dil
or     $0x80,%dil
mov    %dil,0x2(%rsi)
mov    $0x3,%eax
ret
cmp    $0x1fffff,%edi
ja     11c9 <toml_ucs_to_utf8+0xc9>
shr    $0x12,%eax
or     $0xf0,%al
mov    %al,(%rsi)
mov    %edi,%eax
shr    $0xc,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x1(%rsi)
mov    %edi,%eax
shr    $0x6,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x2(%rsi)
and    $0x3f,%dil
or     $0x80,%dil
mov    %dil,0x3(%rsi)
mov    $0x4,%eax
ret
cmp    $0x3ffffff,%edi
ja     120e <toml_ucs_to_utf8+0x10e>
shr    $0x18,%eax
or     $0xf8,%al
mov    %al,(%rsi)
mov    %edi,%eax
shr    $0x12,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x1(%rsi)
mov    %edi,%eax
shr    $0xc,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x2(%rsi)
mov    %edi,%eax
shr    $0x6,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x3(%rsi)
and    $0x3f,%dil
or     $0x80,%dil
mov    %dil,0x4(%rsi)
mov    $0x5,%eax
ret
shr    $0x1e,%eax
or     $0xfc,%al
mov    %al,(%rsi)
mov    %edi,%eax
shr    $0x18,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x1(%rsi)
mov    %edi,%eax
shr    $0x12,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x2(%rsi)
mov    %edi,%eax
shr    $0xc,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x3(%rsi)
mov    %edi,%eax
shr    $0x6,%eax
and    $0x3f,%al
or     $0x80,%al
mov    %al,0x4(%rsi)
and    $0x3f,%dil
or     $0x80,%dil
mov    %dil,0x5(%rsi)
mov    $0x6,%eax
ret

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

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