#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 *, double, ...);
main() {
  int limit = 1000 + 1;
  char new_line = '\n';
  int exp_int = 2.71828182845905;
  float exp_float = 2.71828182845905;
  double exp_double = 2.71828182845905;
  float eps_float = 1.0e-5;
  double eps_double = 1.0e-5;
  printf("HTAB = %c, %d, %o, %x\n", '\t', '\t', '\t', '\t');
  printf("BELL = %c, %d, %o, %x\n", '\a', '\a', '\a', '\a');
  printf("NEW_LINE = %c, %d, %o, %x, %c\n", '\n', '\n', '\n', '\n', new_line);
  printf("VTAB = %d, %d\n", '\013', '\xb');
  printf("limit = %d\n", limit);
  printf("exp = %f, %d, %1.14f, %1.14f\n", 2.71828182845905, exp_int, exp_float,
         exp_double);
  printf("eps = %f, %f, %f, %e\n", 1.0e-5, eps_float, eps_double, eps_double);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x3e9,-0x4(%rbp)
movb   $0xa,-0x5(%rbp)
movl   $0x2,-0xc(%rbp)
movss  0xf02(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movsd  0xec9(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
movss  0xee4(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movsd  0xea7(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
lea    0xed3(%rip),%rdi
movsd  0xebb(%rip),%xmm0
mov    $0x9,%ecx
mov    %ecx,%esi
mov    %ecx,%edx
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xecb(%rip),%rdi
movsd  0xe94(%rip),%xmm0
mov    $0x7,%ecx
mov    %ecx,%esi
mov    %ecx,%edx
mov    $0x1,%al
call   1030 <printf@plt>
movsbl -0x5(%rbp),%r8d
lea    0xebe(%rip),%rdi
movsd  0xe68(%rip),%xmm0
mov    $0xa,%ecx
mov    %ecx,%esi
mov    %ecx,%edx
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xebe(%rip),%rdi
movsd  0xe41(%rip),%xmm0
mov    $0xb,%esi
mov    $0x1,%al
call   1030 <printf@plt>
cvtsi2sdl -0x4(%rbp),%xmm0
lea    0xead(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%esi
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  -0x18(%rbp),%xmm2
lea    0xe9a(%rip),%rdi
movsd  0xdfa(%rip),%xmm0
mov    $0x3,%al
call   1030 <printf@plt>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm3
lea    0xe8f(%rip),%rdi
movsd  0xdc9(%rip),%xmm0
mov    $0x4,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
lea    0xf30(%rip),%rdi
movsd  0xee0(%rip),%xmm0
mov    $0x9,%esi
mov    $0x9,%edx
mov    $0x9,%ecx
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xf22(%rip),%rdi
movsd  0xec3(%rip),%xmm0
mov    $0x7,%esi
mov    $0x7,%edx
mov    $0x7,%ecx
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xf14(%rip),%rdi
movsd  0xea6(%rip),%xmm0
mov    $0xa,%esi
mov    $0xa,%edx
mov    $0xa,%ecx
mov    $0xa,%r8d
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xf08(%rip),%rdi
movsd  0xe83(%rip),%xmm0
mov    $0xb,%esi
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xefc(%rip),%rdi
movsd  0xe70(%rip),%xmm0
mov    $0x1,%al
call   1030 <printf@plt>
lea    0xef2(%rip),%rdi
movsd  0xe62(%rip),%xmm1
movsd  0xe62(%rip),%xmm0
mov    $0x2,%esi
movaps %xmm0,%xmm2
mov    $0x3,%al
call   1030 <printf@plt>
lea    0xeea(%rip),%rdi
movsd  0xe4c(%rip),%xmm1
movsd  0xe4c(%rip),%xmm0
movaps %xmm0,%xmm2
movaps %xmm0,%xmm3
mov    $0x4,%al
call   1030 <printf@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [23 x i8] c"HTAB = %c, %d, %o, %x\0A\00"
@.str.1 = [23 x i8] c"BELL = %c, %d, %o, %x\0A\00"
@.str.2 = [31 x i8] c"NEW_LINE = %c, %d, %o, %x, %c\0A\00"
@.str.3 = [15 x i8] c"VTAB = %d, %d\0A\00"
@.str.4 = [12 x i8] c"limit = %d\0A\00"
@.str.5 = [30 x i8] c"exp = %f, %d, %1.14f, %1.14f\0A\00"
@.str.6 = [22 x i8] c"eps = %f, %f, %f, %e\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8
%3 = alloca i32
%4 = alloca float
%5 = alloca double
%6 = alloca float
%7 = alloca double
store i32 1001, i32* %1
store i8 10, i8* %2
store i32 2, i32* %3
store float 0x4005BF0A80000000, float* %4
store double 0x4005BF0A8B145774, double* %5
store float 0x3EE4F8B580000000, float* %6
store double 1.000000e-05, double* %7
%8 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0), double 9.000000e+00, i32 9, i32 9, i32 9)
%9 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), double 7.000000e+00, i32 7, i32 7, i32 7)
%10 = load i8, i8* %2
%11 = sext i8 %10 to i32
%12 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.2, i64 0, i64 0), double 1.000000e+01, i32 10, i32 10, i32 10, i32 %11)
%13 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i64 0, i64 0), double 1.100000e+01, i32 11)
%14 = load i32, i32* %1
%15 = sitofp i32 %14 to double
%16 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0), double %15)
%17 = load i32, i32* %3
%18 = load float, float* %4
%19 = fpext float %18 to double
%20 = load double, double* %5
%21 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.5, i64 0, i64 0), double 0x4005BF0A8B145774, i32 %17, double %19, double %20)
%22 = load float, float* %6
%23 = fpext float %22 to double
%24 = load double, double* %7
%25 = load double, double* %7
%26 = call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.6, i64 0, i64 0), double 1.000000e-05, double %23, double %24, double %25)
ret i32 0
}

LLVM IR (-O2):
@.str = [23 x i8] c"HTAB = %c, %d, %o, %x\0A\00"
@.str.1 = [23 x i8] c"BELL = %c, %d, %o, %x\0A\00"
@.str.2 = [31 x i8] c"NEW_LINE = %c, %d, %o, %x, %c\0A\00"
@.str.3 = [15 x i8] c"VTAB = %d, %d\0A\00"
@.str.4 = [12 x i8] c"limit = %d\0A\00"
@.str.5 = [30 x i8] c"exp = %f, %d, %1.14f, %1.14f\0A\00"
@.str.6 = [22 x i8] c"eps = %f, %f, %f, %e\0A\00"
define i32 @main() {
%1 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0), double 9.000000e+00, i32 9, i32 9, i32 9)
%2 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), double 7.000000e+00, i32 7, i32 7, i32 7)
%3 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.2, i64 0, i64 0), double 1.000000e+01, i32 10, i32 10, i32 10, i32 10)
%4 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.3, i64 0, i64 0), double 1.100000e+01, i32 11)
%5 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0), double 1.001000e+03)
%6 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.5, i64 0, i64 0), double 0x4005BF0A8B145774, i32 2, double 0x4005BF0A80000000, double 0x4005BF0A8B145774)
%7 = tail call i32 (i8*, double, ...) @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.6, i64 0, i64 0), double 1.000000e-05, double 0x3EE4F8B580000000, double 1.000000e-05, double 1.000000e-05)
ret i32 0
}