void dec2bin2(unsigned long dec, char *ebinn) {
  char xbinn[128] = "";
  char *binn = xbinn;
  int rest, i = 0;
  unsigned long chico = dec;
  while (chico != 0) {
    rest = 0;
    if (chico % 2)
      rest = 1;
    chico /= 2;
    *binn = rest + '0';
    ++binn;
    ++i;
  }
  *binn = '\0';
  --binn;
  while (i != 0) {
    *ebinn = *binn;
    i--;
    ++ebinn;
    --binn;
  }
  *ebinn = '\0';
  return;
}


x86 assembly (clang, -O0):
<dec2bin2>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x90(%rbp),%rdi
xor    %esi,%esi
mov    $0x80,%edx
call   1030 <memset@plt>
lea    -0x90(%rbp),%rax
mov    %rax,-0x98(%rbp)
movl   $0x0,-0xa0(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0xa8(%rbp)
cmpq   $0x0,-0xa8(%rbp)
je     11dc <dec2bin2+0xcc>
movl   $0x0,-0x9c(%rbp)
mov    -0xa8(%rbp),%rax
and    $0x1,%rax
cmp    $0x0,%rax
je     1190 <dec2bin2+0x80>
movl   $0x1,-0x9c(%rbp)
mov    -0xa8(%rbp),%rax
shr    $0x1,%rax
mov    %rax,-0xa8(%rbp)
mov    -0x9c(%rbp),%eax
add    $0x30,%eax
mov    %al,%cl
mov    -0x98(%rbp),%rax
mov    %cl,(%rax)
mov    -0x98(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x98(%rbp)
mov    -0xa0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa0(%rbp)
jmp    1159 <dec2bin2+0x49>
mov    -0x98(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x98(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x98(%rbp)
cmpl   $0x0,-0xa0(%rbp)
je     1246 <dec2bin2+0x136>
mov    -0x98(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0xa0(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xa0(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x98(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x98(%rbp)
jmp    11f8 <dec2bin2+0xe8>
mov    -0x10(%rbp),%rax
movb   $0x0,(%rax)
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dec2bin2>:
push   %rbx
pxor   %xmm0,%xmm0
movdqa %xmm0,-0x10(%rsp)
movdqa %xmm0,-0x20(%rsp)
movdqa %xmm0,-0x30(%rsp)
movdqa %xmm0,-0x40(%rsp)
movdqa %xmm0,-0x50(%rsp)
movdqa %xmm0,-0x60(%rsp)
movdqa %xmm0,-0x70(%rsp)
movdqa %xmm0,-0x80(%rsp)
test   %rdi,%rdi
je     131e <dec2bin2+0x21e>
xor    %ecx,%ecx
mov    %rdi,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %edi,%edx
and    $0x1,%dl
shr    %rax
or     $0x30,%dl
mov    %dl,-0x80(%rsp,%rcx,1)
add    $0x1,%rcx
cmp    $0x1,%rdi
mov    %rax,%rdi
ja     1150 <dec2bin2+0x50>
lea    (%rsp,%rcx,1),%rbx
add    $0xffffffffffffff80,%rbx
movb   $0x0,-0x80(%rsp,%rcx,1)
lea    -0x1(%rcx),%edx
cmp    $0x1e,%edx
jbe    1279 <dec2bin2+0x179>
cmp    %rsi,%rbx
jbe    119d <dec2bin2+0x9d>
lea    (%rsi,%rcx,1),%rdx
mov    %rbx,%rdi
sub    %rcx,%rdi
cmp    %rdx,%rdi
jb     1279 <dec2bin2+0x179>
mov    %ecx,%r8d
and    $0xffffffe0,%r8d
mov    %rcx,%r9
shr    $0x5,%r9
mov    %r9,%r11
shl    $0x5,%r11
lea    -0x80(%rsp),%rbx
sub    %r11,%rbx
neg    %r11
add    %rcx,%rbx
shl    $0x5,%r9d
neg    %r9d
add    %rcx,%r9
lea    (%rsi,%r8,1),%r10
add    $0x10,%rsi
xor    %edx,%edx
pxor   %xmm0,%xmm0
nopl   0x0(%rax,%rax,1)
lea    (%rsp,%rdx,1),%rdi
add    $0xffffffffffffff80,%rdi
movdqu -0x20(%rcx,%rdi,1),%xmm1
movdqu -0x10(%rcx,%rdi,1),%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,-0x10(%rsi)
movdqu %xmm1,(%rsi)
add    $0x20,%rsi
add    $0xffffffffffffffe0,%rdx
cmp    %rdx,%r11
jne    11e0 <dec2bin2+0xe0>
cmp    %r8,%rcx
je     1321 <dec2bin2+0x221>
mov    %r9d,%ecx
mov    %r10,%rsi
lea    -0x1(%rcx),%r8d
test   $0x7,%cl
je     12b3 <dec2bin2+0x1b3>
mov    %ecx,%edi
and    $0x7,%edi
xor    %edx,%edx
nopl   0x0(%rax)
movzbl -0x1(%rbx),%eax
add    $0xffffffffffffffff,%rbx
mov    %al,(%rsi,%rdx,1)
add    $0x1,%rdx
cmp    %edx,%edi
jne    1290 <dec2bin2+0x190>
sub    %edx,%ecx
add    %rdx,%rsi
mov    %rsi,%r10
cmp    $0x7,%r8d
jae    12b9 <dec2bin2+0x1b9>
jmp    1321 <dec2bin2+0x221>
cmp    $0x7,%r8d
jb     1321 <dec2bin2+0x221>
mov    %ecx,%ecx
mov    $0xffffffffffffffff,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rbx,%rdx,1),%eax
mov    %al,(%rsi)
movzbl -0x1(%rbx,%rdx,1),%eax
mov    %al,0x1(%rsi)
movzbl -0x2(%rbx,%rdx,1),%eax
mov    %al,0x2(%rsi)
movzbl -0x3(%rbx,%rdx,1),%eax
mov    %al,0x3(%rsi)
movzbl -0x4(%rbx,%rdx,1),%eax
mov    %al,0x4(%rsi)
movzbl -0x5(%rbx,%rdx,1),%eax
mov    %al,0x5(%rsi)
movzbl -0x6(%rbx,%rdx,1),%eax
mov    %al,0x6(%rsi)
movzbl -0x7(%rbx,%rdx,1),%eax
mov    %al,0x7(%rsi)
add    $0x8,%rsi
add    $0xfffffffffffffff8,%rdx
lea    (%rcx,%rdx,1),%eax
cmp    $0xffffffff,%eax
jne    12d0 <dec2bin2+0x1d0>
mov    %rsi,%r10
movb   $0x0,(%r10)
pop    %rbx
ret

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

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