void AddFloat(char **buf_p, float fval, int width, int prec, int flags) {
  char text[32];
  int digits;
  int prec_len, len;
  float signedVal;
  char *buf;
  int val;
  if ((prec < 0) || (prec > 6)) {
    prec = 6;
  }
  prec_len = prec ? (prec + 1) : 0;
  signedVal = fval;
  if (fval < 0) {
    fval = -fval;
  }
  digits = 0;
  val = (int)fval;
  do {
    text[digits++] = '0' + val % 10;
    val /= 10;
  } while (val);
  if (signedVal < 0) {
    text[digits++] = '-';
  }
  buf = *buf_p;
  len = digits;
  if (!(flags & 0x00000004)) {
    while ((len + prec_len) < width) {
      *buf++ = (flags & 0x00000080) ? '0' : ' ';
      width--;
    }
  }
  while (digits--) {
    *buf++ = text[digits];
  }
  *buf_p = buf;
  digits = 0;
  while (digits < prec) {
    fval -= (int)fval;
    fval *= 10.0;
    val = (int)fval;
    text[digits++] = '0' + val % 10;
  }
  if (digits > 0) {
    buf = *buf_p;
    *buf++ = '.';
    for (prec = 0; prec < digits; prec++) {
      *buf++ = text[prec];
    }
    *buf_p = buf;
  }
  if (flags & 0x00000004) {
    buf = *buf_p;
    while ((len + prec_len) < width) {
      *buf++ = (flags & 0x00000080) ? '0' : ' ';
      width--;
    }
    *buf_p = buf;
  }
}


x86 assembly (clang, -O0):
<AddFloat>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     112a <AddFloat+0x2a>
cmpl   $0x6,-0x14(%rbp)
jle    1131 <AddFloat+0x31>
movl   $0x6,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     1149 <AddFloat+0x49>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1153 <AddFloat+0x53>
xor    %eax,%eax
mov    %eax,-0x60(%rbp)
jmp    1153 <AddFloat+0x53>
mov    -0x60(%rbp),%eax
mov    %eax,-0x48(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0xc(%rbp),%xmm0
jbe    1187 <AddFloat+0x87>
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xc(%rbp)
movl   $0x0,-0x44(%rbp)
cvttss2si -0xc(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%edx
mov    %dl,%cl
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %cl,-0x40(%rbp,%rax,1)
mov    -0x5c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x5c(%rbp)
cmpl   $0x0,-0x5c(%rbp)
jne    1196 <AddFloat+0x96>
xorps  %xmm0,%xmm0
ucomiss -0x50(%rbp),%xmm0
jbe    11ee <AddFloat+0xee>
mov    -0x44(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x44(%rbp)
cltq
movb   $0x2d,-0x40(%rbp,%rax,1)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x58(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x18(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
jne    1261 <AddFloat+0x161>
jmp    1213 <AddFloat+0x113>
mov    -0x4c(%rbp),%eax
add    -0x48(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    125c <AddFloat+0x15c>
mov    -0x18(%rbp),%edx
and    $0x80,%edx
mov    $0x20,%eax
mov    $0x30,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,%cl
mov    -0x58(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x58(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    1213 <AddFloat+0x113>
jmp    1261 <AddFloat+0x161>
jmp    1266 <AddFloat+0x166>
mov    -0x44(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x44(%rbp)
cmp    $0x0,%eax
je     1298 <AddFloat+0x198>
movslq -0x44(%rbp),%rax
mov    -0x40(%rbp,%rax,1),%cl
mov    -0x58(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x58(%rbp)
mov    %cl,(%rax)
jmp    1266 <AddFloat+0x166>
mov    -0x58(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1319 <AddFloat+0x219>
cvttss2si -0xc(%rbp),%eax
cvtsi2ss %eax,%xmm1
movss  -0xc(%rbp),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd22(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
cvttss2si -0xc(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%edx
mov    %dl,%cl
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %cl,-0x40(%rbp,%rax,1)
jmp    12aa <AddFloat+0x1aa>
cmpl   $0x0,-0x44(%rbp)
jle    1385 <AddFloat+0x285>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x58(%rbp)
movb   $0x2e,(%rax)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    137a <AddFloat+0x27a>
movslq -0x14(%rbp),%rax
mov    -0x40(%rbp,%rax,1),%cl
mov    -0x58(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x58(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1347 <AddFloat+0x247>
mov    -0x58(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x18(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     13f3 <AddFloat+0x2f3>
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x58(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x48(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    13e8 <AddFloat+0x2e8>
mov    -0x18(%rbp),%edx
and    $0x80,%edx
mov    $0x20,%eax
mov    $0x30,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,%cl
mov    -0x58(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x58(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    139f <AddFloat+0x29f>
mov    -0x58(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<AddFloat>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
cmp    $0x6,%edx
mov    $0x6,%r14d
cmovb  %edx,%r14d
lea    0x1(%r14),%r9d
movaps 0xeba(%rip),%xmm1
xorps  %xmm0,%xmm1
xorps  %xmm2,%xmm2
movaps %xmm0,%xmm4
cmpltss %xmm2,%xmm4
andps  %xmm4,%xmm1
andnps %xmm0,%xmm4
orps   %xmm1,%xmm4
cvttss2si %xmm4,%eax
xor    %r15d,%r15d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq %eax,%rbp
imul   $0x66666667,%rbp,%rax
mov    %rax,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rax
add    %edx,%eax
lea    (%rax,%rax,1),%edx
lea    (%rdx,%rdx,4),%edx
mov    %ebp,%ebx
sub    %edx,%ebx
add    $0x30,%bl
mov    %bl,0x10(%rsp,%r15,1)
add    $0x1,%r15
add    $0x9,%ebp
cmp    $0x12,%ebp
ja     1170 <AddFloat+0x50>
test   %r14d,%r14d
cmove  %r14d,%r9d
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
jbe    11c0 <AddFloat+0xa0>
mov    %r15d,%eax
add    $0x1,%r15d
movb   $0x2d,0x10(%rsp,%rax,1)
mov    %rdi,0x40(%rsp)
mov    (%rdi),%rbx
test   $0x4,%cl
jne    1221 <AddFloat+0x101>
lea    (%r15,%r9,1),%ebp
cmp    %esi,%ebp
jge    1221 <AddFloat+0x101>
mov    %ecx,%eax
shr    $0x3,%eax
and    $0x10,%eax
mov    %ebp,%r12d
not    %r12d
add    %esi,%r12d
lea    0x1(%r12),%rdx
or     $0x20,%eax
mov    %rbx,%rdi
mov    %eax,%esi
mov    %ecx,%r13d
mov    %rbp,0x8(%rsp)
mov    %r9,%rbp
movaps %xmm4,0x30(%rsp)
call   1030 <memset@plt>
movaps 0x30(%rsp),%xmm4
mov    %rbp,%r9
mov    0x8(%rsp),%rbp
mov    %r13d,%ecx
add    %r12,%rbx
add    $0x1,%rbx
jmp    1223 <AddFloat+0x103>
mov    %esi,%ebp
movslq %r15d,%r8
lea    -0x1(%r8),%eax
cmp    $0x1f,%eax
jb     12ef <AddFloat+0x1cf>
add    $0x1,%rax
mov    %rax,%rdx
and    $0xffffffffffffffe0,%rdx
lea    (%rbx,%rdx,1),%r13
lea    0x10(%rsp),%rsi
add    %r8,%rsi
add    $0xfffffffffffffff0,%rsi
sub    %rdx,%r8
xor    %edi,%edi
xorps  %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
movdqu -0x10(%rsi),%xmm1
movdqu (%rsi),%xmm2
movdqa %xmm2,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
packuswb %xmm3,%xmm2
movdqa %xmm1,%xmm3
punpcklbw %xmm0,%xmm3
pshufd $0x4e,%xmm3,%xmm3
pshuflw $0x1b,%xmm3,%xmm3
pshufhw $0x1b,%xmm3,%xmm3
punpckhbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm3,%xmm1
movdqu %xmm2,(%rbx,%rdi,1)
movdqu %xmm1,0x10(%rbx,%rdi,1)
add    $0x20,%rdi
add    $0xffffffffffffffe0,%rsi
cmp    %rdi,%rdx
jne    1260 <AddFloat+0x140>
cmp    %rdx,%rax
jne    12ec <AddFloat+0x1cc>
lea    (%rdx,%rbx,1),%r12
add    $0xffffffffffffffff,%r12
jmp    132e <AddFloat+0x20e>
mov    %r13,%rbx
lea    0x10(%rsp),%rax
lea    (%r8,%rax,1),%rdi
add    $0xffffffffffffffff,%rdi
neg    %r8d
xor    %edx,%edx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rdi,%rsi,1),%eax
mov    %al,(%rbx,%rdx,1)
add    $0xffffffffffffffff,%rsi
add    $0x1,%rdx
cmp    %esi,%r8d
jne    1310 <AddFloat+0x1f0>
sub    %rsi,%rbx
lea    -0x1(%rbx),%r12
mov    %rbx,%r13
mov    0x40(%rsp),%rbx
mov    %r13,(%rbx)
test   %r14d,%r14d
jle    1503 <AddFloat+0x3e3>
mov    %rbp,0x8(%rsp)
mov    %r9,0x30(%rsp)
mov    %ecx,%ebp
cvttps2dq %xmm4,%xmm0
cvtdq2ps %xmm0,%xmm0
subss  %xmm0,%xmm4
mulss  0xcb2(%rip),%xmm4
cvttss2si %xmm4,%eax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,0x10(%rsp)
cmp    $0x1,%r14d
je     14d1 <AddFloat+0x3b1>
cvttps2dq %xmm4,%xmm0
cvtdq2ps %xmm0,%xmm0
subss  %xmm0,%xmm4
mulss  0xc6e(%rip),%xmm4
cvttss2si %xmm4,%eax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,0x11(%rsp)
cmp    $0x2,%r14d
je     14d1 <AddFloat+0x3b1>
cvttps2dq %xmm4,%xmm0
cvtdq2ps %xmm0,%xmm0
subss  %xmm0,%xmm4
mulss  0xc2a(%rip),%xmm4
cvttss2si %xmm4,%eax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,0x12(%rsp)
cmp    $0x3,%r14d
je     14d1 <AddFloat+0x3b1>
cvttps2dq %xmm4,%xmm0
cvtdq2ps %xmm0,%xmm0
subss  %xmm0,%xmm4
mulss  0xbe6(%rip),%xmm4
cvttss2si %xmm4,%eax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,0x13(%rsp)
cmp    $0x4,%r14d
je     14d1 <AddFloat+0x3b1>
cvttps2dq %xmm4,%xmm0
cvtdq2ps %xmm0,%xmm0
subss  %xmm0,%xmm4
mulss  0xba6(%rip),%xmm4
cvttss2si %xmm4,%eax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,0x14(%rsp)
cmp    $0x5,%r14d
je     14d1 <AddFloat+0x3b1>
cvttps2dq %xmm4,%xmm0
cvtdq2ps %xmm0,%xmm0
subss  %xmm0,%xmm4
mulss  0xb66(%rip),%xmm4
cvttss2si %xmm4,%eax
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x22,%rcx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
add    $0x30,%al
mov    %al,0x15(%rsp)
movb   $0x2e,0x0(%r13)
lea    0x2(%r12),%rdi
mov    %r14d,%edx
lea    0x10(%rsp),%rsi
call   1040 <memcpy@plt>
add    $0xffffffff,%r14d
lea    (%r14,%r12,1),%r13
add    $0x3,%r13
mov    %r13,(%rbx)
mov    %ebp,%ecx
mov    0x30(%rsp),%r9
mov    0x8(%rsp),%rbp
test   $0x4,%cl
je     1537 <AddFloat+0x417>
add    %r9d,%r15d
cmp    %ebp,%r15d
jge    1534 <AddFloat+0x414>
shr    $0x3,%ecx
and    $0x10,%ecx
not    %r15d
add    %r15d,%ebp
lea    0x1(%rbp),%rdx
or     $0x20,%ecx
mov    %r13,%rdi
mov    %ecx,%esi
call   1030 <memset@plt>
add    %rbp,%r13
add    $0x1,%r13
mov    %r13,(%rbx)
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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