Just disassembled via objdump my code compiled with gcc -O3 (and other options in my makefile: -O3 -finline-limit=100000 --param inline-unit-growth=10000 --param large-function-growth=100000 \ --param large-function-insns=47000 -march=native -Wall -Wno-format-security $(GCC_VER_MORE_45_NO_UNUSED_RET) --param large-stack-frame=65536 \ --param large-stack-frame-growth=3000 $(explicit_templates) ): Next part of function : static inline double junctionFactor(CbReptationMove<EnsembleType, Diblock> &Caller) { int jctId, jctTypeNew, nExclude, neighbor[CellList::MaxNeighbor], nNeighbor; double trialEnergy; Particle *PartJunct; // if (Caller.endSign == 1) jctId = Caller.tailId + Caller.species->blockLength[0]; else jctId = Caller.headId + Caller.species->blockLength[0] - 1; ... transforms to (it wasn't actually inlined): Disassembly of section .text$_ZN22CbReptationMove_HelperI11EnsembleNVT7DiblockE14junctionFactorER15CbReptationMoveIS0_S1_E: 00000000 <__ZN22CbReptationMove_HelperI11EnsembleNVT7DiblockE14junctionFactorER15CbReptationMoveIS0_S1_E>: 0: 55 push ebp 1: b8 fc c0 07 00 mov eax,0x7c0fc 6: 89 e5 mov ebp,esp 8: 57 push edi 9: 56 push esi a: 53 push ebx b: e8 00 00 00 00 call 10 <__ZN22CbReptationMove_HelperI11EnsembleNVT7DiblockE14junctionFactorER15CbReptationMoveIS0_S1_E+0x10> 10: 8b 45 08 mov eax,DWORD PTR [ebp+0x8] 13: 8b 90 84 01 00 00 mov edx,DWORD PTR [eax+0x184] 19: 83 fa 01 cmp edx,0x1 1c: 0f 84 9d 04 00 00 je 4bf <__ZN22CbReptationMove_HelperI11EnsembleNVT7DiblockE14junctionFactorER15CbReptationMoveIS0_S1_E+0x4bf> 22: 8b 88 b8 00 00 00 mov ecx,DWORD PTR [eax+0xb8] 28: 89 c6 mov esi,eax 2a: 8b 80 7c 01 00 00 mov eax,DWORD PTR [eax+0x17c] 30: 03 41 78 add eax,DWORD PTR [ecx+0x78] ... So, cmp edx,0x1 is comparsion for Caller.endSign and so on. But from where call instruction taked? There are many so "left" calls in my disasm. All of them have same binary signature "e8 00 00 00 00". Have gcc (GCC) 4.5.3 under cygwin. -- Kind regards, Sergey Ivanov