最近经常看见一些人分享自己撸码的经验,比如曾经习惯把if语句改成三目运算符,以减少代码行数。现在习惯把相同的if判断合并在一起,以减少if判断的次数,提高效率。
多年以前笔者也是这样想的,但是随着年龄的增长,窃以为在编译型语言中,这样做的意义并不大,而且有时甚至可能会降低代码可读性。
例子
有如下两份代码:
#include
#include
int main()
{
std::array 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
#include
int main()
{
std::array 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 %EDX
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 %EDX
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
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是从何而来?
结论
唯一的结论只能是你写的代码只是一个建议,编译器怎么实现,如何实现,按不按照你写的代码编不是你说的
所以我认为没有必要牺牲代码的可读性而去做一些自以为是的优化,如果你用位运算实现的(+)运算比编译器直接将普通(+)运算编译的代码性能好的话,你应该去砍写编译器的人,而不是喷用正常写法的人菜。