int BS2PP_EmitChar(char **str, int j) {
  unsigned char *t;
  int i;
  t = (unsigned char *)(*str);
  if (j > 0x3FFFFFF) {
    *t++ = 0xFC + (j >> 30);
    *t++ = 0x80 + ((j >> 24) & 0x3F);
    *t++ = 0x80 + ((j >> 18) & 0x3F);
    *t++ = 0x80 + ((j >> 12) & 0x3F);
    *t++ = 0x80 + ((j >> 6) & 0x3F);
    *t++ = 0x80 + (j & 0x3F);
  } else if (j > 0x1FFFFF) {
    *t++ = 0xF8 + (j >> 24);
    *t++ = 0x80 + ((j >> 18) & 0x3F);
    *t++ = 0x80 + ((j >> 12) & 0x3F);
    *t++ = 0x80 + ((j >> 6) & 0x3F);
    *t++ = 0x80 + (j & 0x3F);
  } else if (j > 0xFFFF) {
    *t++ = 0xF0 + (j >> 18);
    *t++ = 0x80 + ((j >> 12) & 0x3F);
    *t++ = 0x80 + ((j >> 6) & 0x3F);
    *t++ = 0x80 + (j & 0x3F);
  } else if (j > 0x7FF) {
    *t++ = 0xE0 + (j >> 12);
    *t++ = 0x80 + ((j >> 6) & 0x3F);
    *t++ = 0x80 + (j & 0x3F);
  } else if ((j > 0x7F) || !j) {
    *t++ = 0xC0 + (j >> 6);
    *t++ = 0x80 + (j & 0x3F);
  } else {
    if (!j) {
      *t++ = 0xC0;
      *t++ = 0x80;
    } else
      *t++ = j;
  }
  *str = (char *)t;
  return (0);
}


x86 assembly (clang, -O0):
<BS2PP_EmitChar>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x3ffffff,-0xc(%rbp)
jle    11e8 <BS2PP_EmitChar+0xe8>
mov    -0xc(%rbp),%eax
sar    $0x1e,%eax
add    $0xfc,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x18,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x12,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    144f <BS2PP_EmitChar+0x34f>
cmpl   $0x1fffff,-0xc(%rbp)
jle    1299 <BS2PP_EmitChar+0x199>
mov    -0xc(%rbp),%eax
sar    $0x18,%eax
add    $0xf8,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x12,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    144a <BS2PP_EmitChar+0x34a>
cmpl   $0xffff,-0xc(%rbp)
jle    1329 <BS2PP_EmitChar+0x229>
mov    -0xc(%rbp),%eax
sar    $0x12,%eax
add    $0xf0,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    1445 <BS2PP_EmitChar+0x345>
cmpl   $0x7ff,-0xc(%rbp)
jle    1398 <BS2PP_EmitChar+0x298>
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
add    $0xe0,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    1440 <BS2PP_EmitChar+0x340>
cmpl   $0x7f,-0xc(%rbp)
jg     13ac <BS2PP_EmitChar+0x2ac>
cmpl   $0x0,-0xc(%rbp)
jne    13ed <BS2PP_EmitChar+0x2ed>
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
add    $0xc0,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    143b <BS2PP_EmitChar+0x33b>
cmpl   $0x0,-0xc(%rbp)
jne    1420 <BS2PP_EmitChar+0x320>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0xc0,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x80,(%rax)
jmp    1436 <BS2PP_EmitChar+0x336>
mov    -0xc(%rbp),%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    143b <BS2PP_EmitChar+0x33b>
jmp    1440 <BS2PP_EmitChar+0x340>
jmp    1445 <BS2PP_EmitChar+0x345>
jmp    144a <BS2PP_EmitChar+0x34a>
jmp    144f <BS2PP_EmitChar+0x34f>
mov    -0x18(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<BS2PP_EmitChar>:
mov    (%rdi),%rax
cmp    $0x4000000,%esi
jl     1162 <BS2PP_EmitChar+0x62>
mov    %esi,%ecx
shr    $0x1e,%ecx
or     $0xfc,%cl
mov    %cl,(%rax)
mov    %esi,%ecx
shr    $0x18,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%rax)
mov    %esi,%ecx
shr    $0x12,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x2(%rax)
mov    %esi,%ecx
shr    $0xc,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x3(%rax)
mov    %esi,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x4(%rax)
and    $0x3f,%sil
or     $0x80,%sil
mov    %sil,0x5(%rax)
add    $0x6,%rax
jmp    1251 <BS2PP_EmitChar+0x151>
cmp    $0x200000,%esi
jl     11b3 <BS2PP_EmitChar+0xb3>
mov    %esi,%ecx
shr    $0x18,%ecx
add    $0xf8,%cl
mov    %cl,(%rax)
mov    %esi,%ecx
shr    $0x12,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%rax)
mov    %esi,%ecx
shr    $0xc,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x2(%rax)
mov    %esi,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x3(%rax)
and    $0x3f,%sil
or     $0x80,%sil
mov    %sil,0x4(%rax)
add    $0x5,%rax
jmp    1251 <BS2PP_EmitChar+0x151>
cmp    $0x10000,%esi
jl     11f3 <BS2PP_EmitChar+0xf3>
mov    %esi,%ecx
shr    $0x12,%ecx
add    $0xf0,%cl
mov    %cl,(%rax)
mov    %esi,%ecx
shr    $0xc,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%rax)
mov    %esi,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x2(%rax)
and    $0x3f,%sil
or     $0x80,%sil
mov    %sil,0x3(%rax)
add    $0x4,%rax
jmp    1251 <BS2PP_EmitChar+0x151>
cmp    $0x800,%esi
jl     1225 <BS2PP_EmitChar+0x125>
mov    %esi,%ecx
shr    $0xc,%ecx
add    $0xe0,%cl
mov    %cl,(%rax)
mov    %esi,%ecx
shr    $0x6,%ecx
and    $0x3f,%cl
or     $0x80,%cl
mov    %cl,0x1(%rax)
and    $0x3f,%sil
or     $0x80,%sil
mov    %sil,0x2(%rax)
add    $0x3,%rax
jmp    1251 <BS2PP_EmitChar+0x151>
cmp    $0x7f,%esi
jg     1237 <BS2PP_EmitChar+0x137>
test   %esi,%esi
je     1237 <BS2PP_EmitChar+0x137>
mov    %sil,(%rax)
add    $0x1,%rax
jmp    1251 <BS2PP_EmitChar+0x151>
mov    %esi,%ecx
shr    $0x6,%ecx
add    $0xc0,%cl
mov    %cl,(%rax)
and    $0x3f,%sil
or     $0x80,%sil
mov    %sil,0x1(%rax)
add    $0x2,%rax
mov    %rax,(%rdi)
xor    %eax,%eax
ret

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

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