#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 *);
int main() {
  long long serial_no[2];
  serial_no[0] = 0x73695f78756e694c;
  serial_no[1] = 0x002174616572475f;
  serial_no[0] = 0x4c206f6f746e6547;
  serial_no[1] = 0x0000002e78756e69;
  serial_no[0] = 0x412f6f6f746e6547;
  serial_no[1] = 0x0000002e6168706c;
  serial_no[0] = 0x4d206f6f746e6547;
  serial_no[1] = 0x000000002e4f4c49;
  serial_no[0] = 0x697c677c697c647c;
  serial_no[1] = 0x007c6c7c617c747c;
  printf("serial number:\t%s\n", (char *)serial_no);
  return (0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movabs $0x73695f78756e694c,%rax
5f 69 73
mov    %rax,-0x20(%rbp)
movabs $0x2174616572475f,%rax
mov    %rax,-0x18(%rbp)
movabs $0x4c206f6f746e6547,%rax
6f 20 4c
mov    %rax,-0x20(%rbp)
movabs $0x2e78756e69,%rax
mov    %rax,-0x18(%rbp)
movabs $0x412f6f6f746e6547,%rax
6f 2f 41
mov    %rax,-0x20(%rbp)
movabs $0x2e6168706c,%rax
mov    %rax,-0x18(%rbp)
movabs $0x4d206f6f746e6547,%rax
6f 20 4d
mov    %rax,-0x20(%rbp)
movq   $0x2e4f4c49,-0x18(%rbp)
2e
movabs $0x697c677c697c647c,%rax
67 7c 69
mov    %rax,-0x20(%rbp)
movabs $0x7c6c7c617c747c,%rax
mov    %rax,-0x18(%rbp)
lea    -0x20(%rbp),%rsi
lea    0xe50(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x18,%rsp
movaps 0xee5(%rip),%xmm0
movaps %xmm0,(%rsp)
lea    0xeea(%rip),%rdi
mov    %rsp,%rsi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x18,%rsp
ret

LLVM IR (-O0):
@.str = [19 x i8] c"serial number:\09%s\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [2 x i64]
store i32 0, i32* %1
%3 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 0
store i64 8316283157887215948, i64* %3
%4 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 1
store i64 9416635894089567, i64* %4
%5 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 0
store i64 5485506870622709063, i64* %5
%6 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 1
store i64 199589457513, i64* %6
%7 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 0
store i64 4697095460856161607, i64* %7
%8 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 1
store i64 199202730092, i64* %8
%9 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 0
store i64 5557564464660636999, i64* %9
%10 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 1
store i64 776948809, i64* %10
%11 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 0
store i64 7601064055137920124, i64* %11
%12 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 1
store i64 35022178579412092, i64* %12
%13 = getelementptr inbounds [2 x i64], [2 x i64]* %2, i64 0, i64 0
%14 = bitcast i64* %13 to i8*
%15 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i8* %14)
ret i32 0
}

LLVM IR (-O2):
@.str = [19 x i8] c"serial number:\09%s\0A\00"
define i32 @main() {
%1 = alloca <2 x i64>
%2 = bitcast <2 x i64>* %1 to i8*
store <2 x i64> <i64 7601064055137920124, i64 35022178579412092>, <2 x i64>* %1
%3 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0), i8* %2)
ret i32 0
}