#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 */
typedef int /*<<< orphan*/ un8;
typedef int /*<<< orphan*/ u16;
typedef int /*<<< orphan*/ n8;
typedef int /*<<< orphan*/ n64d;
typedef int /*<<< orphan*/ n16;

/* Variables and functions */
int /*<<< orphan*/ write(char *, ...);
int main() {
  char n8[] = {127, 1, 0, -1, -2, -128};
  unsigned char un8[] = {255, 1, 0};
  double n64d[] = {-9.1819281981e3, -10, -0.11, 0, 0.11, 10};
  unsigned short int u16[] = {65535, 65534, 1, 0};
  short int n16[] = {32767, 128, 1, 0, -1, -129, -32768};
  write("vows/examples/n8", &un8, sizeof(un8));
  write("vows/examples/-n8", &n8, sizeof(n8));
  write("vows/examples/u16", &u16, sizeof(u16));
  write("vows/examples/n16", &n16, sizeof(n16));
  write("vows/examples/n64d", &n64d, sizeof(n64d));
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0xefa(%rip),%eax
mov    %eax,-0x6(%rbp)
mov    0xef4(%rip),%ax
mov    %ax,-0x2(%rbp)
mov    0xef9(%rip),%ax
mov    %ax,-0x9(%rbp)
mov    0xef1(%rip),%al
mov    %al,-0x7(%rbp)
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1040 <memset@plt>
movsd  0xeb8(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xea3(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe8e(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xe79(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe64(%rip),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    0xef2(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    0xe7b(%rip),%rax
mov    %rax,-0x56(%rbp)
mov    0xe79(%rip),%eax
mov    %eax,-0x4e(%rbp)
mov    0xe73(%rip),%ax
mov    %ax,-0x4a(%rbp)
lea    0xe6d(%rip),%rdi
lea    -0x9(%rbp),%rsi
mov    $0x3,%edx
mov    $0x0,%al
call   1030 <write@plt>
lea    0xe67(%rip),%rdi
lea    -0x6(%rbp),%rsi
mov    $0x6,%edx
mov    $0x0,%al
call   1030 <write@plt>
lea    0xe62(%rip),%rdi
lea    -0x48(%rbp),%rsi
mov    $0x8,%edx
mov    $0x0,%al
call   1030 <write@plt>
lea    0xe5d(%rip),%rdi
lea    -0x56(%rbp),%rsi
mov    $0xe,%edx
mov    $0x0,%al
call   1030 <write@plt>
lea    0xe58(%rip),%rdi
lea    -0x40(%rbp),%rsi
mov    $0x30,%edx
mov    $0x0,%al
call   1030 <write@plt>
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x68,%rsp
movw   $0x80fe,0x14(%rsp)
movl   $0xff00017f,0x10(%rsp)
ff
movb   $0x0,0xe(%rsp)
movw   $0x1ff,0xc(%rsp)
xorps  %xmm0,%xmm0
movaps %xmm0,0x40(%rsp)
movaps 0xec2(%rip),%xmm0
movaps %xmm0,0x30(%rsp)
movabs $0xbfbc28f5c28f5c29,%rax
28 bc bf
mov    %rax,0x40(%rsp)
movaps 0xeb7(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movabs $0x1fffeffff,%rax
mov    %rax,0x18(%rsp)
mov    0xeb8(%rip),%rax
mov    %rax,0x26(%rsp)
mov    0xea6(%rip),%rax
mov    %rax,0x20(%rsp)
lea    0xeab(%rip),%rdi
lea    0xc(%rsp),%rsi
mov    $0x3,%edx
xor    %eax,%eax
call   1030 <write@plt>
lea    0xea4(%rip),%rdi
lea    0x10(%rsp),%rsi
mov    $0x6,%edx
xor    %eax,%eax
call   1030 <write@plt>
lea    0xe9e(%rip),%rdi
lea    0x18(%rsp),%rsi
mov    $0x8,%edx
xor    %eax,%eax
call   1030 <write@plt>
lea    0xe98(%rip),%rdi
lea    0x20(%rsp),%rsi
mov    $0xe,%edx
xor    %eax,%eax
call   1030 <write@plt>
lea    0xe92(%rip),%rdi
lea    0x30(%rsp),%rsi
mov    $0x30,%edx
xor    %eax,%eax
call   1030 <write@plt>
xor    %eax,%eax
add    $0x68,%rsp
ret

LLVM IR (-O0):
@__const.main.n8 = [6 x i8] c"\7F\01\00\FF\FE\80"
@__const.main.un8 = [3 x i8] c"\FF\01\00"
@__const.main.u16 = [4 x i16] [i16 -1, i16 -2, i16 1, i16 0]
@__const.main.n16 = [7 x i16] [i16 32767, i16 128, i16 1, i16 0, i16 -1, i16 -129, i16 -32768]
@.str = [17 x i8] c"vows/examples/n8\00"
@.str.1 = [18 x i8] c"vows/examples/-n8\00"
@.str.2 = [18 x i8] c"vows/examples/u16\00"
@.str.3 = [18 x i8] c"vows/examples/n16\00"
@.str.4 = [19 x i8] c"vows/examples/n64d\00"
define i32 @main() {
%1 = alloca [6 x i8]
%2 = alloca [3 x i8]
%3 = alloca [6 x double]
%4 = alloca [4 x i16]
%5 = alloca [7 x i16]
%6 = bitcast [6 x i8]* %1 to i8*
%7 = bitcast [3 x i8]* %2 to i8*
%8 = bitcast [6 x double]* %3 to i8*
%9 = bitcast i8* %8 to [6 x double]*
%10 = getelementptr inbounds [6 x double], [6 x double]* %9, i32 0, i32 0
store double 0xC0C1EEF6CF3201DB, double* %10
%11 = getelementptr inbounds [6 x double], [6 x double]* %9, i32 0, i32 1
store double -1.000000e+01, double* %11
%12 = getelementptr inbounds [6 x double], [6 x double]* %9, i32 0, i32 2
store double -1.100000e-01, double* %12
%13 = getelementptr inbounds [6 x double], [6 x double]* %9, i32 0, i32 4
store double 1.100000e-01, double* %13
%14 = getelementptr inbounds [6 x double], [6 x double]* %9, i32 0, i32 5
store double 1.000000e+01, double* %14
%15 = bitcast [4 x i16]* %4 to i8*
%16 = bitcast [7 x i16]* %5 to i8*
%17 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), [3 x i8]* %2, i64 3)
%18 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.1, i64 0, i64 0), [6 x i8]* %1, i64 6)
%19 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), [4 x i16]* %4, i64 8)
%20 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.3, i64 0, i64 0), [7 x i16]* %5, i64 14)
%21 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.4, i64 0, i64 0), [6 x double]* %3, i64 48)
ret i32 0
}

LLVM IR (-O2):
@__const.main.n8 = [6 x i8] c"\7F\01\00\FF\FE\80"
@__const.main.un8 = [3 x i8] c"\FF\01\00"
@__const.main.n16 = [7 x i16] [i16 32767, i16 128, i16 1, i16 0, i16 -1, i16 -129, i16 -32768]
@.str = [17 x i8] c"vows/examples/n8\00"
@.str.1 = [18 x i8] c"vows/examples/-n8\00"
@.str.2 = [18 x i8] c"vows/examples/u16\00"
@.str.3 = [18 x i8] c"vows/examples/n16\00"
@.str.4 = [19 x i8] c"vows/examples/n64d\00"
define i32 @main() {
%1 = alloca [6 x i8]
%2 = alloca [3 x i8]
%3 = alloca [6 x double]
%4 = alloca i64
%5 = alloca [7 x i16]
%6 = getelementptr inbounds [6 x i8], [6 x i8]* %1, i64 0, i64 0
%7 = getelementptr inbounds [3 x i8], [3 x i8]* %2, i64 0, i64 0
%8 = bitcast [6 x double]* %3 to i8*
%9 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 2
%10 = bitcast double* %9 to i8*
%11 = bitcast [6 x double]* %3 to <2 x double>*
store <2 x double> <double 0xC0C1EEF6CF3201DB, double -1.000000e+01>, <2 x double>* %11
%12 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 2
store double -1.100000e-01, double* %12
%13 = getelementptr inbounds [6 x double], [6 x double]* %3, i64 0, i64 4
%14 = bitcast double* %13 to <2 x double>*
store <2 x double> <double 1.100000e-01, double 1.000000e+01>, <2 x double>* %14
%15 = bitcast i64* %4 to i8*
store i64 8589869055, i64* %4
%16 = bitcast [7 x i16]* %5 to i8*
%17 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), [3 x i8]* %2, i64 3)
%18 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.1, i64 0, i64 0), [6 x i8]* %1, i64 6)
%19 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.2, i64 0, i64 0), i64* %4, i64 8)
%20 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.3, i64 0, i64 0), [7 x i16]* %5, i64 14)
%21 = call i32 (i8*, ...) @write(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.4, i64 0, i64 0), [6 x double]* %3, i64 48)
ret i32 0
}