關於編譯型語言程式碼優化的一點迷思

0x11901發表於2018-08-01

關於編譯型語言程式碼優化的一點迷思

最近經常看見一些人分享自己擼碼的經驗,比如曾經習慣把 if 語句改成三目運算子,以減少程式碼行數。現在習慣把相同的 if 判斷合併在一起,以減少 if 判斷的次數,提高效率。

多年以前筆者也是這樣想的,但是隨著年齡的增長,竊以為在編譯型語言中,這樣做的意義並不大,而且有時甚至可能會降低程式碼可讀性。

例子

有如下兩份程式碼:

#include <array>
#include <iostream>

int main()
{
    std::array<int, 122> array{ 2700, 2314, 8429, 7726, 4817, 8716, 3598, 6255, 5056, 8653, 8571, 5028, 1259, 3315,
                                2896, 1411, 3847, 879,  7353, 8056, 8765, 2344, 6349, 4156, 8350, 4164, 4783, 6800,
                                8887, 267,  4478, 6327, 58,   7961, 756,  5654, 9546, 5132, 247,  5514, 7098, 1156,
                                795,  2502, 367,  5330, 2261, 8692, 2460, 4823, 8968, 4976, 1929, 1051, 9249, 9713,
                                2803, 1743, 3681, 93,   4967, 2245, 198,  896,  6372, 4413, 2615, 6130, 5766, 5306,
                                1236, 888,  8050, 7080, 3460, 3473, 1720, 3913, 3449, 8420, 1814, 1261, 1368, 167,
                                7938, 4483, 4843, 4682, 3301, 4038, 709,  8655, 598,  3857, 6285, 2961, 6817, 1031,
                                4007, 1392, 5717, 5837, 5695, 9511, 8891, 7883, 7035, 2349, 5752, 3139, 2442, 3966,
                                2007, 9205, 8434, 5065, 3795, 6890, 2715, 1,    5106, 5083 };

    auto x = 5330;

    for (const auto &element : array)
    {
        if (element> 1000)
        {
            std::cout << "";
        }
    }

    for (const auto &element : array)
    {
        if (element> 1000)
        {
            if (element == x)
            {
                std::cout << "hello, world" << std::endl;
            }
        }
    }

    return 0;
}
複製程式碼
#include <array>
#include <iostream>

int main()
{
    std::array<int, 122> array{ 2700, 2314, 8429, 7726, 4817, 8716, 3598, 6255, 5056, 8653, 8571, 5028, 1259, 3315,
                                2896, 1411, 3847, 879,  7353, 8056, 8765, 2344, 6349, 4156, 8350, 4164, 4783, 6800,
                                8887, 267,  4478, 6327, 58,   7961, 756,  5654, 9546, 5132, 247,  5514, 7098, 1156,
                                795,  2502, 367,  5330, 2261, 8692, 2460, 4823, 8968, 4976, 1929, 1051, 9249, 9713,
                                2803, 1743, 3681, 93,   4967, 2245, 198,  896,  6372, 4413, 2615, 6130, 5766, 5306,
                                1236, 888,  8050, 7080, 3460, 3473, 1720, 3913, 3449, 8420, 1814, 1261, 1368, 167,
                                7938, 4483, 4843, 4682, 3301, 4038, 709,  8655, 598,  3857, 6285, 2961, 6817, 1031,
                                4007, 1392, 5717, 5837, 5695, 9511, 8891, 7883, 7035, 2349, 5752, 3139, 2442, 3966,
                                2007, 9205, 8434, 5065, 3795, 6890, 2715, 1,    5106, 5083 };

    auto x = 5330;

    for (const auto &element : array)
    {
        if (element> 1000)
        {
            std::cout << "";
            if (element == x)
            {
                std::cout << "hello, world" << std::endl;
            }
        }
    }

    return 0;
}
複製程式碼

從程式碼角度看第二份程式碼應該優於第一份程式碼。

使用 LLVM 生成兩份程式碼的對應彙編如下:

	.section	__TEXT,__text,regular,pure_instructions
	.macosx_version_min 10, 13
	.globl	_main                   ## -- Begin function main
	.p2align	4, 0x90
_main:                                  ## @main
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi0:
	.cfi_def_cfa_offset 16
Lcfi1:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi2:
	.cfi_def_cfa_register %rbp
	subq	$640, %rsp              ## imm = 0x280
	leaq	-544(%rbp), %rax
	leaq	l__ZZ4mainE5array(%rip), %rcx
	movl	$488, %edx              ## imm = 0x1E8
                                        ## kill: %RDX<def> %EDX<kill>
	movl	$0, -52(%rbp)
	movq	%rax, %rsi
	movq	%rsi, %rdi
	movq	%rcx, %rsi
	movq	%rax, -624(%rbp)        ## 8-byte Spill
	callq	_memcpy
	movl	$5330, -548(%rbp)       ## imm = 0x14D2
	movq	-624(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -560(%rbp)
	movq	-560(%rbp), %rcx
	movq	%rcx, -48(%rbp)
	movq	-48(%rbp), %rcx
	movq	%rcx, -568(%rbp)
	movq	-560(%rbp), %rcx
	movq	%rcx, -24(%rbp)
	movq	-24(%rbp), %rcx
	addq	$488, %rcx              ## imm = 0x1E8
	movq	%rcx, -576(%rbp)
LBB0_1:                                 ## =>This Inner Loop Header: Depth=1
	movq	-568(%rbp), %rax
	cmpq	-576(%rbp), %rax
	je	LBB0_6
## BB#2:                                ##   in Loop: Header=BB0_1 Depth=1
	movq	-568(%rbp), %rax
	movq	%rax, -584(%rbp)
	movq	-584(%rbp), %rax
	cmpl	$1000, (%rax)           ## imm = 0x3E8
	jle	LBB0_4
## BB#3:                                ##   in Loop: Header=BB0_1 Depth=1
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %rdi
	leaq	L_.str(%rip), %rsi
	callq	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	movq	%rax, -632(%rbp)        ## 8-byte Spill
LBB0_4:                                 ##   in Loop: Header=BB0_1 Depth=1
	jmp	LBB0_5
LBB0_5:                                 ##   in Loop: Header=BB0_1 Depth=1
	movq	-568(%rbp), %rax
	addq	$4, %rax
	movq	%rax, -568(%rbp)
	jmp	LBB0_1
LBB0_6:
	leaq	-544(%rbp), %rax
	movq	%rax, -592(%rbp)
	movq	-592(%rbp), %rax
	movq	%rax, -16(%rbp)
	movq	-16(%rbp), %rax
	movq	%rax, -600(%rbp)
	movq	-592(%rbp), %rax
	movq	%rax, -8(%rbp)
	movq	-8(%rbp), %rax
	addq	$488, %rax              ## imm = 0x1E8
	movq	%rax, -608(%rbp)
LBB0_7:                                 ## =>This Inner Loop Header: Depth=1
	movq	-600(%rbp), %rax
	cmpq	-608(%rbp), %rax
	je	LBB0_14
## BB#8:                                ##   in Loop: Header=BB0_7 Depth=1
	movq	-600(%rbp), %rax
	movq	%rax, -616(%rbp)
	movq	-616(%rbp), %rax
	cmpl	$1000, (%rax)           ## imm = 0x3E8
	jle	LBB0_12
## BB#9:                                ##   in Loop: Header=BB0_7 Depth=1
	movq	-616(%rbp), %rax
	movl	(%rax), %ecx
	cmpl	-548(%rbp), %ecx
	jne	LBB0_11
## BB#10:                               ##   in Loop: Header=BB0_7 Depth=1
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %rdi
	leaq	L_.str.1(%rip), %rsi
	callq	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	leaq	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_(%rip), %rsi
	movq	%rax, -32(%rbp)
	movq	%rsi, -40(%rbp)
	movq	-32(%rbp), %rdi
	callq	*-40(%rbp)
	movq	%rax, -640(%rbp)        ## 8-byte Spill
LBB0_11:                                ##   in Loop: Header=BB0_7 Depth=1
	jmp	LBB0_12
LBB0_12:                                ##   in Loop: Header=BB0_7 Depth=1
	jmp	LBB0_13
LBB0_13:                                ##   in Loop: Header=BB0_7 Depth=1
	movq	-600(%rbp), %rax
	addq	$4, %rax
	movq	%rax, -600(%rbp)
	jmp	LBB0_7
LBB0_14:
	xorl	%eax, %eax
	addq	$640, %rsp              ## imm = 0x280
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.globl	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc ## -- Begin function _ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	.weak_definition	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	.p2align	4, 0x90
__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc: ## @_ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi3:
	.cfi_def_cfa_offset 16
Lcfi4:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi5:
	.cfi_def_cfa_register %rbp
	subq	$32, %rsp
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rdi
	movq	-16(%rbp), %rsi
	movq	-16(%rbp), %rax
	movq	%rdi, -24(%rbp)         ## 8-byte Spill
	movq	%rax, %rdi
	movq	%rsi, -32(%rbp)         ## 8-byte Spill
	callq	__ZNSt3__111char_traitsIcE6lengthEPKc
	movq	-24(%rbp), %rdi         ## 8-byte Reload
	movq	-32(%rbp), %rsi         ## 8-byte Reload
	movq	%rax, %rdx
	callq	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	addq	$32, %rsp
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.private_extern	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_ ## -- Begin function _ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
	.globl	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
	.weak_definition	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
	.p2align	4, 0x90
__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_: ## @_ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
Lfunc_begin0:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception0
## BB#0:
	pushq	%rbp
Lcfi6:
	.cfi_def_cfa_offset 16
Lcfi7:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi8:
	.cfi_def_cfa_register %rbp
	subq	$144, %rsp
	movq	%rdi, -72(%rbp)
	movq	-72(%rbp), %rdi
	movq	(%rdi), %rax
	movq	-24(%rax), %rax
	movq	%rdi, %rcx
	addq	%rax, %rcx
	movq	%rcx, -32(%rbp)
	movb	$10, -33(%rbp)
	movq	-32(%rbp), %rsi
	leaq	-48(%rbp), %rax
	movq	%rdi, -80(%rbp)         ## 8-byte Spill
	movq	%rax, %rdi
	movq	%rax, -88(%rbp)         ## 8-byte Spill
	callq	__ZNKSt3__18ios_base6getlocEv
	movq	-88(%rbp), %rax         ## 8-byte Reload
	movq	%rax, -24(%rbp)
	movq	-24(%rbp), %rdi
Ltmp0:
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %rsi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp1:
	movq	%rax, -96(%rbp)         ## 8-byte Spill
	jmp	LBB2_1
LBB2_1:
	movb	-33(%rbp), %al
	movq	-96(%rbp), %rcx         ## 8-byte Reload
	movq	%rcx, -8(%rbp)
	movb	%al, -9(%rbp)
	movq	-8(%rbp), %rdx
	movq	(%rdx), %rsi
	movq	56(%rsi), %rsi
	movsbl	-9(%rbp), %edi
Ltmp2:
	movl	%edi, -100(%rbp)        ## 4-byte Spill
	movq	%rdx, %rdi
	movl	-100(%rbp), %r8d        ## 4-byte Reload
	movq	%rsi, -112(%rbp)        ## 8-byte Spill
	movl	%r8d, %esi
	movq	-112(%rbp), %rdx        ## 8-byte Reload
	callq	*%rdx
Ltmp3:
	movb	%al, -113(%rbp)         ## 1-byte Spill
	jmp	LBB2_3
LBB2_2:
Ltmp4:
	leaq	-48(%rbp), %rdi
	movl	%edx, %ecx
	movq	%rax, -56(%rbp)
	movl	%ecx, -60(%rbp)
	callq	__ZNSt3__16localeD1Ev
	movq	-56(%rbp), %rdi
	callq	__Unwind_Resume
LBB2_3:
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movq	-80(%rbp), %rdi         ## 8-byte Reload
	movb	-113(%rbp), %al         ## 1-byte Reload
	movsbl	%al, %esi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc
	movq	-72(%rbp), %rdi
	movq	%rax, -128(%rbp)        ## 8-byte Spill
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv
	movq	-72(%rbp), %rdi
	movq	%rax, -136(%rbp)        ## 8-byte Spill
	movq	%rdi, %rax
	addq	$144, %rsp
	popq	%rbp
	retq
Lfunc_end0:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table2:
Lexception0:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset0 = Lfunc_begin0-Lfunc_begin0       ## >> Call Site 1 <<
	.long	Lset0
Lset1 = Ltmp0-Lfunc_begin0              ##   Call between Lfunc_begin0 and Ltmp0
	.long	Lset1
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset2 = Ltmp0-Lfunc_begin0              ## >> Call Site 2 <<
	.long	Lset2
Lset3 = Ltmp3-Ltmp0                     ##   Call between Ltmp0 and Ltmp3
	.long	Lset3
Lset4 = Ltmp4-Lfunc_begin0              ##     jumps to Ltmp4
	.long	Lset4
	.byte	0                       ##   On action: cleanup
Lset5 = Ltmp3-Lfunc_begin0              ## >> Call Site 3 <<
	.long	Lset5
Lset6 = Lfunc_end0-Ltmp3                ##   Call between Ltmp3 and Lfunc_end0
	.long	Lset6
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m ## -- Begin function _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.weak_definition	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.p2align	4, 0x90
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m: ## @_ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
Lfunc_begin1:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception1
## BB#0:
	pushq	%rbp
Lcfi9:
	.cfi_def_cfa_offset 16
Lcfi10:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi11:
	.cfi_def_cfa_register %rbp
	subq	$384, %rsp              ## imm = 0x180
	movq	%rdi, -184(%rbp)
	movq	%rsi, -192(%rbp)
	movq	%rdx, -200(%rbp)
	movq	-184(%rbp), %rsi
Ltmp5:
	leaq	-216(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_
Ltmp6:
	jmp	LBB3_1
LBB3_1:
	leaq	-216(%rbp), %rax
	movq	%rax, -176(%rbp)
	movq	-176(%rbp), %rax
	movb	(%rax), %cl
	movb	%cl, -249(%rbp)         ## 1-byte Spill
## BB#2:
	movb	-249(%rbp), %al         ## 1-byte Reload
	testb	$1, %al
	jne	LBB3_3
	jmp	LBB3_26
LBB3_3:
	leaq	-248(%rbp), %rax
	movq	-184(%rbp), %rcx
	movq	%rax, -160(%rbp)
	movq	%rcx, -168(%rbp)
	movq	-160(%rbp), %rax
	movq	-168(%rbp), %rcx
	movq	%rax, -144(%rbp)
	movq	%rcx, -152(%rbp)
	movq	-144(%rbp), %rax
	movq	-152(%rbp), %rcx
	movq	(%rcx), %rdx
	movq	-24(%rdx), %rdx
	addq	%rdx, %rcx
	movq	%rcx, -136(%rbp)
	movq	-136(%rbp), %rcx
	movq	%rcx, -128(%rbp)
	movq	-128(%rbp), %rcx
	movq	40(%rcx), %rcx
	movq	%rcx, (%rax)
	movq	-192(%rbp), %rsi
	movq	-184(%rbp), %rax
	movq	(%rax), %rcx
	movq	-24(%rcx), %rcx
	addq	%rcx, %rax
	movq	%rax, -88(%rbp)
	movq	-88(%rbp), %rax
	movl	8(%rax), %edi
	movq	%rsi, -264(%rbp)        ## 8-byte Spill
	movl	%edi, -268(%rbp)        ## 4-byte Spill
## BB#4:
	movl	-268(%rbp), %eax        ## 4-byte Reload
	andl	$176, %eax
	cmpl	$32, %eax
	jne	LBB3_6
## BB#5:
	movq	-192(%rbp), %rax
	addq	-200(%rbp), %rax
	movq	%rax, -280(%rbp)        ## 8-byte Spill
	jmp	LBB3_7
LBB3_6:
	movq	-192(%rbp), %rax
	movq	%rax, -280(%rbp)        ## 8-byte Spill
LBB3_7:
	movq	-280(%rbp), %rax        ## 8-byte Reload
	movq	-192(%rbp), %rcx
	addq	-200(%rbp), %rcx
	movq	-184(%rbp), %rdx
	movq	(%rdx), %rsi
	movq	-24(%rsi), %rsi
	addq	%rsi, %rdx
	movq	-184(%rbp), %rsi
	movq	(%rsi), %rdi
	movq	-24(%rdi), %rdi
	addq	%rdi, %rsi
	movq	%rsi, -72(%rbp)
	movq	-72(%rbp), %rsi
	movq	%rax, -288(%rbp)        ## 8-byte Spill
	movq	%rcx, -296(%rbp)        ## 8-byte Spill
	movq	%rdx, -304(%rbp)        ## 8-byte Spill
	movq	%rsi, -312(%rbp)        ## 8-byte Spill
	callq	__ZNSt3__111char_traitsIcE3eofEv
	movq	-312(%rbp), %rcx        ## 8-byte Reload
	movl	144(%rcx), %esi
	movl	%eax, %edi
	callq	__ZNSt3__111char_traitsIcE11eq_int_typeEii
	testb	$1, %al
	jne	LBB3_8
	jmp	LBB3_13
LBB3_8:
	movq	-312(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -32(%rbp)
	movb	$32, -33(%rbp)
	movq	-32(%rbp), %rsi
Ltmp8:
	leaq	-48(%rbp), %rdi
	callq	__ZNKSt3__18ios_base6getlocEv
Ltmp9:
	jmp	LBB3_9
LBB3_9:
	leaq	-48(%rbp), %rax
	movq	%rax, -24(%rbp)
	movq	-24(%rbp), %rdi
Ltmp10:
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %rsi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp11:
	movq	%rax, -320(%rbp)        ## 8-byte Spill
	jmp	LBB3_10
LBB3_10:
	movb	-33(%rbp), %al
	movq	-320(%rbp), %rcx        ## 8-byte Reload
	movq	%rcx, -8(%rbp)
	movb	%al, -9(%rbp)
	movq	-8(%rbp), %rdx
	movq	(%rdx), %rsi
	movq	56(%rsi), %rsi
	movsbl	-9(%rbp), %edi
Ltmp12:
	movl	%edi, -324(%rbp)        ## 4-byte Spill
	movq	%rdx, %rdi
	movl	-324(%rbp), %r8d        ## 4-byte Reload
	movq	%rsi, -336(%rbp)        ## 8-byte Spill
	movl	%r8d, %esi
	movq	-336(%rbp), %rdx        ## 8-byte Reload
	callq	*%rdx
Ltmp13:
	movb	%al, -337(%rbp)         ## 1-byte Spill
	jmp	LBB3_12
LBB3_11:
Ltmp14:
	movl	%edx, %ecx
	movq	%rax, -56(%rbp)
	movl	%ecx, -60(%rbp)
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movq	-56(%rbp), %rax
	movl	-60(%rbp), %ecx
	movq	%rax, -352(%rbp)        ## 8-byte Spill
	movl	%ecx, -356(%rbp)        ## 4-byte Spill
	jmp	LBB3_21
LBB3_12:
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movb	-337(%rbp), %al         ## 1-byte Reload
	movsbl	%al, %ecx
	movq	-312(%rbp), %rdi        ## 8-byte Reload
	movl	%ecx, 144(%rdi)
LBB3_13:
	movq	-312(%rbp), %rax        ## 8-byte Reload
	movl	144(%rax), %ecx
	movb	%cl, %dl
	movb	%dl, -357(%rbp)         ## 1-byte Spill
## BB#14:
	movq	-248(%rbp), %rdi
Ltmp15:
	movb	-357(%rbp), %al         ## 1-byte Reload
	movsbl	%al, %r9d
	movq	-264(%rbp), %rsi        ## 8-byte Reload
	movq	-288(%rbp), %rdx        ## 8-byte Reload
	movq	-296(%rbp), %rcx        ## 8-byte Reload
	movq	-304(%rbp), %r8         ## 8-byte Reload
	callq	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Ltmp16:
	movq	%rax, -368(%rbp)        ## 8-byte Spill
	jmp	LBB3_15
LBB3_15:
	leaq	-240(%rbp), %rax
	movq	-368(%rbp), %rcx        ## 8-byte Reload
	movq	%rcx, -240(%rbp)
	movq	%rax, -80(%rbp)
	movq	-80(%rbp), %rax
	cmpq	$0, (%rax)
	jne	LBB3_25
## BB#16:
	movq	-184(%rbp), %rax
	movq	(%rax), %rcx
	movq	-24(%rcx), %rcx
	addq	%rcx, %rax
	movq	%rax, -112(%rbp)
	movl	$5, -116(%rbp)
	movq	-112(%rbp), %rax
	movl	-116(%rbp), %edx
	movq	%rax, -96(%rbp)
	movl	%edx, -100(%rbp)
	movq	-96(%rbp), %rax
	movl	32(%rax), %edx
	movl	-100(%rbp), %esi
	orl	%esi, %edx
Ltmp17:
	movq	%rax, %rdi
	movl	%edx, %esi
	callq	__ZNSt3__18ios_base5clearEj
Ltmp18:
	jmp	LBB3_17
LBB3_17:
	jmp	LBB3_18
LBB3_18:
	jmp	LBB3_25
LBB3_19:
Ltmp7:
	movl	%edx, %ecx
	movq	%rax, -224(%rbp)
	movl	%ecx, -228(%rbp)
	jmp	LBB3_22
LBB3_20:
Ltmp19:
	movl	%edx, %ecx
	movq	%rax, -352(%rbp)        ## 8-byte Spill
	movl	%ecx, -356(%rbp)        ## 4-byte Spill
	jmp	LBB3_21
LBB3_21:
	movl	-356(%rbp), %eax        ## 4-byte Reload
	movq	-352(%rbp), %rcx        ## 8-byte Reload
	leaq	-216(%rbp), %rdi
	movq	%rcx, -224(%rbp)
	movl	%eax, -228(%rbp)
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
LBB3_22:
	movq	-224(%rbp), %rdi
	callq	___cxa_begin_catch
	movq	-184(%rbp), %rdi
	movq	(%rdi), %rcx
	movq	-24(%rcx), %rcx
	addq	%rcx, %rdi
Ltmp20:
	movq	%rax, -376(%rbp)        ## 8-byte Spill
	callq	__ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv
Ltmp21:
	jmp	LBB3_23
LBB3_23:
	callq	___cxa_end_catch
LBB3_24:
	movq	-184(%rbp), %rax
	addq	$384, %rsp              ## imm = 0x180
	popq	%rbp
	retq
LBB3_25:
	jmp	LBB3_26
LBB3_26:
	leaq	-216(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
	jmp	LBB3_24
LBB3_27:
Ltmp22:
	movl	%edx, %ecx
	movq	%rax, -224(%rbp)
	movl	%ecx, -228(%rbp)
Ltmp23:
	callq	___cxa_end_catch
Ltmp24:
	jmp	LBB3_28
LBB3_28:
	jmp	LBB3_29
LBB3_29:
	movq	-224(%rbp), %rdi
	callq	__Unwind_Resume
LBB3_30:
Ltmp25:
	movl	%edx, %ecx
	movq	%rax, %rdi
	movl	%ecx, -380(%rbp)        ## 4-byte Spill
	callq	___clang_call_terminate
Lfunc_end1:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table3:
Lexception1:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.asciz	"\201\201\200\200"      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	117                     ## Call site table length
Lset7 = Ltmp5-Lfunc_begin1              ## >> Call Site 1 <<
	.long	Lset7
Lset8 = Ltmp6-Ltmp5                     ##   Call between Ltmp5 and Ltmp6
	.long	Lset8
Lset9 = Ltmp7-Lfunc_begin1              ##     jumps to Ltmp7
	.long	Lset9
	.byte	5                       ##   On action: 3
Lset10 = Ltmp8-Lfunc_begin1             ## >> Call Site 2 <<
	.long	Lset10
Lset11 = Ltmp9-Ltmp8                    ##   Call between Ltmp8 and Ltmp9
	.long	Lset11
Lset12 = Ltmp19-Lfunc_begin1            ##     jumps to Ltmp19
	.long	Lset12
	.byte	5                       ##   On action: 3
Lset13 = Ltmp10-Lfunc_begin1            ## >> Call Site 3 <<
	.long	Lset13
Lset14 = Ltmp13-Ltmp10                  ##   Call between Ltmp10 and Ltmp13
	.long	Lset14
Lset15 = Ltmp14-Lfunc_begin1            ##     jumps to Ltmp14
	.long	Lset15
	.byte	3                       ##   On action: 2
Lset16 = Ltmp15-Lfunc_begin1            ## >> Call Site 4 <<
	.long	Lset16
Lset17 = Ltmp18-Ltmp15                  ##   Call between Ltmp15 and Ltmp18
	.long	Lset17
Lset18 = Ltmp19-Lfunc_begin1            ##     jumps to Ltmp19
	.long	Lset18
	.byte	5                       ##   On action: 3
Lset19 = Ltmp18-Lfunc_begin1            ## >> Call Site 5 <<
	.long	Lset19
Lset20 = Ltmp20-Ltmp18                  ##   Call between Ltmp18 and Ltmp20
	.long	Lset20
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset21 = Ltmp20-Lfunc_begin1            ## >> Call Site 6 <<
	.long	Lset21
Lset22 = Ltmp21-Ltmp20                  ##   Call between Ltmp20 and Ltmp21
	.long	Lset22
Lset23 = Ltmp22-Lfunc_begin1            ##     jumps to Ltmp22
	.long	Lset23
	.byte	0                       ##   On action: cleanup
Lset24 = Ltmp21-Lfunc_begin1            ## >> Call Site 7 <<
	.long	Lset24
Lset25 = Ltmp23-Ltmp21                  ##   Call between Ltmp21 and Ltmp23
	.long	Lset25
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset26 = Ltmp23-Lfunc_begin1            ## >> Call Site 8 <<
	.long	Lset26
Lset27 = Ltmp24-Ltmp23                  ##   Call between Ltmp23 and Ltmp24
	.long	Lset27
Lset28 = Ltmp25-Lfunc_begin1            ##     jumps to Ltmp25
	.long	Lset28
	.byte	5                       ##   On action: 3
Lset29 = Ltmp24-Lfunc_begin1            ## >> Call Site 9 <<
	.long	Lset29
Lset30 = Lfunc_end1-Ltmp24              ##   Call between Ltmp24 and Lfunc_end1
	.long	Lset30
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.byte	0                       ## >> Action Record 1 <<
                                        ##   Cleanup
	.byte	0                       ##   No further actions
	.byte	1                       ## >> Action Record 2 <<
                                        ##   Catch TypeInfo 1
	.byte	125                     ##   Continue to action 1
	.byte	1                       ## >> Action Record 3 <<
                                        ##   Catch TypeInfo 1
	.byte	0                       ##   No further actions
                                        ## >> Catch TypeInfos <<
	.long	0                       ## TypeInfo 1
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZNSt3__111char_traitsIcE6lengthEPKc ## -- Begin function _ZNSt3__111char_traitsIcE6lengthEPKc
	.weak_definition	__ZNSt3__111char_traitsIcE6lengthEPKc
	.p2align	4, 0x90
__ZNSt3__111char_traitsIcE6lengthEPKc:  ## @_ZNSt3__111char_traitsIcE6lengthEPKc
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi12:
	.cfi_def_cfa_offset 16
Lcfi13:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi14:
	.cfi_def_cfa_register %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movq	-8(%rbp), %rdi
	callq	_strlen
	addq	$16, %rsp
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.private_extern	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ ## -- Begin function _ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.globl	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.weak_definition	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.p2align	4, 0x90
__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_: ## @_ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Lfunc_begin2:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception2
## BB#0:
	pushq	%rbp
Lcfi15:
	.cfi_def_cfa_offset 16
Lcfi16:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi17:
	.cfi_def_cfa_register %rbp
	subq	$480, %rsp              ## imm = 0x1E0
	movb	%r9b, %al
	movq	%rdi, -320(%rbp)
	movq	%rsi, -328(%rbp)
	movq	%rdx, -336(%rbp)
	movq	%rcx, -344(%rbp)
	movq	%r8, -352(%rbp)
	movb	%al, -353(%rbp)
	cmpq	$0, -320(%rbp)
	jne	LBB5_2
## BB#1:
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	jmp	LBB5_26
LBB5_2:
	movq	-344(%rbp), %rax
	movq	-328(%rbp), %rcx
	subq	%rcx, %rax
	movq	%rax, -368(%rbp)
	movq	-352(%rbp), %rax
	movq	%rax, -304(%rbp)
	movq	-304(%rbp), %rax
	movq	24(%rax), %rax
	movq	%rax, -376(%rbp)
	movq	-376(%rbp), %rax
	cmpq	-368(%rbp), %rax
	jle	LBB5_4
## BB#3:
	movq	-368(%rbp), %rax
	movq	-376(%rbp), %rcx
	subq	%rax, %rcx
	movq	%rcx, -376(%rbp)
	jmp	LBB5_5
LBB5_4:
	movq	$0, -376(%rbp)
LBB5_5:
	movq	-336(%rbp), %rax
	movq	-328(%rbp), %rcx
	subq	%rcx, %rax
	movq	%rax, -384(%rbp)
	cmpq	$0, -384(%rbp)
	jle	LBB5_9
## BB#6:
	movq	-320(%rbp), %rax
	movq	-328(%rbp), %rcx
	movq	-384(%rbp), %rdx
	movq	%rax, -232(%rbp)
	movq	%rcx, -240(%rbp)
	movq	%rdx, -248(%rbp)
	movq	-232(%rbp), %rax
	movq	(%rax), %rcx
	movq	96(%rcx), %rcx
	movq	-240(%rbp), %rsi
	movq	-248(%rbp), %rdx
	movq	%rax, %rdi
	callq	*%rcx
	cmpq	-384(%rbp), %rax
	je	LBB5_8
## BB#7:
	movq	$0, -320(%rbp)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	jmp	LBB5_26
LBB5_8:
	jmp	LBB5_9
LBB5_9:
	cmpq	$0, -376(%rbp)
	jle	LBB5_21
## BB#10:
	xorl	%esi, %esi
	movl	$24, %eax
	movl	%eax, %edx
	leaq	-408(%rbp), %rcx
	movq	-376(%rbp), %rdi
	movb	-353(%rbp), %r8b
	movq	%rcx, -208(%rbp)
	movq	%rdi, -216(%rbp)
	movb	%r8b, -217(%rbp)
	movq	-208(%rbp), %rcx
	movq	-216(%rbp), %rdi
	movb	-217(%rbp), %r8b
	movq	%rcx, -184(%rbp)
	movq	%rdi, -192(%rbp)
	movb	%r8b, -193(%rbp)
	movq	-184(%rbp), %rcx
	movq	%rcx, -176(%rbp)
	movq	-176(%rbp), %rdi
	movq	%rdi, -168(%rbp)
	movq	-168(%rbp), %rdi
	movq	%rdi, %r9
	movq	%r9, -160(%rbp)
	movq	-160(%rbp), %r9
	movq	%rdi, -432(%rbp)        ## 8-byte Spill
	movq	%r9, %rdi
	movq	%rcx, -440(%rbp)        ## 8-byte Spill
	callq	_memset
	movq	-432(%rbp), %rcx        ## 8-byte Reload
	movq	%rcx, -152(%rbp)
	movq	-152(%rbp), %rcx
	movq	%rcx, -144(%rbp)
	movq	-192(%rbp), %rsi
	movq	-440(%rbp), %rdi        ## 8-byte Reload
	movsbl	-193(%rbp), %edx
	callq	__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc
	leaq	-408(%rbp), %rcx
	movq	-320(%rbp), %rsi
	movq	%rcx, -136(%rbp)
	movq	-136(%rbp), %rcx
	movq	%rcx, -128(%rbp)
	movq	-128(%rbp), %rcx
	movq	%rcx, -120(%rbp)
	movq	-120(%rbp), %rdi
	movq	%rdi, -112(%rbp)
	movq	-112(%rbp), %rdi
	movq	%rdi, -104(%rbp)
	movq	-104(%rbp), %rdi
	movzbl	(%rdi), %eax
	movl	%eax, %edi
	andq	$1, %rdi
	cmpq	$0, %rdi
	movq	%rsi, -448(%rbp)        ## 8-byte Spill
	movq	%rcx, -456(%rbp)        ## 8-byte Spill
	je	LBB5_12
## BB#11:
	movq	-456(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -56(%rbp)
	movq	-56(%rbp), %rcx
	movq	%rcx, -48(%rbp)
	movq	-48(%rbp), %rcx
	movq	%rcx, -40(%rbp)
	movq	-40(%rbp), %rcx
	movq	16(%rcx), %rcx
	movq	%rcx, -464(%rbp)        ## 8-byte Spill
	jmp	LBB5_13
LBB5_12:
	movq	-456(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -96(%rbp)
	movq	-96(%rbp), %rcx
	movq	%rcx, -88(%rbp)
	movq	-88(%rbp), %rcx
	movq	%rcx, -80(%rbp)
	movq	-80(%rbp), %rcx
	addq	$1, %rcx
	movq	%rcx, -72(%rbp)
	movq	-72(%rbp), %rcx
	movq	%rcx, -64(%rbp)
	movq	-64(%rbp), %rcx
	movq	%rcx, -464(%rbp)        ## 8-byte Spill
LBB5_13:
	movq	-464(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -32(%rbp)
	movq	-32(%rbp), %rax
	movq	-376(%rbp), %rcx
	movq	-448(%rbp), %rdx        ## 8-byte Reload
	movq	%rdx, -8(%rbp)
	movq	%rax, -16(%rbp)
	movq	%rcx, -24(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rcx
	movq	96(%rcx), %rcx
	movq	-16(%rbp), %rsi
	movq	-24(%rbp), %rdx
Ltmp26:
	movq	%rax, %rdi
	callq	*%rcx
Ltmp27:
	movq	%rax, -472(%rbp)        ## 8-byte Spill
	jmp	LBB5_14
LBB5_14:
	jmp	LBB5_15
LBB5_15:
	movq	-472(%rbp), %rax        ## 8-byte Reload
	cmpq	-376(%rbp), %rax
	je	LBB5_18
## BB#16:
	movq	$0, -320(%rbp)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	movl	$1, -424(%rbp)
	jmp	LBB5_19
LBB5_17:
Ltmp28:
	leaq	-408(%rbp), %rdi
	movl	%edx, %ecx
	movq	%rax, -416(%rbp)
	movl	%ecx, -420(%rbp)
	callq	__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
	jmp	LBB5_27
LBB5_18:
	movl	$0, -424(%rbp)
LBB5_19:
	leaq	-408(%rbp), %rdi
	callq	__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
	movl	-424(%rbp), %eax
	testl	%eax, %eax
	movl	%eax, -476(%rbp)        ## 4-byte Spill
	je	LBB5_20
	jmp	LBB5_29
LBB5_29:
	movl	-476(%rbp), %eax        ## 4-byte Reload
	subl	$1, %eax
	movl	%eax, -480(%rbp)        ## 4-byte Spill
	je	LBB5_26
	jmp	LBB5_28
LBB5_20:
	jmp	LBB5_21
LBB5_21:
	movq	-344(%rbp), %rax
	movq	-336(%rbp), %rcx
	subq	%rcx, %rax
	movq	%rax, -384(%rbp)
	cmpq	$0, -384(%rbp)
	jle	LBB5_25
## BB#22:
	movq	-320(%rbp), %rax
	movq	-336(%rbp), %rcx
	movq	-384(%rbp), %rdx
	movq	%rax, -256(%rbp)
	movq	%rcx, -264(%rbp)
	movq	%rdx, -272(%rbp)
	movq	-256(%rbp), %rax
	movq	(%rax), %rcx
	movq	96(%rcx), %rcx
	movq	-264(%rbp), %rsi
	movq	-272(%rbp), %rdx
	movq	%rax, %rdi
	callq	*%rcx
	cmpq	-384(%rbp), %rax
	je	LBB5_24
## BB#23:
	movq	$0, -320(%rbp)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	jmp	LBB5_26
LBB5_24:
	jmp	LBB5_25
LBB5_25:
	movq	-352(%rbp), %rax
	movq	%rax, -280(%rbp)
	movq	$0, -288(%rbp)
	movq	-280(%rbp), %rax
	movq	24(%rax), %rcx
	movq	%rcx, -296(%rbp)
	movq	-288(%rbp), %rcx
	movq	%rcx, 24(%rax)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
LBB5_26:
	movq	-312(%rbp), %rax
	addq	$480, %rsp              ## imm = 0x1E0
	popq	%rbp
	retq
LBB5_27:
	movq	-416(%rbp), %rdi
	callq	__Unwind_Resume
LBB5_28:
Lfunc_end2:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table5:
Lexception2:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset31 = Lfunc_begin2-Lfunc_begin2      ## >> Call Site 1 <<
	.long	Lset31
Lset32 = Ltmp26-Lfunc_begin2            ##   Call between Lfunc_begin2 and Ltmp26
	.long	Lset32
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset33 = Ltmp26-Lfunc_begin2            ## >> Call Site 2 <<
	.long	Lset33
Lset34 = Ltmp27-Ltmp26                  ##   Call between Ltmp26 and Ltmp27
	.long	Lset34
Lset35 = Ltmp28-Lfunc_begin2            ##     jumps to Ltmp28
	.long	Lset35
	.byte	0                       ##   On action: cleanup
Lset36 = Ltmp27-Lfunc_begin2            ## >> Call Site 3 <<
	.long	Lset36
Lset37 = Lfunc_end2-Ltmp27              ##   Call between Ltmp27 and Lfunc_end2
	.long	Lset37
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.private_extern	___clang_call_terminate ## -- Begin function __clang_call_terminate
	.globl	___clang_call_terminate
	.weak_definition	___clang_call_terminate
	.p2align	4, 0x90
___clang_call_terminate:                ## @__clang_call_terminate
## BB#0:
	pushq	%rax
	callq	___cxa_begin_catch
	movq	%rax, (%rsp)            ## 8-byte Spill
	callq	__ZSt9terminatev
                                        ## -- End function
	.globl	__ZNSt3__111char_traitsIcE11eq_int_typeEii ## -- Begin function _ZNSt3__111char_traitsIcE11eq_int_typeEii
	.weak_definition	__ZNSt3__111char_traitsIcE11eq_int_typeEii
	.p2align	4, 0x90
__ZNSt3__111char_traitsIcE11eq_int_typeEii: ## @_ZNSt3__111char_traitsIcE11eq_int_typeEii
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi18:
	.cfi_def_cfa_offset 16
Lcfi19:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi20:
	.cfi_def_cfa_register %rbp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	movl	-4(%rbp), %esi
	cmpl	-8(%rbp), %esi
	sete	%al
	andb	$1, %al
	movzbl	%al, %eax
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.globl	__ZNSt3__111char_traitsIcE3eofEv ## -- Begin function _ZNSt3__111char_traitsIcE3eofEv
	.weak_definition	__ZNSt3__111char_traitsIcE3eofEv
	.p2align	4, 0x90
__ZNSt3__111char_traitsIcE3eofEv:       ## @_ZNSt3__111char_traitsIcE3eofEv
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi21:
	.cfi_def_cfa_offset 16
Lcfi22:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi23:
	.cfi_def_cfa_register %rbp
	movl	$4294967295, %eax       ## imm = 0xFFFFFFFF
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.section	__TEXT,__const
	.p2align	2               ## @_ZZ4mainE5array
l__ZZ4mainE5array:
	.long	2700                    ## 0xa8c
	.long	2314                    ## 0x90a
	.long	8429                    ## 0x20ed
	.long	7726                    ## 0x1e2e
	.long	4817                    ## 0x12d1
	.long	8716                    ## 0x220c
	.long	3598                    ## 0xe0e
	.long	6255                    ## 0x186f
	.long	5056                    ## 0x13c0
	.long	8653                    ## 0x21cd
	.long	8571                    ## 0x217b
	.long	5028                    ## 0x13a4
	.long	1259                    ## 0x4eb
	.long	3315                    ## 0xcf3
	.long	2896                    ## 0xb50
	.long	1411                    ## 0x583
	.long	3847                    ## 0xf07
	.long	879                     ## 0x36f
	.long	7353                    ## 0x1cb9
	.long	8056                    ## 0x1f78
	.long	8765                    ## 0x223d
	.long	2344                    ## 0x928
	.long	6349                    ## 0x18cd
	.long	4156                    ## 0x103c
	.long	8350                    ## 0x209e
	.long	4164                    ## 0x1044
	.long	4783                    ## 0x12af
	.long	6800                    ## 0x1a90
	.long	8887                    ## 0x22b7
	.long	267                     ## 0x10b
	.long	4478                    ## 0x117e
	.long	6327                    ## 0x18b7
	.long	58                      ## 0x3a
	.long	7961                    ## 0x1f19
	.long	756                     ## 0x2f4
	.long	5654                    ## 0x1616
	.long	9546                    ## 0x254a
	.long	5132                    ## 0x140c
	.long	247                     ## 0xf7
	.long	5514                    ## 0x158a
	.long	7098                    ## 0x1bba
	.long	1156                    ## 0x484
	.long	795                     ## 0x31b
	.long	2502                    ## 0x9c6
	.long	367                     ## 0x16f
	.long	5330                    ## 0x14d2
	.long	2261                    ## 0x8d5
	.long	8692                    ## 0x21f4
	.long	2460                    ## 0x99c
	.long	4823                    ## 0x12d7
	.long	8968                    ## 0x2308
	.long	4976                    ## 0x1370
	.long	1929                    ## 0x789
	.long	1051                    ## 0x41b
	.long	9249                    ## 0x2421
	.long	9713                    ## 0x25f1
	.long	2803                    ## 0xaf3
	.long	1743                    ## 0x6cf
	.long	3681                    ## 0xe61
	.long	93                      ## 0x5d
	.long	4967                    ## 0x1367
	.long	2245                    ## 0x8c5
	.long	198                     ## 0xc6
	.long	896                     ## 0x380
	.long	6372                    ## 0x18e4
	.long	4413                    ## 0x113d
	.long	2615                    ## 0xa37
	.long	6130                    ## 0x17f2
	.long	5766                    ## 0x1686
	.long	5306                    ## 0x14ba
	.long	1236                    ## 0x4d4
	.long	888                     ## 0x378
	.long	8050                    ## 0x1f72
	.long	7080                    ## 0x1ba8
	.long	3460                    ## 0xd84
	.long	3473                    ## 0xd91
	.long	1720                    ## 0x6b8
	.long	3913                    ## 0xf49
	.long	3449                    ## 0xd79
	.long	8420                    ## 0x20e4
	.long	1814                    ## 0x716
	.long	1261                    ## 0x4ed
	.long	1368                    ## 0x558
	.long	167                     ## 0xa7
	.long	7938                    ## 0x1f02
	.long	4483                    ## 0x1183
	.long	4843                    ## 0x12eb
	.long	4682                    ## 0x124a
	.long	3301                    ## 0xce5
	.long	4038                    ## 0xfc6
	.long	709                     ## 0x2c5
	.long	8655                    ## 0x21cf
	.long	598                     ## 0x256
	.long	3857                    ## 0xf11
	.long	6285                    ## 0x188d
	.long	2961                    ## 0xb91
	.long	6817                    ## 0x1aa1
	.long	1031                    ## 0x407
	.long	4007                    ## 0xfa7
	.long	1392                    ## 0x570
	.long	5717                    ## 0x1655
	.long	5837                    ## 0x16cd
	.long	5695                    ## 0x163f
	.long	9511                    ## 0x2527
	.long	8891                    ## 0x22bb
	.long	7883                    ## 0x1ecb
	.long	7035                    ## 0x1b7b
	.long	2349                    ## 0x92d
	.long	5752                    ## 0x1678
	.long	3139                    ## 0xc43
	.long	2442                    ## 0x98a
	.long	3966                    ## 0xf7e
	.long	2007                    ## 0x7d7
	.long	9205                    ## 0x23f5
	.long	8434                    ## 0x20f2
	.long	5065                    ## 0x13c9
	.long	3795                    ## 0xed3
	.long	6890                    ## 0x1aea
	.long	2715                    ## 0xa9b
	.long	1                       ## 0x1
	.long	5106                    ## 0x13f2
	.long	5083                    ## 0x13db

	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.space	1

L_.str.1:                               ## @.str.1
	.asciz	"hello, world"


.subsections_via_symbols

複製程式碼
	.section	__TEXT,__text,regular,pure_instructions
	.macosx_version_min 10, 13
	.globl	_main                   ## -- Begin function main
	.p2align	4, 0x90
_main:                                  ## @main
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi0:
	.cfi_def_cfa_offset 16
Lcfi1:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi2:
	.cfi_def_cfa_register %rbp
	subq	$592, %rsp              ## imm = 0x250
	leaq	-528(%rbp), %rax
	leaq	l__ZZ4mainE5array(%rip), %rcx
	movl	$488, %edx              ## imm = 0x1E8
                                        ## kill: %RDX<def> %EDX<kill>
	movl	$0, -36(%rbp)
	movq	%rax, %rsi
	movq	%rsi, %rdi
	movq	%rcx, %rsi
	movq	%rax, -576(%rbp)        ## 8-byte Spill
	callq	_memcpy
	movl	$5330, -532(%rbp)       ## imm = 0x14D2
	movq	-576(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -544(%rbp)
	movq	-544(%rbp), %rcx
	movq	%rcx, -32(%rbp)
	movq	-32(%rbp), %rcx
	movq	%rcx, -552(%rbp)
	movq	-544(%rbp), %rcx
	movq	%rcx, -8(%rbp)
	movq	-8(%rbp), %rcx
	addq	$488, %rcx              ## imm = 0x1E8
	movq	%rcx, -560(%rbp)
LBB0_1:                                 ## =>This Inner Loop Header: Depth=1
	movq	-552(%rbp), %rax
	cmpq	-560(%rbp), %rax
	je	LBB0_8
## BB#2:                                ##   in Loop: Header=BB0_1 Depth=1
	movq	-552(%rbp), %rax
	movq	%rax, -568(%rbp)
	movq	-568(%rbp), %rax
	cmpl	$1000, (%rax)           ## imm = 0x3E8
	jle	LBB0_6
## BB#3:                                ##   in Loop: Header=BB0_1 Depth=1
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %rdi
	leaq	L_.str(%rip), %rsi
	callq	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	movq	-568(%rbp), %rsi
	movl	(%rsi), %ecx
	cmpl	-532(%rbp), %ecx
	movq	%rax, -584(%rbp)        ## 8-byte Spill
	jne	LBB0_5
## BB#4:                                ##   in Loop: Header=BB0_1 Depth=1
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %rdi
	leaq	L_.str.1(%rip), %rsi
	callq	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	leaq	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_(%rip), %rsi
	movq	%rax, -16(%rbp)
	movq	%rsi, -24(%rbp)
	movq	-16(%rbp), %rdi
	callq	*-24(%rbp)
	movq	%rax, -592(%rbp)        ## 8-byte Spill
LBB0_5:                                 ##   in Loop: Header=BB0_1 Depth=1
	jmp	LBB0_6
LBB0_6:                                 ##   in Loop: Header=BB0_1 Depth=1
	jmp	LBB0_7
LBB0_7:                                 ##   in Loop: Header=BB0_1 Depth=1
	movq	-552(%rbp), %rax
	addq	$4, %rax
	movq	%rax, -552(%rbp)
	jmp	LBB0_1
LBB0_8:
	xorl	%eax, %eax
	addq	$592, %rsp              ## imm = 0x250
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.globl	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc ## -- Begin function _ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	.weak_definition	__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	.p2align	4, 0x90
__ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc: ## @_ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi3:
	.cfi_def_cfa_offset 16
Lcfi4:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi5:
	.cfi_def_cfa_register %rbp
	subq	$32, %rsp
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rdi
	movq	-16(%rbp), %rsi
	movq	-16(%rbp), %rax
	movq	%rdi, -24(%rbp)         ## 8-byte Spill
	movq	%rax, %rdi
	movq	%rsi, -32(%rbp)         ## 8-byte Spill
	callq	__ZNSt3__111char_traitsIcE6lengthEPKc
	movq	-24(%rbp), %rdi         ## 8-byte Reload
	movq	-32(%rbp), %rsi         ## 8-byte Reload
	movq	%rax, %rdx
	callq	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	addq	$32, %rsp
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.private_extern	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_ ## -- Begin function _ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
	.globl	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
	.weak_definition	__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
	.p2align	4, 0x90
__ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_: ## @_ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
Lfunc_begin0:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception0
## BB#0:
	pushq	%rbp
Lcfi6:
	.cfi_def_cfa_offset 16
Lcfi7:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi8:
	.cfi_def_cfa_register %rbp
	subq	$144, %rsp
	movq	%rdi, -72(%rbp)
	movq	-72(%rbp), %rdi
	movq	(%rdi), %rax
	movq	-24(%rax), %rax
	movq	%rdi, %rcx
	addq	%rax, %rcx
	movq	%rcx, -32(%rbp)
	movb	$10, -33(%rbp)
	movq	-32(%rbp), %rsi
	leaq	-48(%rbp), %rax
	movq	%rdi, -80(%rbp)         ## 8-byte Spill
	movq	%rax, %rdi
	movq	%rax, -88(%rbp)         ## 8-byte Spill
	callq	__ZNKSt3__18ios_base6getlocEv
	movq	-88(%rbp), %rax         ## 8-byte Reload
	movq	%rax, -24(%rbp)
	movq	-24(%rbp), %rdi
Ltmp0:
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %rsi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp1:
	movq	%rax, -96(%rbp)         ## 8-byte Spill
	jmp	LBB2_1
LBB2_1:
	movb	-33(%rbp), %al
	movq	-96(%rbp), %rcx         ## 8-byte Reload
	movq	%rcx, -8(%rbp)
	movb	%al, -9(%rbp)
	movq	-8(%rbp), %rdx
	movq	(%rdx), %rsi
	movq	56(%rsi), %rsi
	movsbl	-9(%rbp), %edi
Ltmp2:
	movl	%edi, -100(%rbp)        ## 4-byte Spill
	movq	%rdx, %rdi
	movl	-100(%rbp), %r8d        ## 4-byte Reload
	movq	%rsi, -112(%rbp)        ## 8-byte Spill
	movl	%r8d, %esi
	movq	-112(%rbp), %rdx        ## 8-byte Reload
	callq	*%rdx
Ltmp3:
	movb	%al, -113(%rbp)         ## 1-byte Spill
	jmp	LBB2_3
LBB2_2:
Ltmp4:
	leaq	-48(%rbp), %rdi
	movl	%edx, %ecx
	movq	%rax, -56(%rbp)
	movl	%ecx, -60(%rbp)
	callq	__ZNSt3__16localeD1Ev
	movq	-56(%rbp), %rdi
	callq	__Unwind_Resume
LBB2_3:
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movq	-80(%rbp), %rdi         ## 8-byte Reload
	movb	-113(%rbp), %al         ## 1-byte Reload
	movsbl	%al, %esi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc
	movq	-72(%rbp), %rdi
	movq	%rax, -128(%rbp)        ## 8-byte Spill
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv
	movq	-72(%rbp), %rdi
	movq	%rax, -136(%rbp)        ## 8-byte Spill
	movq	%rdi, %rax
	addq	$144, %rsp
	popq	%rbp
	retq
Lfunc_end0:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table2:
Lexception0:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset0 = Lfunc_begin0-Lfunc_begin0       ## >> Call Site 1 <<
	.long	Lset0
Lset1 = Ltmp0-Lfunc_begin0              ##   Call between Lfunc_begin0 and Ltmp0
	.long	Lset1
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset2 = Ltmp0-Lfunc_begin0              ## >> Call Site 2 <<
	.long	Lset2
Lset3 = Ltmp3-Ltmp0                     ##   Call between Ltmp0 and Ltmp3
	.long	Lset3
Lset4 = Ltmp4-Lfunc_begin0              ##     jumps to Ltmp4
	.long	Lset4
	.byte	0                       ##   On action: cleanup
Lset5 = Ltmp3-Lfunc_begin0              ## >> Call Site 3 <<
	.long	Lset5
Lset6 = Lfunc_end0-Ltmp3                ##   Call between Ltmp3 and Lfunc_end0
	.long	Lset6
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m ## -- Begin function _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.weak_definition	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.p2align	4, 0x90
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m: ## @_ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
Lfunc_begin1:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception1
## BB#0:
	pushq	%rbp
Lcfi9:
	.cfi_def_cfa_offset 16
Lcfi10:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi11:
	.cfi_def_cfa_register %rbp
	subq	$384, %rsp              ## imm = 0x180
	movq	%rdi, -184(%rbp)
	movq	%rsi, -192(%rbp)
	movq	%rdx, -200(%rbp)
	movq	-184(%rbp), %rsi
Ltmp5:
	leaq	-216(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_
Ltmp6:
	jmp	LBB3_1
LBB3_1:
	leaq	-216(%rbp), %rax
	movq	%rax, -176(%rbp)
	movq	-176(%rbp), %rax
	movb	(%rax), %cl
	movb	%cl, -249(%rbp)         ## 1-byte Spill
## BB#2:
	movb	-249(%rbp), %al         ## 1-byte Reload
	testb	$1, %al
	jne	LBB3_3
	jmp	LBB3_26
LBB3_3:
	leaq	-248(%rbp), %rax
	movq	-184(%rbp), %rcx
	movq	%rax, -160(%rbp)
	movq	%rcx, -168(%rbp)
	movq	-160(%rbp), %rax
	movq	-168(%rbp), %rcx
	movq	%rax, -144(%rbp)
	movq	%rcx, -152(%rbp)
	movq	-144(%rbp), %rax
	movq	-152(%rbp), %rcx
	movq	(%rcx), %rdx
	movq	-24(%rdx), %rdx
	addq	%rdx, %rcx
	movq	%rcx, -136(%rbp)
	movq	-136(%rbp), %rcx
	movq	%rcx, -128(%rbp)
	movq	-128(%rbp), %rcx
	movq	40(%rcx), %rcx
	movq	%rcx, (%rax)
	movq	-192(%rbp), %rsi
	movq	-184(%rbp), %rax
	movq	(%rax), %rcx
	movq	-24(%rcx), %rcx
	addq	%rcx, %rax
	movq	%rax, -88(%rbp)
	movq	-88(%rbp), %rax
	movl	8(%rax), %edi
	movq	%rsi, -264(%rbp)        ## 8-byte Spill
	movl	%edi, -268(%rbp)        ## 4-byte Spill
## BB#4:
	movl	-268(%rbp), %eax        ## 4-byte Reload
	andl	$176, %eax
	cmpl	$32, %eax
	jne	LBB3_6
## BB#5:
	movq	-192(%rbp), %rax
	addq	-200(%rbp), %rax
	movq	%rax, -280(%rbp)        ## 8-byte Spill
	jmp	LBB3_7
LBB3_6:
	movq	-192(%rbp), %rax
	movq	%rax, -280(%rbp)        ## 8-byte Spill
LBB3_7:
	movq	-280(%rbp), %rax        ## 8-byte Reload
	movq	-192(%rbp), %rcx
	addq	-200(%rbp), %rcx
	movq	-184(%rbp), %rdx
	movq	(%rdx), %rsi
	movq	-24(%rsi), %rsi
	addq	%rsi, %rdx
	movq	-184(%rbp), %rsi
	movq	(%rsi), %rdi
	movq	-24(%rdi), %rdi
	addq	%rdi, %rsi
	movq	%rsi, -72(%rbp)
	movq	-72(%rbp), %rsi
	movq	%rax, -288(%rbp)        ## 8-byte Spill
	movq	%rcx, -296(%rbp)        ## 8-byte Spill
	movq	%rdx, -304(%rbp)        ## 8-byte Spill
	movq	%rsi, -312(%rbp)        ## 8-byte Spill
	callq	__ZNSt3__111char_traitsIcE3eofEv
	movq	-312(%rbp), %rcx        ## 8-byte Reload
	movl	144(%rcx), %esi
	movl	%eax, %edi
	callq	__ZNSt3__111char_traitsIcE11eq_int_typeEii
	testb	$1, %al
	jne	LBB3_8
	jmp	LBB3_13
LBB3_8:
	movq	-312(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -32(%rbp)
	movb	$32, -33(%rbp)
	movq	-32(%rbp), %rsi
Ltmp8:
	leaq	-48(%rbp), %rdi
	callq	__ZNKSt3__18ios_base6getlocEv
Ltmp9:
	jmp	LBB3_9
LBB3_9:
	leaq	-48(%rbp), %rax
	movq	%rax, -24(%rbp)
	movq	-24(%rbp), %rdi
Ltmp10:
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %rsi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp11:
	movq	%rax, -320(%rbp)        ## 8-byte Spill
	jmp	LBB3_10
LBB3_10:
	movb	-33(%rbp), %al
	movq	-320(%rbp), %rcx        ## 8-byte Reload
	movq	%rcx, -8(%rbp)
	movb	%al, -9(%rbp)
	movq	-8(%rbp), %rdx
	movq	(%rdx), %rsi
	movq	56(%rsi), %rsi
	movsbl	-9(%rbp), %edi
Ltmp12:
	movl	%edi, -324(%rbp)        ## 4-byte Spill
	movq	%rdx, %rdi
	movl	-324(%rbp), %r8d        ## 4-byte Reload
	movq	%rsi, -336(%rbp)        ## 8-byte Spill
	movl	%r8d, %esi
	movq	-336(%rbp), %rdx        ## 8-byte Reload
	callq	*%rdx
Ltmp13:
	movb	%al, -337(%rbp)         ## 1-byte Spill
	jmp	LBB3_12
LBB3_11:
Ltmp14:
	movl	%edx, %ecx
	movq	%rax, -56(%rbp)
	movl	%ecx, -60(%rbp)
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movq	-56(%rbp), %rax
	movl	-60(%rbp), %ecx
	movq	%rax, -352(%rbp)        ## 8-byte Spill
	movl	%ecx, -356(%rbp)        ## 4-byte Spill
	jmp	LBB3_21
LBB3_12:
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movb	-337(%rbp), %al         ## 1-byte Reload
	movsbl	%al, %ecx
	movq	-312(%rbp), %rdi        ## 8-byte Reload
	movl	%ecx, 144(%rdi)
LBB3_13:
	movq	-312(%rbp), %rax        ## 8-byte Reload
	movl	144(%rax), %ecx
	movb	%cl, %dl
	movb	%dl, -357(%rbp)         ## 1-byte Spill
## BB#14:
	movq	-248(%rbp), %rdi
Ltmp15:
	movb	-357(%rbp), %al         ## 1-byte Reload
	movsbl	%al, %r9d
	movq	-264(%rbp), %rsi        ## 8-byte Reload
	movq	-288(%rbp), %rdx        ## 8-byte Reload
	movq	-296(%rbp), %rcx        ## 8-byte Reload
	movq	-304(%rbp), %r8         ## 8-byte Reload
	callq	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Ltmp16:
	movq	%rax, -368(%rbp)        ## 8-byte Spill
	jmp	LBB3_15
LBB3_15:
	leaq	-240(%rbp), %rax
	movq	-368(%rbp), %rcx        ## 8-byte Reload
	movq	%rcx, -240(%rbp)
	movq	%rax, -80(%rbp)
	movq	-80(%rbp), %rax
	cmpq	$0, (%rax)
	jne	LBB3_25
## BB#16:
	movq	-184(%rbp), %rax
	movq	(%rax), %rcx
	movq	-24(%rcx), %rcx
	addq	%rcx, %rax
	movq	%rax, -112(%rbp)
	movl	$5, -116(%rbp)
	movq	-112(%rbp), %rax
	movl	-116(%rbp), %edx
	movq	%rax, -96(%rbp)
	movl	%edx, -100(%rbp)
	movq	-96(%rbp), %rax
	movl	32(%rax), %edx
	movl	-100(%rbp), %esi
	orl	%esi, %edx
Ltmp17:
	movq	%rax, %rdi
	movl	%edx, %esi
	callq	__ZNSt3__18ios_base5clearEj
Ltmp18:
	jmp	LBB3_17
LBB3_17:
	jmp	LBB3_18
LBB3_18:
	jmp	LBB3_25
LBB3_19:
Ltmp7:
	movl	%edx, %ecx
	movq	%rax, -224(%rbp)
	movl	%ecx, -228(%rbp)
	jmp	LBB3_22
LBB3_20:
Ltmp19:
	movl	%edx, %ecx
	movq	%rax, -352(%rbp)        ## 8-byte Spill
	movl	%ecx, -356(%rbp)        ## 4-byte Spill
	jmp	LBB3_21
LBB3_21:
	movl	-356(%rbp), %eax        ## 4-byte Reload
	movq	-352(%rbp), %rcx        ## 8-byte Reload
	leaq	-216(%rbp), %rdi
	movq	%rcx, -224(%rbp)
	movl	%eax, -228(%rbp)
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
LBB3_22:
	movq	-224(%rbp), %rdi
	callq	___cxa_begin_catch
	movq	-184(%rbp), %rdi
	movq	(%rdi), %rcx
	movq	-24(%rcx), %rcx
	addq	%rcx, %rdi
Ltmp20:
	movq	%rax, -376(%rbp)        ## 8-byte Spill
	callq	__ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv
Ltmp21:
	jmp	LBB3_23
LBB3_23:
	callq	___cxa_end_catch
LBB3_24:
	movq	-184(%rbp), %rax
	addq	$384, %rsp              ## imm = 0x180
	popq	%rbp
	retq
LBB3_25:
	jmp	LBB3_26
LBB3_26:
	leaq	-216(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
	jmp	LBB3_24
LBB3_27:
Ltmp22:
	movl	%edx, %ecx
	movq	%rax, -224(%rbp)
	movl	%ecx, -228(%rbp)
Ltmp23:
	callq	___cxa_end_catch
Ltmp24:
	jmp	LBB3_28
LBB3_28:
	jmp	LBB3_29
LBB3_29:
	movq	-224(%rbp), %rdi
	callq	__Unwind_Resume
LBB3_30:
Ltmp25:
	movl	%edx, %ecx
	movq	%rax, %rdi
	movl	%ecx, -380(%rbp)        ## 4-byte Spill
	callq	___clang_call_terminate
Lfunc_end1:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table3:
Lexception1:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.asciz	"\201\201\200\200"      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	117                     ## Call site table length
Lset7 = Ltmp5-Lfunc_begin1              ## >> Call Site 1 <<
	.long	Lset7
Lset8 = Ltmp6-Ltmp5                     ##   Call between Ltmp5 and Ltmp6
	.long	Lset8
Lset9 = Ltmp7-Lfunc_begin1              ##     jumps to Ltmp7
	.long	Lset9
	.byte	5                       ##   On action: 3
Lset10 = Ltmp8-Lfunc_begin1             ## >> Call Site 2 <<
	.long	Lset10
Lset11 = Ltmp9-Ltmp8                    ##   Call between Ltmp8 and Ltmp9
	.long	Lset11
Lset12 = Ltmp19-Lfunc_begin1            ##     jumps to Ltmp19
	.long	Lset12
	.byte	5                       ##   On action: 3
Lset13 = Ltmp10-Lfunc_begin1            ## >> Call Site 3 <<
	.long	Lset13
Lset14 = Ltmp13-Ltmp10                  ##   Call between Ltmp10 and Ltmp13
	.long	Lset14
Lset15 = Ltmp14-Lfunc_begin1            ##     jumps to Ltmp14
	.long	Lset15
	.byte	3                       ##   On action: 2
Lset16 = Ltmp15-Lfunc_begin1            ## >> Call Site 4 <<
	.long	Lset16
Lset17 = Ltmp18-Ltmp15                  ##   Call between Ltmp15 and Ltmp18
	.long	Lset17
Lset18 = Ltmp19-Lfunc_begin1            ##     jumps to Ltmp19
	.long	Lset18
	.byte	5                       ##   On action: 3
Lset19 = Ltmp18-Lfunc_begin1            ## >> Call Site 5 <<
	.long	Lset19
Lset20 = Ltmp20-Ltmp18                  ##   Call between Ltmp18 and Ltmp20
	.long	Lset20
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset21 = Ltmp20-Lfunc_begin1            ## >> Call Site 6 <<
	.long	Lset21
Lset22 = Ltmp21-Ltmp20                  ##   Call between Ltmp20 and Ltmp21
	.long	Lset22
Lset23 = Ltmp22-Lfunc_begin1            ##     jumps to Ltmp22
	.long	Lset23
	.byte	0                       ##   On action: cleanup
Lset24 = Ltmp21-Lfunc_begin1            ## >> Call Site 7 <<
	.long	Lset24
Lset25 = Ltmp23-Ltmp21                  ##   Call between Ltmp21 and Ltmp23
	.long	Lset25
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset26 = Ltmp23-Lfunc_begin1            ## >> Call Site 8 <<
	.long	Lset26
Lset27 = Ltmp24-Ltmp23                  ##   Call between Ltmp23 and Ltmp24
	.long	Lset27
Lset28 = Ltmp25-Lfunc_begin1            ##     jumps to Ltmp25
	.long	Lset28
	.byte	5                       ##   On action: 3
Lset29 = Ltmp24-Lfunc_begin1            ## >> Call Site 9 <<
	.long	Lset29
Lset30 = Lfunc_end1-Ltmp24              ##   Call between Ltmp24 and Lfunc_end1
	.long	Lset30
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.byte	0                       ## >> Action Record 1 <<
                                        ##   Cleanup
	.byte	0                       ##   No further actions
	.byte	1                       ## >> Action Record 2 <<
                                        ##   Catch TypeInfo 1
	.byte	125                     ##   Continue to action 1
	.byte	1                       ## >> Action Record 3 <<
                                        ##   Catch TypeInfo 1
	.byte	0                       ##   No further actions
                                        ## >> Catch TypeInfos <<
	.long	0                       ## TypeInfo 1
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZNSt3__111char_traitsIcE6lengthEPKc ## -- Begin function _ZNSt3__111char_traitsIcE6lengthEPKc
	.weak_definition	__ZNSt3__111char_traitsIcE6lengthEPKc
	.p2align	4, 0x90
__ZNSt3__111char_traitsIcE6lengthEPKc:  ## @_ZNSt3__111char_traitsIcE6lengthEPKc
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi12:
	.cfi_def_cfa_offset 16
Lcfi13:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi14:
	.cfi_def_cfa_register %rbp
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movq	-8(%rbp), %rdi
	callq	_strlen
	addq	$16, %rsp
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.private_extern	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ ## -- Begin function _ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.globl	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.weak_definition	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.p2align	4, 0x90
__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_: ## @_ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Lfunc_begin2:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception2
## BB#0:
	pushq	%rbp
Lcfi15:
	.cfi_def_cfa_offset 16
Lcfi16:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi17:
	.cfi_def_cfa_register %rbp
	subq	$480, %rsp              ## imm = 0x1E0
	movb	%r9b, %al
	movq	%rdi, -320(%rbp)
	movq	%rsi, -328(%rbp)
	movq	%rdx, -336(%rbp)
	movq	%rcx, -344(%rbp)
	movq	%r8, -352(%rbp)
	movb	%al, -353(%rbp)
	cmpq	$0, -320(%rbp)
	jne	LBB5_2
## BB#1:
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	jmp	LBB5_26
LBB5_2:
	movq	-344(%rbp), %rax
	movq	-328(%rbp), %rcx
	subq	%rcx, %rax
	movq	%rax, -368(%rbp)
	movq	-352(%rbp), %rax
	movq	%rax, -304(%rbp)
	movq	-304(%rbp), %rax
	movq	24(%rax), %rax
	movq	%rax, -376(%rbp)
	movq	-376(%rbp), %rax
	cmpq	-368(%rbp), %rax
	jle	LBB5_4
## BB#3:
	movq	-368(%rbp), %rax
	movq	-376(%rbp), %rcx
	subq	%rax, %rcx
	movq	%rcx, -376(%rbp)
	jmp	LBB5_5
LBB5_4:
	movq	$0, -376(%rbp)
LBB5_5:
	movq	-336(%rbp), %rax
	movq	-328(%rbp), %rcx
	subq	%rcx, %rax
	movq	%rax, -384(%rbp)
	cmpq	$0, -384(%rbp)
	jle	LBB5_9
## BB#6:
	movq	-320(%rbp), %rax
	movq	-328(%rbp), %rcx
	movq	-384(%rbp), %rdx
	movq	%rax, -232(%rbp)
	movq	%rcx, -240(%rbp)
	movq	%rdx, -248(%rbp)
	movq	-232(%rbp), %rax
	movq	(%rax), %rcx
	movq	96(%rcx), %rcx
	movq	-240(%rbp), %rsi
	movq	-248(%rbp), %rdx
	movq	%rax, %rdi
	callq	*%rcx
	cmpq	-384(%rbp), %rax
	je	LBB5_8
## BB#7:
	movq	$0, -320(%rbp)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	jmp	LBB5_26
LBB5_8:
	jmp	LBB5_9
LBB5_9:
	cmpq	$0, -376(%rbp)
	jle	LBB5_21
## BB#10:
	xorl	%esi, %esi
	movl	$24, %eax
	movl	%eax, %edx
	leaq	-408(%rbp), %rcx
	movq	-376(%rbp), %rdi
	movb	-353(%rbp), %r8b
	movq	%rcx, -208(%rbp)
	movq	%rdi, -216(%rbp)
	movb	%r8b, -217(%rbp)
	movq	-208(%rbp), %rcx
	movq	-216(%rbp), %rdi
	movb	-217(%rbp), %r8b
	movq	%rcx, -184(%rbp)
	movq	%rdi, -192(%rbp)
	movb	%r8b, -193(%rbp)
	movq	-184(%rbp), %rcx
	movq	%rcx, -176(%rbp)
	movq	-176(%rbp), %rdi
	movq	%rdi, -168(%rbp)
	movq	-168(%rbp), %rdi
	movq	%rdi, %r9
	movq	%r9, -160(%rbp)
	movq	-160(%rbp), %r9
	movq	%rdi, -432(%rbp)        ## 8-byte Spill
	movq	%r9, %rdi
	movq	%rcx, -440(%rbp)        ## 8-byte Spill
	callq	_memset
	movq	-432(%rbp), %rcx        ## 8-byte Reload
	movq	%rcx, -152(%rbp)
	movq	-152(%rbp), %rcx
	movq	%rcx, -144(%rbp)
	movq	-192(%rbp), %rsi
	movq	-440(%rbp), %rdi        ## 8-byte Reload
	movsbl	-193(%rbp), %edx
	callq	__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc
	leaq	-408(%rbp), %rcx
	movq	-320(%rbp), %rsi
	movq	%rcx, -136(%rbp)
	movq	-136(%rbp), %rcx
	movq	%rcx, -128(%rbp)
	movq	-128(%rbp), %rcx
	movq	%rcx, -120(%rbp)
	movq	-120(%rbp), %rdi
	movq	%rdi, -112(%rbp)
	movq	-112(%rbp), %rdi
	movq	%rdi, -104(%rbp)
	movq	-104(%rbp), %rdi
	movzbl	(%rdi), %eax
	movl	%eax, %edi
	andq	$1, %rdi
	cmpq	$0, %rdi
	movq	%rsi, -448(%rbp)        ## 8-byte Spill
	movq	%rcx, -456(%rbp)        ## 8-byte Spill
	je	LBB5_12
## BB#11:
	movq	-456(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -56(%rbp)
	movq	-56(%rbp), %rcx
	movq	%rcx, -48(%rbp)
	movq	-48(%rbp), %rcx
	movq	%rcx, -40(%rbp)
	movq	-40(%rbp), %rcx
	movq	16(%rcx), %rcx
	movq	%rcx, -464(%rbp)        ## 8-byte Spill
	jmp	LBB5_13
LBB5_12:
	movq	-456(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -96(%rbp)
	movq	-96(%rbp), %rcx
	movq	%rcx, -88(%rbp)
	movq	-88(%rbp), %rcx
	movq	%rcx, -80(%rbp)
	movq	-80(%rbp), %rcx
	addq	$1, %rcx
	movq	%rcx, -72(%rbp)
	movq	-72(%rbp), %rcx
	movq	%rcx, -64(%rbp)
	movq	-64(%rbp), %rcx
	movq	%rcx, -464(%rbp)        ## 8-byte Spill
LBB5_13:
	movq	-464(%rbp), %rax        ## 8-byte Reload
	movq	%rax, -32(%rbp)
	movq	-32(%rbp), %rax
	movq	-376(%rbp), %rcx
	movq	-448(%rbp), %rdx        ## 8-byte Reload
	movq	%rdx, -8(%rbp)
	movq	%rax, -16(%rbp)
	movq	%rcx, -24(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rcx
	movq	96(%rcx), %rcx
	movq	-16(%rbp), %rsi
	movq	-24(%rbp), %rdx
Ltmp26:
	movq	%rax, %rdi
	callq	*%rcx
Ltmp27:
	movq	%rax, -472(%rbp)        ## 8-byte Spill
	jmp	LBB5_14
LBB5_14:
	jmp	LBB5_15
LBB5_15:
	movq	-472(%rbp), %rax        ## 8-byte Reload
	cmpq	-376(%rbp), %rax
	je	LBB5_18
## BB#16:
	movq	$0, -320(%rbp)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	movl	$1, -424(%rbp)
	jmp	LBB5_19
LBB5_17:
Ltmp28:
	leaq	-408(%rbp), %rdi
	movl	%edx, %ecx
	movq	%rax, -416(%rbp)
	movl	%ecx, -420(%rbp)
	callq	__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
	jmp	LBB5_27
LBB5_18:
	movl	$0, -424(%rbp)
LBB5_19:
	leaq	-408(%rbp), %rdi
	callq	__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
	movl	-424(%rbp), %eax
	testl	%eax, %eax
	movl	%eax, -476(%rbp)        ## 4-byte Spill
	je	LBB5_20
	jmp	LBB5_29
LBB5_29:
	movl	-476(%rbp), %eax        ## 4-byte Reload
	subl	$1, %eax
	movl	%eax, -480(%rbp)        ## 4-byte Spill
	je	LBB5_26
	jmp	LBB5_28
LBB5_20:
	jmp	LBB5_21
LBB5_21:
	movq	-344(%rbp), %rax
	movq	-336(%rbp), %rcx
	subq	%rcx, %rax
	movq	%rax, -384(%rbp)
	cmpq	$0, -384(%rbp)
	jle	LBB5_25
## BB#22:
	movq	-320(%rbp), %rax
	movq	-336(%rbp), %rcx
	movq	-384(%rbp), %rdx
	movq	%rax, -256(%rbp)
	movq	%rcx, -264(%rbp)
	movq	%rdx, -272(%rbp)
	movq	-256(%rbp), %rax
	movq	(%rax), %rcx
	movq	96(%rcx), %rcx
	movq	-264(%rbp), %rsi
	movq	-272(%rbp), %rdx
	movq	%rax, %rdi
	callq	*%rcx
	cmpq	-384(%rbp), %rax
	je	LBB5_24
## BB#23:
	movq	$0, -320(%rbp)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
	jmp	LBB5_26
LBB5_24:
	jmp	LBB5_25
LBB5_25:
	movq	-352(%rbp), %rax
	movq	%rax, -280(%rbp)
	movq	$0, -288(%rbp)
	movq	-280(%rbp), %rax
	movq	24(%rax), %rcx
	movq	%rcx, -296(%rbp)
	movq	-288(%rbp), %rcx
	movq	%rcx, 24(%rax)
	movq	-320(%rbp), %rax
	movq	%rax, -312(%rbp)
LBB5_26:
	movq	-312(%rbp), %rax
	addq	$480, %rsp              ## imm = 0x1E0
	popq	%rbp
	retq
LBB5_27:
	movq	-416(%rbp), %rdi
	callq	__Unwind_Resume
LBB5_28:
Lfunc_end2:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table5:
Lexception2:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset31 = Lfunc_begin2-Lfunc_begin2      ## >> Call Site 1 <<
	.long	Lset31
Lset32 = Ltmp26-Lfunc_begin2            ##   Call between Lfunc_begin2 and Ltmp26
	.long	Lset32
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset33 = Ltmp26-Lfunc_begin2            ## >> Call Site 2 <<
	.long	Lset33
Lset34 = Ltmp27-Ltmp26                  ##   Call between Ltmp26 and Ltmp27
	.long	Lset34
Lset35 = Ltmp28-Lfunc_begin2            ##     jumps to Ltmp28
	.long	Lset35
	.byte	0                       ##   On action: cleanup
Lset36 = Ltmp27-Lfunc_begin2            ## >> Call Site 3 <<
	.long	Lset36
Lset37 = Lfunc_end2-Ltmp27              ##   Call between Ltmp27 and Lfunc_end2
	.long	Lset37
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.private_extern	___clang_call_terminate ## -- Begin function __clang_call_terminate
	.globl	___clang_call_terminate
	.weak_definition	___clang_call_terminate
	.p2align	4, 0x90
___clang_call_terminate:                ## @__clang_call_terminate
## BB#0:
	pushq	%rax
	callq	___cxa_begin_catch
	movq	%rax, (%rsp)            ## 8-byte Spill
	callq	__ZSt9terminatev
                                        ## -- End function
	.globl	__ZNSt3__111char_traitsIcE11eq_int_typeEii ## -- Begin function _ZNSt3__111char_traitsIcE11eq_int_typeEii
	.weak_definition	__ZNSt3__111char_traitsIcE11eq_int_typeEii
	.p2align	4, 0x90
__ZNSt3__111char_traitsIcE11eq_int_typeEii: ## @_ZNSt3__111char_traitsIcE11eq_int_typeEii
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi18:
	.cfi_def_cfa_offset 16
Lcfi19:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi20:
	.cfi_def_cfa_register %rbp
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	movl	-4(%rbp), %esi
	cmpl	-8(%rbp), %esi
	sete	%al
	andb	$1, %al
	movzbl	%al, %eax
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.globl	__ZNSt3__111char_traitsIcE3eofEv ## -- Begin function _ZNSt3__111char_traitsIcE3eofEv
	.weak_definition	__ZNSt3__111char_traitsIcE3eofEv
	.p2align	4, 0x90
__ZNSt3__111char_traitsIcE3eofEv:       ## @_ZNSt3__111char_traitsIcE3eofEv
	.cfi_startproc
## BB#0:
	pushq	%rbp
Lcfi21:
	.cfi_def_cfa_offset 16
Lcfi22:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi23:
	.cfi_def_cfa_register %rbp
	movl	$4294967295, %eax       ## imm = 0xFFFFFFFF
	popq	%rbp
	retq
	.cfi_endproc
                                        ## -- End function
	.section	__TEXT,__const
	.p2align	2               ## @_ZZ4mainE5array
l__ZZ4mainE5array:
	.long	2700                    ## 0xa8c
	.long	2314                    ## 0x90a
	.long	8429                    ## 0x20ed
	.long	7726                    ## 0x1e2e
	.long	4817                    ## 0x12d1
	.long	8716                    ## 0x220c
	.long	3598                    ## 0xe0e
	.long	6255                    ## 0x186f
	.long	5056                    ## 0x13c0
	.long	8653                    ## 0x21cd
	.long	8571                    ## 0x217b
	.long	5028                    ## 0x13a4
	.long	1259                    ## 0x4eb
	.long	3315                    ## 0xcf3
	.long	2896                    ## 0xb50
	.long	1411                    ## 0x583
	.long	3847                    ## 0xf07
	.long	879                     ## 0x36f
	.long	7353                    ## 0x1cb9
	.long	8056                    ## 0x1f78
	.long	8765                    ## 0x223d
	.long	2344                    ## 0x928
	.long	6349                    ## 0x18cd
	.long	4156                    ## 0x103c
	.long	8350                    ## 0x209e
	.long	4164                    ## 0x1044
	.long	4783                    ## 0x12af
	.long	6800                    ## 0x1a90
	.long	8887                    ## 0x22b7
	.long	267                     ## 0x10b
	.long	4478                    ## 0x117e
	.long	6327                    ## 0x18b7
	.long	58                      ## 0x3a
	.long	7961                    ## 0x1f19
	.long	756                     ## 0x2f4
	.long	5654                    ## 0x1616
	.long	9546                    ## 0x254a
	.long	5132                    ## 0x140c
	.long	247                     ## 0xf7
	.long	5514                    ## 0x158a
	.long	7098                    ## 0x1bba
	.long	1156                    ## 0x484
	.long	795                     ## 0x31b
	.long	2502                    ## 0x9c6
	.long	367                     ## 0x16f
	.long	5330                    ## 0x14d2
	.long	2261                    ## 0x8d5
	.long	8692                    ## 0x21f4
	.long	2460                    ## 0x99c
	.long	4823                    ## 0x12d7
	.long	8968                    ## 0x2308
	.long	4976                    ## 0x1370
	.long	1929                    ## 0x789
	.long	1051                    ## 0x41b
	.long	9249                    ## 0x2421
	.long	9713                    ## 0x25f1
	.long	2803                    ## 0xaf3
	.long	1743                    ## 0x6cf
	.long	3681                    ## 0xe61
	.long	93                      ## 0x5d
	.long	4967                    ## 0x1367
	.long	2245                    ## 0x8c5
	.long	198                     ## 0xc6
	.long	896                     ## 0x380
	.long	6372                    ## 0x18e4
	.long	4413                    ## 0x113d
	.long	2615                    ## 0xa37
	.long	6130                    ## 0x17f2
	.long	5766                    ## 0x1686
	.long	5306                    ## 0x14ba
	.long	1236                    ## 0x4d4
	.long	888                     ## 0x378
	.long	8050                    ## 0x1f72
	.long	7080                    ## 0x1ba8
	.long	3460                    ## 0xd84
	.long	3473                    ## 0xd91
	.long	1720                    ## 0x6b8
	.long	3913                    ## 0xf49
	.long	3449                    ## 0xd79
	.long	8420                    ## 0x20e4
	.long	1814                    ## 0x716
	.long	1261                    ## 0x4ed
	.long	1368                    ## 0x558
	.long	167                     ## 0xa7
	.long	7938                    ## 0x1f02
	.long	4483                    ## 0x1183
	.long	4843                    ## 0x12eb
	.long	4682                    ## 0x124a
	.long	3301                    ## 0xce5
	.long	4038                    ## 0xfc6
	.long	709                     ## 0x2c5
	.long	8655                    ## 0x21cf
	.long	598                     ## 0x256
	.long	3857                    ## 0xf11
	.long	6285                    ## 0x188d
	.long	2961                    ## 0xb91
	.long	6817                    ## 0x1aa1
	.long	1031                    ## 0x407
	.long	4007                    ## 0xfa7
	.long	1392                    ## 0x570
	.long	5717                    ## 0x1655
	.long	5837                    ## 0x16cd
	.long	5695                    ## 0x163f
	.long	9511                    ## 0x2527
	.long	8891                    ## 0x22bb
	.long	7883                    ## 0x1ecb
	.long	7035                    ## 0x1b7b
	.long	2349                    ## 0x92d
	.long	5752                    ## 0x1678
	.long	3139                    ## 0xc43
	.long	2442                    ## 0x98a
	.long	3966                    ## 0xf7e
	.long	2007                    ## 0x7d7
	.long	9205                    ## 0x23f5
	.long	8434                    ## 0x20f2
	.long	5065                    ## 0x13c9
	.long	3795                    ## 0xed3
	.long	6890                    ## 0x1aea
	.long	2715                    ## 0xa9b
	.long	1                       ## 0x1
	.long	5106                    ## 0x13f2
	.long	5083                    ## 0x13db

	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.space	1

L_.str.1:                               ## @.str.1
	.asciz	"hello, world"


.subsections_via_symbols

複製程式碼

由於彙編太長,我們可以只關注 cmpl $1000, (%rax) 這一行比較,在第一份中出現了兩次與 1000 進行比較,而第二份中進行了一次,編譯器完美直譯了程式碼。然而在生產環境中我們是不和這樣釋出程式碼的,一般都會進行 O3 優化。所以當我們開啟優化後,彙編程式碼如下:

	.section	__TEXT,__text,regular,pure_instructions
	.macosx_version_min 10, 13
	.globl	_main                   ## -- Begin function main
	.p2align	4, 0x90
_main:                                  ## @main
Lfunc_begin0:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception0
## BB#0:
	pushq	%rbp
Lcfi0:
	.cfi_def_cfa_offset 16
Lcfi1:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi2:
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	subq	$504, %rsp              ## imm = 0x1F8
Lcfi3:
	.cfi_offset %rbx, -56
Lcfi4:
	.cfi_offset %r12, -48
Lcfi5:
	.cfi_offset %r13, -40
Lcfi6:
	.cfi_offset %r14, -32
Lcfi7:
	.cfi_offset %r15, -24
	leaq	l__ZZ4mainE5array(%rip), %rsi
	leaq	-536(%rbp), %rdi
	movl	$488, %edx              ## imm = 0x1E8
	callq	_memcpy
	movl	$2700, %eax             ## imm = 0xA8C
	movl	$4, %ebx
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %r14
	leaq	L_.str(%rip), %r15
	cmpl	$1001, %eax             ## imm = 0x3E9
	jl	LBB0_3
	jmp	LBB0_2
	.p2align	4, 0x90
LBB0_4:                                 ##   in Loop: Header=BB0_3 Depth=1
	movl	-536(%rbp,%rbx), %eax
	addq	$4, %rbx
	cmpl	$1001, %eax             ## imm = 0x3E9
	jl	LBB0_3
LBB0_2:
	xorl	%edx, %edx
	movq	%r14, %rdi
	movq	%r15, %rsi
	callq	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
LBB0_3:                                 ## =>This Inner Loop Header: Depth=1
	cmpq	$488, %rbx              ## imm = 0x1E8
	jne	LBB0_4
## BB#5:
	xorl	%r15d, %r15d
	leaq	-48(%rbp), %r13
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %r12
	.p2align	4, 0x90
LBB0_6:                                 ## =>This Inner Loop Header: Depth=1
	cmpl	$5330, -536(%rbp,%r15)  ## imm = 0x14D2
	jne	LBB0_10
## BB#7:                                ##   in Loop: Header=BB0_6 Depth=1
	movl	$12, %edx
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %rdi
	leaq	L_.str.1(%rip), %rsi
	callq	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	movq	%rax, %rbx
	movq	(%rbx), %rax
	movq	-24(%rax), %rsi
	addq	%rbx, %rsi
	movq	%r13, %rdi
	callq	__ZNKSt3__18ios_base6getlocEv
Ltmp0:
	movq	%r13, %rdi
	movq	%r12, %rsi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp1:
## BB#8:                                ##   in Loop: Header=BB0_6 Depth=1
	movq	(%rax), %rcx
Ltmp2:
	movl	$10, %esi
	movq	%rax, %rdi
	callq	*56(%rcx)
	movl	%eax, %r14d
Ltmp3:
## BB#9:                                ##   in Loop: Header=BB0_6 Depth=1
	movq	%r13, %rdi
	callq	__ZNSt3__16localeD1Ev
	movsbl	%r14b, %esi
	movq	%rbx, %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc
	movq	%rbx, %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv
LBB0_10:                                ##   in Loop: Header=BB0_6 Depth=1
	addq	$4, %r15
	cmpq	$488, %r15              ## imm = 0x1E8
	jne	LBB0_6
## BB#11:
	xorl	%eax, %eax
	addq	$504, %rsp              ## imm = 0x1F8
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	retq
LBB0_12:
Ltmp4:
	movq	%rax, %rbx
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movq	%rbx, %rdi
	callq	__Unwind_Resume
Lfunc_end0:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table0:
Lexception0:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset0 = Lfunc_begin0-Lfunc_begin0       ## >> Call Site 1 <<
	.long	Lset0
Lset1 = Ltmp0-Lfunc_begin0              ##   Call between Lfunc_begin0 and Ltmp0
	.long	Lset1
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset2 = Ltmp0-Lfunc_begin0              ## >> Call Site 2 <<
	.long	Lset2
Lset3 = Ltmp3-Ltmp0                     ##   Call between Ltmp0 and Ltmp3
	.long	Lset3
Lset4 = Ltmp4-Lfunc_begin0              ##     jumps to Ltmp4
	.long	Lset4
	.byte	0                       ##   On action: cleanup
Lset5 = Ltmp3-Lfunc_begin0              ## >> Call Site 3 <<
	.long	Lset5
Lset6 = Lfunc_end0-Ltmp3                ##   Call between Ltmp3 and Lfunc_end0
	.long	Lset6
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m ## -- Begin function _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.weak_def_can_be_hidden	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.p2align	4, 0x90
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m: ## @_ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
Lfunc_begin1:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception1
## BB#0:
	pushq	%rbp
Lcfi8:
	.cfi_def_cfa_offset 16
Lcfi9:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi10:
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	subq	$40, %rsp
Lcfi11:
	.cfi_offset %rbx, -56
Lcfi12:
	.cfi_offset %r12, -48
Lcfi13:
	.cfi_offset %r13, -40
Lcfi14:
	.cfi_offset %r14, -32
Lcfi15:
	.cfi_offset %r15, -24
	movq	%rdx, %r14
	movq	%rsi, %r15
	movq	%rdi, %rbx
Ltmp5:
	leaq	-80(%rbp), %rdi
	movq	%rbx, %rsi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_
Ltmp6:
## BB#1:
	cmpb	$0, -80(%rbp)
	je	LBB1_10
## BB#2:
	movq	(%rbx), %rax
	movq	-24(%rax), %rax
	leaq	(%rbx,%rax), %r12
	movq	40(%rbx,%rax), %rdi
	movl	8(%rbx,%rax), %r13d
	movl	144(%rbx,%rax), %eax
	cmpl	$-1, %eax
	jne	LBB1_7
## BB#3:
Ltmp8:
	movq	%rdi, -64(%rbp)         ## 8-byte Spill
	leaq	-56(%rbp), %rdi
	movq	%r12, %rsi
	callq	__ZNKSt3__18ios_base6getlocEv
Ltmp9:
## BB#4:
Ltmp10:
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %rsi
	leaq	-56(%rbp), %rdi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp11:
## BB#5:
	movq	(%rax), %rcx
Ltmp12:
	movl	$32, %esi
	movq	%rax, %rdi
	callq	*56(%rcx)
	movb	%al, -41(%rbp)          ## 1-byte Spill
Ltmp13:
## BB#6:
	leaq	-56(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movsbl	-41(%rbp), %eax         ## 1-byte Folded Reload
	movl	%eax, 144(%r12)
	movq	-64(%rbp), %rdi         ## 8-byte Reload
LBB1_7:
	addq	%r15, %r14
	andl	$176, %r13d
	cmpl	$32, %r13d
	movq	%r15, %rdx
	cmoveq	%r14, %rdx
Ltmp15:
	movsbl	%al, %r9d
	movq	%r15, %rsi
	movq	%r14, %rcx
	movq	%r12, %r8
	callq	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Ltmp16:
## BB#8:
	testq	%rax, %rax
	jne	LBB1_10
## BB#9:
	movq	(%rbx), %rax
	movq	-24(%rax), %rax
	leaq	(%rbx,%rax), %rdi
	movl	32(%rbx,%rax), %esi
	orl	$5, %esi
Ltmp18:
	callq	__ZNSt3__18ios_base5clearEj
Ltmp19:
LBB1_10:
	leaq	-80(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
LBB1_11:
	movq	%rbx, %rax
	addq	$40, %rsp
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	retq
LBB1_12:
Ltmp20:
	jmp	LBB1_15
LBB1_13:
Ltmp14:
	movq	%rax, %r14
	leaq	-56(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	jmp	LBB1_16
LBB1_14:
Ltmp17:
LBB1_15:
	movq	%rax, %r14
LBB1_16:
	leaq	-80(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
	jmp	LBB1_18
LBB1_17:
Ltmp7:
	movq	%rax, %r14
LBB1_18:
	movq	%r14, %rdi
	callq	___cxa_begin_catch
	movq	(%rbx), %rax
	movq	%rbx, %rdi
	addq	-24(%rax), %rdi
Ltmp21:
	callq	__ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv
Ltmp22:
## BB#19:
	callq	___cxa_end_catch
	jmp	LBB1_11
LBB1_20:
Ltmp23:
	movq	%rax, %rbx
Ltmp24:
	callq	___cxa_end_catch
Ltmp25:
## BB#21:
	movq	%rbx, %rdi
	callq	__Unwind_Resume
LBB1_22:
Ltmp26:
	movq	%rax, %rdi
	callq	___clang_call_terminate
Lfunc_end1:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table1:
Lexception1:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.asciz	"\213\201"              ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.ascii	"\202\001"              ## Call site table length
Lset7 = Ltmp5-Lfunc_begin1              ## >> Call Site 1 <<
	.long	Lset7
Lset8 = Ltmp6-Ltmp5                     ##   Call between Ltmp5 and Ltmp6
	.long	Lset8
Lset9 = Ltmp7-Lfunc_begin1              ##     jumps to Ltmp7
	.long	Lset9
	.byte	1                       ##   On action: 1
Lset10 = Ltmp8-Lfunc_begin1             ## >> Call Site 2 <<
	.long	Lset10
Lset11 = Ltmp9-Ltmp8                    ##   Call between Ltmp8 and Ltmp9
	.long	Lset11
Lset12 = Ltmp17-Lfunc_begin1            ##     jumps to Ltmp17
	.long	Lset12
	.byte	1                       ##   On action: 1
Lset13 = Ltmp10-Lfunc_begin1            ## >> Call Site 3 <<
	.long	Lset13
Lset14 = Ltmp13-Ltmp10                  ##   Call between Ltmp10 and Ltmp13
	.long	Lset14
Lset15 = Ltmp14-Lfunc_begin1            ##     jumps to Ltmp14
	.long	Lset15
	.byte	1                       ##   On action: 1
Lset16 = Ltmp15-Lfunc_begin1            ## >> Call Site 4 <<
	.long	Lset16
Lset17 = Ltmp16-Ltmp15                  ##   Call between Ltmp15 and Ltmp16
	.long	Lset17
Lset18 = Ltmp17-Lfunc_begin1            ##     jumps to Ltmp17
	.long	Lset18
	.byte	1                       ##   On action: 1
Lset19 = Ltmp18-Lfunc_begin1            ## >> Call Site 5 <<
	.long	Lset19
Lset20 = Ltmp19-Ltmp18                  ##   Call between Ltmp18 and Ltmp19
	.long	Lset20
Lset21 = Ltmp20-Lfunc_begin1            ##     jumps to Ltmp20
	.long	Lset21
	.byte	1                       ##   On action: 1
Lset22 = Ltmp19-Lfunc_begin1            ## >> Call Site 6 <<
	.long	Lset22
Lset23 = Ltmp21-Ltmp19                  ##   Call between Ltmp19 and Ltmp21
	.long	Lset23
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset24 = Ltmp21-Lfunc_begin1            ## >> Call Site 7 <<
	.long	Lset24
Lset25 = Ltmp22-Ltmp21                  ##   Call between Ltmp21 and Ltmp22
	.long	Lset25
Lset26 = Ltmp23-Lfunc_begin1            ##     jumps to Ltmp23
	.long	Lset26
	.byte	0                       ##   On action: cleanup
Lset27 = Ltmp22-Lfunc_begin1            ## >> Call Site 8 <<
	.long	Lset27
Lset28 = Ltmp24-Ltmp22                  ##   Call between Ltmp22 and Ltmp24
	.long	Lset28
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset29 = Ltmp24-Lfunc_begin1            ## >> Call Site 9 <<
	.long	Lset29
Lset30 = Ltmp25-Ltmp24                  ##   Call between Ltmp24 and Ltmp25
	.long	Lset30
Lset31 = Ltmp26-Lfunc_begin1            ##     jumps to Ltmp26
	.long	Lset31
	.byte	1                       ##   On action: 1
Lset32 = Ltmp25-Lfunc_begin1            ## >> Call Site 10 <<
	.long	Lset32
Lset33 = Lfunc_end1-Ltmp25              ##   Call between Ltmp25 and Lfunc_end1
	.long	Lset33
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.byte	1                       ## >> Action Record 1 <<
                                        ##   Catch TypeInfo 1
	.byte	0                       ##   No further actions
                                        ## >> Catch TypeInfos <<
	.long	0                       ## TypeInfo 1
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.private_extern	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ ## -- Begin function _ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.globl	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.weak_def_can_be_hidden	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.p2align	4, 0x90
__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_: ## @_ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Lfunc_begin2:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception2
## BB#0:
	pushq	%rbp
Lcfi16:
	.cfi_def_cfa_offset 16
Lcfi17:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi18:
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	subq	$72, %rsp
Lcfi19:
	.cfi_offset %rbx, -56
Lcfi20:
	.cfi_offset %r12, -48
Lcfi21:
	.cfi_offset %r13, -40
Lcfi22:
	.cfi_offset %r14, -32
Lcfi23:
	.cfi_offset %r15, -24
	movq	%r8, %r14
	movq	%rcx, %r12
	movq	%rdi, %r13
	testq	%r13, %r13
	je	LBB2_17
## BB#1:
	movl	%r9d, -44(%rbp)         ## 4-byte Spill
	movq	%r12, %rax
	subq	%rsi, %rax
	movq	24(%r14), %rcx
	xorl	%r15d, %r15d
	subq	%rax, %rcx
	cmovgq	%rcx, %r15
	movq	%rdx, -104(%rbp)        ## 8-byte Spill
	movq	%rdx, %rbx
	subq	%rsi, %rbx
	testq	%rbx, %rbx
	jle	LBB2_3
## BB#2:
	movq	(%r13), %rax
	movq	%r13, %rdi
	movq	%rbx, %rdx
	callq	*96(%rax)
	cmpq	%rbx, %rax
	jne	LBB2_17
LBB2_3:
	testq	%r15, %r15
	jle	LBB2_13
## BB#4:
	movq	%r12, -88(%rbp)         ## 8-byte Spill
	movq	%r14, -96(%rbp)         ## 8-byte Spill
	xorps	%xmm0, %xmm0
	movaps	%xmm0, -80(%rbp)
	movq	$0, -64(%rbp)
	cmpq	$23, %r15
	jae	LBB2_8
## BB#5:
	movl	%r15d, %eax
	addb	%al, %al
	movb	%al, -80(%rbp)
	leaq	-79(%rbp), %r14
	movq	%r14, %r12
	jmp	LBB2_9
LBB2_8:
	leaq	16(%r15), %rbx
	andq	$-16, %rbx
	movq	%rbx, %rdi
	callq	__Znwm
	movq	%rax, %r12
	movq	%r12, -64(%rbp)
	orq	$1, %rbx
	movq	%rbx, -80(%rbp)
	movq	%r15, -72(%rbp)
	leaq	-79(%rbp), %r14
LBB2_9:
	movl	-44(%rbp), %eax         ## 4-byte Reload
	movzbl	%al, %esi
	movq	%r12, %rdi
	movq	%r15, %rdx
	callq	_memset
	movb	$0, (%r12,%r15)
	testb	$1, -80(%rbp)
	cmovneq	-64(%rbp), %r14
	movq	(%r13), %rax
Ltmp27:
	movq	%r13, %rdi
	movq	%r14, %rsi
	movq	%r15, %rdx
	callq	*96(%rax)
	movq	%rax, %rbx
Ltmp28:
## BB#10:
	testb	$1, -80(%rbp)
	movq	-96(%rbp), %r14         ## 8-byte Reload
	movq	-88(%rbp), %r12         ## 8-byte Reload
	je	LBB2_12
## BB#11:
	movq	-64(%rbp), %rdi
	callq	__ZdlPv
LBB2_12:
	cmpq	%r15, %rbx
	jne	LBB2_17
LBB2_13:
	movq	-104(%rbp), %rsi        ## 8-byte Reload
	subq	%rsi, %r12
	testq	%r12, %r12
	jle	LBB2_15
## BB#14:
	movq	(%r13), %rax
	movq	%r13, %rdi
	movq	%r12, %rdx
	callq	*96(%rax)
	cmpq	%r12, %rax
	jne	LBB2_17
LBB2_15:
	movq	$0, 24(%r14)
	jmp	LBB2_18
LBB2_17:
	xorl	%r13d, %r13d
LBB2_18:
	movq	%r13, %rax
	addq	$72, %rsp
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	retq
LBB2_19:
Ltmp29:
	movq	%rax, %rbx
	testb	$1, -80(%rbp)
	je	LBB2_21
## BB#20:
	movq	-64(%rbp), %rdi
	callq	__ZdlPv
LBB2_21:
	movq	%rbx, %rdi
	callq	__Unwind_Resume
Lfunc_end2:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table2:
Lexception2:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset34 = Lfunc_begin2-Lfunc_begin2      ## >> Call Site 1 <<
	.long	Lset34
Lset35 = Ltmp27-Lfunc_begin2            ##   Call between Lfunc_begin2 and Ltmp27
	.long	Lset35
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset36 = Ltmp27-Lfunc_begin2            ## >> Call Site 2 <<
	.long	Lset36
Lset37 = Ltmp28-Ltmp27                  ##   Call between Ltmp27 and Ltmp28
	.long	Lset37
Lset38 = Ltmp29-Lfunc_begin2            ##     jumps to Ltmp29
	.long	Lset38
	.byte	0                       ##   On action: cleanup
Lset39 = Ltmp28-Lfunc_begin2            ## >> Call Site 3 <<
	.long	Lset39
Lset40 = Lfunc_end2-Ltmp28              ##   Call between Ltmp28 and Lfunc_end2
	.long	Lset40
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.private_extern	___clang_call_terminate ## -- Begin function __clang_call_terminate
	.globl	___clang_call_terminate
	.weak_def_can_be_hidden	___clang_call_terminate
	.p2align	4, 0x90
___clang_call_terminate:                ## @__clang_call_terminate
## BB#0:
	pushq	%rax
	callq	___cxa_begin_catch
	callq	__ZSt9terminatev
                                        ## -- End function
	.section	__TEXT,__const
	.p2align	2               ## @_ZZ4mainE5array
l__ZZ4mainE5array:
	.long	2700                    ## 0xa8c
	.long	2314                    ## 0x90a
	.long	8429                    ## 0x20ed
	.long	7726                    ## 0x1e2e
	.long	4817                    ## 0x12d1
	.long	8716                    ## 0x220c
	.long	3598                    ## 0xe0e
	.long	6255                    ## 0x186f
	.long	5056                    ## 0x13c0
	.long	8653                    ## 0x21cd
	.long	8571                    ## 0x217b
	.long	5028                    ## 0x13a4
	.long	1259                    ## 0x4eb
	.long	3315                    ## 0xcf3
	.long	2896                    ## 0xb50
	.long	1411                    ## 0x583
	.long	3847                    ## 0xf07
	.long	879                     ## 0x36f
	.long	7353                    ## 0x1cb9
	.long	8056                    ## 0x1f78
	.long	8765                    ## 0x223d
	.long	2344                    ## 0x928
	.long	6349                    ## 0x18cd
	.long	4156                    ## 0x103c
	.long	8350                    ## 0x209e
	.long	4164                    ## 0x1044
	.long	4783                    ## 0x12af
	.long	6800                    ## 0x1a90
	.long	8887                    ## 0x22b7
	.long	267                     ## 0x10b
	.long	4478                    ## 0x117e
	.long	6327                    ## 0x18b7
	.long	58                      ## 0x3a
	.long	7961                    ## 0x1f19
	.long	756                     ## 0x2f4
	.long	5654                    ## 0x1616
	.long	9546                    ## 0x254a
	.long	5132                    ## 0x140c
	.long	247                     ## 0xf7
	.long	5514                    ## 0x158a
	.long	7098                    ## 0x1bba
	.long	1156                    ## 0x484
	.long	795                     ## 0x31b
	.long	2502                    ## 0x9c6
	.long	367                     ## 0x16f
	.long	5330                    ## 0x14d2
	.long	2261                    ## 0x8d5
	.long	8692                    ## 0x21f4
	.long	2460                    ## 0x99c
	.long	4823                    ## 0x12d7
	.long	8968                    ## 0x2308
	.long	4976                    ## 0x1370
	.long	1929                    ## 0x789
	.long	1051                    ## 0x41b
	.long	9249                    ## 0x2421
	.long	9713                    ## 0x25f1
	.long	2803                    ## 0xaf3
	.long	1743                    ## 0x6cf
	.long	3681                    ## 0xe61
	.long	93                      ## 0x5d
	.long	4967                    ## 0x1367
	.long	2245                    ## 0x8c5
	.long	198                     ## 0xc6
	.long	896                     ## 0x380
	.long	6372                    ## 0x18e4
	.long	4413                    ## 0x113d
	.long	2615                    ## 0xa37
	.long	6130                    ## 0x17f2
	.long	5766                    ## 0x1686
	.long	5306                    ## 0x14ba
	.long	1236                    ## 0x4d4
	.long	888                     ## 0x378
	.long	8050                    ## 0x1f72
	.long	7080                    ## 0x1ba8
	.long	3460                    ## 0xd84
	.long	3473                    ## 0xd91
	.long	1720                    ## 0x6b8
	.long	3913                    ## 0xf49
	.long	3449                    ## 0xd79
	.long	8420                    ## 0x20e4
	.long	1814                    ## 0x716
	.long	1261                    ## 0x4ed
	.long	1368                    ## 0x558
	.long	167                     ## 0xa7
	.long	7938                    ## 0x1f02
	.long	4483                    ## 0x1183
	.long	4843                    ## 0x12eb
	.long	4682                    ## 0x124a
	.long	3301                    ## 0xce5
	.long	4038                    ## 0xfc6
	.long	709                     ## 0x2c5
	.long	8655                    ## 0x21cf
	.long	598                     ## 0x256
	.long	3857                    ## 0xf11
	.long	6285                    ## 0x188d
	.long	2961                    ## 0xb91
	.long	6817                    ## 0x1aa1
	.long	1031                    ## 0x407
	.long	4007                    ## 0xfa7
	.long	1392                    ## 0x570
	.long	5717                    ## 0x1655
	.long	5837                    ## 0x16cd
	.long	5695                    ## 0x163f
	.long	9511                    ## 0x2527
	.long	8891                    ## 0x22bb
	.long	7883                    ## 0x1ecb
	.long	7035                    ## 0x1b7b
	.long	2349                    ## 0x92d
	.long	5752                    ## 0x1678
	.long	3139                    ## 0xc43
	.long	2442                    ## 0x98a
	.long	3966                    ## 0xf7e
	.long	2007                    ## 0x7d7
	.long	9205                    ## 0x23f5
	.long	8434                    ## 0x20f2
	.long	5065                    ## 0x13c9
	.long	3795                    ## 0xed3
	.long	6890                    ## 0x1aea
	.long	2715                    ## 0xa9b
	.long	1                       ## 0x1
	.long	5106                    ## 0x13f2
	.long	5083                    ## 0x13db

	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.space	1

L_.str.1:                               ## @.str.1
	.asciz	"hello, world"


.subsections_via_symbols

複製程式碼
	.section	__TEXT,__text,regular,pure_instructions
	.macosx_version_min 10, 13
	.globl	_main                   ## -- Begin function main
	.p2align	4, 0x90
_main:                                  ## @main
Lfunc_begin0:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception0
## BB#0:
	pushq	%rbp
Lcfi0:
	.cfi_def_cfa_offset 16
Lcfi1:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi2:
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	subq	$504, %rsp              ## imm = 0x1F8
Lcfi3:
	.cfi_offset %rbx, -56
Lcfi4:
	.cfi_offset %r12, -48
Lcfi5:
	.cfi_offset %r13, -40
Lcfi6:
	.cfi_offset %r14, -32
Lcfi7:
	.cfi_offset %r15, -24
	leaq	l__ZZ4mainE5array(%rip), %rsi
	leaq	-536(%rbp), %rdi
	movl	$488, %edx              ## imm = 0x1E8
	callq	_memcpy
	movl	$2700, %eax             ## imm = 0xA8C
	movl	$4, %r14d
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %r15
	leaq	L_.str(%rip), %rbx
	cmpl	$1001, %eax             ## imm = 0x3E9
	jl	LBB0_6
	jmp	LBB0_2
	.p2align	4, 0x90
LBB0_7:                                 ##   in Loop: Header=BB0_6 Depth=1
	movl	-536(%rbp,%r14), %eax
	addq	$4, %r14
	cmpl	$1001, %eax             ## imm = 0x3E9
	jl	LBB0_6
LBB0_2:
	xorl	%edx, %edx
	movq	%r15, %rdi
	movq	%rbx, %rsi
	callq	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	cmpl	$5330, -540(%rbp,%r14)  ## imm = 0x14D2
	jne	LBB0_6
## BB#3:
	movl	$12, %edx
	movq	%r15, %r12
	movq	%r15, %rdi
	leaq	L_.str.1(%rip), %rsi
	callq	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	movq	%rax, %r15
	movq	(%r15), %rax
	movq	-24(%rax), %rsi
	addq	%r15, %rsi
	leaq	-48(%rbp), %r13
	movq	%r13, %rdi
	callq	__ZNKSt3__18ios_base6getlocEv
Ltmp0:
	movq	%r13, %rdi
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %rsi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp1:
## BB#4:
	movq	(%rax), %rcx
Ltmp2:
	movl	$10, %esi
	movq	%rax, %rdi
	callq	*56(%rcx)
	movl	%eax, %r13d
Ltmp3:
## BB#5:
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movsbl	%r13b, %esi
	movq	%r15, %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc
	movq	%r15, %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv
	movq	%r12, %r15
LBB0_6:                                 ## =>This Inner Loop Header: Depth=1
	cmpq	$488, %r14              ## imm = 0x1E8
	jne	LBB0_7
## BB#8:
	xorl	%eax, %eax
	addq	$504, %rsp              ## imm = 0x1F8
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	retq
LBB0_9:
Ltmp4:
	movq	%rax, %rbx
	leaq	-48(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movq	%rbx, %rdi
	callq	__Unwind_Resume
Lfunc_end0:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table0:
Lexception0:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset0 = Lfunc_begin0-Lfunc_begin0       ## >> Call Site 1 <<
	.long	Lset0
Lset1 = Ltmp0-Lfunc_begin0              ##   Call between Lfunc_begin0 and Ltmp0
	.long	Lset1
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset2 = Ltmp0-Lfunc_begin0              ## >> Call Site 2 <<
	.long	Lset2
Lset3 = Ltmp3-Ltmp0                     ##   Call between Ltmp0 and Ltmp3
	.long	Lset3
Lset4 = Ltmp4-Lfunc_begin0              ##     jumps to Ltmp4
	.long	Lset4
	.byte	0                       ##   On action: cleanup
Lset5 = Ltmp3-Lfunc_begin0              ## >> Call Site 3 <<
	.long	Lset5
Lset6 = Lfunc_end0-Ltmp3                ##   Call between Ltmp3 and Lfunc_end0
	.long	Lset6
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.globl	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m ## -- Begin function _ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.weak_def_can_be_hidden	__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
	.p2align	4, 0x90
__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m: ## @_ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
Lfunc_begin1:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception1
## BB#0:
	pushq	%rbp
Lcfi8:
	.cfi_def_cfa_offset 16
Lcfi9:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi10:
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	subq	$40, %rsp
Lcfi11:
	.cfi_offset %rbx, -56
Lcfi12:
	.cfi_offset %r12, -48
Lcfi13:
	.cfi_offset %r13, -40
Lcfi14:
	.cfi_offset %r14, -32
Lcfi15:
	.cfi_offset %r15, -24
	movq	%rdx, %r14
	movq	%rsi, %r15
	movq	%rdi, %rbx
Ltmp5:
	leaq	-80(%rbp), %rdi
	movq	%rbx, %rsi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_
Ltmp6:
## BB#1:
	cmpb	$0, -80(%rbp)
	je	LBB1_10
## BB#2:
	movq	(%rbx), %rax
	movq	-24(%rax), %rax
	leaq	(%rbx,%rax), %r12
	movq	40(%rbx,%rax), %rdi
	movl	8(%rbx,%rax), %r13d
	movl	144(%rbx,%rax), %eax
	cmpl	$-1, %eax
	jne	LBB1_7
## BB#3:
Ltmp8:
	movq	%rdi, -64(%rbp)         ## 8-byte Spill
	leaq	-56(%rbp), %rdi
	movq	%r12, %rsi
	callq	__ZNKSt3__18ios_base6getlocEv
Ltmp9:
## BB#4:
Ltmp10:
	movq	__ZNSt3__15ctypeIcE2idE@GOTPCREL(%rip), %rsi
	leaq	-56(%rbp), %rdi
	callq	__ZNKSt3__16locale9use_facetERNS0_2idE
Ltmp11:
## BB#5:
	movq	(%rax), %rcx
Ltmp12:
	movl	$32, %esi
	movq	%rax, %rdi
	callq	*56(%rcx)
	movb	%al, -41(%rbp)          ## 1-byte Spill
Ltmp13:
## BB#6:
	leaq	-56(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	movsbl	-41(%rbp), %eax         ## 1-byte Folded Reload
	movl	%eax, 144(%r12)
	movq	-64(%rbp), %rdi         ## 8-byte Reload
LBB1_7:
	addq	%r15, %r14
	andl	$176, %r13d
	cmpl	$32, %r13d
	movq	%r15, %rdx
	cmoveq	%r14, %rdx
Ltmp15:
	movsbl	%al, %r9d
	movq	%r15, %rsi
	movq	%r14, %rcx
	movq	%r12, %r8
	callq	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Ltmp16:
## BB#8:
	testq	%rax, %rax
	jne	LBB1_10
## BB#9:
	movq	(%rbx), %rax
	movq	-24(%rax), %rax
	leaq	(%rbx,%rax), %rdi
	movl	32(%rbx,%rax), %esi
	orl	$5, %esi
Ltmp18:
	callq	__ZNSt3__18ios_base5clearEj
Ltmp19:
LBB1_10:
	leaq	-80(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
LBB1_11:
	movq	%rbx, %rax
	addq	$40, %rsp
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	retq
LBB1_12:
Ltmp20:
	jmp	LBB1_15
LBB1_13:
Ltmp14:
	movq	%rax, %r14
	leaq	-56(%rbp), %rdi
	callq	__ZNSt3__16localeD1Ev
	jmp	LBB1_16
LBB1_14:
Ltmp17:
LBB1_15:
	movq	%rax, %r14
LBB1_16:
	leaq	-80(%rbp), %rdi
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
	jmp	LBB1_18
LBB1_17:
Ltmp7:
	movq	%rax, %r14
LBB1_18:
	movq	%r14, %rdi
	callq	___cxa_begin_catch
	movq	(%rbx), %rax
	movq	%rbx, %rdi
	addq	-24(%rax), %rdi
Ltmp21:
	callq	__ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv
Ltmp22:
## BB#19:
	callq	___cxa_end_catch
	jmp	LBB1_11
LBB1_20:
Ltmp23:
	movq	%rax, %rbx
Ltmp24:
	callq	___cxa_end_catch
Ltmp25:
## BB#21:
	movq	%rbx, %rdi
	callq	__Unwind_Resume
LBB1_22:
Ltmp26:
	movq	%rax, %rdi
	callq	___clang_call_terminate
Lfunc_end1:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table1:
Lexception1:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.asciz	"\213\201"              ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.ascii	"\202\001"              ## Call site table length
Lset7 = Ltmp5-Lfunc_begin1              ## >> Call Site 1 <<
	.long	Lset7
Lset8 = Ltmp6-Ltmp5                     ##   Call between Ltmp5 and Ltmp6
	.long	Lset8
Lset9 = Ltmp7-Lfunc_begin1              ##     jumps to Ltmp7
	.long	Lset9
	.byte	1                       ##   On action: 1
Lset10 = Ltmp8-Lfunc_begin1             ## >> Call Site 2 <<
	.long	Lset10
Lset11 = Ltmp9-Ltmp8                    ##   Call between Ltmp8 and Ltmp9
	.long	Lset11
Lset12 = Ltmp17-Lfunc_begin1            ##     jumps to Ltmp17
	.long	Lset12
	.byte	1                       ##   On action: 1
Lset13 = Ltmp10-Lfunc_begin1            ## >> Call Site 3 <<
	.long	Lset13
Lset14 = Ltmp13-Ltmp10                  ##   Call between Ltmp10 and Ltmp13
	.long	Lset14
Lset15 = Ltmp14-Lfunc_begin1            ##     jumps to Ltmp14
	.long	Lset15
	.byte	1                       ##   On action: 1
Lset16 = Ltmp15-Lfunc_begin1            ## >> Call Site 4 <<
	.long	Lset16
Lset17 = Ltmp16-Ltmp15                  ##   Call between Ltmp15 and Ltmp16
	.long	Lset17
Lset18 = Ltmp17-Lfunc_begin1            ##     jumps to Ltmp17
	.long	Lset18
	.byte	1                       ##   On action: 1
Lset19 = Ltmp18-Lfunc_begin1            ## >> Call Site 5 <<
	.long	Lset19
Lset20 = Ltmp19-Ltmp18                  ##   Call between Ltmp18 and Ltmp19
	.long	Lset20
Lset21 = Ltmp20-Lfunc_begin1            ##     jumps to Ltmp20
	.long	Lset21
	.byte	1                       ##   On action: 1
Lset22 = Ltmp19-Lfunc_begin1            ## >> Call Site 6 <<
	.long	Lset22
Lset23 = Ltmp21-Ltmp19                  ##   Call between Ltmp19 and Ltmp21
	.long	Lset23
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset24 = Ltmp21-Lfunc_begin1            ## >> Call Site 7 <<
	.long	Lset24
Lset25 = Ltmp22-Ltmp21                  ##   Call between Ltmp21 and Ltmp22
	.long	Lset25
Lset26 = Ltmp23-Lfunc_begin1            ##     jumps to Ltmp23
	.long	Lset26
	.byte	0                       ##   On action: cleanup
Lset27 = Ltmp22-Lfunc_begin1            ## >> Call Site 8 <<
	.long	Lset27
Lset28 = Ltmp24-Ltmp22                  ##   Call between Ltmp22 and Ltmp24
	.long	Lset28
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset29 = Ltmp24-Lfunc_begin1            ## >> Call Site 9 <<
	.long	Lset29
Lset30 = Ltmp25-Ltmp24                  ##   Call between Ltmp24 and Ltmp25
	.long	Lset30
Lset31 = Ltmp26-Lfunc_begin1            ##     jumps to Ltmp26
	.long	Lset31
	.byte	1                       ##   On action: 1
Lset32 = Ltmp25-Lfunc_begin1            ## >> Call Site 10 <<
	.long	Lset32
Lset33 = Lfunc_end1-Ltmp25              ##   Call between Ltmp25 and Lfunc_end1
	.long	Lset33
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.byte	1                       ## >> Action Record 1 <<
                                        ##   Catch TypeInfo 1
	.byte	0                       ##   No further actions
                                        ## >> Catch TypeInfos <<
	.long	0                       ## TypeInfo 1
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.private_extern	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ ## -- Begin function _ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.globl	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.weak_def_can_be_hidden	__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
	.p2align	4, 0x90
__ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_: ## @_ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
Lfunc_begin2:
	.cfi_startproc
	.cfi_personality 155, ___gxx_personality_v0
	.cfi_lsda 16, Lexception2
## BB#0:
	pushq	%rbp
Lcfi16:
	.cfi_def_cfa_offset 16
Lcfi17:
	.cfi_offset %rbp, -16
	movq	%rsp, %rbp
Lcfi18:
	.cfi_def_cfa_register %rbp
	pushq	%r15
	pushq	%r14
	pushq	%r13
	pushq	%r12
	pushq	%rbx
	subq	$72, %rsp
Lcfi19:
	.cfi_offset %rbx, -56
Lcfi20:
	.cfi_offset %r12, -48
Lcfi21:
	.cfi_offset %r13, -40
Lcfi22:
	.cfi_offset %r14, -32
Lcfi23:
	.cfi_offset %r15, -24
	movq	%r8, %r14
	movq	%rcx, %r12
	movq	%rdi, %r13
	testq	%r13, %r13
	je	LBB2_17
## BB#1:
	movl	%r9d, -44(%rbp)         ## 4-byte Spill
	movq	%r12, %rax
	subq	%rsi, %rax
	movq	24(%r14), %rcx
	xorl	%r15d, %r15d
	subq	%rax, %rcx
	cmovgq	%rcx, %r15
	movq	%rdx, -104(%rbp)        ## 8-byte Spill
	movq	%rdx, %rbx
	subq	%rsi, %rbx
	testq	%rbx, %rbx
	jle	LBB2_3
## BB#2:
	movq	(%r13), %rax
	movq	%r13, %rdi
	movq	%rbx, %rdx
	callq	*96(%rax)
	cmpq	%rbx, %rax
	jne	LBB2_17
LBB2_3:
	testq	%r15, %r15
	jle	LBB2_13
## BB#4:
	movq	%r12, -88(%rbp)         ## 8-byte Spill
	movq	%r14, -96(%rbp)         ## 8-byte Spill
	xorps	%xmm0, %xmm0
	movaps	%xmm0, -80(%rbp)
	movq	$0, -64(%rbp)
	cmpq	$23, %r15
	jae	LBB2_8
## BB#5:
	movl	%r15d, %eax
	addb	%al, %al
	movb	%al, -80(%rbp)
	leaq	-79(%rbp), %r14
	movq	%r14, %r12
	jmp	LBB2_9
LBB2_8:
	leaq	16(%r15), %rbx
	andq	$-16, %rbx
	movq	%rbx, %rdi
	callq	__Znwm
	movq	%rax, %r12
	movq	%r12, -64(%rbp)
	orq	$1, %rbx
	movq	%rbx, -80(%rbp)
	movq	%r15, -72(%rbp)
	leaq	-79(%rbp), %r14
LBB2_9:
	movl	-44(%rbp), %eax         ## 4-byte Reload
	movzbl	%al, %esi
	movq	%r12, %rdi
	movq	%r15, %rdx
	callq	_memset
	movb	$0, (%r12,%r15)
	testb	$1, -80(%rbp)
	cmovneq	-64(%rbp), %r14
	movq	(%r13), %rax
Ltmp27:
	movq	%r13, %rdi
	movq	%r14, %rsi
	movq	%r15, %rdx
	callq	*96(%rax)
	movq	%rax, %rbx
Ltmp28:
## BB#10:
	testb	$1, -80(%rbp)
	movq	-96(%rbp), %r14         ## 8-byte Reload
	movq	-88(%rbp), %r12         ## 8-byte Reload
	je	LBB2_12
## BB#11:
	movq	-64(%rbp), %rdi
	callq	__ZdlPv
LBB2_12:
	cmpq	%r15, %rbx
	jne	LBB2_17
LBB2_13:
	movq	-104(%rbp), %rsi        ## 8-byte Reload
	subq	%rsi, %r12
	testq	%r12, %r12
	jle	LBB2_15
## BB#14:
	movq	(%r13), %rax
	movq	%r13, %rdi
	movq	%r12, %rdx
	callq	*96(%rax)
	cmpq	%r12, %rax
	jne	LBB2_17
LBB2_15:
	movq	$0, 24(%r14)
	jmp	LBB2_18
LBB2_17:
	xorl	%r13d, %r13d
LBB2_18:
	movq	%r13, %rax
	addq	$72, %rsp
	popq	%rbx
	popq	%r12
	popq	%r13
	popq	%r14
	popq	%r15
	popq	%rbp
	retq
LBB2_19:
Ltmp29:
	movq	%rax, %rbx
	testb	$1, -80(%rbp)
	je	LBB2_21
## BB#20:
	movq	-64(%rbp), %rdi
	callq	__ZdlPv
LBB2_21:
	movq	%rbx, %rdi
	callq	__Unwind_Resume
Lfunc_end2:
	.cfi_endproc
	.section	__TEXT,__gcc_except_tab
	.p2align	2
GCC_except_table2:
Lexception2:
	.byte	255                     ## @LPStart Encoding = omit
	.byte	155                     ## @TType Encoding = indirect pcrel sdata4
	.byte	41                      ## @TType base offset
	.byte	3                       ## Call site Encoding = udata4
	.byte	39                      ## Call site table length
Lset34 = Lfunc_begin2-Lfunc_begin2      ## >> Call Site 1 <<
	.long	Lset34
Lset35 = Ltmp27-Lfunc_begin2            ##   Call between Lfunc_begin2 and Ltmp27
	.long	Lset35
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
Lset36 = Ltmp27-Lfunc_begin2            ## >> Call Site 2 <<
	.long	Lset36
Lset37 = Ltmp28-Ltmp27                  ##   Call between Ltmp27 and Ltmp28
	.long	Lset37
Lset38 = Ltmp29-Lfunc_begin2            ##     jumps to Ltmp29
	.long	Lset38
	.byte	0                       ##   On action: cleanup
Lset39 = Ltmp28-Lfunc_begin2            ## >> Call Site 3 <<
	.long	Lset39
Lset40 = Lfunc_end2-Ltmp28              ##   Call between Ltmp28 and Lfunc_end2
	.long	Lset40
	.long	0                       ##     has no landing pad
	.byte	0                       ##   On action: cleanup
	.p2align	2
                                        ## -- End function
	.section	__TEXT,__text,regular,pure_instructions
	.private_extern	___clang_call_terminate ## -- Begin function __clang_call_terminate
	.globl	___clang_call_terminate
	.weak_def_can_be_hidden	___clang_call_terminate
	.p2align	4, 0x90
___clang_call_terminate:                ## @__clang_call_terminate
## BB#0:
	pushq	%rax
	callq	___cxa_begin_catch
	callq	__ZSt9terminatev
                                        ## -- End function
	.section	__TEXT,__const
	.p2align	2               ## @_ZZ4mainE5array
l__ZZ4mainE5array:
	.long	2700                    ## 0xa8c
	.long	2314                    ## 0x90a
	.long	8429                    ## 0x20ed
	.long	7726                    ## 0x1e2e
	.long	4817                    ## 0x12d1
	.long	8716                    ## 0x220c
	.long	3598                    ## 0xe0e
	.long	6255                    ## 0x186f
	.long	5056                    ## 0x13c0
	.long	8653                    ## 0x21cd
	.long	8571                    ## 0x217b
	.long	5028                    ## 0x13a4
	.long	1259                    ## 0x4eb
	.long	3315                    ## 0xcf3
	.long	2896                    ## 0xb50
	.long	1411                    ## 0x583
	.long	3847                    ## 0xf07
	.long	879                     ## 0x36f
	.long	7353                    ## 0x1cb9
	.long	8056                    ## 0x1f78
	.long	8765                    ## 0x223d
	.long	2344                    ## 0x928
	.long	6349                    ## 0x18cd
	.long	4156                    ## 0x103c
	.long	8350                    ## 0x209e
	.long	4164                    ## 0x1044
	.long	4783                    ## 0x12af
	.long	6800                    ## 0x1a90
	.long	8887                    ## 0x22b7
	.long	267                     ## 0x10b
	.long	4478                    ## 0x117e
	.long	6327                    ## 0x18b7
	.long	58                      ## 0x3a
	.long	7961                    ## 0x1f19
	.long	756                     ## 0x2f4
	.long	5654                    ## 0x1616
	.long	9546                    ## 0x254a
	.long	5132                    ## 0x140c
	.long	247                     ## 0xf7
	.long	5514                    ## 0x158a
	.long	7098                    ## 0x1bba
	.long	1156                    ## 0x484
	.long	795                     ## 0x31b
	.long	2502                    ## 0x9c6
	.long	367                     ## 0x16f
	.long	5330                    ## 0x14d2
	.long	2261                    ## 0x8d5
	.long	8692                    ## 0x21f4
	.long	2460                    ## 0x99c
	.long	4823                    ## 0x12d7
	.long	8968                    ## 0x2308
	.long	4976                    ## 0x1370
	.long	1929                    ## 0x789
	.long	1051                    ## 0x41b
	.long	9249                    ## 0x2421
	.long	9713                    ## 0x25f1
	.long	2803                    ## 0xaf3
	.long	1743                    ## 0x6cf
	.long	3681                    ## 0xe61
	.long	93                      ## 0x5d
	.long	4967                    ## 0x1367
	.long	2245                    ## 0x8c5
	.long	198                     ## 0xc6
	.long	896                     ## 0x380
	.long	6372                    ## 0x18e4
	.long	4413                    ## 0x113d
	.long	2615                    ## 0xa37
	.long	6130                    ## 0x17f2
	.long	5766                    ## 0x1686
	.long	5306                    ## 0x14ba
	.long	1236                    ## 0x4d4
	.long	888                     ## 0x378
	.long	8050                    ## 0x1f72
	.long	7080                    ## 0x1ba8
	.long	3460                    ## 0xd84
	.long	3473                    ## 0xd91
	.long	1720                    ## 0x6b8
	.long	3913                    ## 0xf49
	.long	3449                    ## 0xd79
	.long	8420                    ## 0x20e4
	.long	1814                    ## 0x716
	.long	1261                    ## 0x4ed
	.long	1368                    ## 0x558
	.long	167                     ## 0xa7
	.long	7938                    ## 0x1f02
	.long	4483                    ## 0x1183
	.long	4843                    ## 0x12eb
	.long	4682                    ## 0x124a
	.long	3301                    ## 0xce5
	.long	4038                    ## 0xfc6
	.long	709                     ## 0x2c5
	.long	8655                    ## 0x21cf
	.long	598                     ## 0x256
	.long	3857                    ## 0xf11
	.long	6285                    ## 0x188d
	.long	2961                    ## 0xb91
	.long	6817                    ## 0x1aa1
	.long	1031                    ## 0x407
	.long	4007                    ## 0xfa7
	.long	1392                    ## 0x570
	.long	5717                    ## 0x1655
	.long	5837                    ## 0x16cd
	.long	5695                    ## 0x163f
	.long	9511                    ## 0x2527
	.long	8891                    ## 0x22bb
	.long	7883                    ## 0x1ecb
	.long	7035                    ## 0x1b7b
	.long	2349                    ## 0x92d
	.long	5752                    ## 0x1678
	.long	3139                    ## 0xc43
	.long	2442                    ## 0x98a
	.long	3966                    ## 0xf7e
	.long	2007                    ## 0x7d7
	.long	9205                    ## 0x23f5
	.long	8434                    ## 0x20f2
	.long	5065                    ## 0x13c9
	.long	3795                    ## 0xed3
	.long	6890                    ## 0x1aea
	.long	2715                    ## 0xa9b
	.long	1                       ## 0x1
	.long	5106                    ## 0x13f2
	.long	5083                    ## 0x13db

	.section	__TEXT,__cstring,cstring_literals
L_.str:                                 ## @.str
	.space	1

L_.str.1:                               ## @.str.1
	.asciz	"hello, world"


.subsections_via_symbols

複製程式碼

此時,我們依然可以通過搜尋 cmpl $1001, %eax,此時你會發現在每份彙編中都有兩處與 1001 的比較,而且通過生成的彙編程式碼的行數判斷,其實我們可以大膽的出生成的結果基本一致。

如果這個例子還不是很明顯,可以看下面的程式碼:

#include <iostream>

int main()
{
    size_t sum = 0;
    for (size_t i = 1; i <= 100; ++i)
    {
        sum += i;
    }

    std::cout << sum << std::endl;
    return 0;
}
複製程式碼

O3 優化後的關鍵程式碼:

Lcfi4:
	.cfi_offset %r14, -24
	movq	__ZNSt3__14coutE@GOTPCREL(%rip), %rdi
	movl	$5050, %esi             ## imm = 0x13BA
	callq	__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEm
	movq	%rax, %rbx
	movq	(%rbx), %rax
	movq	-24(%rax), %rsi
	addq	%rbx, %rsi
	leaq	-24(%rbp), %r14
	movq	%r14, %rdi
	callq	__ZNKSt3__18ios_base6getlocEv
複製程式碼

這個 5050 是從何而來?

結論

唯一的結論只能是 你寫的程式碼只是一個建議,編譯器怎麼實現,如何實現,按不按照你寫的程式碼編不是你說的

所以我認為沒有必要犧牲程式碼的可讀性而去做一些自以為是的優化,如果你用位運算實現的(+)運算比編譯器直接將普通(+)運算編譯的程式碼效能好的話,你應該去砍寫編譯器的人,而不是噴用正常寫法的人菜。

相關文章