#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, char *);
void print_tux() {
  char line1[] = "	    \\         ._____.  ";
  char line2[] = "	     \\        /     \\";
  char line3[] = "	      \\      | O _ O |";
  char line4[] = "               \\     /  \\_/  \\";
  char line5[] = "                   .' /    \\ `.";
  char line6[] = "                  / _|       |_\\";
  char line7[] = "                 (_/ |       |\\_)";
  char line8[] = "                     \\       /";
  char line9[] = "                    __\\_>-<_/__";
  char line10[] = "                      /    \\``";
  printf("%s\n", line1);
  printf("%s\n", line2);
  printf("%s\n", line3);
  printf("%s\n", line4);
  printf("%s\n", line5);
  printf("%s\n", line6);
  printf("%s\n", line7);
  printf("%s\n", line8);
  printf("%s\n", line9);
  printf("%s\n", line10);
}


x86 assembly (clang, -O0):
<print_tux>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%rsp
mov    0xece(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xecb(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    0xec8(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    0xec6(%rip),%al
mov    %al,-0x8(%rbp)
mov    0xec4(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    0xec1(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    0xebf(%rip),%eax
mov    %eax,-0x30(%rbp)
mov    0xeb9(%rip),%ax
mov    %ax,-0x2c(%rbp)
mov    0xeb1(%rip),%al
mov    %al,-0x2a(%rbp)
mov    0xeb1(%rip),%rax
mov    %rax,-0x60(%rbp)
mov    0xeae(%rip),%rax
mov    %rax,-0x58(%rbp)
mov    0xeab(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0xeb0(%rip),%rax
mov    %rax,-0x80(%rbp)
mov    0xead(%rip),%rax
mov    %rax,-0x78(%rbp)
mov    0xeaa(%rip),%rax
mov    %rax,-0x70(%rbp)
mov    0xea8(%rip),%eax
mov    %eax,-0x68(%rbp)
mov    0xea2(%rip),%ax
mov    %ax,-0x64(%rbp)
mov    0xe9a(%rip),%al
mov    %al,-0x62(%rbp)
mov    0xe92(%rip),%rax
mov    %rax,-0xa0(%rbp)
mov    0xe8c(%rip),%rax
mov    %rax,-0x98(%rbp)
mov    0xe86(%rip),%rax
mov    %rax,-0x90(%rbp)
mov    0xe80(%rip),%rax
mov    %rax,-0x88(%rbp)
lea    -0xd0(%rbp),%rdi
lea    0xe73(%rip),%rsi
mov    $0x21,%edx
call   1040 <memcpy@plt>
lea    -0x100(%rbp),%rdi
lea    0xe8b(%rip),%rsi
mov    $0x22,%edx
call   1040 <memcpy@plt>
mov    0xeaa(%rip),%rax
mov    %rax,-0x120(%rbp)
mov    0xea4(%rip),%rax
mov    %rax,-0x118(%rbp)
mov    0xe9e(%rip),%rax
mov    %rax,-0x110(%rbp)
mov    0xe99(%rip),%eax
mov    %eax,-0x108(%rbp)
mov    0xe90(%rip),%ax
mov    %ax,-0x104(%rbp)
mov    0xe85(%rip),%al
mov    %al,-0x102(%rbp)
mov    0xe7a(%rip),%rax
mov    %rax,-0x140(%rbp)
mov    0xe74(%rip),%rax
mov    %rax,-0x138(%rbp)
mov    0xe6e(%rip),%rax
mov    %rax,-0x130(%rbp)
mov    0xe68(%rip),%rax
mov    %rax,-0x128(%rbp)
mov    0xe62(%rip),%rax
mov    %rax,-0x160(%rbp)
mov    0xe5c(%rip),%rax
mov    %rax,-0x158(%rbp)
mov    0xe56(%rip),%rax
mov    %rax,-0x150(%rbp)
mov    0xe51(%rip),%eax
mov    %eax,-0x148(%rbp)
mov    0xe48(%rip),%ax
mov    %ax,-0x144(%rbp)
mov    0xe3d(%rip),%al
mov    %al,-0x142(%rbp)
lea    -0x20(%rbp),%rsi
lea    0xe2d(%rip),%rdi
call   1030 <printf@plt>
lea    -0x40(%rbp),%rsi
lea    0xe1d(%rip),%rdi
call   1030 <printf@plt>
lea    -0x60(%rbp),%rsi
lea    0xe0d(%rip),%rdi
call   1030 <printf@plt>
lea    -0x80(%rbp),%rsi
lea    0xdfd(%rip),%rdi
call   1030 <printf@plt>
lea    -0xa0(%rbp),%rsi
lea    0xdea(%rip),%rdi
call   1030 <printf@plt>
lea    -0xd0(%rbp),%rsi
lea    0xdd7(%rip),%rdi
call   1030 <printf@plt>
lea    -0x100(%rbp),%rsi
lea    0xdc4(%rip),%rdi
call   1030 <printf@plt>
lea    -0x120(%rbp),%rsi
lea    0xdb1(%rip),%rdi
call   1030 <printf@plt>
lea    -0x140(%rbp),%rsi
lea    0xd9e(%rip),%rdi
call   1030 <printf@plt>
lea    -0x160(%rbp),%rsi
lea    0xd8b(%rip),%rdi
call   1030 <printf@plt>
add    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_tux>:
push   %rbx
sub    $0x160,%rsp
movups 0xeea(%rip),%xmm0
movups %xmm0,0x79(%rsp)
movaps 0xed5(%rip),%xmm0
movaps %xmm0,0x70(%rsp)
movaps 0xee9(%rip),%xmm0
movaps %xmm0,(%rsp)
movabs $0x5c20202020202f,%rax
mov    %rax,0xf(%rsp)
movaps 0xeef(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movabs $0x7c204f205f204f,%rax
mov    %rax,0x30(%rsp)
movups 0xf03(%rip),%xmm0
movups %xmm0,0x10f(%rsp)
movaps 0xee5(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
movaps 0xf06(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0xee7(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0xf08(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0xeec(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movb   $0x0,0x60(%rsp)
movaps 0xf1b(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps 0xefc(%rip),%xmm0
movaps %xmm0,0x90(%rsp)
movw   $0x29,0xb0(%rsp)
movups 0xf22(%rip),%xmm0
movups %xmm0,0xef(%rsp)
movaps 0xf04(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xf25(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0xf06(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movups 0xf26(%rip),%xmm0
movups %xmm0,0xcf(%rsp)
movaps 0xf08(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
lea    0xf18(%rip),%rbx
lea    0x70(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
mov    %rsp,%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0x20(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0x100(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0x140(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0x40(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0x90(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0xe0(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0x120(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
lea    0xc0(%rsp),%rsi
mov    %rbx,%rdi
call   1030 <printf@plt>
add    $0x160,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@__const.print_tux.line1 = [25 x i8] c"\09 \\ ._____. \00"
@__const.print_tux.line2 = [23 x i8] c"\09 \\ / \\\00"
@__const.print_tux.line3 = [24 x i8] c"\09 \\ | O _ O |\00"
@__const.print_tux.line4 = [31 x i8] c" \\ / \\_/ \\\00"
@__const.print_tux.line5 = [32 x i8] c" .' / \\ `.\00"
@__const.print_tux.line6 = [33 x i8] c" / _| |_\\\00"
@__const.print_tux.line7 = [34 x i8] c" (_/ | |\\_)\00"
@__const.print_tux.line8 = [31 x i8] c" \\ /\00"
@__const.print_tux.line9 = [32 x i8] c" __\\_>-<_/__\00"
@__const.print_tux.line10 = [31 x i8] c" / \\``\00"
@.str = [4 x i8] c"%s\0A\00"
define void @print_tux() {
%1 = alloca [25 x i8]
%2 = alloca [23 x i8]
%3 = alloca [24 x i8]
%4 = alloca [31 x i8]
%5 = alloca [32 x i8]
%6 = alloca [33 x i8]
%7 = alloca [34 x i8]
%8 = alloca [31 x i8]
%9 = alloca [32 x i8]
%10 = alloca [31 x i8]
%11 = bitcast [25 x i8]* %1 to i8*
%12 = bitcast [23 x i8]* %2 to i8*
%13 = bitcast [24 x i8]* %3 to i8*
%14 = bitcast [31 x i8]* %4 to i8*
%15 = bitcast [32 x i8]* %5 to i8*
%16 = bitcast [33 x i8]* %6 to i8*
%17 = bitcast [34 x i8]* %7 to i8*
%18 = bitcast [31 x i8]* %8 to i8*
%19 = bitcast [32 x i8]* %9 to i8*
%20 = bitcast [31 x i8]* %10 to i8*
%21 = getelementptr inbounds [25 x i8], [25 x i8]* %1, i64 0, i64 0
%22 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %21)
%23 = getelementptr inbounds [23 x i8], [23 x i8]* %2, i64 0, i64 0
%24 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %23)
%25 = getelementptr inbounds [24 x i8], [24 x i8]* %3, i64 0, i64 0
%26 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %25)
%27 = getelementptr inbounds [31 x i8], [31 x i8]* %4, i64 0, i64 0
%28 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %27)
%29 = getelementptr inbounds [32 x i8], [32 x i8]* %5, i64 0, i64 0
%30 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %29)
%31 = getelementptr inbounds [33 x i8], [33 x i8]* %6, i64 0, i64 0
%32 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %31)
%33 = getelementptr inbounds [34 x i8], [34 x i8]* %7, i64 0, i64 0
%34 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %33)
%35 = getelementptr inbounds [31 x i8], [31 x i8]* %8, i64 0, i64 0
%36 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %35)
%37 = getelementptr inbounds [32 x i8], [32 x i8]* %9, i64 0, i64 0
%38 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %37)
%39 = getelementptr inbounds [31 x i8], [31 x i8]* %10, i64 0, i64 0
%40 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %39)
ret void
}

LLVM IR (-O2):
@__const.print_tux.line1 = [25 x i8] c"\09 \\ ._____. \00"
@__const.print_tux.line2 = [23 x i8] c"\09 \\ / \\\00"
@__const.print_tux.line3 = [24 x i8] c"\09 \\ | O _ O |\00"
@__const.print_tux.line4 = [31 x i8] c" \\ / \\_/ \\\00"
@__const.print_tux.line5 = [32 x i8] c" .' / \\ `.\00"
@__const.print_tux.line6 = [33 x i8] c" / _| |_\\\00"
@__const.print_tux.line7 = [34 x i8] c" (_/ | |\\_)\00"
@__const.print_tux.line8 = [31 x i8] c" \\ /\00"
@__const.print_tux.line9 = [32 x i8] c" __\\_>-<_/__\00"
@__const.print_tux.line10 = [31 x i8] c" / \\``\00"
@.str = [4 x i8] c"%s\0A\00"
define void @print_tux() {
%1 = alloca [25 x i8]
%2 = alloca [23 x i8]
%3 = alloca [24 x i8]
%4 = alloca [31 x i8]
%5 = alloca [32 x i8]
%6 = alloca [33 x i8]
%7 = alloca [34 x i8]
%8 = alloca [31 x i8]
%9 = alloca [32 x i8]
%10 = alloca [31 x i8]
%11 = getelementptr inbounds [25 x i8], [25 x i8]* %1, i64 0, i64 0
%12 = getelementptr inbounds [23 x i8], [23 x i8]* %2, i64 0, i64 0
%13 = getelementptr inbounds [24 x i8], [24 x i8]* %3, i64 0, i64 0
%14 = getelementptr inbounds [31 x i8], [31 x i8]* %4, i64 0, i64 0
%15 = getelementptr inbounds [32 x i8], [32 x i8]* %5, i64 0, i64 0
%16 = getelementptr inbounds [33 x i8], [33 x i8]* %6, i64 0, i64 0
%17 = getelementptr inbounds [34 x i8], [34 x i8]* %7, i64 0, i64 0
%18 = getelementptr inbounds [31 x i8], [31 x i8]* %8, i64 0, i64 0
%19 = getelementptr inbounds [32 x i8], [32 x i8]* %9, i64 0, i64 0
%20 = getelementptr inbounds [31 x i8], [31 x i8]* %10, i64 0, i64 0
%21 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %11)
%22 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %12)
%23 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %13)
%24 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %14)
%25 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %15)
%26 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %16)
%27 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %17)
%28 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %18)
%29 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %19)
%30 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i8* %20)
ret void
}