http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57236
--- Comment #5 from petschy at gmail dot com --- I spotted a minor size inefficiency in the code: 0x0000000000400720 <+32>: jle 0x4007c5 <_Z6write2R6Streamj+197> 0x0000000000400726 <+38>: mov %rdx,%rsi 0x0000000000400729 <+41>: test %r12b,%r12b ... 0x00000000004007c5 <+197>: mov (%rbx),%rsi 0x00000000004007c8 <+200>: mov %rbx,%rdi 0x00000000004007cb <+203>: callq 0x4005d0 <_ZN6Stream5WriteEPhS0_> 0x00000000004007d0 <+208>: mov (%rbx),%rdx 0x00000000004007d3 <+211>: mov %rdx,0x8(%rbx) 0x00000000004007d7 <+215>: mov %rdx,%rsi 0x00000000004007da <+218>: jmpq 0x400729 <_Z6write2R6Streamj+41> The mov at +215 would not be needed if the jump went to +38 instead of +41.