char *ft_itoa_get(char *nbr, unsigned int val, int len, int i) {
  unsigned int mod;
  int power;
  int flag;
  int count;
  while (i < len) {
    power = 1;
    flag = 0;
    count = -1;
    mod = val;
    while (val > 9) {
      val /= 10;
      flag++;
    }
    nbr[i] = (val + '0');
    i++;
    while ((count += 1) < flag)
      power *= 10;
    val = mod % power;
  }
  nbr[i] = '\0';
  return (nbr);
}


x86 assembly (clang, -O0):
<ft_itoa_get>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    11a9 <ft_itoa_get+0xa9>
movl   $0x1,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0xffffffff,-0x24(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x9,-0xc(%rbp)
jbe    115f <ft_itoa_get+0x5f>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
xor    %edx,%edx
div    %ecx
mov    %eax,-0xc(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1138 <ft_itoa_get+0x38>
mov    -0xc(%rbp),%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
cmp    -0x20(%rbp),%eax
jge    1199 <ft_itoa_get+0x99>
imul   $0xa,-0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
jmp    117b <ft_itoa_get+0x7b>
mov    -0x18(%rbp),%eax
xor    %edx,%edx
divl   -0x1c(%rbp)
mov    %edx,-0xc(%rbp)
jmp    1111 <ft_itoa_get+0x11>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ft_itoa_get>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %edx,%r8d
mov    %rdi,%r10
cmp    %edx,%ecx
jge    12e1 <ft_itoa_get+0x1e1>
mov    %esi,%edx
movslq %ecx,%r11
movslq %r8d,%r9
mov    $0xcccccccd,%r15d
movdqa 0xed4(%rip),%xmm0
movdqa 0xeec(%rip),%xmm1
movdqa 0xed4(%rip),%xmm2
jmp    115f <ft_itoa_get+0x5f>
xchg   %ax,%ax
lea    0x30(%rdx),%eax
mov    %al,(%r10,%r11,1)
mov    $0x1,%ebx
add    $0x1,%r11
mov    %edx,%eax
xor    %edx,%edx
div    %ebx
cmp    %r9,%r11
je     12de <ft_itoa_get+0x1de>
cmp    $0xa,%edx
jb     1140 <ft_itoa_get+0x40>
xor    %ecx,%ecx
mov    $0xffffffff,%ebp
mov    %edx,%edi
nopl   (%rax)
mov    %edi,%esi
mov    %ecx,%ebx
mov    %ebp,%r12d
mov    %edi,%edi
imul   %r15,%rdi
shr    $0x23,%rdi
lea    -0x1(%rbx),%ecx
lea    -0x1(%r12),%ebp
cmp    $0x63,%esi
ja     1170 <ft_itoa_get+0x70>
add    $0x30,%dil
mov    %dil,(%r10,%r11,1)
mov    %ecx,%esi
not    %esi
cmp    $0x7,%esi
jae    11b0 <ft_itoa_get+0xb0>
mov    $0x1,%ebx
xor    %edi,%edi
jmp    12bf <ft_itoa_get+0x1bf>
nopl   0x0(%rax,%rax,1)
neg    %ecx
mov    %ecx,%edi
and    $0xfffffff8,%edi
lea    -0x8(%rdi),%esi
mov    %esi,%r14d
shr    $0x3,%r14d
add    $0x1,%r14d
movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
cmp    $0x38,%esi
jb     122b <ft_itoa_get+0x12b>
mov    $0x1,%ebp
sub    %ebx,%ebp
and    $0xfffffff8,%ebp
add    $0xfffffff8,%ebp
shr    $0x3,%ebp
add    $0x1,%ebp
and    $0xfffffff8,%ebp
movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pshufd $0xf5,%xmm3,%xmm5
pmuludq %xmm2,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm3
add    $0xfffffff8,%ebp
jne    11f0 <ft_itoa_get+0xf0>
test   $0x7,%r14b
je     128b <ft_itoa_get+0x18b>
mov    $0x1,%al
sub    %bl,%al
and    $0x38,%al
add    $0xf8,%al
shr    $0x3,%al
add    $0x1,%al
movzbl %al,%ebx
and    $0x7,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm1,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pshufd $0xf5,%xmm3,%xmm5
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm3
add    $0xffffffff,%ebx
jne    1250 <ft_itoa_get+0x150>
pshufd $0xf5,%xmm4,%xmm5
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm5,%xmm6
pmuludq %xmm4,%xmm3
pshufd $0xee,%xmm3,%xmm4
pmuludq %xmm3,%xmm4
pshufd $0xaa,%xmm6,%xmm3
pmuludq %xmm6,%xmm3
pmuludq %xmm4,%xmm3
movd   %xmm3,%ebx
cmp    %edi,%ecx
je     114c <ft_itoa_get+0x4c>
add    %r12d,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    %ebx,%ebx
lea    (%rbx,%rbx,4),%ebx
inc    %edi
jne    12d0 <ft_itoa_get+0x1d0>
jmp    114c <ft_itoa_get+0x4c>
mov    %r8d,%ecx
movslq %ecx,%rax
movb   $0x0,(%r10,%rax,1)
mov    %r10,%rax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i8* @ft_itoa_get(i8* %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store i8* %0, i8** %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
br label %13
13: ; preds = %45, %4
%14 = load i32, i32* %8
%15 = load i32, i32* %7
%16 = icmp slt i32 %14, %15
br i1 %16, label %17, label %49
17: ; preds = %13
store i32 1, i32* %10
store i32 0, i32* %11
store i32 -1, i32* %12
%18 = load i32, i32* %6
store i32 %18, i32* %9
br label %19
19: ; preds = %22, %17
%20 = load i32, i32* %6
%21 = icmp ugt i32 %20, 9
br i1 %21, label %22, label %27
22: ; preds = %19
%23 = load i32, i32* %6
%24 = udiv i32 %23, 10
store i32 %24, i32* %6
%25 = load i32, i32* %11
%26 = add nsw i32 %25, 1
store i32 %26, i32* %11
br label %19
27: ; preds = %19
%28 = load i32, i32* %6
%29 = add i32 %28, 48
%30 = trunc i32 %29 to i8
%31 = load i8*, i8** %5
%32 = load i32, i32* %8
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %31, i64 %33
store i8 %30, i8* %34
%35 = load i32, i32* %8
%36 = add nsw i32 %35, 1
store i32 %36, i32* %8
br label %37
37: ; preds = %42, %27
%38 = load i32, i32* %12
%39 = add nsw i32 %38, 1
store i32 %39, i32* %12
%40 = load i32, i32* %11
%41 = icmp slt i32 %39, %40
br i1 %41, label %42, label %45
42: ; preds = %37
%43 = load i32, i32* %10
%44 = mul nsw i32 %43, 10
store i32 %44, i32* %10
br label %37
45: ; preds = %37
%46 = load i32, i32* %9
%47 = load i32, i32* %10
%48 = urem i32 %46, %47
store i32 %48, i32* %6
br label %13
49: ; preds = %13
%50 = load i8*, i8** %5
%51 = load i32, i32* %8
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %50, i64 %52
store i8 0, i8* %53
%54 = load i8*, i8** %5
ret i8* %54
}

LLVM IR (-O2):
define i8* @ft_itoa_get(i8* returned writeonly %0, i32 %1, i32 %2, i32 %3) {
%5 = icmp slt i32 %3, %2
br i1 %5, label %6, label %80
6: ; preds = %4
%7 = sext i32 %3 to i64
%8 = sext i32 %2 to i64
br label %9
9: ; preds = %6, %75
%10 = phi i64 [ %7, %6 ], [ %77, %75 ]
%11 = phi i32 [ %1, %6 ], [ %78, %75 ]
%12 = icmp ugt i32 %11, 9
br i1 %12, label %13, label %19
13: ; preds = %9, %13
%14 = phi i32 [ %17, %13 ], [ 0, %9 ]
%15 = phi i32 [ %16, %13 ], [ %11, %9 ]
%16 = udiv i32 %15, 10
%17 = add nuw nsw i32 %14, 1
%18 = icmp ugt i32 %15, 99
br i1 %18, label %13, label %23
19: ; preds = %9
%20 = trunc i32 %11 to i8
%21 = add nuw nsw i8 %20, 48
%22 = getelementptr inbounds i8, i8* %0, i64 %10
store i8 %21, i8* %22
br label %75
23: ; preds = %13
%24 = trunc i32 %16 to i8
%25 = add nuw nsw i8 %24, 48
%26 = getelementptr inbounds i8, i8* %0, i64 %10
store i8 %25, i8* %26
%27 = add nuw i32 %14, 1
%28 = icmp ult i32 %14, 7
br i1 %28, label %66, label %29
29: ; preds = %23
%30 = and i32 %27, -8
%31 = add i32 %30, -8
%32 = lshr exact i32 %31, 3
%33 = add nuw nsw i32 %32, 1
%34 = and i32 %33, 7
%35 = icmp ult i32 %31, 56
br i1 %35, label %46, label %36
36: ; preds = %29
%37 = and i32 %33, 1073741816
br label %38
38: ; preds = %38, %36
%39 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %36 ], [ %42, %38 ]
%40 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %36 ], [ %43, %38 ]
%41 = phi i32 [ 0, %36 ], [ %44, %38 ]
%42 = mul <4 x i32> %39, <i32 100000000, i32 100000000, i32 100000000, i32 100000000>
%43 = mul <4 x i32> %40, <i32 100000000, i32 100000000, i32 100000000, i32 100000000>
%44 = add nuw i32 %41, 8
%45 = icmp eq i32 %44, %37
br i1 %45, label %46, label %38
46: ; preds = %38, %29
%47 = phi <4 x i32> [ undef, %29 ], [ %42, %38 ]
%48 = phi <4 x i32> [ undef, %29 ], [ %43, %38 ]
%49 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %29 ], [ %42, %38 ]
%50 = phi <4 x i32> [ <i32 1, i32 1, i32 1, i32 1>, %29 ], [ %43, %38 ]
%51 = icmp eq i32 %34, 0
br i1 %51, label %60, label %52
52: ; preds = %46, %52
%53 = phi <4 x i32> [ %56, %52 ], [ %49, %46 ]
%54 = phi <4 x i32> [ %57, %52 ], [ %50, %46 ]
%55 = phi i32 [ %58, %52 ], [ 0, %46 ]
%56 = mul <4 x i32> %53, <i32 10, i32 10, i32 10, i32 10>
%57 = mul <4 x i32> %54, <i32 10, i32 10, i32 10, i32 10>
%58 = add i32 %55, 1
%59 = icmp eq i32 %58, %34
br i1 %59, label %60, label %52
60: ; preds = %52, %46
%61 = phi <4 x i32> [ %47, %46 ], [ %56, %52 ]
%62 = phi <4 x i32> [ %48, %46 ], [ %57, %52 ]
%63 = mul <4 x i32> %62, %61
%64 = call i32 @llvm.vector.reduce.mul.v4i32(<4 x i32> %63)
%65 = icmp eq i32 %27, %30
br i1 %65, label %75, label %66
66: ; preds = %23, %60
%67 = phi i32 [ 0, %23 ], [ %30, %60 ]
%68 = phi i32 [ 1, %23 ], [ %64, %60 ]
br label %69
69: ; preds = %66, %69
%70 = phi i32 [ %73, %69 ], [ %67, %66 ]
%71 = phi i32 [ %72, %69 ], [ %68, %66 ]
%72 = mul nsw i32 %71, 10
%73 = add nuw nsw i32 %70, 1
%74 = icmp eq i32 %70, %14
br i1 %74, label %75, label %69
75: ; preds = %69, %60, %19
%76 = phi i32 [ 1, %19 ], [ %64, %60 ], [ %72, %69 ]
%77 = add nsw i64 %10, 1
%78 = urem i32 %11, %76
%79 = icmp eq i64 %77, %8
br i1 %79, label %80, label %9
80: ; preds = %75, %4
%81 = phi i32 [ %3, %4 ], [ %2, %75 ]
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i8, i8* %0, i64 %82
store i8 0, i8* %83
ret i8* %0
}