char *_xos_utf8_put_char(char *out, int chr) {
  if (chr < 0x80) {
    *out++ = chr;
  } else if (chr < 0x800) {
    *out++ = 0xc0 | ((chr >> 6) & 0x1f);
    *out++ = 0x80 | (chr & 0x3f);
  } else if (chr < 0x10000) {
    *out++ = 0xe0 | ((chr >> 12) & 0x0f);
    *out++ = 0x80 | ((chr >> 6) & 0x3f);
    *out++ = 0x80 | (chr & 0x3f);
  } else if (chr < 0x200000) {
    *out++ = 0xf0 | ((chr >> 18) & 0x07);
    *out++ = 0x80 | ((chr >> 12) & 0x3f);
    *out++ = 0x80 | ((chr >> 6) & 0x3f);
    *out++ = 0x80 | (chr & 0x3f);
  } else if (chr < 0x4000000) {
    *out++ = 0xf8 | ((chr >> 24) & 0x03);
    *out++ = 0x80 | ((chr >> 18) & 0x3f);
    *out++ = 0x80 | ((chr >> 12) & 0x3f);
    *out++ = 0x80 | ((chr >> 6) & 0x3f);
    *out++ = 0x80 | (chr & 0x3f);
  } else if (chr < 0x80000000) {
    *out++ = 0xfc | ((chr >> 30) & 0x01);
    *out++ = 0x80 | ((chr >> 24) & 0x3f);
    *out++ = 0x80 | ((chr >> 18) & 0x3f);
    *out++ = 0x80 | ((chr >> 12) & 0x3f);
    *out++ = 0x80 | ((chr >> 6) & 0x3f);
    *out++ = 0x80 | (chr & 0x3f);
  }
  return out;
}


x86 assembly (clang, -O0):
<_xos_utf8_put_char>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
cmpl   $0x80,-0xc(%rbp)
jge    1133 <_xos_utf8_put_char+0x33>
mov    -0xc(%rbp),%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
jmp    1426 <_xos_utf8_put_char+0x326>
cmpl   $0x800,-0xc(%rbp)
jge    1184 <_xos_utf8_put_char+0x84>
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x1f,%eax
or     $0xc0,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
jmp    1421 <_xos_utf8_put_char+0x321>
cmpl   $0x10000,-0xc(%rbp)
jge    11f6 <_xos_utf8_put_char+0xf6>
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
and    $0xf,%eax
or     $0xe0,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
jmp    141c <_xos_utf8_put_char+0x31c>
cmpl   $0x200000,-0xc(%rbp)
jge    1289 <_xos_utf8_put_char+0x189>
mov    -0xc(%rbp),%eax
sar    $0x12,%eax
and    $0x7,%eax
or     $0xf0,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
jmp    1417 <_xos_utf8_put_char+0x317>
cmpl   $0x4000000,-0xc(%rbp)
jge    133d <_xos_utf8_put_char+0x23d>
mov    -0xc(%rbp),%eax
sar    $0x18,%eax
and    $0x3,%eax
or     $0xf8,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x12,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
jmp    1412 <_xos_utf8_put_char+0x312>
cmpl   $0x80000000,-0xc(%rbp)
jae    140d <_xos_utf8_put_char+0x30d>
mov    -0xc(%rbp),%eax
sar    $0x1e,%eax
and    $0x1,%eax
or     $0xfc,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x18,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x12,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0xc,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
sar    $0x6,%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
mov    -0xc(%rbp),%eax
and    $0x3f,%eax
or     $0x80,%eax
mov    %al,%cl
mov    -0x8(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x8(%rbp)
mov    %cl,(%rax)
jmp    1412 <_xos_utf8_put_char+0x312>
jmp    1417 <_xos_utf8_put_char+0x317>
jmp    141c <_xos_utf8_put_char+0x31c>
jmp    1421 <_xos_utf8_put_char+0x321>
jmp    1426 <_xos_utf8_put_char+0x326>
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<_xos_utf8_put_char>:
mov    %rdi,%rax
cmp    $0x7f,%esi
jg     1110 <_xos_utf8_put_char+0x10>
mov    %sil,(%rax)
add    $0x1,%rax
ret
mov    %esi,%ecx
cmp    $0x7ff,%esi
ja     1133 <_xos_utf8_put_char+0x33>
shr    $0x6,%ecx
or     $0xc0,%cl
mov    %cl,(%rax)
and    $0x3f,%sil
or     $0x80,%sil
mov    %sil,0x1(%rax)
add    $0x2,%rax
ret
cmp    $0xffff,%esi
ja     1162 <_xos_utf8_put_char+0x62>
shr    $0xc,%ecx
or     $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
ret
cmp    $0x1fffff,%esi
ja     119f <_xos_utf8_put_char+0x9f>
shr    $0x12,%ecx
or     $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
ret
cmp    $0x3ffffff,%esi
ja     11ea <_xos_utf8_put_char+0xea>
shr    $0x18,%ecx
or     $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
ret
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
ret

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

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