Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 46.19 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1206 6.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1206 5.04 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1178 3.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1242 2.59 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1242 2.45 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 2.45 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 2.18 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1179 2.04 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1240 1.91 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 1.77 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 1.77 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1215 1.63 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1226 1.36 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 1.23 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 1.23 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1195 1.23 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1242 0.95 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 0.95 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1157 0.95 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1178 0.95 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1242 0.82 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1176 0.82 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1241 0.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 0.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1158 0.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1215 0.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1242 0.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1240 0.68 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1240 0.54 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 0.54 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1185 0.54 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1226 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000046f400 : : * slot's tupdesc's last attribute will be considered NULL even : * when the physical tuple is longer than the tupdesc. : */ : Datum : slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull) : { /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1156 0.68 : 46f400: 55 push %rbp 0.54 : 46f401: 48 89 e5 mov %rsp,%rbp 2.45 : 46f404: 48 89 5d e0 mov %rbx,-0x20(%rbp) 1.91 : 46f408: 4c 89 65 e8 mov %r12,-0x18(%rbp) 1.36 : 46f40c: 48 89 fb mov %rdi,%rbx 2.45 : 46f40f: 4c 89 6d f0 mov %r13,-0x10(%rbp) 1.23 : 46f413: 4c 89 75 f8 mov %r14,-0x8(%rbp) 0.95 : 46f417: 48 83 ec 20 sub $0x20,%rsp : HeapTupleHeader tup; : : /* : * system attributes are handled by heap_getsysattr : */ : if (attnum <= 0) 0.27 : 46f41b: 85 f6 test %esi,%esi : * slot's tupdesc's last attribute will be considered NULL even : * when the physical tuple is longer than the tupdesc. : */ : Datum : slot_getattr(TupleTableSlot *slot, int attnum, bool *isnull) : { 1.77 : 46f41d: 49 89 d4 mov %rdx,%r12 : HeapTuple tuple = slot->tts_tuple; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1157 0.95 : 46f420: 48 8b 7f 08 mov 0x8(%rdi),%rdi : TupleDesc tupleDesc = slot->tts_tupleDescriptor; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1158 0.68 : 46f424: 48 8b 53 10 mov 0x10(%rbx),%rdx : HeapTupleHeader tup; : : /* : * system attributes are handled by heap_getsysattr : */ : if (attnum <= 0) 0.41 : 46f428: 0f 8e a2 00 00 00 jle 46f4d0 : } : : /* : * fast path if desired attribute already cached : */ : if (attnum <= slot->tts_nvalid) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1176 0.82 : 46f42e: 3b 73 24 cmp 0x24(%rbx),%esi 0.00 : 46f431: 7e 65 jle 46f498 : } : : /* : * return NULL if attnum is out of range according to the tupdesc : */ : if (attnum > tupleDesc->natts) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1185 0.54 : 46f433: 3b 32 cmp (%rdx),%esi 0.00 : 46f435: 7f 51 jg 46f488 : : /* : * otherwise we had better have a physical tuple (tts_nvalid should equal : * natts in all virtual-tuple cases) : */ : if (tuple == NULL) /* internal error */ /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1195 1.23 : 46f437: 48 85 ff test %rdi,%rdi 0.00 : 46f43a: 0f 84 34 01 00 00 je 46f574 : * : * (We have to check this separately because of various inheritance and : * table-alteration scenarios: the tuple could be either longer or shorter : * than the tupdesc.) : */ : tup = tuple->t_data; 0.00 : 46f440: 48 8b 7f 10 mov 0x10(%rdi),%rdi : if (attnum > HeapTupleHeaderGetNatts(tup)) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1206 6.68 : 46f444: 0f b7 47 12 movzwl 0x12(%rdi),%eax 46.19 : 46f448: 25 ff 07 00 00 and $0x7ff,%eax 0.41 : 46f44d: 39 c6 cmp %eax,%esi 0.00 : 46f44f: 7f 37 jg 46f488 : } : : /* : * check if target attribute is null: no point in groveling through tuple : */ : if (HeapTupleHasNulls(tuple) && att_isnull(attnum - 1, tup->t_bits)) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1215 0.68 : 46f451: f6 47 14 01 testb $0x1,0x14(%rdi) 1.77 : 46f455: 74 18 je 46f46f 0.41 : 46f457: 8d 4e ff lea -0x1(%rsi),%ecx 0.00 : 46f45a: 89 c8 mov %ecx,%eax 0.00 : 46f45c: 83 e1 07 and $0x7,%ecx 0.00 : 46f45f: c1 f8 03 sar $0x3,%eax 0.14 : 46f462: 48 98 cltq 0.00 : 46f464: 0f b6 44 07 17 movzbl 0x17(%rdi,%rax,1),%eax 0.00 : 46f469: d3 f8 sar %cl,%eax 0.27 : 46f46b: a8 01 test $0x1,%al 0.00 : 46f46d: 74 19 je 46f488 : /* : * If the attribute's column has been dropped, we force a NULL result. : * This case should not happen in normal use, but it could happen if we : * are executing a plan cached before the column was dropped. : */ : if (tupleDesc->attrs[attnum - 1]->attisdropped) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1226 0.54 : 46f46f: 4c 63 ee movslq %esi,%r13 0.00 : 46f472: 48 8b 42 08 mov 0x8(%rdx),%rax 0.41 : 46f476: 4d 8d 75 ff lea -0x1(%r13),%r14 0.00 : 46f47a: 4a 8b 04 f0 mov (%rax,%r14,8),%rax 0.27 : 46f47e: 80 78 61 00 cmpb $0x0,0x61(%rax) 1.63 : 46f482: 74 7c je 46f500 0.00 : 46f484: 0f 1f 40 00 nopl 0x0(%rax) : { : *isnull = true; 0.00 : 46f488: 41 c6 04 24 01 movb $0x1,(%r12) 0.00 : 46f48d: 31 c0 xor %eax,%eax : /* : * The result is acquired from tts_values array. : */ : *isnull = slot->tts_isnull[attnum - 1]; : return slot->tts_values[attnum - 1]; : } 0.00 : 46f48f: eb 20 jmp 46f4b1 0.00 : 46f491: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : /* : * fast path if desired attribute already cached : */ : if (attnum <= slot->tts_nvalid) : { : *isnull = slot->tts_isnull[attnum - 1]; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1178 0.95 : 46f498: 48 8b 43 30 mov 0x30(%rbx),%rax 0.27 : 46f49c: 48 63 d6 movslq %esi,%rdx 0.14 : 46f49f: 0f b6 44 10 ff movzbl -0x1(%rax,%rdx,1),%eax /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1178 5.04 : 46f4a4: 41 88 04 24 mov %al,(%r12) : return slot->tts_values[attnum - 1]; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1179 2.18 : 46f4a8: 48 8b 43 28 mov 0x28(%rbx),%rax 0.14 : 46f4ac: 48 8b 44 d0 f8 mov -0x8(%rax,%rdx,8),%rax : /* : * The result is acquired from tts_values array. : */ : *isnull = slot->tts_isnull[attnum - 1]; : return slot->tts_values[attnum - 1]; : } /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1242 0.95 : 46f4b1: 48 8b 1c 24 mov (%rsp),%rbx 1.23 : 46f4b5: 4c 8b 64 24 08 mov 0x8(%rsp),%r12 3.68 : 46f4ba: 4c 8b 6c 24 10 mov 0x10(%rsp),%r13 0.27 : 46f4bf: 4c 8b 74 24 18 mov 0x18(%rsp),%r14 0.68 : 46f4c4: c9 leaveq 2.59 : 46f4c5: c3 retq 0.00 : 46f4c6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 46f4cd: 00 00 00 : /* : * system attributes are handled by heap_getsysattr : */ : if (attnum <= 0) : { : if (tuple == NULL) /* internal error */ 0.00 : 46f4d0: 48 85 ff test %rdi,%rdi 0.00 : 46f4d3: 74 4b je 46f520 : elog(ERROR, "cannot extract system attribute from virtual tuple"); : if (tuple == &(slot->tts_minhdr)) /* internal error */ 0.00 : 46f4d5: 48 8d 43 40 lea 0x40(%rbx),%rax 0.00 : 46f4d9: 48 39 c7 cmp %rax,%rdi 0.00 : 46f4dc: 74 6c je 46f54a : elog(ERROR, "cannot extract system attribute from minimal tuple"); : return heap_getsysattr(tuple, attnum, tupleDesc, isnull); 0.00 : 46f4de: 4c 89 e1 mov %r12,%rcx : /* : * The result is acquired from tts_values array. : */ : *isnull = slot->tts_isnull[attnum - 1]; : return slot->tts_values[attnum - 1]; : } 0.00 : 46f4e1: 48 8b 1c 24 mov (%rsp),%rbx 0.00 : 46f4e5: 4c 8b 64 24 08 mov 0x8(%rsp),%r12 0.00 : 46f4ea: 4c 8b 6c 24 10 mov 0x10(%rsp),%r13 0.00 : 46f4ef: 4c 8b 74 24 18 mov 0x18(%rsp),%r14 0.00 : 46f4f4: c9 leaveq : { : if (tuple == NULL) /* internal error */ : elog(ERROR, "cannot extract system attribute from virtual tuple"); : if (tuple == &(slot->tts_minhdr)) /* internal error */ : elog(ERROR, "cannot extract system attribute from minimal tuple"); : return heap_getsysattr(tuple, attnum, tupleDesc, isnull); 0.00 : 46f4f5: e9 d6 f7 ff ff jmpq 46ecd0 0.00 : 46f4fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : } : : /* : * Extract the attribute, along with any preceding attributes. : */ : slot_deform_tuple(slot, attnum); 0.00 : 46f500: 48 89 df mov %rbx,%rdi 0.00 : 46f503: e8 08 fa ff ff callq 46ef10 : : /* : * The result is acquired from tts_values array. : */ : *isnull = slot->tts_isnull[attnum - 1]; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1240 0.68 : 46f508: 48 8b 43 30 mov 0x30(%rbx),%rax 0.68 : 46f50c: 42 0f b6 44 28 ff movzbl -0x1(%rax,%r13,1),%eax 2.04 : 46f512: 41 88 04 24 mov %al,(%r12) : return slot->tts_values[attnum - 1]; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1241 0.82 : 46f516: 48 8b 43 28 mov 0x28(%rbx),%rax 0.00 : 46f51a: 4a 8b 04 f0 mov (%rax,%r14,8),%rax : } 0.00 : 46f51e: eb 91 jmp 46f4b1 : * system attributes are handled by heap_getsysattr : */ : if (attnum <= 0) : { : if (tuple == NULL) /* internal error */ : elog(ERROR, "cannot extract system attribute from virtual tuple"); 0.00 : 46f520: ba f1 f6 7a 00 mov $0x7af6f1,%edx 0.00 : 46f525: be 8f 04 00 00 mov $0x48f,%esi 0.00 : 46f52a: bf f4 f5 7a 00 mov $0x7af5f4,%edi 0.00 : 46f52f: e8 ec be 30 00 callq 77b420 0.00 : 46f534: be 40 f7 7a 00 mov $0x7af740,%esi 0.00 : 46f539: bf 14 00 00 00 mov $0x14,%edi 0.00 : 46f53e: 31 c0 xor %eax,%eax 0.00 : 46f540: e8 eb bc 30 00 callq 77b230 0.00 : 46f545: e8 86 9f ff ff callq 4694d0 : if (tuple == &(slot->tts_minhdr)) /* internal error */ : elog(ERROR, "cannot extract system attribute from minimal tuple"); 0.00 : 46f54a: ba f1 f6 7a 00 mov $0x7af6f1,%edx 0.00 : 46f54f: be 91 04 00 00 mov $0x491,%esi 0.00 : 46f554: bf f4 f5 7a 00 mov $0x7af5f4,%edi 0.00 : 46f559: e8 c2 be 30 00 callq 77b420 0.00 : 46f55e: be 78 f7 7a 00 mov $0x7af778,%esi 0.00 : 46f563: bf 14 00 00 00 mov $0x14,%edi 0.00 : 46f568: 31 c0 xor %eax,%eax 0.00 : 46f56a: e8 c1 bc 30 00 callq 77b230 0.00 : 46f56f: e8 5c 9f ff ff callq 4694d0 : /* : * otherwise we had better have a physical tuple (tts_nvalid should equal : * natts in all virtual-tuple cases) : */ : if (tuple == NULL) /* internal error */ : elog(ERROR, "cannot extract attribute from empty tuple slot"); 0.00 : 46f574: ba f1 f6 7a 00 mov $0x7af6f1,%edx 0.00 : 46f579: be ac 04 00 00 mov $0x4ac,%esi 0.00 : 46f57e: bf f4 f5 7a 00 mov $0x7af5f4,%edi 0.00 : 46f583: e8 98 be 30 00 callq 77b420 0.00 : 46f588: be b0 f7 7a 00 mov $0x7af7b0,%esi 0.00 : 46f58d: bf 14 00 00 00 mov $0x14,%edi 0.00 : 46f592: 31 c0 xor %eax,%eax 0.00 : 46f594: e8 97 bc 30 00 callq 77b230 0.00 : 46f599: e8 32 9f ff ff callq 4694d0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 10.26 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5450 8.55 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5450 6.13 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5450 4.99 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 4.70 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5270 4.13 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5451 3.13 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5451 2.99 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5424 2.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5386 2.42 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5435 2.28 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5411 2.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5386 2.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5403 2.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5441 1.99 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5386 1.99 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5436 1.99 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5451 1.99 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 1.71 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5421 1.71 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5494 1.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5399 1.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5259 1.42 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5432 1.42 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 1.42 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 1.28 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5451 1.28 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5494 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5441 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5478 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 1.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5403 1.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5418 0.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5478 0.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5494 0.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5494 0.71 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 0.71 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 0.71 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5493 0.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5424 0.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5435 0.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5480 0.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 0.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5290 0.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005ad000 : : * data will be valid, he must call ExecMaterializeSlot on the : * result slot. : */ : TupleTableSlot * : ExecProject(ProjectionInfo *projInfo, ExprDoneCond *isDone) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5386 2.14 : 5ad000: 55 push %rbp 0.00 : 5ad001: 48 89 e5 mov %rsp,%rbp 0.28 : 5ad004: 41 57 push %r15 1.99 : 5ad006: 41 56 push %r14 0.43 : 5ad008: 41 55 push %r13 0.28 : 5ad00a: 41 54 push %r12 0.00 : 5ad00c: 53 push %rbx 2.85 : 5ad00d: 48 89 fb mov %rdi,%rbx 0.14 : 5ad010: 48 83 ec 48 sub $0x48,%rsp 0.00 : 5ad014: 48 89 75 90 mov %rsi,-0x70(%rbp) : Assert(projInfo != NULL); : : /* : * get the projection info we want : */ : slot = projInfo->pi_slot; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5399 1.57 : 5ad018: 48 8b 47 18 mov 0x18(%rdi),%rax : econtext = projInfo->pi_exprContext; : : /* Assume single result row until proven otherwise */ : if (isDone) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5403 1.00 : 5ad01c: 48 85 f6 test %rsi,%rsi : Assert(projInfo != NULL); : : /* : * get the projection info we want : */ : slot = projInfo->pi_slot; 0.43 : 5ad01f: 48 89 45 b0 mov %rax,-0x50(%rbp) : econtext = projInfo->pi_exprContext; 0.14 : 5ad023: 4c 8b 77 10 mov 0x10(%rdi),%r14 : : /* Assume single result row until proven otherwise */ : if (isDone) 2.14 : 5ad027: 74 06 je 5ad02f : *isDone = ExprSingleResult; 0.00 : 5ad029: c7 06 00 00 00 00 movl $0x0,(%rsi) : /* : * Clear any former contents of the result slot. This makes it safe for : * us to use the slot's Datum/isnull arrays as workspace. (Also, we can : * return the slot as-is if we decide no rows can be projected.) : */ : ExecClearTuple(slot); 0.00 : 5ad02f: 48 8b 7d b0 mov -0x50(%rbp),%rdi /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5411 2.28 : 5ad033: e8 d8 70 00 00 callq 5b4110 : /* : * Force extraction of all input values that we'll need. The : * Var-extraction loops below depend on this, and we are also prefetching : * all attributes that will be referenced in the generic expressions. : */ : if (projInfo->pi_lastInnerVar > 0) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5418 1.00 : 5ad038: 8b 73 48 mov 0x48(%rbx),%esi 0.00 : 5ad03b: 85 f6 test %esi,%esi 0.00 : 5ad03d: 7e 09 jle 5ad048 : slot_getsomeattrs(econtext->ecxt_innertuple, 0.00 : 5ad03f: 49 8b 7e 10 mov 0x10(%r14),%rdi 0.00 : 5ad043: e8 18 22 ec ff callq 46f260 : projInfo->pi_lastInnerVar); : if (projInfo->pi_lastOuterVar > 0) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5421 1.71 : 5ad048: 8b 73 4c mov 0x4c(%rbx),%esi 0.14 : 5ad04b: 85 f6 test %esi,%esi 0.00 : 5ad04d: 7e 09 jle 5ad058 : slot_getsomeattrs(econtext->ecxt_outertuple, 0.00 : 5ad04f: 49 8b 7e 18 mov 0x18(%r14),%rdi 0.00 : 5ad053: e8 08 22 ec ff callq 46f260 : projInfo->pi_lastOuterVar); : if (projInfo->pi_lastScanVar > 0) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5424 0.57 : 5ad058: 8b 73 50 mov 0x50(%rbx),%esi 2.99 : 5ad05b: 85 f6 test %esi,%esi 0.00 : 5ad05d: 7e 09 jle 5ad068 : slot_getsomeattrs(econtext->ecxt_scantuple, 0.00 : 5ad05f: 49 8b 7e 08 mov 0x8(%r14),%rdi 0.00 : 5ad063: e8 f8 21 ec ff callq 46f260 : : /* : * Assign simple Vars to result by direct extraction of fields from source : * slots ... a mite ugly, but fast ... : */ : numSimpleVars = projInfo->pi_numSimpleVars; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5432 1.42 : 5ad068: 44 8b 43 2c mov 0x2c(%rbx),%r8d : if (numSimpleVars > 0) 0.00 : 5ad06c: 45 85 c0 test %r8d,%r8d 0.00 : 5ad06f: 7e 5d jle 5ad0ce : bool *isnull = slot->tts_isnull; : int *varSlotOffsets = projInfo->pi_varSlotOffsets; : int *varNumbers = projInfo->pi_varNumbers; : int i; : : if (projInfo->pi_directMap) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5441 2.14 : 5ad071: 80 7b 28 00 cmpb $0x0,0x28(%rbx) : * slots ... a mite ugly, but fast ... : */ : numSimpleVars = projInfo->pi_numSimpleVars; : if (numSimpleVars > 0) : { : Datum *values = slot->tts_values; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5435 2.42 : 5ad075: 48 8b 55 b0 mov -0x50(%rbp),%rdx : bool *isnull = slot->tts_isnull; : int *varSlotOffsets = projInfo->pi_varSlotOffsets; 0.14 : 5ad079: 4c 8b 5b 30 mov 0x30(%rbx),%r11 : int *varNumbers = projInfo->pi_varNumbers; 0.14 : 5ad07d: 4c 8b 53 38 mov 0x38(%rbx),%r10 : * slots ... a mite ugly, but fast ... : */ : numSimpleVars = projInfo->pi_numSimpleVars; : if (numSimpleVars > 0) : { : Datum *values = slot->tts_values; 0.57 : 5ad081: 4c 8b 6a 28 mov 0x28(%rdx),%r13 : bool *isnull = slot->tts_isnull; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5436 1.99 : 5ad085: 4c 8b 62 30 mov 0x30(%rdx),%r12 : int *varSlotOffsets = projInfo->pi_varSlotOffsets; : int *varNumbers = projInfo->pi_varNumbers; : int i; : : if (projInfo->pi_directMap) 0.14 : 5ad089: 0f 84 e1 01 00 00 je 5ad270 0.00 : 5ad08f: 4c 89 df mov %r11,%rdi 0.43 : 5ad092: 31 f6 xor %esi,%esi /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5441 1.14 : 5ad094: 0f 1f 40 00 nopl 0x0(%rax) : { : /* especially simple case where vars go to output in order */ : for (i = 0; i < numSimpleVars; i++) : { : char *slotptr = ((char *) econtext) + varSlotOffsets[i]; : TupleTableSlot *varSlot = *((TupleTableSlot **) slotptr); 0.14 : 5ad098: 48 63 07 movslq (%rdi),%rax : int varNumber = varNumbers[i] - 1; : : values[i] = varSlot->tts_values[varNumber]; : isnull[i] = varSlot->tts_isnull[varNumber]; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5451 4.13 : 5ad09b: 48 83 c7 04 add $0x4,%rdi : { : /* especially simple case where vars go to output in order */ : for (i = 0; i < numSimpleVars; i++) : { : char *slotptr = ((char *) econtext) + varSlotOffsets[i]; : TupleTableSlot *varSlot = *((TupleTableSlot **) slotptr); 0.00 : 5ad09f: 49 8b 0c 06 mov (%r14,%rax,1),%rcx : int varNumber = varNumbers[i] - 1; : : values[i] = varSlot->tts_values[varNumber]; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5450 8.55 : 5ad0a3: 41 8b 04 b2 mov (%r10,%rsi,4),%eax 0.00 : 5ad0a7: 48 8b 51 28 mov 0x28(%rcx),%rdx 6.13 : 5ad0ab: 83 e8 01 sub $0x1,%eax 0.00 : 5ad0ae: 48 98 cltq 0.14 : 5ad0b0: 48 8b 14 c2 mov (%rdx,%rax,8),%rdx 10.26 : 5ad0b4: 49 89 54 f5 00 mov %rdx,0x0(%r13,%rsi,8) : isnull[i] = varSlot->tts_isnull[varNumber]; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5451 3.13 : 5ad0b9: 48 8b 51 30 mov 0x30(%rcx),%rdx 0.00 : 5ad0bd: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax 1.99 : 5ad0c1: 41 88 04 34 mov %al,(%r12,%rsi,1) 1.28 : 5ad0c5: 48 83 c6 01 add $0x1,%rsi : int i; : : if (projInfo->pi_directMap) : { : /* especially simple case where vars go to output in order */ : for (i = 0; i < numSimpleVars; i++) 0.00 : 5ad0c9: 41 39 f0 cmp %esi,%r8d 0.00 : 5ad0cc: 7f ca jg 5ad098 : * If there are any generic expressions, evaluate them. It's possible : * that there are set-returning functions in such expressions; if so and : * we have reached the end of the set, we return the result slot, which we : * already marked empty. : */ : if (projInfo->pi_targetlist) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5478 0.85 : 5ad0ce: 48 8b 43 08 mov 0x8(%rbx),%rax 1.14 : 5ad0d2: 48 85 c0 test %rax,%rax 0.00 : 5ad0d5: 48 89 45 98 mov %rax,-0x68(%rbp) 0.00 : 5ad0d9: 0f 84 fc 00 00 00 je 5ad1db : { : if (!ExecTargetList(projInfo->pi_targetlist, 0.28 : 5ad0df: 48 8b 55 b0 mov -0x50(%rbp),%rdx 0.00 : 5ad0e3: 48 8b 45 b0 mov -0x50(%rbp),%rax 0.00 : 5ad0e7: 4c 8b 7b 20 mov 0x20(%rbx),%r15 0.14 : 5ad0eb: 48 8b 52 30 mov 0x30(%rdx),%rdx 0.43 : 5ad0ef: 48 89 55 a0 mov %rdx,-0x60(%rbp) : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.00 : 5ad0f3: 48 8b 15 66 d7 60 00 mov 0x60d766(%rip),%rdx # bba860 0.00 : 5ad0fa: 48 8b 40 28 mov 0x28(%rax),%rax 0.14 : 5ad0fe: 48 89 55 c8 mov %rdx,-0x38(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5480 0.57 : 5ad102: 48 89 45 a8 mov %rax,-0x58(%rbp) : : CurrentMemoryContext = context; 0.00 : 5ad106: 49 8b 46 28 mov 0x28(%r14),%rax 0.00 : 5ad10a: 48 89 05 4f d7 60 00 mov %rax,0x60d74f(%rip) # bba860 : #endif /* PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(PG_LIST_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE ListCell * : list_head(const List *l) : { : return l ? l->head : NULL; 0.14 : 5ad111: 48 8b 45 98 mov -0x68(%rbp),%rax 0.43 : 5ad115: 4c 8b 68 08 mov 0x8(%rax),%r13 : /* : * evaluate all the expressions in the target list : */ : haveDoneSets = false; /* any exhausted set exprs in tlist? */ : : foreach(tl, targetlist) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5259 1.57 : 5ad119: 4d 85 ed test %r13,%r13 0.00 : 5ad11c: 0f 84 ae 00 00 00 je 5ad1d0 0.43 : 5ad122: c6 45 c7 00 movb $0x0,-0x39(%rbp) 0.00 : 5ad126: eb 15 jmp 5ad13d 0.00 : 5ad128: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5ad12f: 00 : /* We have a set-valued expression in the tlist */ : if (isDone == NULL) : ereport(ERROR, : (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), : errmsg("set-valued function called in context that cannot accept a set"))); : if (itemIsDone[resind] == ExprMultipleResult) 0.00 : 5ad130: c6 45 c7 01 movb $0x1,-0x39(%rbp) : /* : * evaluate all the expressions in the target list : */ : haveDoneSets = false; /* any exhausted set exprs in tlist? */ : : foreach(tl, targetlist) 0.00 : 5ad134: 4d 8b 6d 08 mov 0x8(%r13),%r13 0.00 : 5ad138: 4d 85 ed test %r13,%r13 0.00 : 5ad13b: 74 63 je 5ad1a0 : { : GenericExprState *gstate = (GenericExprState *) lfirst(tl); 0.14 : 5ad13d: 49 8b 55 00 mov 0x0(%r13),%rdx : TargetEntry *tle = (TargetEntry *) gstate->xprstate.expr; : AttrNumber resind = tle->resno - 1; : : values[resind] = ExecEvalExpr(gstate->arg, /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5265 1.99 : 5ad141: 4c 89 f6 mov %r14,%rsi 0.00 : 5ad144: 48 8b 42 08 mov 0x8(%rdx),%rax 1.42 : 5ad148: 0f b7 58 10 movzwl 0x10(%rax),%ebx 4.99 : 5ad14c: 48 8b 42 18 mov 0x18(%rdx),%rax 0.00 : 5ad150: 48 8b 55 a0 mov -0x60(%rbp),%rdx 0.00 : 5ad154: 48 89 c7 mov %rax,%rdi 0.00 : 5ad157: 83 eb 01 sub $0x1,%ebx 0.57 : 5ad15a: 48 0f bf db movswq %bx,%rbx 0.71 : 5ad15e: 4d 8d 24 9f lea (%r15,%rbx,4),%r12 0.71 : 5ad162: 48 01 da add %rbx,%rdx 0.14 : 5ad165: 4c 89 e1 mov %r12,%rcx 0.43 : 5ad168: ff 50 10 callq *0x10(%rax) 1.42 : 5ad16b: 48 8b 55 a8 mov -0x58(%rbp),%rdx 1.14 : 5ad16f: 48 89 04 da mov %rax,(%rdx,%rbx,8) : econtext, : &isnull[resind], : &itemIsDone[resind]); : : if (itemIsDone[resind] != ExprSingleResult) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5270 4.70 : 5ad173: 41 8b 04 24 mov (%r12),%eax 0.00 : 5ad177: 85 c0 test %eax,%eax 0.00 : 5ad179: 74 b9 je 5ad134 : { : /* We have a set-valued expression in the tlist */ : if (isDone == NULL) 0.00 : 5ad17b: 48 83 7d 90 00 cmpq $0x0,-0x70(%rbp) 0.00 : 5ad180: 0f 84 fd 01 00 00 je 5ad383 : ereport(ERROR, : (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), : errmsg("set-valued function called in context that cannot accept a set"))); : if (itemIsDone[resind] == ExprMultipleResult) 0.00 : 5ad186: 83 e8 01 sub $0x1,%eax 0.00 : 5ad189: 75 a5 jne 5ad130 : { : /* we have undone sets in the tlist, set flag */ : *isDone = ExprMultipleResult; 0.00 : 5ad18b: 48 8b 45 90 mov -0x70(%rbp),%rax 0.00 : 5ad18f: c7 00 01 00 00 00 movl $0x1,(%rax) : /* : * evaluate all the expressions in the target list : */ : haveDoneSets = false; /* any exhausted set exprs in tlist? */ : : foreach(tl, targetlist) 0.00 : 5ad195: 4d 8b 6d 08 mov 0x8(%r13),%r13 0.00 : 5ad199: 4d 85 ed test %r13,%r13 0.00 : 5ad19c: 75 9f jne 5ad13d 0.00 : 5ad19e: 66 90 xchg %ax,%ax : haveDoneSets = true; : } : } : } : : if (haveDoneSets) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5290 0.57 : 5ad1a0: 80 7d c7 00 cmpb $0x0,-0x39(%rbp) 0.00 : 5ad1a4: 74 2a je 5ad1d0 : { : /* : * note: can't get here unless we verified isDone != NULL : */ : if (*isDone == ExprSingleResult) 0.00 : 5ad1a6: 48 8b 55 90 mov -0x70(%rbp),%rdx 0.00 : 5ad1aa: 8b 02 mov (%rdx),%eax 0.00 : 5ad1ac: 85 c0 test %eax,%eax 0.00 : 5ad1ae: 0f 84 bc 01 00 00 je 5ad370 0.00 : 5ad1b4: 48 8b 55 98 mov -0x68(%rbp),%rdx 0.00 : 5ad1b8: 4c 8b 6a 08 mov 0x8(%rdx),%r13 : { : /* : * We have some done and some undone sets. Restart the done ones : * so that we can deliver a tuple (if possible). : */ : foreach(tl, targetlist) 0.00 : 5ad1bc: 4d 85 ed test %r13,%r13 0.00 : 5ad1bf: 75 6f jne 5ad230 : * have to cycle the nonempty sets to completion, else resources : * will not be released from subplans etc. : * : * XXX is that still necessary? : */ : if (*isDone == ExprEndResult) 0.00 : 5ad1c1: 83 f8 02 cmp $0x2,%eax 0.00 : 5ad1c4: 0f 84 02 01 00 00 je 5ad2cc 0.00 : 5ad1ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 0.57 : 5ad1d0: 48 8b 45 c8 mov -0x38(%rbp),%rax 0.00 : 5ad1d4: 48 89 05 85 d6 60 00 mov %rax,0x60d685(%rip) # bba860 : : /* : * Successfully formed a result row. Mark the result slot as containing a : * valid virtual tuple. : */ : return ExecStoreVirtualTuple(slot); 0.43 : 5ad1db: 48 8b 7d b0 mov -0x50(%rbp),%rdi : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5494 1.28 : 5ad1df: 48 83 c4 48 add $0x48,%rsp 0.14 : 5ad1e3: 5b pop %rbx 0.85 : 5ad1e4: 41 5c pop %r12 1.71 : 5ad1e6: 41 5d pop %r13 0.85 : 5ad1e8: 41 5e pop %r14 0.00 : 5ad1ea: 41 5f pop %r15 0.00 : 5ad1ec: c9 leaveq : : /* : * Successfully formed a result row. Mark the result slot as containing a : * valid virtual tuple. : */ : return ExecStoreVirtualTuple(slot); /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5493 0.71 : 5ad1ed: e9 2e 68 00 00 jmpq 5b3a20 0.00 : 5ad1f2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : TargetEntry *tle = (TargetEntry *) gstate->xprstate.expr; : AttrNumber resind = tle->resno - 1; : : if (itemIsDone[resind] == ExprEndResult) : { : values[resind] = ExecEvalExpr(gstate->arg, 0.00 : 5ad1f8: 48 8b 42 18 mov 0x18(%rdx),%rax 0.00 : 5ad1fc: 48 8b 55 a0 mov -0x60(%rbp),%rdx 0.00 : 5ad200: 4c 89 e1 mov %r12,%rcx 0.00 : 5ad203: 4c 89 f6 mov %r14,%rsi 0.00 : 5ad206: 48 01 da add %rbx,%rdx 0.00 : 5ad209: 48 89 c7 mov %rax,%rdi 0.00 : 5ad20c: ff 50 10 callq *0x10(%rax) 0.00 : 5ad20f: 48 8b 55 a8 mov -0x58(%rbp),%rdx 0.00 : 5ad213: 48 89 04 da mov %rax,(%rdx,%rbx,8) : econtext, : &isnull[resind], : &itemIsDone[resind]); : : if (itemIsDone[resind] == ExprEndResult) 0.00 : 5ad217: 41 83 3c 24 02 cmpl $0x2,(%r12) 0.00 : 5ad21c: 0f 84 a0 00 00 00 je 5ad2c2 : { : /* : * We have some done and some undone sets. Restart the done ones : * so that we can deliver a tuple (if possible). : */ : foreach(tl, targetlist) 0.00 : 5ad222: 4d 8b 6d 08 mov 0x8(%r13),%r13 0.00 : 5ad226: 4d 85 ed test %r13,%r13 0.00 : 5ad229: 74 2c je 5ad257 0.00 : 5ad22b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : { : GenericExprState *gstate = (GenericExprState *) lfirst(tl); 0.00 : 5ad230: 49 8b 55 00 mov 0x0(%r13),%rdx : TargetEntry *tle = (TargetEntry *) gstate->xprstate.expr; : AttrNumber resind = tle->resno - 1; : : if (itemIsDone[resind] == ExprEndResult) 0.00 : 5ad234: 48 8b 42 08 mov 0x8(%rdx),%rax 0.00 : 5ad238: 0f b7 40 10 movzwl 0x10(%rax),%eax 0.00 : 5ad23c: 83 e8 01 sub $0x1,%eax 0.00 : 5ad23f: 48 0f bf d8 movswq %ax,%rbx 0.00 : 5ad243: 4d 8d 24 9f lea (%r15,%rbx,4),%r12 0.00 : 5ad247: 41 83 3c 24 02 cmpl $0x2,(%r12) 0.00 : 5ad24c: 74 aa je 5ad1f8 : { : /* : * We have some done and some undone sets. Restart the done ones : * so that we can deliver a tuple (if possible). : */ : foreach(tl, targetlist) 0.00 : 5ad24e: 4d 8b 6d 08 mov 0x8(%r13),%r13 0.00 : 5ad252: 4d 85 ed test %r13,%r13 0.00 : 5ad255: 75 d9 jne 5ad230 0.00 : 5ad257: 48 8b 55 90 mov -0x70(%rbp),%rdx 0.00 : 5ad25b: 8b 02 mov (%rdx),%eax : * have to cycle the nonempty sets to completion, else resources : * will not be released from subplans etc. : * : * XXX is that still necessary? : */ : if (*isDone == ExprEndResult) 0.00 : 5ad25d: 83 f8 02 cmp $0x2,%eax 0.00 : 5ad260: 0f 85 6a ff ff ff jne 5ad1d0 0.00 : 5ad266: eb 64 jmp 5ad2cc 0.00 : 5ad268: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5ad26f: 00 : } : } : else : { : /* we have to pay attention to varOutputCols[] */ : int *varOutputCols = projInfo->pi_varOutputCols; 0.00 : 5ad270: 4c 8b 4b 40 mov 0x40(%rbx),%r9 0.00 : 5ad274: 31 ff xor %edi,%edi 0.00 : 5ad276: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 5ad27d: 00 00 00 : : for (i = 0; i < numSimpleVars; i++) : { : char *slotptr = ((char *) econtext) + varSlotOffsets[i]; : TupleTableSlot *varSlot = *((TupleTableSlot **) slotptr); 0.00 : 5ad280: 49 63 04 bb movslq (%r11,%rdi,4),%rax : int varNumber = varNumbers[i] - 1; : int varOutputCol = varOutputCols[i] - 1; : : values[varOutputCol] = varSlot->tts_values[varNumber]; 0.00 : 5ad284: 41 8b 0c b9 mov (%r9,%rdi,4),%ecx 0.00 : 5ad288: 83 e9 01 sub $0x1,%ecx : int *varOutputCols = projInfo->pi_varOutputCols; : : for (i = 0; i < numSimpleVars; i++) : { : char *slotptr = ((char *) econtext) + varSlotOffsets[i]; : TupleTableSlot *varSlot = *((TupleTableSlot **) slotptr); 0.00 : 5ad28b: 49 8b 34 06 mov (%r14,%rax,1),%rsi : int varNumber = varNumbers[i] - 1; : int varOutputCol = varOutputCols[i] - 1; : : values[varOutputCol] = varSlot->tts_values[varNumber]; 0.00 : 5ad28f: 41 8b 04 ba mov (%r10,%rdi,4),%eax 0.00 : 5ad293: 48 63 c9 movslq %ecx,%rcx : isnull[varOutputCol] = varSlot->tts_isnull[varNumber]; 0.00 : 5ad296: 48 83 c7 01 add $0x1,%rdi : char *slotptr = ((char *) econtext) + varSlotOffsets[i]; : TupleTableSlot *varSlot = *((TupleTableSlot **) slotptr); : int varNumber = varNumbers[i] - 1; : int varOutputCol = varOutputCols[i] - 1; : : values[varOutputCol] = varSlot->tts_values[varNumber]; 0.00 : 5ad29a: 48 8b 56 28 mov 0x28(%rsi),%rdx 0.00 : 5ad29e: 83 e8 01 sub $0x1,%eax : else : { : /* we have to pay attention to varOutputCols[] */ : int *varOutputCols = projInfo->pi_varOutputCols; : : for (i = 0; i < numSimpleVars; i++) 0.00 : 5ad2a1: 41 39 f8 cmp %edi,%r8d : char *slotptr = ((char *) econtext) + varSlotOffsets[i]; : TupleTableSlot *varSlot = *((TupleTableSlot **) slotptr); : int varNumber = varNumbers[i] - 1; : int varOutputCol = varOutputCols[i] - 1; : : values[varOutputCol] = varSlot->tts_values[varNumber]; 0.00 : 5ad2a4: 48 98 cltq 0.00 : 5ad2a6: 48 8b 14 c2 mov (%rdx,%rax,8),%rdx 0.00 : 5ad2aa: 49 89 54 cd 00 mov %rdx,0x0(%r13,%rcx,8) : isnull[varOutputCol] = varSlot->tts_isnull[varNumber]; 0.00 : 5ad2af: 48 8b 56 30 mov 0x30(%rsi),%rdx 0.00 : 5ad2b3: 0f b6 04 02 movzbl (%rdx,%rax,1),%eax 0.00 : 5ad2b7: 41 88 04 0c mov %al,(%r12,%rcx,1) : else : { : /* we have to pay attention to varOutputCols[] */ : int *varOutputCols = projInfo->pi_varOutputCols; : : for (i = 0; i < numSimpleVars; i++) 0.00 : 5ad2bb: 7f c3 jg 5ad280 0.00 : 5ad2bd: e9 0c fe ff ff jmpq 5ad0ce : { : /* : * Oh dear, this item is returning an empty set. Guess : * we can't make a tuple after all. : */ : *isDone = ExprEndResult; 0.00 : 5ad2c2: 48 8b 45 90 mov -0x70(%rbp),%rax 0.00 : 5ad2c6: c7 00 02 00 00 00 movl $0x2,(%rax) 0.00 : 5ad2cc: 48 8b 45 98 mov -0x68(%rbp),%rax 0.00 : 5ad2d0: 48 8b 40 08 mov 0x8(%rax),%rax : * : * XXX is that still necessary? : */ : if (*isDone == ExprEndResult) : { : foreach(tl, targetlist) 0.00 : 5ad2d4: 48 85 c0 test %rax,%rax 0.00 : 5ad2d7: 48 89 45 d0 mov %rax,-0x30(%rbp) 0.00 : 5ad2db: 74 6c je 5ad349 0.00 : 5ad2dd: 0f 1f 00 nopl (%rax) : { : GenericExprState *gstate = (GenericExprState *) lfirst(tl); 0.00 : 5ad2e0: 48 8b 55 d0 mov -0x30(%rbp),%rdx 0.00 : 5ad2e4: 48 8b 12 mov (%rdx),%rdx 0.00 : 5ad2e7: 48 89 55 b8 mov %rdx,-0x48(%rbp) : TargetEntry *tle = (TargetEntry *) gstate->xprstate.expr; : AttrNumber resind = tle->resno - 1; : : while (itemIsDone[resind] == ExprMultipleResult) 0.00 : 5ad2eb: 48 8b 42 08 mov 0x8(%rdx),%rax 0.00 : 5ad2ef: 0f b7 40 10 movzwl 0x10(%rax),%eax 0.00 : 5ad2f3: 83 e8 01 sub $0x1,%eax 0.00 : 5ad2f6: 48 0f bf c0 movswq %ax,%rax 0.00 : 5ad2fa: 49 8d 1c 87 lea (%r15,%rax,4),%rbx 0.00 : 5ad2fe: 83 3b 01 cmpl $0x1,(%rbx) 0.00 : 5ad301: 75 35 jne 5ad338 0.00 : 5ad303: 48 8b 55 a8 mov -0x58(%rbp),%rdx 0.00 : 5ad307: 4c 8b 65 a0 mov -0x60(%rbp),%r12 0.00 : 5ad30b: 4c 8d 2c c2 lea (%rdx,%rax,8),%r13 0.00 : 5ad30f: 49 01 c4 add %rax,%r12 0.00 : 5ad312: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : { : values[resind] = ExecEvalExpr(gstate->arg, 0.00 : 5ad318: 48 8b 55 b8 mov -0x48(%rbp),%rdx 0.00 : 5ad31c: 48 89 d9 mov %rbx,%rcx 0.00 : 5ad31f: 4c 89 f6 mov %r14,%rsi 0.00 : 5ad322: 48 8b 42 18 mov 0x18(%rdx),%rax 0.00 : 5ad326: 4c 89 e2 mov %r12,%rdx 0.00 : 5ad329: 48 89 c7 mov %rax,%rdi 0.00 : 5ad32c: ff 50 10 callq *0x10(%rax) 0.00 : 5ad32f: 49 89 45 00 mov %rax,0x0(%r13) : { : GenericExprState *gstate = (GenericExprState *) lfirst(tl); : TargetEntry *tle = (TargetEntry *) gstate->xprstate.expr; : AttrNumber resind = tle->resno - 1; : : while (itemIsDone[resind] == ExprMultipleResult) 0.00 : 5ad333: 83 3b 01 cmpl $0x1,(%rbx) 0.00 : 5ad336: 74 e0 je 5ad318 : * : * XXX is that still necessary? : */ : if (*isDone == ExprEndResult) : { : foreach(tl, targetlist) 0.00 : 5ad338: 48 8b 45 d0 mov -0x30(%rbp),%rax 0.00 : 5ad33c: 48 8b 40 08 mov 0x8(%rax),%rax 0.00 : 5ad340: 48 85 c0 test %rax,%rax 0.00 : 5ad343: 48 89 45 d0 mov %rax,-0x30(%rbp) 0.00 : 5ad347: 75 97 jne 5ad2e0 0.00 : 5ad349: 48 8b 55 c8 mov -0x38(%rbp),%rdx 0.00 : 5ad34d: 48 89 15 0c d5 60 00 mov %rdx,0x60d50c(%rip) # bba860 : /* : * Successfully formed a result row. Mark the result slot as containing a : * valid virtual tuple. : */ : return ExecStoreVirtualTuple(slot); : } 0.00 : 5ad354: 48 8b 45 b0 mov -0x50(%rbp),%rax 0.00 : 5ad358: 48 83 c4 48 add $0x48,%rsp 0.00 : 5ad35c: 5b pop %rbx 0.00 : 5ad35d: 41 5c pop %r12 0.00 : 5ad35f: 41 5d pop %r13 0.00 : 5ad361: 41 5e pop %r14 0.00 : 5ad363: 41 5f pop %r15 0.00 : 5ad365: c9 leaveq 0.00 : 5ad366: c3 retq 0.00 : 5ad367: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5ad36e: 00 00 : if (*isDone == ExprSingleResult) : { : /* : * all sets are done, so report that tlist expansion is complete. : */ : *isDone = ExprEndResult; 0.00 : 5ad370: c7 02 02 00 00 00 movl $0x2,(%rdx) 0.00 : 5ad376: 48 8b 45 c8 mov -0x38(%rbp),%rax 0.00 : 5ad37a: 48 89 05 df d4 60 00 mov %rax,0x60d4df(%rip) # bba860 0.00 : 5ad381: eb d1 jmp 5ad354 : : if (itemIsDone[resind] != ExprSingleResult) : { : /* We have a set-valued expression in the tlist */ : if (isDone == NULL) : ereport(ERROR, 0.00 : 5ad383: 45 31 c0 xor %r8d,%r8d 0.00 : 5ad386: b9 f0 ad 88 00 mov $0x88adf0,%ecx 0.00 : 5ad38b: ba 9c 14 00 00 mov $0x149c,%edx 0.00 : 5ad390: be fc a3 88 00 mov $0x88a3fc,%esi 0.00 : 5ad395: bf 14 00 00 00 mov $0x14,%edi 0.00 : 5ad39a: e8 21 d7 1c 00 callq 77aac0 0.00 : 5ad39f: 84 c0 test %al,%al 0.00 : 5ad3a1: 75 05 jne 5ad3a8 0.00 : 5ad3a3: e8 28 c1 eb ff callq 4694d0 0.00 : 5ad3a8: bf 30 b3 87 00 mov $0x87b330,%edi 0.00 : 5ad3ad: 31 c0 xor %eax,%eax 0.00 : 5ad3af: e8 ec f4 1c 00 callq 77c8a0 0.00 : 5ad3b4: bf 40 04 00 00 mov $0x440,%edi 0.00 : 5ad3b9: 89 c3 mov %eax,%ebx 0.00 : 5ad3bb: e8 90 f9 1c 00 callq 77cd50 0.00 : 5ad3c0: 89 de mov %ebx,%esi 0.00 : 5ad3c2: 89 c7 mov %eax,%edi 0.00 : 5ad3c4: 31 c0 xor %eax,%eax 0.00 : 5ad3c6: e8 15 d2 1c 00 callq 77a5e0 0.00 : 5ad3cb: eb d6 jmp 5ad3a3 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 13.70 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 5.45 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 5.28 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 4.95 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1090 4.29 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1097 3.96 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1085 3.63 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1083 3.47 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1099 3.30 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1085 3.30 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 2.81 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 2.81 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 2.48 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 2.31 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 1.98 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 1.98 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1137 1.98 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1139 1.82 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1098 1.82 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 1.49 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 1.32 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 1.16 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 1.16 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1107 1.16 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1140 1.16 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 0.99 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 0.99 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1089 0.99 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 0.99 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 0.83 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1067 0.83 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1083 0.83 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1095 0.83 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1097 0.83 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1112 0.66 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1049 0.66 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1068 0.66 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1140 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000046ef10 : : * re-computing information about previously extracted attributes. : * slot->tts_nvalid is the number of attributes already extracted. : */ : static void : slot_deform_tuple(TupleTableSlot *slot, int natts) : { 0.50 : 46ef10: 55 push %rbp 0.00 : 46ef11: 48 89 e5 mov %rsp,%rbp 0.33 : 46ef14: 41 57 push %r15 0.17 : 46ef16: 41 89 f7 mov %esi,%r15d 0.00 : 46ef19: 41 56 push %r14 0.00 : 46ef1b: 49 89 fe mov %rdi,%r14 0.17 : 46ef1e: 41 55 push %r13 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1049 0.66 : 46ef20: 41 54 push %r12 0.00 : 46ef22: 53 push %rbx : /* : * Check whether the first call for this tuple, and initialize or restore : * loop state. : */ : attnum = slot->tts_nvalid; : if (attnum == 0) 0.00 : 46ef23: 31 db xor %ebx,%ebx : * re-computing information about previously extracted attributes. : * slot->tts_nvalid is the number of attributes already extracted. : */ : static void : slot_deform_tuple(TupleTableSlot *slot, int natts) : { 0.00 : 46ef25: 48 83 ec 28 sub $0x28,%rsp : HeapTuple tuple = slot->tts_tuple; : TupleDesc tupleDesc = slot->tts_tupleDescriptor; : Datum *values = slot->tts_values; 0.50 : 46ef29: 48 8b 47 28 mov 0x28(%rdi),%rax 0.00 : 46ef2d: 48 89 45 d0 mov %rax,-0x30(%rbp) : bool *isnull = slot->tts_isnull; : HeapTupleHeader tup = tuple->t_data; 0.33 : 46ef31: 48 8b 47 08 mov 0x8(%rdi),%rax : : /* : * Check whether the first call for this tuple, and initialize or restore : * loop state. : */ : attnum = slot->tts_nvalid; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1067 0.83 : 46ef35: 8b 77 24 mov 0x24(%rdi),%esi : slot_deform_tuple(TupleTableSlot *slot, int natts) : { : HeapTuple tuple = slot->tts_tuple; : TupleDesc tupleDesc = slot->tts_tupleDescriptor; : Datum *values = slot->tts_values; : bool *isnull = slot->tts_isnull; 0.00 : 46ef38: 4c 8b 5f 30 mov 0x30(%rdi),%r11 : HeapTupleHeader tup = tuple->t_data; 0.00 : 46ef3c: 4c 8b 40 10 mov 0x10(%rax),%r8 : bool hasnulls = HeapTupleHasNulls(tuple); 0.00 : 46ef40: 41 0f b7 40 14 movzwl 0x14(%r8),%eax 0.50 : 46ef45: 83 e0 01 and $0x1,%eax 0.00 : 46ef48: 41 89 c2 mov %eax,%r10d : Form_pg_attribute *att = tupleDesc->attrs; 0.00 : 46ef4b: 48 8b 47 10 mov 0x10(%rdi),%rax : /* : * Check whether the first call for this tuple, and initialize or restore : * loop state. : */ : attnum = slot->tts_nvalid; : if (attnum == 0) 0.00 : 46ef4f: 31 ff xor %edi,%edi /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1068 0.66 : 46ef51: 85 f6 test %esi,%esi : TupleDesc tupleDesc = slot->tts_tupleDescriptor; : Datum *values = slot->tts_values; : bool *isnull = slot->tts_isnull; : HeapTupleHeader tup = tuple->t_data; : bool hasnulls = HeapTupleHasNulls(tuple); : Form_pg_attribute *att = tupleDesc->attrs; 0.00 : 46ef53: 4c 8b 48 08 mov 0x8(%rax),%r9 : /* : * Check whether the first call for this tuple, and initialize or restore : * loop state. : */ : attnum = slot->tts_nvalid; : if (attnum == 0) 0.00 : 46ef57: 74 09 je 46ef62 : } : else : { : /* Restore state from previous execution */ : off = slot->tts_off; : slow = slot->tts_slow; 0.00 : 46ef59: 41 0f b6 7e 07 movzbl 0x7(%r14),%edi : slow = false; : } : else : { : /* Restore state from previous execution */ : off = slot->tts_off; 0.00 : 46ef5e: 49 8b 5e 58 mov 0x58(%r14),%rbx : slow = slot->tts_slow; : } : : tp = (char *) tup + tup->t_hoff; 0.33 : 46ef62: 41 0f b6 40 16 movzbl 0x16(%r8),%eax : : for (; attnum < natts; attnum++) 0.50 : 46ef67: 44 39 fe cmp %r15d,%esi : /* Restore state from previous execution */ : off = slot->tts_off; : slow = slot->tts_slow; : } : : tp = (char *) tup + tup->t_hoff; 0.00 : 46ef6a: 4d 8d 2c 00 lea (%r8,%rax,1),%r13 : : for (; attnum < natts; attnum++) 0.17 : 46ef6e: 0f 8d c0 00 00 00 jge 46f034 0.50 : 46ef74: 41 89 f4 mov %esi,%r12d 0.00 : 46ef77: eb 40 jmp 46efb9 0.00 : 46ef79: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : { : Form_pg_attribute thisatt = att[attnum]; : : if (hasnulls && att_isnull(attnum, bp)) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 2.81 : 46ef80: 44 89 e0 mov %r12d,%eax 0.50 : 46ef83: 44 89 e1 mov %r12d,%ecx 0.33 : 46ef86: c1 f8 03 sar $0x3,%eax 0.99 : 46ef89: 83 e1 07 and $0x7,%ecx 1.49 : 46ef8c: 48 98 cltq 0.00 : 46ef8e: 41 0f b6 44 00 17 movzbl 0x17(%r8,%rax,1),%eax 1.32 : 46ef94: d3 f8 sar %cl,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 5.28 : 46ef96: a8 01 test $0x1,%al 0.00 : 46ef98: 75 2b jne 46efc5 : { : values[attnum] = (Datum) 0; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1089 0.99 : 46ef9a: 48 8b 55 d0 mov -0x30(%rbp),%rdx : isnull[attnum] = true; 0.50 : 46ef9e: bf 01 00 00 00 mov $0x1,%edi : { : Form_pg_attribute thisatt = att[attnum]; : : if (hasnulls && att_isnull(attnum, bp)) : { : values[attnum] = (Datum) 0; 0.17 : 46efa3: 48 c7 04 f2 00 00 00 movq $0x0,(%rdx,%rsi,8) 0.00 : 46efaa: 00 : isnull[attnum] = true; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1090 4.95 : 46efab: 41 c6 04 33 01 movb $0x1,(%r11,%rsi,1) : slow = slot->tts_slow; : } : : tp = (char *) tup + tup->t_hoff; : : for (; attnum < natts; attnum++) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1083 3.63 : 46efb0: 41 83 c4 01 add $0x1,%r12d 0.83 : 46efb4: 45 39 e7 cmp %r12d,%r15d 0.00 : 46efb7: 7e 78 jle 46f031 : { : Form_pg_attribute thisatt = att[attnum]; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1085 3.30 : 46efb9: 49 63 f4 movslq %r12d,%rsi : : if (hasnulls && att_isnull(attnum, bp)) 0.17 : 46efbc: 45 84 d2 test %r10b,%r10b : : tp = (char *) tup + tup->t_hoff; : : for (; attnum < natts; attnum++) : { : Form_pg_attribute thisatt = att[attnum]; 3.96 : 46efbf: 49 8b 14 f1 mov (%r9,%rsi,8),%rdx : : if (hasnulls && att_isnull(attnum, bp)) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1087 3.30 : 46efc3: 75 bb jne 46ef80 : continue; : } : : isnull[attnum] = false; : : if (!slow && thisatt->attcacheoff >= 0) 0.33 : 46efc5: 40 84 ff test %dil,%dil : isnull[attnum] = true; : slow = true; /* can't use attcacheoff anymore */ : continue; : } : : isnull[attnum] = false; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1095 0.83 : 46efc8: 41 c6 04 33 00 movb $0x0,(%r11,%rsi,1) : : if (!slow && thisatt->attcacheoff >= 0) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1097 4.29 : 46efcd: 0f 85 7d 00 00 00 jne 46f050 0.00 : 46efd3: 8b 42 54 mov 0x54(%rdx),%eax 0.83 : 46efd6: 85 c0 test %eax,%eax 0.00 : 46efd8: 78 76 js 46f050 : off = thisatt->attcacheoff; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1098 1.82 : 46efda: 48 63 d8 movslq %eax,%rbx : : if (!slow) : thisatt->attcacheoff = off; : } : : values[attnum] = fetchatt(thisatt, tp + off); /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 1.16 : 46efdd: 80 7a 5c 00 cmpb $0x0,0x5c(%rdx) 0.50 : 46efe1: 49 8d 44 1d 00 lea 0x0(%r13,%rbx,1),%rax 2.48 : 46efe6: 74 28 je 46f010 1.98 : 46efe8: 0f b7 42 4c movzwl 0x4c(%rdx),%eax 0.00 : 46efec: 66 83 f8 08 cmp $0x8,%ax 0.00 : 46eff0: 0f 84 3a 01 00 00 je 46f130 0.17 : 46eff6: 66 83 f8 04 cmp $0x4,%ax 0.00 : 46effa: 0f 84 90 01 00 00 je 46f190 0.00 : 46f000: 66 83 f8 02 cmp $0x2,%ax 0.00 : 46f004: 0f 84 a6 01 00 00 je 46f1b0 0.00 : 46f00a: 41 0f b6 44 1d 00 movzbl 0x0(%r13,%rbx,1),%eax 2.81 : 46f010: 48 8b 4d d0 mov -0x30(%rbp),%rcx 0.99 : 46f014: 48 89 04 f1 mov %rax,(%rcx,%rsi,8) : : off = att_addlength_pointer(off, thisatt->attlen, tp + off); /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 13.70 : 46f018: 0f b7 42 4c movzwl 0x4c(%rdx),%eax 0.17 : 46f01c: 66 85 c0 test %ax,%ax 0.00 : 46f01f: 7e 6f jle 46f090 0.00 : 46f021: 48 0f bf c0 movswq %ax,%rax : slow = slot->tts_slow; : } : : tp = (char *) tup + tup->t_hoff; : : for (; attnum < natts; attnum++) 0.50 : 46f025: 41 83 c4 01 add $0x1,%r12d : thisatt->attcacheoff = off; : } : : values[attnum] = fetchatt(thisatt, tp + off); : : off = att_addlength_pointer(off, thisatt->attlen, tp + off); /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 2.31 : 46f029: 48 01 c3 add %rax,%rbx : slow = slot->tts_slow; : } : : tp = (char *) tup + tup->t_hoff; : : for (; attnum < natts; attnum++) 0.33 : 46f02c: 45 39 e7 cmp %r12d,%r15d 0.00 : 46f02f: 7f 88 jg 46efb9 : * re-computing information about previously extracted attributes. : * slot->tts_nvalid is the number of attributes already extracted. : */ : static void : slot_deform_tuple(TupleTableSlot *slot, int natts) : { 0.50 : 46f031: 44 89 fe mov %r15d,%esi : : /* : * Save state for next execution : */ : slot->tts_nvalid = attnum; : slot->tts_off = off; 0.00 : 46f034: 49 89 5e 58 mov %rbx,0x58(%r14) : } : : /* : * Save state for next execution : */ : slot->tts_nvalid = attnum; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1137 1.98 : 46f038: 41 89 76 24 mov %esi,0x24(%r14) : slot->tts_off = off; : slot->tts_slow = slow; /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1139 1.98 : 46f03c: 41 88 7e 07 mov %dil,0x7(%r14) : } 0.17 : 46f040: 48 83 c4 28 add $0x28,%rsp 0.00 : 46f044: 5b pop %rbx 0.33 : 46f045: 41 5c pop %r12 0.17 : 46f047: 41 5d pop %r13 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1140 0.66 : 46f049: 41 5e pop %r14 0.00 : 46f04b: 41 5f pop %r15 0.17 : 46f04d: c9 leaveq 0.33 : 46f04e: c3 retq 0.00 : 46f04f: 90 nop : : isnull[attnum] = false; : : if (!slow && thisatt->attcacheoff >= 0) : off = thisatt->attcacheoff; : else if (thisatt->attlen == -1) 0.17 : 46f050: 66 83 7a 4c ff cmpw $0xffff,0x4c(%rdx) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1099 3.47 : 46f055: 74 71 je 46f0c8 : } : } : else : { : /* not varlena, so safe to use att_align_nominal */ : off = att_align_nominal(off, thisatt->attalign); 0.33 : 46f057: 0f b6 42 5e movzbl 0x5e(%rdx),%eax 0.00 : 46f05b: 3c 69 cmp $0x69,%al 0.00 : 46f05d: 0f 84 1d 01 00 00 je 46f180 0.00 : 46f063: 3c 63 cmp $0x63,%al 0.00 : 46f065: 74 10 je 46f077 0.00 : 46f067: 3c 64 cmp $0x64,%al 0.00 : 46f069: 0f 84 51 01 00 00 je 46f1c0 0.00 : 46f06f: 48 83 c3 01 add $0x1,%rbx 0.00 : 46f073: 48 83 e3 fe and $0xfffffffffffffffe,%rbx : : if (!slow) 0.00 : 46f077: 40 84 ff test %dil,%dil 0.00 : 46f07a: 0f 85 5d ff ff ff jne 46efdd : thisatt->attcacheoff = off; 0.00 : 46f080: 89 5a 54 mov %ebx,0x54(%rdx) 0.00 : 46f083: e9 55 ff ff ff jmpq 46efdd 0.00 : 46f088: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 46f08f: 00 : } : : values[attnum] = fetchatt(thisatt, tp + off); : : off = att_addlength_pointer(off, thisatt->attlen, tp + off); 0.17 : 46f090: 66 83 c0 01 add $0x1,%ax 0.00 : 46f094: 0f 85 a6 00 00 00 jne 46f140 0.00 : 46f09a: 41 0f b6 44 1d 00 movzbl 0x0(%r13,%rbx,1),%eax /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 0.99 : 46f0a0: 3c 01 cmp $0x1,%al 0.00 : 46f0a2: 0f 84 50 01 00 00 je 46f1f8 0.17 : 46f0a8: a8 01 test $0x1,%al 0.00 : 46f0aa: 0f 85 20 01 00 00 jne 46f1d0 0.00 : 46f0b0: 41 8b 44 1d 00 mov 0x0(%r13,%rbx,1),%eax 0.00 : 46f0b5: c1 e8 02 shr $0x2,%eax 0.00 : 46f0b8: 89 c0 mov %eax,%eax 0.33 : 46f0ba: 48 8d 1c 18 lea (%rax,%rbx,1),%rbx 0.00 : 46f0be: e9 ad 00 00 00 jmpq 46f170 0.00 : 46f0c3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : * We can only cache the offset for a varlena attribute if the : * offset is already suitably aligned, so that there would be no : * pad bytes in any case: then the offset will be valid for either : * an aligned or unaligned value. : */ : if (!slow && /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1107 1.16 : 46f0c8: 40 84 ff test %dil,%dil 0.00 : 46f0cb: 75 26 jne 46f0f3 0.00 : 46f0cd: 0f b6 42 5e movzbl 0x5e(%rdx),%eax 0.00 : 46f0d1: 3c 69 cmp $0x69,%al 0.00 : 46f0d3: 0f 84 4f 01 00 00 je 46f228 0.00 : 46f0d9: 3c 63 cmp $0x63,%al 0.00 : 46f0db: 74 a3 je 46f080 0.00 : 46f0dd: 3c 64 cmp $0x64,%al 0.00 : 46f0df: 90 nop 0.00 : 46f0e0: 0f 84 52 01 00 00 je 46f238 0.00 : 46f0e6: 48 8d 43 01 lea 0x1(%rbx),%rax 0.00 : 46f0ea: 48 83 e0 fe and $0xfffffffffffffffe,%rax 0.00 : 46f0ee: 48 39 d8 cmp %rbx,%rax 0.00 : 46f0f1: 74 8d je 46f080 : off == att_align_nominal(off, thisatt->attalign)) : thisatt->attcacheoff = off; : else : { : off = att_align_pointer(off, thisatt->attalign, -1, /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1112 0.83 : 46f0f3: 41 80 7c 1d 00 00 cmpb $0x0,0x0(%r13,%rbx,1) 0.00 : 46f0f9: 0f 85 a1 00 00 00 jne 46f1a0 0.00 : 46f0ff: 0f b6 42 5e movzbl 0x5e(%rdx),%eax 0.00 : 46f103: 3c 69 cmp $0x69,%al 0.00 : 46f105: 0f 84 d5 00 00 00 je 46f1e0 0.00 : 46f10b: 3c 63 cmp $0x63,%al 0.00 : 46f10d: 0f 1f 00 nopl (%rax) 0.00 : 46f110: 0f 84 8a 00 00 00 je 46f1a0 0.00 : 46f116: 3c 64 cmp $0x64,%al 0.00 : 46f118: 0f 84 27 01 00 00 je 46f245 0.00 : 46f11e: 48 83 c3 01 add $0x1,%rbx 0.00 : 46f122: bf 01 00 00 00 mov $0x1,%edi 0.00 : 46f127: 48 83 e3 fe and $0xfffffffffffffffe,%rbx 0.00 : 46f12b: e9 ad fe ff ff jmpq 46efdd : : if (!slow) : thisatt->attcacheoff = off; : } : : values[attnum] = fetchatt(thisatt, tp + off); 0.00 : 46f130: 49 8b 44 1d 00 mov 0x0(%r13,%rbx,1),%rax 0.00 : 46f135: e9 d6 fe ff ff jmpq 46f010 0.00 : 46f13a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : : off = att_addlength_pointer(off, thisatt->attlen, tp + off); 0.00 : 46f140: 49 8d 7c 1d 00 lea 0x0(%r13,%rbx,1),%rdi 0.00 : 46f145: 4c 89 45 c8 mov %r8,-0x38(%rbp) 0.00 : 46f149: 4c 89 4d c0 mov %r9,-0x40(%rbp) 0.00 : 46f14d: 44 88 55 b8 mov %r10b,-0x48(%rbp) 0.00 : 46f151: 4c 89 5d b0 mov %r11,-0x50(%rbp) 0.00 : 46f155: e8 f6 a6 ff ff callq 469850 0.00 : 46f15a: 44 0f b6 55 b8 movzbl -0x48(%rbp),%r10d 0.00 : 46f15f: 4c 8b 45 c8 mov -0x38(%rbp),%r8 0.00 : 46f163: 48 8d 5c 03 01 lea 0x1(%rbx,%rax,1),%rbx 0.00 : 46f168: 4c 8b 4d c0 mov -0x40(%rbp),%r9 0.00 : 46f16c: 4c 8b 5d b0 mov -0x50(%rbp),%r11 : * Save state for next execution : */ : slot->tts_nvalid = attnum; : slot->tts_off = off; : slot->tts_slow = slow; : } /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1140 1.16 : 46f170: bf 01 00 00 00 mov $0x1,%edi 0.00 : 46f175: e9 36 fe ff ff jmpq 46efb0 0.00 : 46f17a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : } : } : else : { : /* not varlena, so safe to use att_align_nominal */ : off = att_align_nominal(off, thisatt->attalign); 0.00 : 46f180: 48 83 c3 03 add $0x3,%rbx 0.00 : 46f184: 48 83 e3 fc and $0xfffffffffffffffc,%rbx 0.17 : 46f188: e9 ea fe ff ff jmpq 46f077 0.00 : 46f18d: 0f 1f 00 nopl (%rax) : : if (!slow) : thisatt->attcacheoff = off; : } : : values[attnum] = fetchatt(thisatt, tp + off); /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 1.16 : 46f190: 41 8b 44 1d 00 mov 0x0(%r13,%rbx,1),%eax /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1126 5.45 : 46f195: e9 76 fe ff ff jmpq 46f010 0.00 : 46f19a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : { : /* not varlena, so safe to use att_align_nominal */ : off = att_align_nominal(off, thisatt->attalign); : : if (!slow) : thisatt->attcacheoff = off; 0.50 : 46f1a0: bf 01 00 00 00 mov $0x1,%edi 0.00 : 46f1a5: e9 33 fe ff ff jmpq 46efdd 0.00 : 46f1aa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : } : : values[attnum] = fetchatt(thisatt, tp + off); 0.00 : 46f1b0: 41 0f b7 44 1d 00 movzwl 0x0(%r13,%rbx,1),%eax 0.00 : 46f1b6: e9 55 fe ff ff jmpq 46f010 0.00 : 46f1bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : } : } : else : { : /* not varlena, so safe to use att_align_nominal */ : off = att_align_nominal(off, thisatt->attalign); 0.00 : 46f1c0: 48 83 c3 07 add $0x7,%rbx 0.00 : 46f1c4: 48 83 e3 f8 and $0xfffffffffffffff8,%rbx 0.00 : 46f1c8: e9 aa fe ff ff jmpq 46f077 0.00 : 46f1cd: 0f 1f 00 nopl (%rax) : thisatt->attcacheoff = off; : } : : values[attnum] = fetchatt(thisatt, tp + off); : : off = att_addlength_pointer(off, thisatt->attlen, tp + off); 0.17 : 46f1d0: d0 e8 shr %al 0.00 : 46f1d2: 0f b6 c0 movzbl %al,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1128 1.82 : 46f1d5: e9 e0 fe ff ff jmpq 46f0ba 0.00 : 46f1da: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : if (!slow && : off == att_align_nominal(off, thisatt->attalign)) : thisatt->attcacheoff = off; : else : { : off = att_align_pointer(off, thisatt->attalign, -1, 0.00 : 46f1e0: 48 83 c3 03 add $0x3,%rbx 0.00 : 46f1e4: bf 01 00 00 00 mov $0x1,%edi 0.00 : 46f1e9: 48 83 e3 fc and $0xfffffffffffffffc,%rbx 0.00 : 46f1ed: e9 eb fd ff ff jmpq 46efdd 0.00 : 46f1f2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : thisatt->attcacheoff = off; : } : : values[attnum] = fetchatt(thisatt, tp + off); : : off = att_addlength_pointer(off, thisatt->attlen, tp + off); 0.00 : 46f1f8: 41 0f b6 54 1d 01 movzbl 0x1(%r13,%rbx,1),%edx 0.00 : 46f1fe: b8 0a 00 00 00 mov $0xa,%eax 0.00 : 46f203: 80 fa 01 cmp $0x1,%dl 0.00 : 46f206: 0f 84 ae fe ff ff je 46f0ba 0.00 : 46f20c: 80 fa 12 cmp $0x12,%dl 0.00 : 46f20f: b8 03 00 00 00 mov $0x3,%eax 0.00 : 46f214: ba 12 00 00 00 mov $0x12,%edx 0.00 : 46f219: 48 0f 44 c2 cmove %rdx,%rax 0.00 : 46f21d: e9 98 fe ff ff jmpq 46f0ba 0.00 : 46f222: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : * We can only cache the offset for a varlena attribute if the : * offset is already suitably aligned, so that there would be no : * pad bytes in any case: then the offset will be valid for either : * an aligned or unaligned value. : */ : if (!slow && 0.00 : 46f228: 48 8d 43 03 lea 0x3(%rbx),%rax 0.00 : 46f22c: 48 83 e0 fc and $0xfffffffffffffffc,%rax 0.00 : 46f230: e9 b9 fe ff ff jmpq 46f0ee 0.00 : 46f235: 0f 1f 00 nopl (%rax) 0.00 : 46f238: 48 8d 43 07 lea 0x7(%rbx),%rax 0.00 : 46f23c: 48 83 e0 f8 and $0xfffffffffffffff8,%rax 0.00 : 46f240: e9 a9 fe ff ff jmpq 46f0ee : off == att_align_nominal(off, thisatt->attalign)) : thisatt->attcacheoff = off; : else : { : off = att_align_pointer(off, thisatt->attalign, -1, 0.00 : 46f245: 48 83 c3 07 add $0x7,%rbx 0.00 : 46f249: bf 01 00 00 00 mov $0x1,%edi 0.00 : 46f24e: 48 83 e3 f8 and $0xfffffffffffffff8,%rbx 0.00 : 46f252: e9 86 fd ff ff jmpq 46efdd Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 19.89 ??:0 11.13 ??:0 7.30 ??:0 6.57 ??:0 6.20 ??:0 6.02 ??:0 5.66 ??:0 5.47 ??:0 5.11 ??:0 5.11 ??:0 4.93 ??:0 4.74 ??:0 4.20 ??:0 3.83 ??:0 3.65 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000031dc0 <__isinf>: ??:0 7.30 : 31dc0: f2 0f 11 44 24 f8 movsd %xmm0,-0x8(%rsp) 11.13 : 31dc6: 48 8b 44 24 f8 mov -0x8(%rsp),%rax 19.89 : 31dcb: 48 89 c1 mov %rax,%rcx ??:0 3.83 : 31dce: 48 c1 e9 20 shr $0x20,%rcx 4.93 : 31dd2: 89 ca mov %ecx,%edx 4.20 : 31dd4: c1 f9 1e sar $0x1e,%ecx 0.18 : 31dd7: 81 e2 ff ff ff 7f and $0x7fffffff,%edx 3.65 : 31ddd: 81 f2 00 00 f0 7f xor $0x7ff00000,%edx ??:0 6.57 : 31de3: 09 c2 or %eax,%edx 5.47 : 31de5: 89 d0 mov %edx,%eax ??:0 4.74 : 31de7: f7 d8 neg %eax ??:0 5.11 : 31de9: 09 d0 or %edx,%eax 6.02 : 31deb: c1 f8 1f sar $0x1f,%eax 5.66 : 31dee: f7 d0 not %eax 11.31 : 31df0: 21 c8 and %ecx,%eax Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 9.46 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 8.11 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 7.34 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 5.41 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1981 4.83 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 4.63 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 3.67 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 3.67 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1989 3.47 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1960 3.28 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 2.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 2.51 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1998 2.32 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 2.32 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1998 2.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 2.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1964 2.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 2.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1981 1.93 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 1.93 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 1.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 1.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1977 1.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1979 1.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1979 1.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1998 1.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 1.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1954 1.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1992 1.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1995 1.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1998 1.16 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1992 0.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 0.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 0.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1989 0.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1992 0.58 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 0.58 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 0.58 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 0.58 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1977 0.58 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1998 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b1430 : : static Datum : ExecMakeFunctionResultNoSets(FuncExprState *fcache, : ExprContext *econtext, : bool *isNull, : ExprDoneCond *isDone) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 9.46 : 5b1430: 55 push %rbp 7.34 : 5b1431: 48 89 e5 mov %rsp,%rbp 0.00 : 5b1434: 41 57 push %r15 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1946 4.63 : 5b1436: 49 89 d7 mov %rdx,%r15 0.58 : 5b1439: 41 56 push %r14 0.00 : 5b143b: 49 89 f6 mov %rsi,%r14 0.00 : 5b143e: 41 55 push %r13 2.32 : 5b1440: 49 89 fd mov %rdi,%r13 0.77 : 5b1443: 41 54 push %r12 0.58 : 5b1445: 53 push %rbx 0.58 : 5b1446: 48 89 cb mov %rcx,%rbx 1.35 : 5b1449: 48 83 ec 48 sub $0x48,%rsp : FunctionCallInfo fcinfo; : PgStat_FunctionCallUsage fcusage; : int i; : : /* Guard against stack overflow due to overly complex expressions */ : check_stack_depth(); /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1954 1.35 : 5b144d: e8 8e a5 0e 00 callq 69b9e0 : : if (isDone) 0.00 : 5b1452: 48 85 db test %rbx,%rbx 0.00 : 5b1455: 74 06 je 5b145d : *isDone = ExprSingleResult; 0.00 : 5b1457: c7 03 00 00 00 00 movl $0x0,(%rbx) : : /* inlined, simplified version of ExecEvalFuncArgs */ : fcinfo = &fcache->fcinfo_data; : i = 0; : foreach(arg, fcache->args) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 3.67 : 5b145d: 49 8b 45 18 mov 0x18(%r13),%rax : #endif /* PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(PG_LIST_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE ListCell * : list_head(const List *l) : { : return l ? l->head : NULL; 0.19 : 5b1461: 48 85 c0 test %rax,%rax 0.00 : 5b1464: 0f 84 c2 00 00 00 je 5b152c 0.00 : 5b146a: 4c 8b 60 08 mov 0x8(%rax),%r12 2.12 : 5b146e: 4d 85 e4 test %r12,%r12 0.00 : 5b1471: 0f 84 b5 00 00 00 je 5b152c 3.28 : 5b1477: 31 db xor %ebx,%ebx 0.00 : 5b1479: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : { : ExprState *argstate = (ExprState *) lfirst(arg); /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1964 2.12 : 5b1480: 49 8b 04 24 mov (%r12),%rax : : fcinfo->arg[i] = ExecEvalExpr(argstate, /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 8.11 : 5b1484: 49 8d 94 1d b0 03 00 lea 0x3b0(%r13,%rbx,1),%rdx 0.00 : 5b148b: 00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 1.93 : 5b148c: 31 c9 xor %ecx,%ecx 0.00 : 5b148e: 4c 89 f6 mov %r14,%rsi 0.77 : 5b1491: 48 89 c7 mov %rax,%rdi 2.12 : 5b1494: ff 50 10 callq *0x10(%rax) 2.90 : 5b1497: 49 89 84 dd 90 00 00 mov %rax,0x90(%r13,%rbx,8) 0.00 : 5b149e: 00 : *isDone = ExprSingleResult; : : /* inlined, simplified version of ExecEvalFuncArgs */ : fcinfo = &fcache->fcinfo_data; : i = 0; : foreach(arg, fcache->args) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 4.83 : 5b149f: 4d 8b 64 24 08 mov 0x8(%r12),%r12 : { : ExprState *argstate = (ExprState *) lfirst(arg); : : fcinfo->arg[i] = ExecEvalExpr(argstate, /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1966 1.74 : 5b14a4: 8d 53 01 lea 0x1(%rbx),%edx : *isDone = ExprSingleResult; : : /* inlined, simplified version of ExecEvalFuncArgs */ : fcinfo = &fcache->fcinfo_data; : i = 0; : foreach(arg, fcache->args) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1962 1.93 : 5b14a7: 48 83 c3 01 add $0x1,%rbx 0.39 : 5b14ab: 4d 85 e4 test %r12,%r12 0.00 : 5b14ae: 75 d0 jne 5b1480 : : /* : * If function is strict, and there are any NULL arguments, skip calling : * the function and return NULL. : */ : if (fcache->func.fn_strict) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1977 0.58 : 5b14b0: 41 80 7d 2e 00 cmpb $0x0,0x2e(%r13) 0.39 : 5b14b5: 74 34 je 5b14eb 1.74 : 5b14b7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5b14be: 00 00 : { : while (--i >= 0) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1979 1.54 : 5b14c0: 83 ea 01 sub $0x1,%edx 1.54 : 5b14c3: 78 26 js 5b14eb : { : if (fcinfo->argnull[i]) 0.39 : 5b14c5: 48 63 c2 movslq %edx,%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1981 2.12 : 5b14c8: 41 80 bc 05 b0 03 00 cmpb $0x0,0x3b0(%r13,%rax,1) 0.00 : 5b14cf: 00 00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1981 5.41 : 5b14d1: 74 ed je 5b14c0 : { : *isNull = true; 0.00 : 5b14d3: 41 c6 07 01 movb $0x1,(%r15) 0.00 : 5b14d7: 31 db xor %ebx,%ebx : *isNull = fcinfo->isnull; : : pgstat_end_function_usage(&fcusage, true); : : return result; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1998 1.54 : 5b14d9: 48 83 c4 48 add $0x48,%rsp 0.00 : 5b14dd: 48 89 d8 mov %rbx,%rax 0.00 : 5b14e0: 5b pop %rbx 2.51 : 5b14e1: 41 5c pop %r12 0.00 : 5b14e3: 41 5d pop %r13 0.58 : 5b14e5: 41 5e pop %r14 0.00 : 5b14e7: 41 5f pop %r15 2.32 : 5b14e9: c9 leaveq 0.19 : 5b14ea: c3 retq : : if (isDone) : *isDone = ExprSingleResult; : : /* inlined, simplified version of ExecEvalFuncArgs */ : fcinfo = &fcache->fcinfo_data; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1960 3.47 : 5b14eb: 49 8d 5d 70 lea 0x70(%r13),%rbx : return (Datum) 0; : } : } : } : : pgstat_init_function_usage(fcinfo, &fcusage); 0.00 : 5b14ef: 4c 8d 65 90 lea -0x70(%rbp),%r12 0.00 : 5b14f3: 48 89 df mov %rbx,%rdi /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1989 0.77 : 5b14f6: 4c 89 e6 mov %r12,%rsi 3.67 : 5b14f9: e8 82 12 09 00 callq 642780 : : fcinfo->isnull = false; : result = FunctionCallInvoke(fcinfo); /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1992 1.35 : 5b14fe: 49 8b 45 70 mov 0x70(%r13),%rax 1.16 : 5b1502: 48 89 df mov %rbx,%rdi : } : } : : pgstat_init_function_usage(fcinfo, &fcusage); : : fcinfo->isnull = false; 0.00 : 5b1505: 41 c6 85 8c 00 00 00 movb $0x0,0x8c(%r13) 0.00 : 5b150c: 00 : result = FunctionCallInvoke(fcinfo); 0.00 : 5b150d: ff 10 callq *(%rax) 0.77 : 5b150f: 48 89 c3 mov %rax,%rbx : *isNull = fcinfo->isnull; 0.00 : 5b1512: 41 0f b6 85 8c 00 00 movzbl 0x8c(%r13),%eax 0.00 : 5b1519: 00 : : pgstat_end_function_usage(&fcusage, true); 0.00 : 5b151a: be 01 00 00 00 mov $0x1,%esi /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1995 1.35 : 5b151f: 4c 89 e7 mov %r12,%rdi : : pgstat_init_function_usage(fcinfo, &fcusage); : : fcinfo->isnull = false; : result = FunctionCallInvoke(fcinfo); : *isNull = fcinfo->isnull; 0.19 : 5b1522: 41 88 07 mov %al,(%r15) : : pgstat_end_function_usage(&fcusage, true); 0.00 : 5b1525: e8 a6 10 09 00 callq 6425d0 : : return result; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1998 1.35 : 5b152a: eb ad jmp 5b14d9 : *isDone = ExprSingleResult; : : /* inlined, simplified version of ExecEvalFuncArgs */ : fcinfo = &fcache->fcinfo_data; : i = 0; : foreach(arg, fcache->args) 0.00 : 5b152c: 31 d2 xor %edx,%edx 0.00 : 5b152e: eb 80 jmp 5b14b0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 22.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:539 14.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:544 9.41 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:536 6.76 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:600 5.29 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:556 5.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:556 5.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:600 4.41 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:603 3.82 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:534 3.53 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:603 3.24 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:538 3.24 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:603 2.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:599 1.76 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:587 1.76 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:597 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:534 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:558 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:606 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:603 0.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:606 0.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:599 0.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:599 0.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:603 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b9950 : : * : * When called, CurrentMemoryContext should be the per-query context. : */ : static void : advance_aggregates(AggState *aggstate, AggStatePerGroup pergroup) : { 0.29 : 5b9950: 55 push %rbp 0.00 : 5b9951: 48 89 e5 mov %rsp,%rbp 0.00 : 5b9954: 41 57 push %r15 0.29 : 5b9956: 49 89 ff mov %rdi,%r15 0.00 : 5b9959: 41 56 push %r14 0.00 : 5b995b: 41 55 push %r13 0.00 : 5b995d: 41 54 push %r12 0.29 : 5b995f: 53 push %rbx 0.00 : 5b9960: 48 83 ec 18 sub $0x18,%rsp 0.00 : 5b9964: 48 89 75 c0 mov %rsi,-0x40(%rbp) : int aggno; : : for (aggno = 0; aggno < aggstate->numaggs; aggno++) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:534 0.88 : 5b9968: 44 8b 9f 98 00 00 00 mov 0x98(%rdi),%r11d 0.00 : 5b996f: 45 85 db test %r11d,%r11d 0.00 : 5b9972: 0f 8e c1 00 00 00 jle 5b9a39 0.00 : 5b9978: 45 31 f6 xor %r14d,%r14d 0.00 : 5b997b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : { : AggStatePerAgg peraggstate = &aggstate->peragg[aggno]; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:536 9.41 : 5b9980: 4d 63 ee movslq %r14d,%r13 0.00 : 5b9983: 49 69 dd a8 04 00 00 imul $0x4a8,%r13,%rbx 0.00 : 5b998a: 49 03 9f b0 00 00 00 add 0xb0(%r15),%rbx : AggStatePerGroup pergroupstate = &pergroup[aggno]; : ExprState *filter = peraggstate->aggrefstate->aggfilter; 0.00 : 5b9991: 48 8b 03 mov (%rbx),%rax : int numTransInputs = peraggstate->numTransInputs; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:539 22.35 : 5b9994: 44 8b 63 18 mov 0x18(%rbx),%r12d : : for (aggno = 0; aggno < aggstate->numaggs; aggno++) : { : AggStatePerAgg peraggstate = &aggstate->peragg[aggno]; : AggStatePerGroup pergroupstate = &pergroup[aggno]; : ExprState *filter = peraggstate->aggrefstate->aggfilter; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:538 3.24 : 5b9998: 48 8b 78 28 mov 0x28(%rax),%rdi : int numTransInputs = peraggstate->numTransInputs; : int i; : TupleTableSlot *slot; : : /* Skip anything FILTERed out */ : if (filter) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:544 14.12 : 5b999c: 48 85 ff test %rdi,%rdi 0.00 : 5b999f: 74 1c je 5b99bd : { : Datum res; : bool isnull; : : res = ExecEvalExprSwitchContext(filter, aggstate->tmpcontext, 0.00 : 5b99a1: 49 8b b7 c0 00 00 00 mov 0xc0(%r15),%rsi 0.00 : 5b99a8: 48 8d 55 d7 lea -0x29(%rbp),%rdx 0.00 : 5b99ac: 31 c9 xor %ecx,%ecx 0.00 : 5b99ae: e8 2d 35 ff ff callq 5acee0 : &isnull, NULL); : if (isnull || !DatumGetBool(res)) 0.00 : 5b99b3: 80 7d d7 00 cmpb $0x0,-0x29(%rbp) 0.00 : 5b99b7: 75 6f jne 5b9a28 0.00 : 5b99b9: 84 c0 test %al,%al 0.00 : 5b99bb: 74 6b je 5b9a28 : continue; : } : : /* Evaluate the current input expressions for this aggregate */ : slot = ExecProject(peraggstate->evalproj, NULL); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:556 5.00 : 5b99bd: 48 8b bb e0 00 00 00 mov 0xe0(%rbx),%rdi 0.00 : 5b99c4: 31 f6 xor %esi,%esi 0.00 : 5b99c6: e8 35 36 ff ff callq 5ad000 : : if (peraggstate->numSortCols > 0) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:558 0.88 : 5b99cb: 44 8b 93 8c 00 00 00 mov 0x8c(%rbx),%r10d : if (isnull || !DatumGetBool(res)) : continue; : } : : /* Evaluate the current input expressions for this aggregate */ : slot = ExecProject(peraggstate->evalproj, NULL); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:556 5.29 : 5b99d2: 48 89 c1 mov %rax,%rcx : : if (peraggstate->numSortCols > 0) 0.29 : 5b99d5: 45 85 d2 test %r10d,%r10d 0.00 : 5b99d8: 7e 76 jle 5b9a50 : * storing the row in the sorter, to save space if there are a lot : * of nulls. Note that we must only check numTransInputs columns, : * not numInputs, since nullity in columns used only for sorting : * is not relevant here. : */ : if (peraggstate->transfn.fn_strict) 0.00 : 5b99da: 80 7b 36 00 cmpb $0x0,0x36(%rbx) 0.00 : 5b99de: 74 2c je 5b9a0c : { : for (i = 0; i < numTransInputs; i++) 0.00 : 5b99e0: 45 85 e4 test %r12d,%r12d 0.00 : 5b99e3: 7e 27 jle 5b9a0c : { : if (slot->tts_isnull[i]) 0.00 : 5b99e5: 48 8b 40 30 mov 0x30(%rax),%rax 0.00 : 5b99e9: 31 d2 xor %edx,%edx 0.00 : 5b99eb: 80 38 00 cmpb $0x0,(%rax) 0.00 : 5b99ee: 48 89 c6 mov %rax,%rsi 0.00 : 5b99f1: 74 11 je 5b9a04 0.00 : 5b99f3: eb 33 jmp 5b9a28 0.00 : 5b99f5: 0f 1f 00 nopl (%rax) 0.00 : 5b99f8: 0f b6 46 01 movzbl 0x1(%rsi),%eax 0.00 : 5b99fc: 48 83 c6 01 add $0x1,%rsi 0.00 : 5b9a00: 84 c0 test %al,%al 0.00 : 5b9a02: 75 24 jne 5b9a28 : * not numInputs, since nullity in columns used only for sorting : * is not relevant here. : */ : if (peraggstate->transfn.fn_strict) : { : for (i = 0; i < numTransInputs; i++) 0.00 : 5b9a04: 83 c2 01 add $0x1,%edx 0.00 : 5b9a07: 41 39 d4 cmp %edx,%r12d 0.00 : 5b9a0a: 7f ec jg 5b99f8 : if (i < numTransInputs) : continue; : } : : /* OK, put the tuple into the tuplesort object */ : if (peraggstate->numInputs == 1) 0.00 : 5b9a0c: 83 7b 14 01 cmpl $0x1,0x14(%rbx) 0.00 : 5b9a10: 0f 84 8a 00 00 00 je 5b9aa0 : tuplesort_putdatum(peraggstate->sortstate, : slot->tts_values[0], : slot->tts_isnull[0]); : else : tuplesort_puttupleslot(peraggstate->sortstate, slot); 0.00 : 5b9a16: 48 8b bb f8 00 00 00 mov 0xf8(%rbx),%rdi 0.00 : 5b9a1d: 48 89 ce mov %rcx,%rsi 0.00 : 5b9a20: e8 0b 56 1e 00 callq 79f030 0.00 : 5b9a25: 0f 1f 00 nopl (%rax) : static void : advance_aggregates(AggState *aggstate, AggStatePerGroup pergroup) : { : int aggno; : : for (aggno = 0; aggno < aggstate->numaggs; aggno++) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:534 3.82 : 5b9a28: 41 83 c6 01 add $0x1,%r14d 0.00 : 5b9a2c: 45 39 b7 98 00 00 00 cmp %r14d,0x98(%r15) 0.00 : 5b9a33: 0f 8f 47 ff ff ff jg 5b9980 : } : : advance_transition_function(aggstate, peraggstate, pergroupstate); : } : } : } 0.00 : 5b9a39: 48 83 c4 18 add $0x18,%rsp /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:606 0.59 : 5b9a3d: 5b pop %rbx 0.00 : 5b9a3e: 41 5c pop %r12 0.00 : 5b9a40: 41 5d pop %r13 0.00 : 5b9a42: 41 5e pop %r14 0.29 : 5b9a44: 41 5f pop %r15 0.00 : 5b9a46: c9 leaveq 0.88 : 5b9a47: c3 retq 0.00 : 5b9a48: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5b9a4f: 00 : if (peraggstate->numInputs == 1) : tuplesort_putdatum(peraggstate->sortstate, : slot->tts_values[0], : slot->tts_isnull[0]); : else : tuplesort_puttupleslot(peraggstate->sortstate, slot); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:587 1.76 : 5b9a50: 31 d2 xor %edx,%edx : FunctionCallInfo fcinfo = &peraggstate->transfn_fcinfo; : : /* Load values into fcinfo */ : /* Start from 1, since the 0th arg will be the transition value */ : Assert(slot->tts_nvalid >= numTransInputs); : for (i = 0; i < numTransInputs; i++) 0.00 : 5b9a52: 45 85 e4 test %r12d,%r12d 0.00 : 5b9a55: 7e 31 jle 5b9a88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:597 1.76 : 5b9a57: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5b9a5e: 00 00 : { : fcinfo->arg[i + 1] = slot->tts_values[i]; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:599 2.35 : 5b9a60: 48 8b 41 28 mov 0x28(%rcx),%rax 0.59 : 5b9a64: 48 8b 04 d0 mov (%rax,%rdx,8),%rax 0.59 : 5b9a68: 48 89 84 d3 28 01 00 mov %rax,0x128(%rbx,%rdx,8) 0.00 : 5b9a6f: 00 : fcinfo->argnull[i + 1] = slot->tts_isnull[i]; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:600 6.76 : 5b9a70: 48 8b 41 30 mov 0x30(%rcx),%rax 0.29 : 5b9a74: 0f b6 04 10 movzbl (%rax,%rdx,1),%eax 0.00 : 5b9a78: 88 84 13 41 04 00 00 mov %al,0x441(%rbx,%rdx,1) 5.00 : 5b9a7f: 48 83 c2 01 add $0x1,%rdx : FunctionCallInfo fcinfo = &peraggstate->transfn_fcinfo; : : /* Load values into fcinfo */ : /* Start from 1, since the 0th arg will be the transition value */ : Assert(slot->tts_nvalid >= numTransInputs); : for (i = 0; i < numTransInputs; i++) 0.00 : 5b9a83: 41 39 d4 cmp %edx,%r12d 0.00 : 5b9a86: 7f d8 jg 5b9a60 : { : fcinfo->arg[i + 1] = slot->tts_values[i]; : fcinfo->argnull[i + 1] = slot->tts_isnull[i]; : } : : advance_transition_function(aggstate, peraggstate, pergroupstate); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:603 0.59 : 5b9a88: 48 8b 55 c0 mov -0x40(%rbp),%rdx 3.53 : 5b9a8c: 49 c1 e5 04 shl $0x4,%r13 0.00 : 5b9a90: 48 89 de mov %rbx,%rsi 0.29 : 5b9a93: 4c 89 ff mov %r15,%rdi 0.88 : 5b9a96: 4c 01 ea add %r13,%rdx 3.24 : 5b9a99: e8 f2 fc ff ff callq 5b9790 4.41 : 5b9a9e: eb 88 jmp 5b9a28 : continue; : } : : /* OK, put the tuple into the tuplesort object */ : if (peraggstate->numInputs == 1) : tuplesort_putdatum(peraggstate->sortstate, 0.00 : 5b9aa0: 48 8b 41 30 mov 0x30(%rcx),%rax 0.00 : 5b9aa4: 48 8b bb f8 00 00 00 mov 0xf8(%rbx),%rdi 0.00 : 5b9aab: 0f be 10 movsbl (%rax),%edx 0.00 : 5b9aae: 48 8b 41 28 mov 0x28(%rcx),%rax 0.00 : 5b9ab2: 48 8b 30 mov (%rax),%rsi 0.00 : 5b9ab5: e8 66 54 1e 00 callq 79ef20 0.00 : 5b9aba: e9 69 ff ff ff jmpq 5b9a28 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 45.54 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 14.97 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 5.41 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:724 4.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:718 3.18 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:706 2.87 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 2.55 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:727 1.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:704 1.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:711 1.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:727 1.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 1.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 1.59 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:704 1.59 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:712 0.96 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:704 0.96 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:704 0.96 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 0.64 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:704 0.64 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:704 0.64 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:727 0.64 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:727 0.64 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 0.64 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000758230 : : * need to be so careful. : *****************************************************************************/ : : Datum : bpchareq(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:704 0.96 : 758230: 55 push %rbp 0.64 : 758231: 48 89 e5 mov %rsp,%rbp 0.00 : 758234: 48 89 5d d8 mov %rbx,-0x28(%rbp) 1.91 : 758238: 4c 89 65 e0 mov %r12,-0x20(%rbp) 0.32 : 75823c: 4c 89 6d e8 mov %r13,-0x18(%rbp) 0.96 : 758240: 4c 89 75 f0 mov %r14,-0x10(%rbp) 1.59 : 758244: 49 89 fd mov %rdi,%r13 0.64 : 758247: 4c 89 7d f8 mov %r15,-0x8(%rbp) 0.32 : 75824b: 48 83 ec 30 sub $0x30,%rsp : BpChar *arg1 = PG_GETARG_BPCHAR_PP(0); 0.00 : 75824f: 48 8b 7f 20 mov 0x20(%rdi),%rdi : : /* : * Since we only care about equality or not-equality, we can avoid all the : * expense of strcoll() here, and just do bitwise comparison. : */ : if (len1 != len2) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:718 4.14 : 758253: 45 31 f6 xor %r14d,%r14d : *****************************************************************************/ : : Datum : bpchareq(PG_FUNCTION_ARGS) : { : BpChar *arg1 = PG_GETARG_BPCHAR_PP(0); 0.00 : 758256: e8 85 6a 02 00 callq 77ece0 : BpChar *arg2 = PG_GETARG_BPCHAR_PP(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:706 3.18 : 75825b: 49 8b 7d 28 mov 0x28(%r13),%rdi : *****************************************************************************/ : : Datum : bpchareq(PG_FUNCTION_ARGS) : { : BpChar *arg1 = PG_GETARG_BPCHAR_PP(0); 0.00 : 75825f: 49 89 c4 mov %rax,%r12 : BpChar *arg2 = PG_GETARG_BPCHAR_PP(1); 0.00 : 758262: e8 79 6a 02 00 callq 77ece0 : int len1, : len2; : bool result; : : len1 = bcTruelen(arg1); 0.00 : 758267: 4c 89 e7 mov %r12,%rdi : : Datum : bpchareq(PG_FUNCTION_ARGS) : { : BpChar *arg1 = PG_GETARG_BPCHAR_PP(0); : BpChar *arg2 = PG_GETARG_BPCHAR_PP(1); 0.32 : 75826a: 48 89 c3 mov %rax,%rbx : int len1, : len2; : bool result; : : len1 = bcTruelen(arg1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:711 1.91 : 75826d: e8 1e fb ff ff callq 757d90 : len2 = bcTruelen(arg2); 0.00 : 758272: 48 89 df mov %rbx,%rdi : BpChar *arg2 = PG_GETARG_BPCHAR_PP(1); : int len1, : len2; : bool result; : : len1 = bcTruelen(arg1); 0.00 : 758275: 41 89 c7 mov %eax,%r15d : len2 = bcTruelen(arg2); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:712 1.59 : 758278: e8 13 fb ff ff callq 757d90 : : /* : * Since we only care about equality or not-equality, we can avoid all the : * expense of strcoll() here, and just do bitwise comparison. : */ : if (len1 != len2) 0.00 : 75827d: 41 39 c7 cmp %eax,%r15d 0.00 : 758280: 74 3e je 7582c0 : result = false; : else : result = (memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), len1) == 0); : : PG_FREE_IF_COPY(arg1, 0); 0.00 : 758282: 4d 3b 65 20 cmp 0x20(%r13),%r12 0.00 : 758286: 74 0d je 758295 0.00 : 758288: 4c 89 e7 mov %r12,%rdi 0.00 : 75828b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 758290: e8 eb 08 04 00 callq 798b80 : PG_FREE_IF_COPY(arg2, 1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:724 5.41 : 758295: 49 3b 5d 28 cmp 0x28(%r13),%rbx 0.00 : 758299: 74 08 je 7582a3 0.00 : 75829b: 48 89 df mov %rbx,%rdi 0.00 : 75829e: e8 dd 08 04 00 callq 798b80 : : PG_RETURN_BOOL(result); : } /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:727 0.64 : 7582a3: 4c 89 f0 mov %r14,%rax 0.00 : 7582a6: 48 8b 5d d8 mov -0x28(%rbp),%rbx 0.32 : 7582aa: 4c 8b 65 e0 mov -0x20(%rbp),%r12 0.00 : 7582ae: 4c 8b 6d e8 mov -0x18(%rbp),%r13 0.64 : 7582b2: 4c 8b 75 f0 mov -0x10(%rbp),%r14 0.00 : 7582b6: 4c 8b 7d f8 mov -0x8(%rbp),%r15 1.91 : 7582ba: c9 leaveq 2.55 : 7582bb: c3 retq 0.00 : 7582bc: 0f 1f 40 00 nopl 0x0(%rax) : * expense of strcoll() here, and just do bitwise comparison. : */ : if (len1 != len2) : result = false; : else : result = (memcmp(VARDATA_ANY(arg1), VARDATA_ANY(arg2), len1) == 0); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 1.91 : 7582c0: f6 03 01 testb $0x1,(%rbx) 0.32 : 7582c3: 48 8d 43 04 lea 0x4(%rbx),%rax 0.00 : 7582c7: 48 8d 7b 01 lea 0x1(%rbx),%rdi 0.00 : 7582cb: 49 8d 74 24 01 lea 0x1(%r12),%rsi 0.96 : 7582d0: 49 63 cf movslq %r15d,%rcx 0.32 : 7582d3: 48 0f 44 f8 cmove %rax,%rdi 0.00 : 7582d7: 41 f6 04 24 01 testb $0x1,(%r12) 0.64 : 7582dc: 49 8d 44 24 04 lea 0x4(%r12),%rax 0.00 : 7582e1: 48 0f 44 f0 cmove %rax,%rsi 0.00 : 7582e5: 48 39 c9 cmp %rcx,%rcx 0.64 : 7582e8: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 45.54 : 7582ea: 0f 97 c2 seta %dl 14.97 : 7582ed: 0f 92 c0 setb %al 0.00 : 7582f0: 45 31 f6 xor %r14d,%r14d 0.00 : 7582f3: 38 c2 cmp %al,%dl /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:721 1.91 : 7582f5: 41 0f 94 c6 sete %r14b 2.87 : 7582f9: eb 87 jmp 758282 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 36.66 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:459 10.29 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:466 6.75 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:461 6.75 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:465 6.43 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:472 4.82 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:484 4.18 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:484 3.86 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:450 3.22 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:467 2.89 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:472 2.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:450 2.57 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:450 1.93 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:480 1.93 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:484 1.29 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:461 0.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:459 0.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:475 0.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:484 0.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:484 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b4110 : : * NB: only the tuple is cleared, not the tuple descriptor (if any). : * -------------------------------- : */ : TupleTableSlot * /* return: slot passed */ : ExecClearTuple(TupleTableSlot *slot) /* slot in which to store tuple */ : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:450 2.57 : 5b4110: 55 push %rbp 0.00 : 5b4111: 48 89 e5 mov %rsp,%rbp 2.57 : 5b4114: 53 push %rbx 3.86 : 5b4115: 48 89 fb mov %rdi,%rbx 0.00 : 5b4118: 48 83 ec 08 sub $0x8,%rsp : Assert(slot != NULL); : : /* : * Free the old physical tuple if necessary. : */ : if (slot->tts_shouldFree) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:459 0.96 : 5b411c: 80 7f 05 00 cmpb $0x0,0x5(%rdi) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:459 36.66 : 5b4120: 75 5e jne 5b4180 : heap_freetuple(slot->tts_tuple); : if (slot->tts_shouldFreeMin) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:461 6.75 : 5b4122: 80 7b 06 00 cmpb $0x0,0x6(%rbx) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:461 1.29 : 5b4126: 75 48 jne 5b4170 : slot->tts_shouldFreeMin = false; : : /* : * Drop the pin on the referenced buffer, if there is one. : */ : if (BufferIsValid(slot->tts_buffer)) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:472 6.43 : 5b4128: 8b 7b 20 mov 0x20(%rbx),%edi : if (slot->tts_shouldFree) : heap_freetuple(slot->tts_tuple); : if (slot->tts_shouldFreeMin) : heap_free_minimal_tuple(slot->tts_mintuple); : : slot->tts_tuple = NULL; 0.00 : 5b412b: 48 c7 43 08 00 00 00 movq $0x0,0x8(%rbx) 0.00 : 5b4132: 00 : slot->tts_mintuple = NULL; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:465 6.75 : 5b4133: 48 c7 43 38 00 00 00 movq $0x0,0x38(%rbx) 0.00 : 5b413a: 00 : slot->tts_shouldFree = false; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:466 10.29 : 5b413b: c6 43 05 00 movb $0x0,0x5(%rbx) : slot->tts_shouldFreeMin = false; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:467 3.22 : 5b413f: c6 43 06 00 movb $0x0,0x6(%rbx) : : /* : * Drop the pin on the referenced buffer, if there is one. : */ : if (BufferIsValid(slot->tts_buffer)) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:472 2.89 : 5b4143: 85 ff test %edi,%edi 0.00 : 5b4145: 74 05 je 5b414c : ReleaseBuffer(slot->tts_buffer); 0.00 : 5b4147: e8 14 0d 0c 00 callq 674e60 : : slot->tts_buffer = InvalidBuffer; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:475 0.96 : 5b414c: c7 43 20 00 00 00 00 movl $0x0,0x20(%rbx) : : /* : * Mark it empty. : */ : slot->tts_isempty = true; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:480 1.93 : 5b4153: c6 43 04 01 movb $0x1,0x4(%rbx) : slot->tts_nvalid = 0; : : return slot; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:484 1.93 : 5b4157: 48 89 d8 mov %rbx,%rax : : /* : * Mark it empty. : */ : slot->tts_isempty = true; : slot->tts_nvalid = 0; 0.00 : 5b415a: c7 43 24 00 00 00 00 movl $0x0,0x24(%rbx) : : return slot; : } 0.96 : 5b4161: 48 83 c4 08 add $0x8,%rsp 0.96 : 5b4165: 5b pop %rbx 4.18 : 5b4166: c9 leaveq 4.82 : 5b4167: c3 retq 0.00 : 5b4168: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5b416f: 00 : * Free the old physical tuple if necessary. : */ : if (slot->tts_shouldFree) : heap_freetuple(slot->tts_tuple); : if (slot->tts_shouldFreeMin) : heap_free_minimal_tuple(slot->tts_mintuple); 0.00 : 5b4170: 48 8b 7b 38 mov 0x38(%rbx),%rdi 0.00 : 5b4174: e8 37 ab eb ff callq 46ecb0 0.00 : 5b4179: eb ad jmp 5b4128 0.00 : 5b417b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : : /* : * Free the old physical tuple if necessary. : */ : if (slot->tts_shouldFree) : heap_freetuple(slot->tts_tuple); 0.00 : 5b4180: 48 8b 7f 08 mov 0x8(%rdi),%rdi 0.00 : 5b4184: e8 37 ab eb ff callq 46ecc0 0.00 : 5b4189: eb 97 jmp 5b4122 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 7.04 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 7.04 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:489 5.93 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 5.93 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:447 5.93 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 4.81 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 4.81 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:439 4.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:444 3.70 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 3.33 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 2.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:492 2.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:492 2.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:515 2.96 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:516 2.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 2.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 2.22 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:494 2.22 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:501 2.22 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 1.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 1.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 1.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:433 1.48 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 1.48 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 1.11 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:492 0.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 0.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 0.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:444 0.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:467 0.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:467 0.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:501 0.74 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b9790 : : */ : static void : advance_transition_function(AggState *aggstate, : AggStatePerAgg peraggstate, : AggStatePerGroup pergroupstate) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 0.74 : 5b9790: 55 push %rbp 0.74 : 5b9791: 48 89 e5 mov %rsp,%rbp 4.81 : 5b9794: 4c 89 65 e0 mov %r12,-0x20(%rbp) 0.00 : 5b9798: 4c 89 6d e8 mov %r13,-0x18(%rbp) 1.85 : 5b979c: 49 89 f4 mov %rsi,%r12 3.33 : 5b979f: 4c 89 75 f0 mov %r14,-0x10(%rbp) 0.00 : 5b97a3: 48 89 5d d8 mov %rbx,-0x28(%rbp) 0.00 : 5b97a7: 49 89 fe mov %rdi,%r14 1.85 : 5b97aa: 4c 89 7d f8 mov %r15,-0x8(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:428 5.93 : 5b97ae: 48 83 ec 30 sub $0x30,%rsp : FunctionCallInfo fcinfo = &peraggstate->transfn_fcinfo; : MemoryContext oldContext; : Datum newVal; : : if (peraggstate->transfn.fn_strict) 0.00 : 5b97b2: 80 7e 36 00 cmpb $0x0,0x36(%rsi) : */ : static void : advance_transition_function(AggState *aggstate, : AggStatePerAgg peraggstate, : AggStatePerGroup pergroupstate) : { 0.37 : 5b97b6: 49 89 d5 mov %rdx,%r13 : FunctionCallInfo fcinfo = &peraggstate->transfn_fcinfo; : MemoryContext oldContext; : Datum newVal; : : if (peraggstate->transfn.fn_strict) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:433 1.85 : 5b97b9: 74 4c je 5b9807 : { : /* : * For a strict transfn, nothing happens when there's a NULL input; we : * just keep the prior transValue. : */ : int numTransInputs = peraggstate->numTransInputs; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:439 4.81 : 5b97bb: 8b 4e 18 mov 0x18(%rsi),%ecx : int i; : : for (i = 1; i <= numTransInputs; i++) 0.00 : 5b97be: 85 c9 test %ecx,%ecx 0.00 : 5b97c0: 7e 2f jle 5b97f1 : { : if (fcinfo->argnull[i]) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:444 0.74 : 5b97c2: 80 be 41 04 00 00 00 cmpb $0x0,0x441(%rsi) 4.44 : 5b97c9: ba 01 00 00 00 mov $0x1,%edx 0.37 : 5b97ce: 74 1a je 5b97ea 0.00 : 5b97d0: e9 e3 00 00 00 jmpq 5b98b8 0.00 : 5b97d5: 0f 1f 00 nopl (%rax) 0.00 : 5b97d8: 48 63 c2 movslq %edx,%rax 0.00 : 5b97db: 41 80 bc 04 40 04 00 cmpb $0x0,0x440(%r12,%rax,1) 0.00 : 5b97e2: 00 00 0.00 : 5b97e4: 0f 85 ce 00 00 00 jne 5b98b8 : * just keep the prior transValue. : */ : int numTransInputs = peraggstate->numTransInputs; : int i; : : for (i = 1; i <= numTransInputs; i++) 0.37 : 5b97ea: 83 c2 01 add $0x1,%edx 0.00 : 5b97ed: 39 d1 cmp %edx,%ecx 0.00 : 5b97ef: 7d e7 jge 5b97d8 : { : if (fcinfo->argnull[i]) : return; : } : if (pergroupstate->noTransValue) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:447 5.93 : 5b97f1: 41 80 7d 09 00 cmpb $0x0,0x9(%r13) 0.37 : 5b97f6: 0f 85 d4 00 00 00 jne 5b98d0 : pergroupstate->transValueIsNull = false; : pergroupstate->noTransValue = false; : MemoryContextSwitchTo(oldContext); : return; : } : if (pergroupstate->transValueIsNull) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:467 0.74 : 5b97fc: 41 80 7d 08 00 cmpb $0x0,0x8(%r13) 0.74 : 5b9801: 0f 85 b1 00 00 00 jne 5b98b8 : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; : : CurrentMemoryContext = context; /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 7.04 : 5b9807: 49 8b 86 c0 00 00 00 mov 0xc0(%r14),%rax : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.37 : 5b980e: 4c 8b 3d 4b 10 60 00 mov 0x60104b(%rip),%r15 # bba860 : */ : fcinfo->arg[0] = pergroupstate->transValue; : fcinfo->argnull[0] = pergroupstate->transValueIsNull; : fcinfo->isnull = false; /* just in case transfn doesn't set it */ : : newVal = FunctionCallInvoke(fcinfo); 0.00 : 5b9815: 49 8d bc 24 00 01 00 lea 0x100(%r12),%rdi 0.00 : 5b981c: 00 : : CurrentMemoryContext = context; 0.00 : 5b981d: 48 8b 40 28 mov 0x28(%rax),%rax 5.56 : 5b9821: 48 89 05 38 10 60 00 mov %rax,0x601038(%rip) # bba860 : : /* We run the transition functions in per-input-tuple memory context */ : oldContext = MemoryContextSwitchTo(aggstate->tmpcontext->ecxt_per_tuple_memory); : : /* set up aggstate->curperagg for AggGetAggref() */ : aggstate->curperagg = peraggstate; 0.00 : 5b9828: 4d 89 a6 c8 00 00 00 mov %r12,0xc8(%r14) : : /* : * OK to call the transition function : */ : fcinfo->arg[0] = pergroupstate->transValue; 0.00 : 5b982f: 49 8b 45 00 mov 0x0(%r13),%rax 0.00 : 5b9833: 49 89 84 24 20 01 00 mov %rax,0x120(%r12) 0.00 : 5b983a: 00 : fcinfo->argnull[0] = pergroupstate->transValueIsNull; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:489 7.04 : 5b983b: 41 0f b6 45 08 movzbl 0x8(%r13),%eax : fcinfo->isnull = false; /* just in case transfn doesn't set it */ 0.37 : 5b9840: 41 c6 84 24 1c 01 00 movb $0x0,0x11c(%r12) 0.00 : 5b9847: 00 00 : : /* : * OK to call the transition function : */ : fcinfo->arg[0] = pergroupstate->transValue; : fcinfo->argnull[0] = pergroupstate->transValueIsNull; 0.37 : 5b9849: 41 88 84 24 40 04 00 mov %al,0x440(%r12) 0.00 : 5b9850: 00 : fcinfo->isnull = false; /* just in case transfn doesn't set it */ : : newVal = FunctionCallInvoke(fcinfo); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:492 1.11 : 5b9851: 49 8b 84 24 00 01 00 mov 0x100(%r12),%rax 0.00 : 5b9858: 00 2.96 : 5b9859: ff 10 callq *(%rax) : : aggstate->curperagg = NULL; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:494 2.22 : 5b985b: 49 c7 86 c8 00 00 00 movq $0x0,0xc8(%r14) 0.00 : 5b9862: 00 00 00 00 : /* : * If pass-by-ref datatype, must copy the new value into aggcontext and : * pfree the prior transValue. But if transfn returned a pointer to its : * first input, we don't need to do anything. : */ : if (!peraggstate->transtypeByVal && /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:501 0.74 : 5b9866: 41 80 bc 24 d2 00 00 cmpb $0x0,0xd2(%r12) 0.00 : 5b986d: 00 00 : */ : fcinfo->arg[0] = pergroupstate->transValue; : fcinfo->argnull[0] = pergroupstate->transValueIsNull; : fcinfo->isnull = false; /* just in case transfn doesn't set it */ : : newVal = FunctionCallInvoke(fcinfo); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:492 2.96 : 5b986f: 48 89 c3 mov %rax,%rbx : /* : * If pass-by-ref datatype, must copy the new value into aggcontext and : * pfree the prior transValue. But if transfn returned a pointer to its : * first input, we don't need to do anything. : */ : if (!peraggstate->transtypeByVal && /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:501 2.22 : 5b9872: 75 2c jne 5b98a0 0.37 : 5b9874: 49 3b 45 00 cmp 0x0(%r13),%rax 0.00 : 5b9878: 74 26 je 5b98a0 : DatumGetPointer(newVal) != DatumGetPointer(pergroupstate->transValue)) : { : if (!fcinfo->isnull) 0.00 : 5b987a: 41 80 bc 24 1c 01 00 cmpb $0x0,0x11c(%r12) 0.00 : 5b9881: 00 00 0.00 : 5b9883: 0f 84 92 00 00 00 je 5b991b : MemoryContextSwitchTo(aggstate->aggcontext); : newVal = datumCopy(newVal, : peraggstate->transtypeByVal, : peraggstate->transtypeLen); : } : if (!pergroupstate->transValueIsNull) 0.00 : 5b9889: 41 80 7d 08 00 cmpb $0x0,0x8(%r13) 0.00 : 5b988e: 66 90 xchg %ax,%ax 0.00 : 5b9890: 75 0e jne 5b98a0 : pfree(DatumGetPointer(pergroupstate->transValue)); 0.00 : 5b9892: 49 8b 7d 00 mov 0x0(%r13),%rdi 0.00 : 5b9896: e8 e5 f2 1d 00 callq 798b80 0.00 : 5b989b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : } : : pergroupstate->transValue = newVal; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:515 2.96 : 5b98a0: 49 89 5d 00 mov %rbx,0x0(%r13) : pergroupstate->transValueIsNull = fcinfo->isnull; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:516 2.96 : 5b98a4: 41 0f b6 84 24 1c 01 movzbl 0x11c(%r12),%eax 0.00 : 5b98ab: 00 00 0.00 : 5b98ad: 41 88 45 08 mov %al,0x8(%r13) /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 3.70 : 5b98b1: 4c 89 3d a8 0f 60 00 mov %r15,0x600fa8(%rip) # bba860 : : MemoryContextSwitchTo(oldContext); : } /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 2.59 : 5b98b8: 48 8b 5d d8 mov -0x28(%rbp),%rbx 2.22 : 5b98bc: 4c 8b 65 e0 mov -0x20(%rbp),%r12 0.74 : 5b98c0: 4c 8b 6d e8 mov -0x18(%rbp),%r13 2.59 : 5b98c4: 4c 8b 75 f0 mov -0x10(%rbp),%r14 1.48 : 5b98c8: 4c 8b 7d f8 mov -0x8(%rbp),%r15 1.48 : 5b98cc: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:519 5.93 : 5b98cd: c3 retq 0.00 : 5b98ce: 66 90 xchg %ax,%ax 0.00 : 5b98d0: 49 8b 86 b8 00 00 00 mov 0xb8(%r14),%rax : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.00 : 5b98d7: 48 8b 1d 82 0f 60 00 mov 0x600f82(%rip),%rbx # bba860 : : CurrentMemoryContext = context; 0.00 : 5b98de: 48 89 05 7b 0f 60 00 mov %rax,0x600f7b(%rip) # bba860 : * : * We must copy the datum into aggcontext if it is pass-by-ref. We : * do not need to pfree the old transValue, since it's NULL. : */ : oldContext = MemoryContextSwitchTo(aggstate->aggcontext); : pergroupstate->transValue = datumCopy(fcinfo->arg[1], 0.00 : 5b98e5: 41 0f bf 94 24 ce 00 movswl 0xce(%r12),%edx 0.00 : 5b98ec: 00 00 0.00 : 5b98ee: 41 0f be b4 24 d2 00 movsbl 0xd2(%r12),%esi 0.00 : 5b98f5: 00 00 0.00 : 5b98f7: 49 8b bc 24 28 01 00 mov 0x128(%r12),%rdi 0.00 : 5b98fe: 00 0.00 : 5b98ff: e8 6c 66 11 00 callq 6cff70 : peraggstate->transtypeByVal, : peraggstate->transtypeLen); : pergroupstate->transValueIsNull = false; 0.00 : 5b9904: 41 c6 45 08 00 movb $0x0,0x8(%r13) : * : * We must copy the datum into aggcontext if it is pass-by-ref. We : * do not need to pfree the old transValue, since it's NULL. : */ : oldContext = MemoryContextSwitchTo(aggstate->aggcontext); : pergroupstate->transValue = datumCopy(fcinfo->arg[1], 0.00 : 5b9909: 49 89 45 00 mov %rax,0x0(%r13) : peraggstate->transtypeByVal, : peraggstate->transtypeLen); : pergroupstate->transValueIsNull = false; : pergroupstate->noTransValue = false; 0.00 : 5b990d: 41 c6 45 09 00 movb $0x0,0x9(%r13) 0.00 : 5b9912: 48 89 1d 47 0f 60 00 mov %rbx,0x600f47(%rip) # bba860 0.00 : 5b9919: eb 9d jmp 5b98b8 0.00 : 5b991b: 49 8b 86 b8 00 00 00 mov 0xb8(%r14),%rax : DatumGetPointer(newVal) != DatumGetPointer(pergroupstate->transValue)) : { : if (!fcinfo->isnull) : { : MemoryContextSwitchTo(aggstate->aggcontext); : newVal = datumCopy(newVal, 0.00 : 5b9922: 48 89 df mov %rbx,%rdi 0.00 : 5b9925: 48 89 05 34 0f 60 00 mov %rax,0x600f34(%rip) # bba860 0.00 : 5b992c: 41 0f bf 94 24 ce 00 movswl 0xce(%r12),%edx 0.00 : 5b9933: 00 00 0.00 : 5b9935: 41 0f be b4 24 d2 00 movsbl 0xd2(%r12),%esi 0.00 : 5b993c: 00 00 0.00 : 5b993e: e8 2d 66 11 00 callq 6cff70 0.00 : 5b9943: 48 89 c3 mov %rax,%rbx 0.00 : 5b9946: e9 3e ff ff ff jmpq 5b9889 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 11.56 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1860 8.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1876 8.44 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1860 6.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1860 5.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1872 5.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1875 4.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1877 4.44 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1864 4.44 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1879 3.56 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1873 3.56 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1875 3.11 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1909 2.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1870 2.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1876 2.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1878 2.22 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1861 2.22 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1876 2.22 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1890 1.78 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1870 1.78 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1871 1.78 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1888 1.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1909 1.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1909 0.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1860 0.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1861 0.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1864 0.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1864 0.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1870 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d64d0 : : } : } : : Datum : float4_accum(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1860 8.44 : 6d64d0: 55 push %rbp 11.56 : 6d64d1: 48 89 e5 mov %rsp,%rbp 0.44 : 6d64d4: 41 55 push %r13 6.67 : 6d64d6: 41 54 push %r12 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1860 0.89 : 6d64d8: 49 89 fc mov %rdi,%r12 0.00 : 6d64db: 53 push %rbx 0.00 : 6d64dc: 48 83 ec 68 sub $0x68,%rsp : ArrayType *transarray = PG_GETARG_ARRAYTYPE_P(0); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1861 2.22 : 6d64e0: 48 8b 7f 20 mov 0x20(%rdi),%rdi 0.00 : 6d64e4: e8 27 88 0a 00 callq 77ed10 : : /* do computations as float8 */ : float8 newval = PG_GETARG_FLOAT4(1); 0.00 : 6d64e9: 49 8b 7c 24 28 mov 0x28(%r12),%rdi : } : : Datum : float4_accum(PG_FUNCTION_ARGS) : { : ArrayType *transarray = PG_GETARG_ARRAYTYPE_P(0); 0.89 : 6d64ee: 49 89 c5 mov %rax,%r13 : : /* do computations as float8 */ : float8 newval = PG_GETARG_FLOAT4(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1864 0.89 : 6d64f1: e8 ba 74 0a 00 callq 77d9b0 0.89 : 6d64f6: 0f 14 c0 unpcklps %xmm0,%xmm0 : float8 *transvalues; : float8 N, : sumX, : sumX2; : : transvalues = check_float8_array(transarray, "float4_accum", 3); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1870 1.78 : 6d64f9: ba 03 00 00 00 mov $0x3,%edx 0.00 : 6d64fe: be 83 b5 8b 00 mov $0x8bb583,%esi 0.00 : 6d6503: 4c 89 ef mov %r13,%rdi : float4_accum(PG_FUNCTION_ARGS) : { : ArrayType *transarray = PG_GETARG_ARRAYTYPE_P(0); : : /* do computations as float8 */ : float8 newval = PG_GETARG_FLOAT4(1); 0.00 : 6d6506: 0f 5a c0 cvtps2pd %xmm0,%xmm0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1864 4.44 : 6d6509: f2 0f 11 45 88 movsd %xmm0,-0x78(%rbp) : float8 *transvalues; : float8 N, : sumX, : sumX2; : : transvalues = check_float8_array(transarray, "float4_accum", 3); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1870 2.67 : 6d650e: e8 2d e4 ff ff callq 6d4940 : N = transvalues[0]; 0.44 : 6d6513: f2 0f 10 00 movsd (%rax),%xmm0 : float8 *transvalues; : float8 N, : sumX, : sumX2; : : transvalues = check_float8_array(transarray, "float4_accum", 3); 0.89 : 6d6517: 48 89 c3 mov %rax,%rbx : N = transvalues[0]; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1871 1.78 : 6d651a: f2 0f 11 45 90 movsd %xmm0,-0x70(%rbp) : sumX = transvalues[1]; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1872 5.33 : 6d651f: f2 0f 10 40 08 movsd 0x8(%rax),%xmm0 0.00 : 6d6524: f2 0f 11 45 98 movsd %xmm0,-0x68(%rbp) : sumX2 = transvalues[2]; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1873 3.56 : 6d6529: f2 0f 10 40 10 movsd 0x10(%rax),%xmm0 0.00 : 6d652e: f2 0f 11 45 a0 movsd %xmm0,-0x60(%rbp) : : N += 1.0; : sumX += newval; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1876 2.67 : 6d6533: f2 0f 10 45 98 movsd -0x68(%rbp),%xmm0 2.22 : 6d6538: f2 0f 58 45 88 addsd -0x78(%rbp),%xmm0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1876 8.89 : 6d653d: f2 0f 11 45 b0 movsd %xmm0,-0x50(%rbp) : CHECKFLOATVAL(sumX, isinf(transvalues[1]) || isinf(newval), true); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1877 4.89 : 6d6542: e8 a9 35 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d6547: 85 c0 test %eax,%eax 0.00 : 6d6549: 74 12 je 6d655d 0.00 : 6d654b: f2 0f 10 45 98 movsd -0x68(%rbp),%xmm0 0.00 : 6d6550: e8 9b 35 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d6555: 85 c0 test %eax,%eax 0.00 : 6d6557: 0f 84 03 01 00 00 je 6d6660 : sumX2 += newval * newval; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1878 2.67 : 6d655d: f2 0f 10 45 88 movsd -0x78(%rbp),%xmm0 0.00 : 6d6562: f2 0f 59 c0 mulsd %xmm0,%xmm0 0.00 : 6d6566: f2 0f 58 45 a0 addsd -0x60(%rbp),%xmm0 0.00 : 6d656b: f2 0f 11 45 b8 movsd %xmm0,-0x48(%rbp) : CHECKFLOATVAL(sumX2, isinf(transvalues[2]) || isinf(newval), true); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1879 4.44 : 6d6570: e8 7b 35 d9 ff callq 469af0 <__isinf@plt> 0.44 : 6d6575: 85 c0 test %eax,%eax 0.00 : 6d6577: 75 4f jne 6d65c8 : transvalues = check_float8_array(transarray, "float4_accum", 3); : N = transvalues[0]; : sumX = transvalues[1]; : sumX2 = transvalues[2]; : : N += 1.0; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1875 3.56 : 6d6579: f2 0f 10 45 90 movsd -0x70(%rbp),%xmm0 : /* : * If we're invoked as an aggregate, we can cheat and modify our first : * parameter in-place to reduce palloc overhead. Otherwise we construct a : * new array with the updated transition data and return it. : */ : if (AggCheckCallContext(fcinfo, NULL)) 0.00 : 6d657e: 31 f6 xor %esi,%esi 0.00 : 6d6580: 4c 89 e7 mov %r12,%rdi : transvalues = check_float8_array(transarray, "float4_accum", 3); : N = transvalues[0]; : sumX = transvalues[1]; : sumX2 = transvalues[2]; : : N += 1.0; 0.00 : 6d6583: f2 0f 58 05 cd 8b 0d addsd 0xd8bcd(%rip),%xmm0 # 7af158 <__func__.15777+0x10> 0.00 : 6d658a: 00 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1875 5.33 : 6d658b: f2 0f 11 45 a8 movsd %xmm0,-0x58(%rbp) : /* : * If we're invoked as an aggregate, we can cheat and modify our first : * parameter in-place to reduce palloc overhead. Otherwise we construct a : * new array with the updated transition data and return it. : */ : if (AggCheckCallContext(fcinfo, NULL)) 0.00 : 6d6590: e8 ab 1d ee ff callq 5b8340 0.00 : 6d6595: 85 c0 test %eax,%eax 0.00 : 6d6597: 74 67 je 6d6600 : { : transvalues[0] = N; 0.00 : 6d6599: f2 0f 10 45 a8 movsd -0x58(%rbp),%xmm0 : transvalues[1] = sumX; : transvalues[2] = sumX2; : : PG_RETURN_ARRAYTYPE_P(transarray); 0.00 : 6d659e: 4c 89 e8 mov %r13,%rax : * parameter in-place to reduce palloc overhead. Otherwise we construct a : * new array with the updated transition data and return it. : */ : if (AggCheckCallContext(fcinfo, NULL)) : { : transvalues[0] = N; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1888 1.78 : 6d65a1: f2 0f 11 03 movsd %xmm0,(%rbx) : transvalues[1] = sumX; 0.44 : 6d65a5: f2 0f 10 45 b0 movsd -0x50(%rbp),%xmm0 0.00 : 6d65aa: f2 0f 11 43 08 movsd %xmm0,0x8(%rbx) : transvalues[2] = sumX2; 0.00 : 6d65af: f2 0f 10 45 b8 movsd -0x48(%rbp),%xmm0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1890 2.22 : 6d65b4: f2 0f 11 43 10 movsd %xmm0,0x10(%rbx) : FLOAT8OID, : sizeof(float8), FLOAT8PASSBYVAL, 'd'); : : PG_RETURN_ARRAYTYPE_P(result); : } : } /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1909 1.33 : 6d65b9: 48 83 c4 68 add $0x68,%rsp 0.44 : 6d65bd: 5b pop %rbx 1.33 : 6d65be: 41 5c pop %r12 0.44 : 6d65c0: 41 5d pop %r13 0.00 : 6d65c2: c9 leaveq 3.11 : 6d65c3: c3 retq 0.00 : 6d65c4: 0f 1f 40 00 nopl 0x0(%rax) : : N += 1.0; : sumX += newval; : CHECKFLOATVAL(sumX, isinf(transvalues[1]) || isinf(newval), true); : sumX2 += newval * newval; : CHECKFLOATVAL(sumX2, isinf(transvalues[2]) || isinf(newval), true); 0.00 : 6d65c8: f2 0f 10 45 a0 movsd -0x60(%rbp),%xmm0 0.00 : 6d65cd: e8 1e 35 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d65d2: 85 c0 test %eax,%eax 0.00 : 6d65d4: 75 a3 jne 6d6579 0.00 : 6d65d6: f2 0f 10 45 88 movsd -0x78(%rbp),%xmm0 0.00 : 6d65db: e8 10 35 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d65e0: 85 c0 test %eax,%eax 0.00 : 6d65e2: 75 95 jne 6d6579 0.00 : 6d65e4: 45 31 c0 xor %r8d,%r8d 0.00 : 6d65e7: b9 7f ba 8b 00 mov $0x8bba7f,%ecx 0.00 : 6d65ec: ba 57 07 00 00 mov $0x757,%edx 0.00 : 6d65f1: e9 89 00 00 00 jmpq 6d667f 0.00 : 6d65f6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 6d65fd: 00 00 00 : else : { : Datum transdatums[3]; : ArrayType *result; : : transdatums[0] = Float8GetDatumFast(N); 0.00 : 6d6600: f2 0f 10 45 a8 movsd -0x58(%rbp),%xmm0 0.00 : 6d6605: e8 b6 73 0a 00 callq 77d9c0 : transdatums[1] = Float8GetDatumFast(sumX); 0.00 : 6d660a: f2 0f 10 45 b0 movsd -0x50(%rbp),%xmm0 : else : { : Datum transdatums[3]; : ArrayType *result; : : transdatums[0] = Float8GetDatumFast(N); 0.00 : 6d660f: 48 89 45 c0 mov %rax,-0x40(%rbp) : transdatums[1] = Float8GetDatumFast(sumX); 0.00 : 6d6613: e8 a8 73 0a 00 callq 77d9c0 : transdatums[2] = Float8GetDatumFast(sumX2); 0.00 : 6d6618: f2 0f 10 45 b8 movsd -0x48(%rbp),%xmm0 : { : Datum transdatums[3]; : ArrayType *result; : : transdatums[0] = Float8GetDatumFast(N); : transdatums[1] = Float8GetDatumFast(sumX); 0.00 : 6d661d: 48 89 45 c8 mov %rax,-0x38(%rbp) : transdatums[2] = Float8GetDatumFast(sumX2); 0.00 : 6d6621: e8 9a 73 0a 00 callq 77d9c0 : : result = construct_array(transdatums, 3, 0.00 : 6d6626: 48 8d 7d c0 lea -0x40(%rbp),%rdi : Datum transdatums[3]; : ArrayType *result; : : transdatums[0] = Float8GetDatumFast(N); : transdatums[1] = Float8GetDatumFast(sumX); : transdatums[2] = Float8GetDatumFast(sumX2); 0.00 : 6d662a: 48 89 45 d0 mov %rax,-0x30(%rbp) : : result = construct_array(transdatums, 3, 0.00 : 6d662e: 41 b9 64 00 00 00 mov $0x64,%r9d 0.00 : 6d6634: 41 b8 01 00 00 00 mov $0x1,%r8d 0.00 : 6d663a: b9 08 00 00 00 mov $0x8,%ecx 0.00 : 6d663f: ba bd 02 00 00 mov $0x2bd,%edx 0.00 : 6d6644: be 03 00 00 00 mov $0x3,%esi 0.00 : 6d6649: e8 a2 45 fe ff callq 6babf0 : FLOAT8OID, : sizeof(float8), FLOAT8PASSBYVAL, 'd'); : : PG_RETURN_ARRAYTYPE_P(result); : } : } 0.00 : 6d664e: 48 83 c4 68 add $0x68,%rsp 0.00 : 6d6652: 5b pop %rbx 0.00 : 6d6653: 41 5c pop %r12 0.00 : 6d6655: 41 5d pop %r13 0.00 : 6d6657: c9 leaveq 0.00 : 6d6658: c3 retq 0.00 : 6d6659: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : sumX = transvalues[1]; : sumX2 = transvalues[2]; : : N += 1.0; : sumX += newval; : CHECKFLOATVAL(sumX, isinf(transvalues[1]) || isinf(newval), true); 0.00 : 6d6660: f2 0f 10 45 88 movsd -0x78(%rbp),%xmm0 0.00 : 6d6665: e8 86 34 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d666a: 85 c0 test %eax,%eax 0.00 : 6d666c: 0f 85 eb fe ff ff jne 6d655d 0.00 : 6d6672: 45 31 c0 xor %r8d,%r8d 0.00 : 6d6675: b9 7f ba 8b 00 mov $0x8bba7f,%ecx 0.00 : 6d667a: ba 55 07 00 00 mov $0x755,%edx : sumX2 += newval * newval; : CHECKFLOATVAL(sumX2, isinf(transvalues[2]) || isinf(newval), true); 0.00 : 6d667f: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d6684: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d6689: e8 32 44 0a 00 callq 77aac0 0.00 : 6d668e: 84 c0 test %al,%al 0.00 : 6d6690: 75 05 jne 6d6697 0.00 : 6d6692: e8 39 2e d9 ff callq 4694d0 0.00 : 6d6697: bf 2f b4 8b 00 mov $0x8bb42f,%edi 0.00 : 6d669c: 31 c0 xor %eax,%eax 0.00 : 6d669e: e8 fd 61 0a 00 callq 77c8a0 0.00 : 6d66a3: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6d66a8: 89 c3 mov %eax,%ebx 0.00 : 6d66aa: e8 a1 66 0a 00 callq 77cd50 0.00 : 6d66af: 89 de mov %ebx,%esi 0.00 : 6d66b1: 89 c7 mov %eax,%edi 0.00 : 6d66b3: 31 c0 xor %eax,%eax 0.00 : 6d66b5: e8 26 3f 0a 00 callq 77a5e0 0.00 : 6d66ba: eb d6 jmp 6d6692 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 45.31 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 5.73 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:896 4.69 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 4.69 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 3.65 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:902 3.65 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:902 2.60 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:881 2.60 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 2.08 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:885 2.08 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:994 1.56 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 1.56 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:871 1.56 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:994 1.56 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:848 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:848 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:869 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:885 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:994 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 1.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:848 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:1440 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:771 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:869 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:874 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:874 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:885 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:885 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 0.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:948 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000784050 : : hash_search_with_hash_value(HTAB *hashp, : const void *keyPtr, : uint32 hashvalue, : HASHACTION action, : bool *foundPtr) : { 0.00 : 784050: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:824 1.56 : 784051: 48 89 e5 mov %rsp,%rbp 0.00 : 784054: 41 57 push %r15 4.69 : 784056: 41 89 d7 mov %edx,%r15d 0.00 : 784059: 41 56 push %r14 1.04 : 78405b: 49 89 fe mov %rdi,%r14 0.00 : 78405e: 41 55 push %r13 0.00 : 784060: 41 54 push %r12 1.04 : 784062: 53 push %rbx 1.04 : 784063: 48 83 ec 68 sub $0x68,%rsp 0.00 : 784067: 89 8d 7c ff ff ff mov %ecx,-0x84(%rbp) 0.52 : 78406d: 48 89 75 80 mov %rsi,-0x80(%rbp) 0.52 : 784071: 4c 89 85 70 ff ff ff mov %r8,-0x90(%rbp) : HASHHDR *hctl = hashp->hctl; 0.00 : 784078: 48 8b 07 mov (%rdi),%rax : * NOTE: failure to expand table is not a fatal error, it just means we : * have to run at higher fill factor than we wanted. However, if we're : * using the palloc allocator then it will throw error anyway on : * out-of-memory, so we must do this before modifying the table. : */ : if (action == HASH_ENTER || action == HASH_ENTER_NULL) 0.00 : 78407b: 83 f9 03 cmp $0x3,%ecx /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:848 0.52 : 78407e: 0f 94 45 8f sete -0x71(%rbp) 1.04 : 784082: 83 e9 01 sub $0x1,%ecx : const void *keyPtr, : uint32 hashvalue, : HASHACTION action, : bool *foundPtr) : { : HASHHDR *hctl = hashp->hctl; 0.00 : 784085: 48 89 45 90 mov %rax,-0x70(%rbp) : * NOTE: failure to expand table is not a fatal error, it just means we : * have to run at higher fill factor than we wanted. However, if we're : * using the palloc allocator then it will throw error anyway on : * out-of-memory, so we must do this before modifying the table. : */ : if (action == HASH_ENTER || action == HASH_ENTER_NULL) 1.04 : 784089: 0f 84 d9 00 00 00 je 784168 0.00 : 78408f: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 784093: 0f 85 cf 00 00 00 jne 784168 : newlink = &currElement->link; : } : } : /* don't forget to terminate the rebuilt hash chains... */ : *oldlink = NULL; : *newlink = NULL; 0.00 : 784099: 8b 70 28 mov 0x28(%rax),%esi /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:1440 0.52 : 78409c: 49 8b 46 50 mov 0x50(%r14),%rax 0.00 : 7840a0: 41 8b 4e 58 mov 0x58(%r14),%ecx 0.00 : 7840a4: 4c 8d 68 ff lea -0x1(%rax),%r13 : static inline uint32 : calc_bucket(HASHHDR *hctl, uint32 hash_val) : { : uint32 bucket; : : bucket = hash_val & hctl->high_mask; /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:771 0.52 : 7840a8: 48 8b 55 90 mov -0x70(%rbp),%rdx 0.00 : 7840ac: 44 89 fb mov %r15d,%ebx 0.00 : 7840af: 23 5a 2c and 0x2c(%rdx),%ebx : if (bucket > hctl->max_bucket) 0.00 : 7840b2: 39 f3 cmp %esi,%ebx 0.00 : 7840b4: 76 03 jbe 7840b9 : bucket = bucket & hctl->low_mask; 0.00 : 7840b6: 23 5a 30 and 0x30(%rdx),%ebx : bucket = calc_bucket(hctl, hashvalue); : : segment_num = bucket >> hashp->sshift; : segment_ndx = MOD(bucket, hashp->ssize); : : segp = hashp->dir[segment_num]; /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:869 1.04 : 7840b9: 89 d8 mov %ebx,%eax 0.00 : 7840bb: 49 8b 56 08 mov 0x8(%r14),%rdx 0.00 : 7840bf: d3 e8 shr %cl,%eax 0.52 : 7840c1: 89 c0 mov %eax,%eax 0.00 : 7840c3: 4c 8b 24 c2 mov (%rdx,%rax,8),%r12 : : if (segp == NULL) /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:871 1.56 : 7840c7: 4d 85 e4 test %r12,%r12 0.00 : 7840ca: 0f 84 b7 02 00 00 je 784387 : hash_corrupted(hashp); : : prevBucketPtr = &segp[segment_ndx]; /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:874 0.52 : 7840d0: 89 d8 mov %ebx,%eax 0.52 : 7840d2: 44 21 e8 and %r13d,%eax : currBucket = *prevBucketPtr; : : /* : * Follow collision chain looking for matching key : */ : match = hashp->match; /* save one fetch in inner loop */ 0.00 : 7840d5: 4d 8b 6e 18 mov 0x18(%r14),%r13 : segp = hashp->dir[segment_num]; : : if (segp == NULL) : hash_corrupted(hashp); : : prevBucketPtr = &segp[segment_ndx]; 0.00 : 7840d9: 4d 8d 24 c4 lea (%r12,%rax,8),%r12 : : /* : * Follow collision chain looking for matching key : */ : match = hashp->match; /* save one fetch in inner loop */ : keysize = hashp->keysize; /* ditto */ 0.00 : 7840dd: 49 8b 46 48 mov 0x48(%r14),%rax : : if (segp == NULL) : hash_corrupted(hashp); : : prevBucketPtr = &segp[segment_ndx]; : currBucket = *prevBucketPtr; 0.00 : 7840e1: 49 8b 1c 24 mov (%r12),%rbx : : /* : * Follow collision chain looking for matching key : */ : match = hashp->match; /* save one fetch in inner loop */ : keysize = hashp->keysize; /* ditto */ /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:881 2.60 : 7840e5: 48 89 45 98 mov %rax,-0x68(%rbp) : : while (currBucket != NULL) 0.00 : 7840e9: 48 85 db test %rbx,%rbx 0.00 : 7840ec: 75 0d jne 7840fb 0.00 : 7840ee: eb 28 jmp 784118 : { : if (currBucket->hashvalue == hashvalue && : match(ELEMENTKEY(currBucket), keyPtr, keysize) == 0) : break; : prevBucketPtr = &(currBucket->link); 0.00 : 7840f0: 49 89 dc mov %rbx,%r12 : currBucket = *prevBucketPtr; 0.00 : 7840f3: 48 8b 1b mov (%rbx),%rbx : * Follow collision chain looking for matching key : */ : match = hashp->match; /* save one fetch in inner loop */ : keysize = hashp->keysize; /* ditto */ : : while (currBucket != NULL) 0.00 : 7840f6: 48 85 db test %rbx,%rbx 0.00 : 7840f9: 74 1d je 784118 : { : if (currBucket->hashvalue == hashvalue && /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:885 0.52 : 7840fb: 44 39 7b 08 cmp %r15d,0x8(%rbx) 2.08 : 7840ff: 90 nop 0.00 : 784100: 75 ee jne 7840f0 0.00 : 784102: 48 8d 7b 10 lea 0x10(%rbx),%rdi 1.04 : 784106: 48 8b 55 98 mov -0x68(%rbp),%rdx 0.00 : 78410a: 48 8b 75 80 mov -0x80(%rbp),%rsi 0.00 : 78410e: 41 ff d5 callq *%r13 0.52 : 784111: 85 c0 test %eax,%eax 0.00 : 784113: 75 db jne 7840f0 0.00 : 784115: 0f 1f 00 nopl (%rax) : hash_collisions++; : hctl->collisions++; : #endif : } : : if (foundPtr) 0.00 : 784118: 48 83 bd 70 ff ff ff cmpq $0x0,-0x90(%rbp) 0.00 : 78411f: 00 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:896 5.73 : 784120: 74 0d je 78412f : *foundPtr = (bool) (currBucket != NULL); 0.00 : 784122: 48 8b 95 70 ff ff ff mov -0x90(%rbp),%rdx 0.00 : 784129: 48 85 db test %rbx,%rbx 0.00 : 78412c: 0f 95 02 setne (%rdx) : : /* : * OK, now what? : */ : switch (action) /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:902 3.65 : 78412f: 83 bd 7c ff ff ff 01 cmpl $0x1,-0x84(%rbp) 3.65 : 784136: 0f 84 5c 01 00 00 je 784298 0.00 : 78413c: 0f 83 ee 00 00 00 jae 784230 : { : case HASH_FIND: : if (currBucket != NULL) 0.00 : 784142: 48 85 db test %rbx,%rbx 0.00 : 784145: 0f 84 35 02 00 00 je 784380 : /* FALL THRU */ : : case HASH_ENTER: : /* Return existing element if found, else create one */ : if (currBucket != NULL) : return (void *) ELEMENTKEY(currBucket); 0.00 : 78414b: 48 83 c3 10 add $0x10,%rbx : } : : elog(ERROR, "unrecognized hash action code: %d", (int) action); : : return NULL; /* keep compiler quiet */ : } 0.00 : 78414f: 48 83 c4 68 add $0x68,%rsp 0.00 : 784153: 48 89 d8 mov %rbx,%rax /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:994 1.04 : 784156: 5b pop %rbx 0.00 : 784157: 41 5c pop %r12 0.00 : 784159: 41 5d pop %r13 0.00 : 78415b: 41 5e pop %r14 2.08 : 78415d: 41 5f pop %r15 0.00 : 78415f: c9 leaveq 1.56 : 784160: c3 retq 0.00 : 784161: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : /* : * Can't split if running in partitioned mode, nor if frozen, nor if : * table is the subject of any active hash_seq_search scans. Strange : * order of these tests is to try to check cheaper conditions first. : */ : if (!IS_PARTITIONED(hctl) && !hashp->frozen && 0.00 : 784168: 48 8b 55 90 mov -0x70(%rbp),%rdx 0.00 : 78416c: 48 83 7a 48 00 cmpq $0x0,0x48(%rdx) /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 4.69 : 784171: 0f 85 09 01 00 00 jne 784280 1.04 : 784177: 41 80 7e 42 00 cmpb $0x0,0x42(%r14) 0.00 : 78417c: 0f 85 e6 01 00 00 jne 784368 0.00 : 784182: 48 8b 45 90 mov -0x70(%rbp),%rax 0.00 : 784186: 48 8b 5d 90 mov -0x70(%rbp),%rbx 2.60 : 78418a: 8b 70 28 mov 0x28(%rax),%esi 0.00 : 78418d: 8d 56 01 lea 0x1(%rsi),%edx 0.00 : 784190: 41 89 f0 mov %esi,%r8d 0.00 : 784193: 89 55 d4 mov %edx,-0x2c(%rbp) 0.52 : 784196: 41 89 d4 mov %edx,%r12d 0.00 : 784199: 48 8b 50 08 mov 0x8(%rax),%rdx 1.04 : 78419d: 48 89 d0 mov %rdx,%rax 1.56 : 7841a0: 48 c1 fa 3f sar $0x3f,%rdx 0.00 : 7841a4: 49 f7 fc idiv %r12 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:855 45.31 : 7841a7: 48 3b 43 50 cmp 0x50(%rbx),%rax 0.00 : 7841ab: 0f 8c eb fe ff ff jl 78409c : static bool : has_seq_scans(HTAB *hashp) : { : int i; : : for (i = 0; i < num_seq_scans; i++) 0.00 : 7841b1: 8b 3d 09 5a 43 00 mov 0x435a09(%rip),%edi # bb9bc0 0.00 : 7841b7: 85 ff test %edi,%edi 0.00 : 7841b9: 7e 2c jle 7841e7 : { : if (seq_scan_tables[i] == hashp) 0.00 : 7841bb: 31 d2 xor %edx,%edx 0.00 : 7841bd: 4c 3b 35 1c 5a 43 00 cmp 0x435a1c(%rip),%r14 # bb9be0 0.00 : 7841c4: b9 e8 9b bb 00 mov $0xbb9be8,%ecx 0.00 : 7841c9: 75 15 jne 7841e0 0.00 : 7841cb: e9 cc fe ff ff jmpq 78409c 0.00 : 7841d0: 48 8b 01 mov (%rcx),%rax 0.00 : 7841d3: 48 83 c1 08 add $0x8,%rcx 0.00 : 7841d7: 49 39 c6 cmp %rax,%r14 0.00 : 7841da: 0f 84 bc fe ff ff je 78409c : static bool : has_seq_scans(HTAB *hashp) : { : int i; : : for (i = 0; i < num_seq_scans; i++) 0.00 : 7841e0: 83 c2 01 add $0x1,%edx 0.00 : 7841e3: 39 fa cmp %edi,%edx 0.00 : 7841e5: 7c e9 jl 7841d0 : hash_expansions++; : #endif : : new_bucket = hctl->max_bucket + 1; : new_segnum = new_bucket >> hashp->sshift; : new_segndx = MOD(new_bucket, hashp->ssize); 0.00 : 7841e7: 49 8b 46 50 mov 0x50(%r14),%rax : #ifdef HASH_STATISTICS : hash_expansions++; : #endif : : new_bucket = hctl->max_bucket + 1; : new_segnum = new_bucket >> hashp->sshift; 0.00 : 7841eb: 41 8b 4e 58 mov 0x58(%r14),%ecx 0.00 : 7841ef: 4c 89 e3 mov %r12,%rbx : new_segndx = MOD(new_bucket, hashp->ssize); 0.00 : 7841f2: 4c 8d 68 ff lea -0x1(%rax),%r13 : : if (new_segnum >= hctl->nsegs) 0.00 : 7841f6: 48 8b 45 90 mov -0x70(%rbp),%rax : #ifdef HASH_STATISTICS : hash_expansions++; : #endif : : new_bucket = hctl->max_bucket + 1; : new_segnum = new_bucket >> hashp->sshift; 0.00 : 7841fa: 48 d3 fb sar %cl,%rbx 0.00 : 7841fd: 48 89 5d c0 mov %rbx,-0x40(%rbp) : new_segndx = MOD(new_bucket, hashp->ssize); : : if (new_segnum >= hctl->nsegs) 0.00 : 784201: 48 3b 58 20 cmp 0x20(%rax),%rbx 0.00 : 784205: 0f 8c 05 02 00 00 jl 784410 : { : /* Allocate new segment if necessary -- could fail if dir full */ : if (new_segnum >= hctl->dsize) 0.00 : 78420b: 48 8b 45 90 mov -0x70(%rbp),%rax 0.00 : 78420f: 48 8b 58 18 mov 0x18(%rax),%rbx 0.00 : 784213: 48 39 5d c0 cmp %rbx,-0x40(%rbp) 0.00 : 784217: 0f 8c 1d 03 00 00 jl 78453a : HASHSEGMENT *old_p; : long new_dsize; : long old_dirsize; : long new_dirsize; : : if (hashp->hctl->max_dsize != NO_MAX_DSIZE) 0.00 : 78421d: 48 83 78 58 ff cmpq $0xffffffffffffffff,0x58(%rax) 0.00 : 784222: 0f 84 4a 03 00 00 je 784572 : hashp->dir = p; : hashp->hctl->dsize = new_dsize; : : /* XXX assume the allocator is palloc, so we know how to free */ : Assert(hashp->alloc == DynaHashAlloc); : pfree(old_p); 0.00 : 784228: 44 89 c6 mov %r8d,%esi 0.00 : 78422b: e9 78 fe ff ff jmpq 7840a8 : *foundPtr = (bool) (currBucket != NULL); : : /* : * OK, now what? : */ : switch (action) 0.00 : 784230: 83 bd 7c ff ff ff 02 cmpl $0x2,-0x84(%rbp) 0.00 : 784237: 0f 84 d6 00 00 00 je 784313 0.00 : 78423d: 83 bd 7c ff ff ff 03 cmpl $0x3,-0x84(%rbp) 0.00 : 784244: 74 52 je 784298 : */ : : return (void *) ELEMENTKEY(currBucket); : } : : elog(ERROR, "unrecognized hash action code: %d", (int) action); 0.00 : 784246: ba f0 5b 8d 00 mov $0x8d5bf0,%edx 0.00 : 78424b: be df 03 00 00 mov $0x3df,%esi 0.00 : 784250: bf 33 59 8d 00 mov $0x8d5933,%edi 0.00 : 784255: e8 c6 71 ff ff callq 77b420 0.00 : 78425a: 8b 95 7c ff ff ff mov -0x84(%rbp),%edx 0.00 : 784260: be f0 5a 8d 00 mov $0x8d5af0,%esi 0.00 : 784265: bf 14 00 00 00 mov $0x14,%edi 0.00 : 78426a: 31 c0 xor %eax,%eax 0.00 : 78426c: e8 bf 6f ff ff callq 77b230 0.00 : 784271: e8 5a 52 ce ff callq 4694d0 0.00 : 784276: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 78427d: 00 00 00 : /* : * Can't split if running in partitioned mode, nor if frozen, nor if : * table is the subject of any active hash_seq_search scans. Strange : * order of these tests is to try to check cheaper conditions first. : */ : if (!IS_PARTITIONED(hctl) && !hashp->frozen && 0.00 : 784280: 49 8b 46 50 mov 0x50(%r14),%rax 0.00 : 784284: 8b 72 28 mov 0x28(%rdx),%esi 0.00 : 784287: 41 8b 4e 58 mov 0x58(%r14),%ecx 0.00 : 78428b: 4c 8d 68 ff lea -0x1(%rax),%r13 0.00 : 78428f: e9 14 fe ff ff jmpq 7840a8 0.00 : 784294: 0f 1f 40 00 nopl 0x0(%rax) : Assert(hashp->alloc != DynaHashAlloc); : /* FALL THRU */ : : case HASH_ENTER: : /* Return existing element if found, else create one */ : if (currBucket != NULL) /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:948 0.52 : 784298: 48 85 db test %rbx,%rbx 0.00 : 78429b: 0f 85 aa fe ff ff jne 78414b : return (void *) ELEMENTKEY(currBucket); : : /* disallow inserts if frozen */ : if (hashp->frozen) 0.00 : 7842a1: 41 80 7e 42 00 cmpb $0x0,0x42(%r14) 0.00 : 7842a6: 0f 85 a3 03 00 00 jne 78464f : */ : static HASHBUCKET : get_hash_entry(HTAB *hashp) : { : /* use volatile pointer to prevent code rearrangement */ : volatile HASHHDR *hctlv = hashp->hctl; 0.00 : 7842ac: 49 8b 1e mov (%r14),%rbx : static __inline__ int : tas(volatile slock_t *lock) : { : register slock_t _res = 1; : : __asm__ __volatile__( 0.00 : 7842af: 41 bd 01 00 00 00 mov $0x1,%r13d 0.00 : 7842b5: eb 35 jmp 7842ec 0.00 : 7842b7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 7842be: 00 00 : /* if partitioned, must lock to touch nentries and freeList */ : if (IS_PARTITIONED(hctlv)) : SpinLockAcquire(&hctlv->mutex); : : /* try to get an entry from the freelist */ : newElement = hctlv->freeList; 0.00 : 7842c0: 48 8b 53 10 mov 0x10(%rbx),%rdx : if (newElement != NULL) 0.00 : 7842c4: 48 85 d2 test %rdx,%rdx 0.00 : 7842c7: 0f 85 04 02 00 00 jne 7844d1 : break; : : /* no free elements. allocate another chunk of buckets */ : if (IS_PARTITIONED(hctlv)) 0.00 : 7842cd: 48 8b 43 48 mov 0x48(%rbx),%rax 0.00 : 7842d1: 48 85 c0 test %rax,%rax 0.00 : 7842d4: 74 03 je 7842d9 : SpinLockRelease(&hctlv->mutex); 0.00 : 7842d6: c6 03 00 movb $0x0,(%rbx) : : if (!element_alloc(hashp, hctlv->nelem_alloc)) 0.00 : 7842d9: 8b 73 6c mov 0x6c(%rbx),%esi 0.00 : 7842dc: 4c 89 f7 mov %r14,%rdi 0.00 : 7842df: e8 dc fb ff ff callq 783ec0 0.00 : 7842e4: 84 c0 test %al,%al 0.00 : 7842e6: 0f 84 be 00 00 00 je 7843aa : HASHBUCKET newElement; : : for (;;) : { : /* if partitioned, must lock to touch nentries and freeList */ : if (IS_PARTITIONED(hctlv)) 0.00 : 7842ec: 48 8b 43 48 mov 0x48(%rbx),%rax 0.00 : 7842f0: 48 85 c0 test %rax,%rax 0.00 : 7842f3: 74 cb je 7842c0 0.00 : 7842f5: 44 89 e8 mov %r13d,%eax 0.00 : 7842f8: f0 86 03 lock xchg %al,(%rbx) : SpinLockAcquire(&hctlv->mutex); 0.00 : 7842fb: 84 c0 test %al,%al 0.00 : 7842fd: 74 c1 je 7842c0 0.00 : 7842ff: ba 87 04 00 00 mov $0x487,%edx 0.00 : 784304: be 33 59 8d 00 mov $0x8d5933,%esi 0.00 : 784309: 48 89 df mov %rbx,%rdi 0.00 : 78430c: e8 2f bd f0 ff callq 690040 0.00 : 784311: eb ad jmp 7842c0 : if (currBucket != NULL) : return (void *) ELEMENTKEY(currBucket); : return NULL; : : case HASH_REMOVE: : if (currBucket != NULL) 0.00 : 784313: 48 85 db test %rbx,%rbx 0.00 : 784316: 74 68 je 784380 : { : /* use volatile pointer to prevent code rearrangement */ : volatile HASHHDR *hctlv = hctl; : : /* if partitioned, must lock to touch nentries and freeList */ : if (IS_PARTITIONED(hctlv)) 0.00 : 784318: 48 8b 55 90 mov -0x70(%rbp),%rdx 0.00 : 78431c: 48 8b 42 48 mov 0x48(%rdx),%rax 0.00 : 784320: 48 85 c0 test %rax,%rax 0.00 : 784323: 74 0c je 784331 0.00 : 784325: b8 01 00 00 00 mov $0x1,%eax 0.00 : 78432a: f0 86 02 lock xchg %al,(%rdx) : SpinLockAcquire(&hctlv->mutex); 0.00 : 78432d: 84 c0 test %al,%al 0.00 : 78432f: 75 64 jne 784395 : : Assert(hctlv->nentries > 0); : hctlv->nentries--; 0.00 : 784331: 48 8b 55 90 mov -0x70(%rbp),%rdx 0.00 : 784335: 48 8b 42 08 mov 0x8(%rdx),%rax 0.00 : 784339: 48 83 e8 01 sub $0x1,%rax 0.00 : 78433d: 48 89 42 08 mov %rax,0x8(%rdx) : : /* remove record from hash bucket's chain. */ : *prevBucketPtr = currBucket->link; 0.00 : 784341: 48 8b 03 mov (%rbx),%rax 0.00 : 784344: 49 89 04 24 mov %rax,(%r12) : : /* add the record to the freelist for this table. */ : currBucket->link = hctlv->freeList; 0.00 : 784348: 48 8b 42 10 mov 0x10(%rdx),%rax 0.00 : 78434c: 48 89 03 mov %rax,(%rbx) : hctlv->freeList = currBucket; 0.00 : 78434f: 48 89 5a 10 mov %rbx,0x10(%rdx) : : if (IS_PARTITIONED(hctlv)) 0.00 : 784353: 48 8b 42 48 mov 0x48(%rdx),%rax 0.00 : 784357: 48 85 c0 test %rax,%rax 0.00 : 78435a: 0f 84 eb fd ff ff je 78414b : SpinLockRelease(&hctlv->mutex); 0.00 : 784360: c6 02 00 movb $0x0,(%rdx) 0.00 : 784363: e9 e3 fd ff ff jmpq 78414b : /* : * Can't split if running in partitioned mode, nor if frozen, nor if : * table is the subject of any active hash_seq_search scans. Strange : * order of these tests is to try to check cheaper conditions first. : */ : if (!IS_PARTITIONED(hctl) && !hashp->frozen && 0.00 : 784368: 48 8b 5d 90 mov -0x70(%rbp),%rbx 0.00 : 78436c: 49 8b 46 50 mov 0x50(%r14),%rax 0.00 : 784370: 41 8b 4e 58 mov 0x58(%r14),%ecx 0.00 : 784374: 8b 73 28 mov 0x28(%rbx),%esi 0.00 : 784377: 4c 8d 68 ff lea -0x1(%rax),%r13 0.00 : 78437b: e9 28 fd ff ff jmpq 7840a8 : */ : : return (void *) ELEMENTKEY(currBucket); : } : : elog(ERROR, "unrecognized hash action code: %d", (int) action); 0.00 : 784380: 31 db xor %ebx,%ebx 0.00 : 784382: e9 c8 fd ff ff jmpq 78414f : segment_ndx = MOD(bucket, hashp->ssize); : : segp = hashp->dir[segment_num]; : : if (segp == NULL) : hash_corrupted(hashp); 0.00 : 784387: 4c 89 f7 mov %r14,%rdi 0.00 : 78438a: e8 01 f8 ff ff callq 783b90 0.00 : 78438f: 90 nop 0.00 : 784390: e9 3b fd ff ff jmpq 7840d0 : /* use volatile pointer to prevent code rearrangement */ : volatile HASHHDR *hctlv = hctl; : : /* if partitioned, must lock to touch nentries and freeList */ : if (IS_PARTITIONED(hctlv)) : SpinLockAcquire(&hctlv->mutex); 0.00 : 784395: 48 8b 7d 90 mov -0x70(%rbp),%rdi 0.00 : 784399: ba 95 03 00 00 mov $0x395,%edx 0.00 : 78439e: be 33 59 8d 00 mov $0x8d5933,%esi 0.00 : 7843a3: e8 98 bc f0 ff callq 690040 0.00 : 7843a8: eb 87 jmp 784331 : : currBucket = get_hash_entry(hashp); : if (currBucket == NULL) : { : /* out of memory */ : if (action == HASH_ENTER_NULL) 0.00 : 7843aa: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 7843ae: 75 d0 jne 784380 : return NULL; : /* report a generic message */ : if (hashp->isshared) 0.00 : 7843b0: 41 80 7e 40 00 cmpb $0x0,0x40(%r14) 0.00 : 7843b5: 0f 1f 00 nopl (%rax) 0.00 : 7843b8: 0f 84 4a 02 00 00 je 784608 : ereport(ERROR, 0.00 : 7843be: 45 31 c0 xor %r8d,%r8d 0.00 : 7843c1: bf 14 00 00 00 mov $0x14,%edi 0.00 : 7843c6: b9 f0 5b 8d 00 mov $0x8d5bf0,%ecx 0.00 : 7843cb: ba c6 03 00 00 mov $0x3c6,%edx 0.00 : 7843d0: be 33 59 8d 00 mov $0x8d5933,%esi 0.00 : 7843d5: e8 e6 66 ff ff callq 77aac0 0.00 : 7843da: 84 c0 test %al,%al 0.00 : 7843dc: bf 47 ba 8a 00 mov $0x8aba47,%edi 0.00 : 7843e1: 0f 84 8a fe ff ff je 784271 : (errcode(ERRCODE_OUT_OF_MEMORY), : errmsg("out of shared memory"))); : else : ereport(ERROR, 0.00 : 7843e7: 31 c0 xor %eax,%eax 0.00 : 7843e9: e8 b2 84 ff ff callq 77c8a0 0.00 : 7843ee: bf c5 20 00 00 mov $0x20c5,%edi 0.00 : 7843f3: 89 c3 mov %eax,%ebx 0.00 : 7843f5: e8 56 89 ff ff callq 77cd50 0.00 : 7843fa: 89 de mov %ebx,%esi 0.00 : 7843fc: 89 c7 mov %eax,%edi 0.00 : 7843fe: 31 c0 xor %eax,%eax 0.00 : 784400: e8 db 61 ff ff callq 77a5e0 0.00 : 784405: e9 67 fe ff ff jmpq 784271 0.00 : 78440a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : : new_bucket = hctl->max_bucket + 1; : new_segnum = new_bucket >> hashp->sshift; : new_segndx = MOD(new_bucket, hashp->ssize); : : if (new_segnum >= hctl->nsegs) 0.00 : 784410: 8b 45 d4 mov -0x2c(%rbp),%eax 0.00 : 784413: 48 c1 e3 03 shl $0x3,%rbx 0.00 : 784417: 48 89 5d c8 mov %rbx,-0x38(%rbp) : return false; : hctl->nsegs++; : } : : /* OK, we created a new bucket */ : hctl->max_bucket++; 0.00 : 78441b: 48 8b 5d 90 mov -0x70(%rbp),%rbx : * *Before* changing masks, find old bucket corresponding to same hash : * values; values in that bucket may need to be relocated to new bucket. : * Note that new_bucket is certainly larger than low_mask at this point, : * so we can skip the first step of the regular hash mask calc. : */ : old_bucket = (new_bucket & hctl->low_mask); 0.00 : 78441f: 4d 89 e1 mov %r12,%r9 : return false; : hctl->nsegs++; : } : : /* OK, we created a new bucket */ : hctl->max_bucket++; 0.00 : 784422: 89 43 28 mov %eax,0x28(%rbx) : * *Before* changing masks, find old bucket corresponding to same hash : * values; values in that bucket may need to be relocated to new bucket. : * Note that new_bucket is certainly larger than low_mask at this point, : * so we can skip the first step of the regular hash mask calc. : */ : old_bucket = (new_bucket & hctl->low_mask); 0.00 : 784425: 8b 43 30 mov 0x30(%rbx),%eax 0.00 : 784428: 49 21 c1 and %rax,%r9 : : /* : * If we crossed a power of 2, readjust masks. : */ : if ((uint32) new_bucket > hctl->high_mask) 0.00 : 78442b: 8b 43 2c mov 0x2c(%rbx),%eax 0.00 : 78442e: 39 45 d4 cmp %eax,-0x2c(%rbp) 0.00 : 784431: 76 0c jbe 78443f : { : hctl->low_mask = hctl->high_mask; 0.00 : 784433: 89 43 30 mov %eax,0x30(%rbx) : hctl->high_mask = (uint32) new_bucket | hctl->low_mask; 0.00 : 784436: 09 45 d4 or %eax,-0x2c(%rbp) 0.00 : 784439: 8b 45 d4 mov -0x2c(%rbp),%eax 0.00 : 78443c: 89 43 2c mov %eax,0x2c(%rbx) : old_segndx = MOD(old_bucket, hashp->ssize); : : old_seg = hashp->dir[old_segnum]; : new_seg = hashp->dir[new_segnum]; : : oldlink = &old_seg[old_segndx]; 0.00 : 78443f: 49 8b 46 50 mov 0x50(%r14),%rax 0.00 : 784443: 41 8b 4e 58 mov 0x58(%r14),%ecx 0.00 : 784447: 4c 89 ca mov %r9,%rdx : * that might not be true! : */ : old_segnum = old_bucket >> hashp->sshift; : old_segndx = MOD(old_bucket, hashp->ssize); : : old_seg = hashp->dir[old_segnum]; 0.00 : 78444a: 49 8b 76 08 mov 0x8(%r14),%rsi : new_seg = hashp->dir[new_segnum]; : : oldlink = &old_seg[old_segndx]; : newlink = &new_seg[new_segndx]; 0.00 : 78444e: 4d 21 ec and %r13,%r12 0.00 : 784451: 4a 8d 3c e5 00 00 00 lea 0x0(,%r12,8),%rdi 0.00 : 784458: 00 : old_segndx = MOD(old_bucket, hashp->ssize); : : old_seg = hashp->dir[old_segnum]; : new_seg = hashp->dir[new_segnum]; : : oldlink = &old_seg[old_segndx]; 0.00 : 784459: 48 83 e8 01 sub $0x1,%rax 0.00 : 78445d: 48 d3 fa sar %cl,%rdx 0.00 : 784460: 4c 21 c8 and %r9,%rax 0.00 : 784463: 4c 8d 04 c5 00 00 00 lea 0x0(,%rax,8),%r8 0.00 : 78446a: 00 0.00 : 78446b: 4c 03 04 d6 add (%rsi,%rdx,8),%r8 : newlink = &new_seg[new_segndx]; 0.00 : 78446f: 48 8b 55 c8 mov -0x38(%rbp),%rdx 0.00 : 784473: 48 03 3c 16 add (%rsi,%rdx,1),%rdi : : for (currElement = *oldlink; 0.00 : 784477: 49 8b 10 mov (%r8),%rdx : currElement != NULL; 0.00 : 78447a: 48 85 d2 test %rdx,%rdx 0.00 : 78447d: 75 17 jne 784496 0.00 : 78447f: eb 39 jmp 7844ba 0.00 : 784481: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : *oldlink = currElement; : oldlink = &currElement->link; : } : else : { : *newlink = currElement; 0.00 : 784488: 48 89 17 mov %rdx,(%rdi) : newlink = &currElement->link; 0.00 : 78448b: 48 89 d7 mov %rdx,%rdi : : oldlink = &old_seg[old_segndx]; : newlink = &new_seg[new_segndx]; : : for (currElement = *oldlink; : currElement != NULL; 0.00 : 78448e: 48 85 c9 test %rcx,%rcx 0.00 : 784491: 74 27 je 7844ba 0.00 : 784493: 48 89 ca mov %rcx,%rdx : static inline uint32 : calc_bucket(HASHHDR *hctl, uint32 hash_val) : { : uint32 bucket; : : bucket = hash_val & hctl->high_mask; 0.00 : 784496: 48 8b 5d 90 mov -0x70(%rbp),%rbx : : for (currElement = *oldlink; : currElement != NULL; : currElement = nextElement) : { : nextElement = currElement->link; 0.00 : 78449a: 48 8b 0a mov (%rdx),%rcx : static inline uint32 : calc_bucket(HASHHDR *hctl, uint32 hash_val) : { : uint32 bucket; : : bucket = hash_val & hctl->high_mask; 0.00 : 78449d: 8b 43 2c mov 0x2c(%rbx),%eax 0.00 : 7844a0: 23 42 08 and 0x8(%rdx),%eax : if (bucket > hctl->max_bucket) 0.00 : 7844a3: 3b 43 28 cmp 0x28(%rbx),%eax 0.00 : 7844a6: 76 03 jbe 7844ab : bucket = bucket & hctl->low_mask; 0.00 : 7844a8: 23 43 30 and 0x30(%rbx),%eax : for (currElement = *oldlink; : currElement != NULL; : currElement = nextElement) : { : nextElement = currElement->link; : if ((long) calc_bucket(hctl, currElement->hashvalue) == old_bucket) 0.00 : 7844ab: 89 c0 mov %eax,%eax 0.00 : 7844ad: 49 39 c1 cmp %rax,%r9 0.00 : 7844b0: 75 d6 jne 784488 : { : *oldlink = currElement; 0.00 : 7844b2: 49 89 10 mov %rdx,(%r8) : oldlink = &currElement->link; 0.00 : 7844b5: 49 89 d0 mov %rdx,%r8 0.00 : 7844b8: eb d4 jmp 78448e : *newlink = currElement; : newlink = &currElement->link; : } : } : /* don't forget to terminate the rebuilt hash chains... */ : *oldlink = NULL; 0.00 : 7844ba: 49 c7 00 00 00 00 00 movq $0x0,(%r8) : *newlink = NULL; 0.00 : 7844c1: 48 c7 07 00 00 00 00 movq $0x0,(%rdi) 0.00 : 7844c8: 48 8b 45 90 mov -0x70(%rbp),%rax 0.00 : 7844cc: e9 c8 fb ff ff jmpq 784099 : return NULL; : } : } : : /* remove entry from freelist, bump nentries */ : hctlv->freeList = newElement->link; 0.00 : 7844d1: 48 8b 02 mov (%rdx),%rax 0.00 : 7844d4: 48 89 43 10 mov %rax,0x10(%rbx) : hctlv->nentries++; 0.00 : 7844d8: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 7844dc: 48 83 c0 01 add $0x1,%rax 0.00 : 7844e0: 48 89 43 08 mov %rax,0x8(%rbx) : : if (IS_PARTITIONED(hctlv)) 0.00 : 7844e4: 48 8b 43 48 mov 0x48(%rbx),%rax 0.00 : 7844e8: 48 85 c0 test %rax,%rax 0.00 : 7844eb: 74 03 je 7844f0 : SpinLockRelease(&hctlv->mutex); 0.00 : 7844ed: c6 03 00 movb $0x0,(%rbx) : *prevBucketPtr = currBucket; : currBucket->link = NULL; : : /* copy key into record */ : currBucket->hashvalue = hashvalue; : hashp->keycopy(ELEMENTKEY(currBucket), keyPtr, keysize); 0.00 : 7844f0: 48 8d 5a 10 lea 0x10(%rdx),%rbx : (errcode(ERRCODE_OUT_OF_MEMORY), : errmsg("out of memory"))); : } : : /* link into hashbucket chain */ : *prevBucketPtr = currBucket; 0.00 : 7844f4: 49 89 14 24 mov %rdx,(%r12) : currBucket->link = NULL; : : /* copy key into record */ : currBucket->hashvalue = hashvalue; 0.00 : 7844f8: 44 89 7a 08 mov %r15d,0x8(%rdx) : errmsg("out of memory"))); : } : : /* link into hashbucket chain */ : *prevBucketPtr = currBucket; : currBucket->link = NULL; 0.00 : 7844fc: 48 c7 02 00 00 00 00 movq $0x0,(%rdx) : : /* copy key into record */ : currBucket->hashvalue = hashvalue; : hashp->keycopy(ELEMENTKEY(currBucket), keyPtr, keysize); 0.00 : 784503: 48 8b 55 98 mov -0x68(%rbp),%rdx 0.00 : 784507: 48 8b 75 80 mov -0x80(%rbp),%rsi 0.00 : 78450b: 48 89 df mov %rbx,%rdi 0.00 : 78450e: 41 ff 56 20 callq *0x20(%r14) : } : : elog(ERROR, "unrecognized hash action code: %d", (int) action); : : return NULL; /* keep compiler quiet */ : } 0.00 : 784512: e9 38 fc ff ff jmpq 78414f : p = (HASHSEGMENT *) hashp->alloc((Size) new_dirsize); : : if (p != NULL) : { : memcpy(p, old_p, old_dirsize); : MemSet(((char *) p) + old_dirsize, 0, new_dirsize - old_dirsize); 0.00 : 784517: 31 f6 xor %esi,%esi 0.00 : 784519: e8 02 4f ce ff callq 469420 : hashp->dir = p; 0.00 : 78451e: 48 8b 45 a8 mov -0x58(%rbp),%rax : hashp->hctl->dsize = new_dsize; 0.00 : 784522: 48 8b 55 b8 mov -0x48(%rbp),%rdx : : if (p != NULL) : { : memcpy(p, old_p, old_dirsize); : MemSet(((char *) p) + old_dirsize, 0, new_dirsize - old_dirsize); : hashp->dir = p; 0.00 : 784526: 49 89 46 08 mov %rax,0x8(%r14) : hashp->hctl->dsize = new_dsize; 0.00 : 78452a: 49 8b 06 mov (%r14),%rax 0.00 : 78452d: 48 89 50 18 mov %rdx,0x18(%rax) : : /* XXX assume the allocator is palloc, so we know how to free */ : Assert(hashp->alloc == DynaHashAlloc); : pfree(old_p); 0.00 : 784531: 48 8b 7d b0 mov -0x50(%rbp),%rdi 0.00 : 784535: e8 46 46 01 00 callq 798b80 : { : /* Allocate new segment if necessary -- could fail if dir full */ : if (new_segnum >= hctl->dsize) : if (!dir_realloc(hashp)) : return false; : if (!(hashp->dir[new_segnum] = seg_alloc(hashp))) 0.00 : 78453a: 48 8b 5d c0 mov -0x40(%rbp),%rbx 0.00 : 78453e: 4c 89 f7 mov %r14,%rdi 0.00 : 784541: 48 c1 e3 03 shl $0x3,%rbx 0.00 : 784545: 48 89 5d c8 mov %rbx,-0x38(%rbp) 0.00 : 784549: 49 03 5e 08 add 0x8(%r14),%rbx 0.00 : 78454d: e8 7e fa ff ff callq 783fd0 0.00 : 784552: 48 85 c0 test %rax,%rax 0.00 : 784555: 48 89 03 mov %rax,(%rbx) 0.00 : 784558: 0f 84 1f 01 00 00 je 78467d : return false; : hctl->nsegs++; 0.00 : 78455e: 48 8b 55 90 mov -0x70(%rbp),%rdx 0.00 : 784562: 8b 42 28 mov 0x28(%rdx),%eax 0.00 : 784565: 48 83 42 20 01 addq $0x1,0x20(%rdx) 0.00 : 78456a: 83 c0 01 add $0x1,%eax 0.00 : 78456d: e9 a9 fe ff ff jmpq 78441b : : if (hashp->hctl->max_dsize != NO_MAX_DSIZE) : return false; : : /* Reallocate directory */ : new_dsize = hashp->hctl->dsize << 1; 0.00 : 784572: 48 8d 14 1b lea (%rbx,%rbx,1),%rdx : old_dirsize = hashp->hctl->dsize * sizeof(HASHSEGMENT); : new_dirsize = new_dsize * sizeof(HASHSEGMENT); 0.00 : 784576: 48 89 d8 mov %rbx,%rax 0.00 : 784579: 48 c1 e0 04 shl $0x4,%rax 0.00 : 78457d: 48 89 45 a0 mov %rax,-0x60(%rbp) : : if (hashp->hctl->max_dsize != NO_MAX_DSIZE) : return false; : : /* Reallocate directory */ : new_dsize = hashp->hctl->dsize << 1; 0.00 : 784581: 48 89 55 b8 mov %rdx,-0x48(%rbp) : old_dirsize = hashp->hctl->dsize * sizeof(HASHSEGMENT); : new_dirsize = new_dsize * sizeof(HASHSEGMENT); : : old_p = hashp->dir; : CurrentDynaHashCxt = hashp->hcxt; 0.00 : 784585: 49 8b 46 30 mov 0x30(%r14),%rax : /* Reallocate directory */ : new_dsize = hashp->hctl->dsize << 1; : old_dirsize = hashp->hctl->dsize * sizeof(HASHSEGMENT); : new_dirsize = new_dsize * sizeof(HASHSEGMENT); : : old_p = hashp->dir; 0.00 : 784589: 49 8b 56 08 mov 0x8(%r14),%rdx : CurrentDynaHashCxt = hashp->hcxt; : p = (HASHSEGMENT *) hashp->alloc((Size) new_dirsize); 0.00 : 78458d: 48 8b 7d a0 mov -0x60(%rbp),%rdi : /* Reallocate directory */ : new_dsize = hashp->hctl->dsize << 1; : old_dirsize = hashp->hctl->dsize * sizeof(HASHSEGMENT); : new_dirsize = new_dsize * sizeof(HASHSEGMENT); : : old_p = hashp->dir; 0.00 : 784591: 48 89 55 b0 mov %rdx,-0x50(%rbp) : CurrentDynaHashCxt = hashp->hcxt; 0.00 : 784595: 48 89 05 2c 56 43 00 mov %rax,0x43562c(%rip) # bb9bc8 : p = (HASHSEGMENT *) hashp->alloc((Size) new_dirsize); 0.00 : 78459c: 41 ff 56 28 callq *0x28(%r14) : : if (p != NULL) 0.00 : 7845a0: 48 85 c0 test %rax,%rax : old_dirsize = hashp->hctl->dsize * sizeof(HASHSEGMENT); : new_dirsize = new_dsize * sizeof(HASHSEGMENT); : : old_p = hashp->dir; : CurrentDynaHashCxt = hashp->hcxt; : p = (HASHSEGMENT *) hashp->alloc((Size) new_dirsize); 0.00 : 7845a3: 48 89 45 a8 mov %rax,-0x58(%rbp) : : if (p != NULL) 0.00 : 7845a7: 0f 84 89 00 00 00 je 784636 : { : memcpy(p, old_p, old_dirsize); 0.00 : 7845ad: 48 8b 7d a8 mov -0x58(%rbp),%rdi 0.00 : 7845b1: 48 8b 75 b0 mov -0x50(%rbp),%rsi : if (hashp->hctl->max_dsize != NO_MAX_DSIZE) : return false; : : /* Reallocate directory */ : new_dsize = hashp->hctl->dsize << 1; : old_dirsize = hashp->hctl->dsize * sizeof(HASHSEGMENT); 0.00 : 7845b5: 48 c1 e3 03 shl $0x3,%rbx : CurrentDynaHashCxt = hashp->hcxt; : p = (HASHSEGMENT *) hashp->alloc((Size) new_dirsize); : : if (p != NULL) : { : memcpy(p, old_p, old_dirsize); 0.00 : 7845b9: 48 89 da mov %rbx,%rdx 0.00 : 7845bc: e8 2f 56 ce ff callq 469bf0 : MemSet(((char *) p) + old_dirsize, 0, new_dirsize - old_dirsize); 0.00 : 7845c1: 48 8b 7d a8 mov -0x58(%rbp),%rdi 0.00 : 7845c5: 48 8b 55 a0 mov -0x60(%rbp),%rdx 0.00 : 7845c9: 48 01 df add %rbx,%rdi 0.00 : 7845cc: 48 29 da sub %rbx,%rdx 0.00 : 7845cf: 40 f6 c7 07 test $0x7,%dil 0.00 : 7845d3: 0f 85 3e ff ff ff jne 784517 0.00 : 7845d9: 48 81 fa 00 04 00 00 cmp $0x400,%rdx 0.00 : 7845e0: 0f 87 31 ff ff ff ja 784517 0.00 : 7845e6: 48 8d 04 17 lea (%rdi,%rdx,1),%rax 0.00 : 7845ea: 48 39 c7 cmp %rax,%rdi 0.00 : 7845ed: 0f 83 2b ff ff ff jae 78451e 0.00 : 7845f3: 48 c7 07 00 00 00 00 movq $0x0,(%rdi) 0.00 : 7845fa: 48 83 c7 08 add $0x8,%rdi 0.00 : 7845fe: 48 39 f8 cmp %rdi,%rax 0.00 : 784601: 77 f0 ja 7845f3 0.00 : 784603: e9 16 ff ff ff jmpq 78451e : if (hashp->isshared) : ereport(ERROR, : (errcode(ERRCODE_OUT_OF_MEMORY), : errmsg("out of shared memory"))); : else : ereport(ERROR, 0.00 : 784608: 45 31 c0 xor %r8d,%r8d 0.00 : 78460b: b9 f0 5b 8d 00 mov $0x8d5bf0,%ecx 0.00 : 784610: ba ca 03 00 00 mov $0x3ca,%edx 0.00 : 784615: be 33 59 8d 00 mov $0x8d5933,%esi 0.00 : 78461a: bf 14 00 00 00 mov $0x14,%edi 0.00 : 78461f: e8 9c 64 ff ff callq 77aac0 0.00 : 784624: 84 c0 test %al,%al 0.00 : 784626: 0f 84 45 fc ff ff je 784271 0.00 : 78462c: bf 04 9c 7b 00 mov $0x7b9c04,%edi 0.00 : 784631: e9 b1 fd ff ff jmpq 7843e7 : : old_p = hashp->dir; : CurrentDynaHashCxt = hashp->hcxt; : p = (HASHSEGMENT *) hashp->alloc((Size) new_dirsize); : : if (p != NULL) 0.00 : 784636: 49 8b 46 50 mov 0x50(%r14),%rax 0.00 : 78463a: 48 8b 5d 90 mov -0x70(%rbp),%rbx 0.00 : 78463e: 41 8b 4e 58 mov 0x58(%r14),%ecx 0.00 : 784642: 4c 8d 68 ff lea -0x1(%rax),%r13 0.00 : 784646: 44 8b 43 28 mov 0x28(%rbx),%r8d 0.00 : 78464a: e9 d9 fb ff ff jmpq 784228 : if (currBucket != NULL) : return (void *) ELEMENTKEY(currBucket); : : /* disallow inserts if frozen */ : if (hashp->frozen) : elog(ERROR, "cannot insert into frozen hashtable \"%s\"", 0.00 : 78464f: ba f0 5b 8d 00 mov $0x8d5bf0,%edx 0.00 : 784654: be ba 03 00 00 mov $0x3ba,%esi 0.00 : 784659: bf 33 59 8d 00 mov $0x8d5933,%edi 0.00 : 78465e: e8 bd 6d ff ff callq 77b420 0.00 : 784663: 49 8b 56 38 mov 0x38(%r14),%rdx 0.00 : 784667: be c0 5a 8d 00 mov $0x8d5ac0,%esi 0.00 : 78466c: bf 14 00 00 00 mov $0x14,%edi 0.00 : 784671: 31 c0 xor %eax,%eax 0.00 : 784673: e8 b8 6b ff ff callq 77b230 0.00 : 784678: e8 53 4e ce ff callq 4694d0 : { : /* Allocate new segment if necessary -- could fail if dir full */ : if (new_segnum >= hctl->dsize) : if (!dir_realloc(hashp)) : return false; : if (!(hashp->dir[new_segnum] = seg_alloc(hashp))) 0.00 : 78467d: 48 8b 45 90 mov -0x70(%rbp),%rax 0.00 : 784681: 41 8b 4e 58 mov 0x58(%r14),%ecx 0.00 : 784685: 8b 70 28 mov 0x28(%rax),%esi 0.00 : 784688: 49 8b 46 50 mov 0x50(%r14),%rax 0.00 : 78468c: 4c 8d 68 ff lea -0x1(%rax),%r13 0.00 : 784690: e9 13 fa ff ff jmpq 7840a8 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 30.39 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2558 22.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2558 14.92 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2563 5.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2560 4.97 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2558 4.97 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2560 3.87 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2563 2.76 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2563 2.76 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2566 2.21 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2559 1.66 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2563 1.66 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2567 1.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2559 1.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2565 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d3bd0 : : PG_RETURN_FLOAT8(result); : } : : Datum : float84mi(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2558 22.10 : 6d3bd0: 55 push %rbp 30.39 : 6d3bd1: 48 89 e5 mov %rsp,%rbp 0.00 : 6d3bd4: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2558 4.97 : 6d3bd5: 48 89 fb mov %rdi,%rbx 0.00 : 6d3bd8: 48 83 ec 18 sub $0x18,%rsp : float8 arg1 = PG_GETARG_FLOAT8(0); 0.00 : 6d3bdc: 48 8b 7f 20 mov 0x20(%rdi),%rdi /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2559 2.21 : 6d3be0: e8 eb 9d 0a 00 callq 77d9d0 1.10 : 6d3be5: f2 0f 11 45 e0 movsd %xmm0,-0x20(%rbp) : float4 arg2 = PG_GETARG_FLOAT4(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2560 5.52 : 6d3bea: 48 8b 7b 28 mov 0x28(%rbx),%rdi 0.00 : 6d3bee: e8 bd 9d 0a 00 callq 77d9b0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2560 4.97 : 6d3bf3: f3 0f 11 45 ec movss %xmm0,-0x14(%rbp) : float8 result; : : result = arg1 - arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2563 3.87 : 6d3bf8: 0f 14 c0 unpcklps %xmm0,%xmm0 0.00 : 6d3bfb: f2 0f 10 4d e0 movsd -0x20(%rbp),%xmm1 1.66 : 6d3c00: 0f 5a c0 cvtps2pd %xmm0,%xmm0 2.76 : 6d3c03: f2 0f 5c c8 subsd %xmm0,%xmm1 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2563 14.92 : 6d3c07: f2 0f 11 4d f0 movsd %xmm1,-0x10(%rbp) : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2565 1.10 : 6d3c0c: 66 0f 28 c1 movapd %xmm1,%xmm0 0.00 : 6d3c10: e8 db 5e d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d3c15: 85 c0 test %eax,%eax 0.00 : 6d3c17: 74 0e je 6d3c27 0.00 : 6d3c19: f2 0f 10 45 e0 movsd -0x20(%rbp),%xmm0 0.00 : 6d3c1e: e8 cd 5e d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d3c23: 85 c0 test %eax,%eax 0.00 : 6d3c25: 74 19 je 6d3c40 : PG_RETURN_FLOAT8(result); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2566 2.76 : 6d3c27: f2 0f 10 45 f0 movsd -0x10(%rbp),%xmm0 : } 0.00 : 6d3c2c: 48 83 c4 18 add $0x18,%rsp 0.00 : 6d3c30: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2567 1.66 : 6d3c31: c9 leaveq : float8 result; : : result = arg1 - arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); : PG_RETURN_FLOAT8(result); 0.00 : 6d3c32: e9 89 9d 0a 00 jmpq 77d9c0 0.00 : 6d3c37: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 6d3c3e: 00 00 : float4 arg2 = PG_GETARG_FLOAT4(1); : float8 result; : : result = arg1 - arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); 0.00 : 6d3c40: f3 0f 10 45 ec movss -0x14(%rbp),%xmm0 0.00 : 6d3c45: e8 e6 5a d9 ff callq 469730 <__isinff@plt> 0.00 : 6d3c4a: 85 c0 test %eax,%eax 0.00 : 6d3c4c: 75 d9 jne 6d3c27 0.00 : 6d3c4e: 45 31 c0 xor %r8d,%r8d 0.00 : 6d3c51: b9 da b8 8b 00 mov $0x8bb8da,%ecx 0.00 : 6d3c56: ba 05 0a 00 00 mov $0xa05,%edx 0.00 : 6d3c5b: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d3c60: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d3c65: e8 56 6e 0a 00 callq 77aac0 0.00 : 6d3c6a: 84 c0 test %al,%al 0.00 : 6d3c6c: 75 05 jne 6d3c73 0.00 : 6d3c6e: e8 5d 58 d9 ff callq 4694d0 0.00 : 6d3c73: bf 2f b4 8b 00 mov $0x8bb42f,%edi 0.00 : 6d3c78: 31 c0 xor %eax,%eax 0.00 : 6d3c7a: e8 21 8c 0a 00 callq 77c8a0 0.00 : 6d3c7f: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6d3c84: 89 c3 mov %eax,%ebx 0.00 : 6d3c86: e8 c5 90 0a 00 callq 77cd50 0.00 : 6d3c8b: 89 de mov %ebx,%esi 0.00 : 6d3c8d: 89 c7 mov %eax,%edi 0.00 : 6d3c8f: 31 c0 xor %eax,%eax 0.00 : 6d3c91: e8 4a 69 0a 00 callq 77a5e0 0.00 : 6d3c96: eb d6 jmp 6d3c6e Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 40.70 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:662 9.30 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:666 6.98 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:662 6.40 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 6.40 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:660 5.81 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:655 4.07 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 2.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:655 2.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:655 2.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 2.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:660 2.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 1.74 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:654 1.74 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:655 1.16 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:654 1.16 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:660 1.16 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000757d90 : : *****************************************************************************/ : : /* "True" length (not counting trailing blanks) of a BpChar */ : static int : bcTruelen(BpChar *arg) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:654 1.74 : 757d90: 55 push %rbp : char *s = VARDATA_ANY(arg); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:655 1.74 : 757d91: 0f b6 17 movzbl (%rdi),%edx 2.91 : 757d94: 48 8d 4f 01 lea 0x1(%rdi),%rcx 2.91 : 757d98: 48 8d 47 04 lea 0x4(%rdi),%rax 0.00 : 757d9c: be 01 00 00 00 mov $0x1,%esi : *****************************************************************************/ : : /* "True" length (not counting trailing blanks) of a BpChar */ : static int : bcTruelen(BpChar *arg) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:654 1.16 : 757da1: 48 89 e5 mov %rsp,%rbp : char *s = VARDATA_ANY(arg); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:655 5.81 : 757da4: 21 d6 and %edx,%esi 0.00 : 757da6: 48 0f 44 c8 cmove %rax,%rcx : int i; : int len; : : len = VARSIZE_ANY_EXHDR(arg); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 6.40 : 757daa: 80 fa 01 cmp $0x1,%dl 0.00 : 757dad: 74 51 je 757e00 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 2.91 : 757daf: 85 f6 test %esi,%esi 0.00 : 757db1: 75 3d jne 757df0 0.00 : 757db3: 8b 07 mov (%rdi),%eax 0.00 : 757db5: c1 e8 02 shr $0x2,%eax 0.00 : 757db8: 83 e8 04 sub $0x4,%eax : for (i = len - 1; i >= 0; i--) 0.00 : 757dbb: 89 c2 mov %eax,%edx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:660 2.33 : 757dbd: 83 ea 01 sub $0x1,%edx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:660 6.40 : 757dc0: 78 20 js 757de2 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:660 1.16 : 757dc2: 48 63 f2 movslq %edx,%rsi : { : if (s[i] != ' ') 0.00 : 757dc5: 80 3c 31 20 cmpb $0x20,(%rcx,%rsi,1) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:662 40.70 : 757dc9: 74 0e je 757dd9 6.98 : 757dcb: eb 15 jmp 757de2 0.00 : 757dcd: 0f 1f 00 nopl (%rax) 0.00 : 757dd0: 48 63 c2 movslq %edx,%rax 0.00 : 757dd3: 80 3c 01 20 cmpb $0x20,(%rcx,%rax,1) 0.00 : 757dd7: 75 09 jne 757de2 : char *s = VARDATA_ANY(arg); : int i; : int len; : : len = VARSIZE_ANY_EXHDR(arg); : for (i = len - 1; i >= 0; i--) 0.00 : 757dd9: 83 ea 01 sub $0x1,%edx 0.00 : 757ddc: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 757de0: 79 ee jns 757dd0 0.00 : 757de2: 8d 42 01 lea 0x1(%rdx),%eax : { : if (s[i] != ' ') : break; : } : return i + 1; : } 0.00 : 757de5: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:666 9.30 : 757de6: c3 retq 0.00 : 757de7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 757dee: 00 00 : { : char *s = VARDATA_ANY(arg); : int i; : int len; : : len = VARSIZE_ANY_EXHDR(arg); 0.00 : 757df0: d0 ea shr %dl /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:659 1.16 : 757df2: 0f b6 c2 movzbl %dl,%eax 4.07 : 757df5: 83 e8 01 sub $0x1,%eax 2.33 : 757df8: eb c1 jmp 757dbb 0.00 : 757dfa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 757e00: 0f b6 7f 01 movzbl 0x1(%rdi),%edi 0.00 : 757e04: ba 07 00 00 00 mov $0x7,%edx 0.00 : 757e09: be 07 00 00 00 mov $0x7,%esi 0.00 : 757e0e: 40 80 ff 01 cmp $0x1,%dil 0.00 : 757e12: 74 b1 je 757dc5 0.00 : 757e14: 40 80 ff 12 cmp $0x12,%dil 0.00 : 757e18: b8 00 00 00 00 mov $0x0,%eax 0.00 : 757e1d: ba 0f 00 00 00 mov $0xf,%edx 0.00 : 757e22: 0f 45 d0 cmovne %eax,%edx 0.00 : 757e25: be 0f 00 00 00 mov $0xf,%esi 0.00 : 757e2a: b8 00 00 00 00 mov $0x0,%eax 0.00 : 757e2f: 48 0f 45 f0 cmovne %rax,%rsi 0.00 : 757e33: eb 90 jmp 757dc5 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 41.46 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2190 20.73 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2181 19.51 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2181 7.93 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2181 5.49 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2181 4.88 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2190 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077d9b0 : : : #ifdef USE_FLOAT4_BYVAL : : float4 : DatumGetFloat4(Datum X) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2181 19.51 : 77d9b0: 55 push %rbp 20.73 : 77d9b1: 48 89 e5 mov %rsp,%rbp 5.49 : 77d9b4: 89 7d fc mov %edi,-0x4(%rbp) 7.93 : 77d9b7: f3 0f 10 45 fc movss -0x4(%rbp),%xmm0 : float4 retval; : } myunion; : : myunion.value = GET_4_BYTES(X); : return myunion.retval; : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2190 46.34 : 77d9bc: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 24.22 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2509 22.36 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2509 13.04 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2515 6.21 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2514 4.97 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2509 4.97 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2510 4.35 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2514 3.73 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2511 3.11 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2514 3.11 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2515 2.48 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2510 2.48 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2515 1.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2518 1.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2518 1.24 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2515 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d3ee0 : : PG_RETURN_FLOAT8(result); : } : : Datum : float48mul(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2509 22.36 : 6d3ee0: 55 push %rbp 24.22 : 6d3ee1: 48 89 e5 mov %rsp,%rbp 0.00 : 6d3ee4: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2509 4.97 : 6d3ee5: 48 89 fb mov %rdi,%rbx 0.00 : 6d3ee8: 48 83 ec 28 sub $0x28,%rsp : float4 arg1 = PG_GETARG_FLOAT4(0); 0.00 : 6d3eec: 48 8b 7f 20 mov 0x20(%rdi),%rdi /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2510 4.97 : 6d3ef0: e8 bb 9a 0a 00 callq 77d9b0 2.48 : 6d3ef5: f3 0f 11 45 e4 movss %xmm0,-0x1c(%rbp) : float8 arg2 = PG_GETARG_FLOAT8(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2511 3.73 : 6d3efa: 48 8b 7b 28 mov 0x28(%rbx),%rdi 0.00 : 6d3efe: e8 cd 9a 0a 00 callq 77d9d0 : float8 result; : : result = arg1 * arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2514 3.11 : 6d3f03: f3 0f 10 4d e4 movss -0x1c(%rbp),%xmm1 : : Datum : float48mul(PG_FUNCTION_ARGS) : { : float4 arg1 = PG_GETARG_FLOAT4(0); : float8 arg2 = PG_GETARG_FLOAT8(1); 0.00 : 6d3f08: f2 0f 11 45 e8 movsd %xmm0,-0x18(%rbp) : float8 result; : : result = arg1 * arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2514 6.21 : 6d3f0d: 0f 5a c9 cvtps2pd %xmm1,%xmm1 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2514 4.35 : 6d3f10: f2 0f 59 c8 mulsd %xmm0,%xmm1 : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2515 13.04 : 6d3f14: 66 0f 28 c1 movapd %xmm1,%xmm0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2515 1.24 : 6d3f18: f2 0f 11 4d d0 movsd %xmm1,-0x30(%rbp) 0.00 : 6d3f1d: e8 ce 5b d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d3f22: 85 c0 test %eax,%eax 2.48 : 6d3f24: f2 0f 10 4d d0 movsd -0x30(%rbp),%xmm1 0.00 : 6d3f29: 75 45 jne 6d3f70 3.11 : 6d3f2b: 66 0f 57 c0 xorpd %xmm0,%xmm0 0.00 : 6d3f2f: 66 0f 2e c8 ucomisd %xmm0,%xmm1 0.00 : 6d3f33: 75 29 jne 6d3f5e 0.00 : 6d3f35: 7a 27 jp 6d3f5e 0.00 : 6d3f37: f3 0f 10 55 e4 movss -0x1c(%rbp),%xmm2 0.00 : 6d3f3c: 0f 2e 15 9d e3 0d 00 ucomiss 0xde39d(%rip),%xmm2 # 7b22e0 <__func__.14992+0xd7> 0.00 : 6d3f43: 7a 02 jp 6d3f47 0.00 : 6d3f45: 74 17 je 6d3f5e 0.00 : 6d3f47: f2 0f 10 55 e8 movsd -0x18(%rbp),%xmm2 0.00 : 6d3f4c: 66 0f 2e d0 ucomisd %xmm0,%xmm2 0.00 : 6d3f50: 0f 8a 85 00 00 00 jp 6d3fdb 0.00 : 6d3f56: 66 90 xchg %ax,%ax 0.00 : 6d3f58: 0f 85 7d 00 00 00 jne 6d3fdb : arg1 == 0 || arg2 == 0); : PG_RETURN_FLOAT8(result); : } /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2518 1.86 : 6d3f5e: 48 83 c4 28 add $0x28,%rsp : float8 result; : : result = arg1 * arg2; : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), : arg1 == 0 || arg2 == 0); : PG_RETURN_FLOAT8(result); 0.00 : 6d3f62: 66 0f 28 c1 movapd %xmm1,%xmm0 : } 0.00 : 6d3f66: 5b pop %rbx 1.86 : 6d3f67: c9 leaveq : float8 result; : : result = arg1 * arg2; : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), : arg1 == 0 || arg2 == 0); : PG_RETURN_FLOAT8(result); 0.00 : 6d3f68: e9 53 9a 0a 00 jmpq 77d9c0 0.00 : 6d3f6d: 0f 1f 00 nopl (%rax) : float4 arg1 = PG_GETARG_FLOAT4(0); : float8 arg2 = PG_GETARG_FLOAT8(1); : float8 result; : : result = arg1 * arg2; : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), 0.00 : 6d3f70: f3 0f 10 45 e4 movss -0x1c(%rbp),%xmm0 0.00 : 6d3f75: e8 b6 57 d9 ff callq 469730 <__isinff@plt> 0.00 : 6d3f7a: 85 c0 test %eax,%eax 0.00 : 6d3f7c: f2 0f 10 4d d0 movsd -0x30(%rbp),%xmm1 0.00 : 6d3f81: 75 a8 jne 6d3f2b 0.00 : 6d3f83: f2 0f 10 45 e8 movsd -0x18(%rbp),%xmm0 0.00 : 6d3f88: e8 63 5b d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d3f8d: 85 c0 test %eax,%eax 0.00 : 6d3f8f: f2 0f 10 4d d0 movsd -0x30(%rbp),%xmm1 0.00 : 6d3f94: 75 95 jne 6d3f2b 0.00 : 6d3f96: 45 31 c0 xor %r8d,%r8d 0.00 : 6d3f99: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d3f9e: b9 f9 b8 8b 00 mov $0x8bb8f9,%ecx 0.00 : 6d3fa3: ba d4 09 00 00 mov $0x9d4,%edx 0.00 : 6d3fa8: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d3fad: e8 0e 6b 0a 00 callq 77aac0 0.00 : 6d3fb2: 84 c0 test %al,%al 0.00 : 6d3fb4: bf 2f b4 8b 00 mov $0x8bb42f,%edi 0.00 : 6d3fb9: 74 40 je 6d3ffb 0.00 : 6d3fbb: 31 c0 xor %eax,%eax 0.00 : 6d3fbd: e8 de 88 0a 00 callq 77c8a0 0.00 : 6d3fc2: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6d3fc7: 89 c3 mov %eax,%ebx 0.00 : 6d3fc9: e8 82 8d 0a 00 callq 77cd50 0.00 : 6d3fce: 89 de mov %ebx,%esi 0.00 : 6d3fd0: 89 c7 mov %eax,%edi 0.00 : 6d3fd2: 31 c0 xor %eax,%eax 0.00 : 6d3fd4: e8 07 66 0a 00 callq 77a5e0 0.00 : 6d3fd9: eb 20 jmp 6d3ffb 0.00 : 6d3fdb: 45 31 c0 xor %r8d,%r8d 0.00 : 6d3fde: b9 f9 b8 8b 00 mov $0x8bb8f9,%ecx 0.00 : 6d3fe3: ba d4 09 00 00 mov $0x9d4,%edx 0.00 : 6d3fe8: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d3fed: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d3ff2: e8 c9 6a 0a 00 callq 77aac0 0.00 : 6d3ff7: 84 c0 test %al,%al 0.00 : 6d3ff9: 75 05 jne 6d4000 0.00 : 6d3ffb: e8 d0 54 d9 ff callq 4694d0 0.00 : 6d4000: bf 4c b4 8b 00 mov $0x8bb44c,%edi 0.00 : 6d4005: eb b4 jmp 6d3fbb Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 23.75 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:673 21.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:664 20.62 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:669 10.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:694 8.75 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:680 6.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:673 3.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:664 3.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:669 1.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:687 1.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:694 0.62 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:665 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b16a0 : : * ---------------------------------------------------------------- : */ : static Datum : ExecEvalScalarVarFast(ExprState *exprstate, ExprContext *econtext, : bool *isNull, ExprDoneCond *isDone) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:664 21.25 : 5b16a0: 55 push %rbp : Var *variable = (Var *) exprstate->expr; : TupleTableSlot *slot; : AttrNumber attnum; : : if (isDone) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:669 20.62 : 5b16a1: 48 85 c9 test %rcx,%rcx : */ : static Datum : ExecEvalScalarVarFast(ExprState *exprstate, ExprContext *econtext, : bool *isNull, ExprDoneCond *isDone) : { : Var *variable = (Var *) exprstate->expr; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:665 0.62 : 5b16a4: 4c 8b 47 08 mov 0x8(%rdi),%r8 : * ---------------------------------------------------------------- : */ : static Datum : ExecEvalScalarVarFast(ExprState *exprstate, ExprContext *econtext, : bool *isNull, ExprDoneCond *isDone) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:664 3.12 : 5b16a8: 48 89 e5 mov %rsp,%rbp : Var *variable = (Var *) exprstate->expr; : TupleTableSlot *slot; : AttrNumber attnum; : : if (isDone) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:669 3.12 : 5b16ab: 74 06 je 5b16b3 : *isDone = ExprSingleResult; 0.00 : 5b16ad: c7 01 00 00 00 00 movl $0x0,(%rcx) : : /* Get the input slot and attribute number we want */ : switch (variable->varno) 0.00 : 5b16b3: 41 8b 40 04 mov 0x4(%r8),%eax /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:673 23.75 : 5b16b7: 3d e8 fd 00 00 cmp $0xfde8,%eax 0.00 : 5b16bc: 74 1a je 5b16d8 6.25 : 5b16be: 3d e9 fd 00 00 cmp $0xfde9,%eax 0.00 : 5b16c3: 74 2b je 5b16f0 : : /* INDEX_VAR is handled by default case */ : : default: /* get the tuple from the relation being : * scanned */ : slot = econtext->ecxt_scantuple; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:687 1.25 : 5b16c5: 48 8b 7e 08 mov 0x8(%rsi),%rdi : } : : attnum = variable->varattno; : : /* Fetch the value from the slot */ : return slot_getattr(slot, attnum, isNull); 0.00 : 5b16c9: 41 0f bf 70 08 movswl 0x8(%r8),%esi : } 0.00 : 5b16ce: c9 leaveq : } : : attnum = variable->varattno; : : /* Fetch the value from the slot */ : return slot_getattr(slot, attnum, isNull); /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:694 1.25 : 5b16cf: e9 2c dd eb ff jmpq 46f400 0.00 : 5b16d4: 0f 1f 40 00 nopl 0x0(%rax) : : /* Get the input slot and attribute number we want */ : switch (variable->varno) : { : case INNER_VAR: /* get the tuple from the inner node */ : slot = econtext->ecxt_innertuple; 0.00 : 5b16d8: 48 8b 7e 10 mov 0x10(%rsi),%rdi : } : : attnum = variable->varattno; : : /* Fetch the value from the slot */ : return slot_getattr(slot, attnum, isNull); 0.00 : 5b16dc: 41 0f bf 70 08 movswl 0x8(%r8),%esi : } 0.00 : 5b16e1: c9 leaveq : } : : attnum = variable->varattno; : : /* Fetch the value from the slot */ : return slot_getattr(slot, attnum, isNull); 0.00 : 5b16e2: e9 19 dd eb ff jmpq 46f400 0.00 : 5b16e7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5b16ee: 00 00 : case INNER_VAR: /* get the tuple from the inner node */ : slot = econtext->ecxt_innertuple; : break; : : case OUTER_VAR: /* get the tuple from the outer node */ : slot = econtext->ecxt_outertuple; /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:680 8.75 : 5b16f0: 48 8b 7e 18 mov 0x18(%rsi),%rdi : } : : attnum = variable->varattno; : : /* Fetch the value from the slot */ : return slot_getattr(slot, attnum, isNull); 0.00 : 5b16f4: 41 0f bf 70 08 movswl 0x8(%r8),%esi : } 0.00 : 5b16f9: c9 leaveq : } : : attnum = variable->varattno; : : /* Fetch the value from the slot */ : return slot_getattr(slot, attnum, isNull); /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:694 10.00 : 5b16fa: e9 01 dd eb ff jmpq 46f400 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 13.28 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3122 12.50 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 12.50 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 10.16 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3073 9.38 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3089 8.59 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 7.81 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3122 7.03 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3089 7.03 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3122 5.47 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 5.47 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3073 0.78 /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000069b9e0 : : * overflow as an unrecoverable SIGSEGV, so we want to error out ourselves : * before hitting the hardware limit. : */ : void : check_stack_depth(void) : { /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 12.50 : 69b9e0: 55 push %rbp 8.59 : 69b9e1: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 0.78 : 69b9e4: 48 89 5d f0 mov %rbx,-0x10(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3066 12.50 : 69b9e8: 4c 89 65 f8 mov %r12,-0x8(%rbp) 5.47 : 69b9ec: 48 83 ec 20 sub $0x20,%rsp : long stack_depth; : : /* : * Compute distance from reference point to my local variables : */ : stack_depth = (long) (stack_base_ptr - &stack_top_loc); 0.00 : 69b9f0: 48 8b 0d f9 2d 4e 00 mov 0x4e2df9(%rip),%rcx # b7e7f0 0.00 : 69b9f7: 48 8d 45 ef lea -0x11(%rbp),%rax /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3073 5.47 : 69b9fb: 48 89 ca mov %rcx,%rdx 10.16 : 69b9fe: 48 29 c2 sub %rax,%rdx 0.00 : 69ba01: 48 89 d0 mov %rdx,%rax : * The test on stack_base_ptr prevents us from erroring out if called : * during process setup or in a non-backend process. Logically it should : * be done first, but putting it here avoids wasting cycles during normal : * cases. : */ : if (stack_depth > max_stack_depth_bytes && 0.00 : 69ba04: 48 c1 fa 3f sar $0x3f,%rdx /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3089 9.38 : 69ba08: 48 31 d0 xor %rdx,%rax 7.03 : 69ba0b: 48 29 d0 sub %rdx,%rax 0.00 : 69ba0e: 48 39 05 a3 cd 4c 00 cmp %rax,0x4ccda3(%rip) # b687b8 0.00 : 69ba15: 7d 05 jge 69ba1c 0.00 : 69ba17: 48 85 c9 test %rcx,%rcx 0.00 : 69ba1a: 75 0a jne 69ba26 : errhint("Increase the configuration parameter \"max_stack_depth\" (currently %dkB), " : "after ensuring the platform's stack depth limit is adequate.", : max_stack_depth))); : } : #endif /* IA64 */ : } /home/Computational/mark/src/postgres-andres/src/backend/tcop/postgres.c:3122 7.81 : 69ba1c: 48 8b 5d f0 mov -0x10(%rbp),%rbx 7.03 : 69ba20: 4c 8b 65 f8 mov -0x8(%rbp),%r12 0.00 : 69ba24: c9 leaveq 13.28 : 69ba25: c3 retq : * cases. : */ : if (stack_depth > max_stack_depth_bytes && : stack_base_ptr != NULL) : { : ereport(ERROR, 0.00 : 69ba26: 45 31 c0 xor %r8d,%r8d 0.00 : 69ba29: b9 e0 00 8b 00 mov $0x8b00e0,%ecx 0.00 : 69ba2e: ba 19 0c 00 00 mov $0xc19,%edx 0.00 : 69ba33: be d0 e8 8a 00 mov $0x8ae8d0,%esi 0.00 : 69ba38: bf 14 00 00 00 mov $0x14,%edi 0.00 : 69ba3d: e8 7e f0 0d 00 callq 77aac0 0.00 : 69ba42: 84 c0 test %al,%al 0.00 : 69ba44: 75 05 jne 69ba4b 0.00 : 69ba46: e8 85 da dc ff callq 4694d0 0.00 : 69ba4b: 8b 35 5b cd 4c 00 mov 0x4ccd5b(%rip),%esi # b687ac 0.00 : 69ba51: bf 60 f0 8a 00 mov $0x8af060,%edi 0.00 : 69ba56: 31 c0 xor %eax,%eax 0.00 : 69ba58: e8 43 02 0e 00 callq 77bca0 0.00 : 69ba5d: bf 00 ea 8a 00 mov $0x8aea00,%edi 0.00 : 69ba62: 41 89 c4 mov %eax,%r12d 0.00 : 69ba65: 31 c0 xor %eax,%eax 0.00 : 69ba67: e8 34 0e 0e 00 callq 77c8a0 0.00 : 69ba6c: bf 05 01 00 01 mov $0x1000105,%edi 0.00 : 69ba71: 89 c3 mov %eax,%ebx 0.00 : 69ba73: e8 d8 12 0e 00 callq 77cd50 0.00 : 69ba78: 44 89 e2 mov %r12d,%edx 0.00 : 69ba7b: 89 c7 mov %eax,%edi 0.00 : 69ba7d: 89 de mov %ebx,%esi 0.00 : 69ba7f: 31 c0 xor %eax,%eax 0.00 : 69ba81: e8 5a eb 0d 00 callq 77a5e0 0.00 : 69ba86: eb be jmp 69ba46 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 50.00 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2226 25.42 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2217 12.71 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2217 6.78 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2217 3.39 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2226 1.69 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2217 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077d9d0 : : : #ifdef USE_FLOAT8_BYVAL : : float8 : DatumGetFloat8(Datum X) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2217 25.42 : 77d9d0: 55 push %rbp 12.71 : 77d9d1: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2217 1.69 : 77d9d4: 48 89 7d f8 mov %rdi,-0x8(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2217 6.78 : 77d9d8: f2 0f 10 45 f8 movsd -0x8(%rbp),%xmm0 : float8 retval; : } myunion; : : myunion.value = GET_8_BYTES(X); : return myunion.retval; : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2226 53.39 : 77d9dd: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 23.01 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 22.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 11.50 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1049 6.19 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 4.42 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1359 3.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1350 3.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1043 3.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1049 3.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1053 2.65 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1044 1.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1349 1.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1350 1.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1035 1.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/nodes/pg_list.h:87 1.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/nodes/pg_list.h:87 1.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1043 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1044 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 0.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1362 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b9d80 : : * stored in the expression context to be used when ExecProject evaluates : * the result tuple. : */ : TupleTableSlot * : ExecAgg(AggState *node) : { 0.00 : 5b9d80: 55 push %rbp 0.00 : 5b9d81: 48 89 e5 mov %rsp,%rbp 0.00 : 5b9d84: 41 57 push %r15 0.00 : 5b9d86: 41 56 push %r14 0.00 : 5b9d88: 49 89 fe mov %rdi,%r14 0.00 : 5b9d8b: 41 55 push %r13 0.00 : 5b9d8d: 41 54 push %r12 0.00 : 5b9d8f: 53 push %rbx 0.00 : 5b9d90: 48 81 ec d8 00 00 00 sub $0xd8,%rsp : /* : * Check to see if we're still projecting out tuples from a previous agg : * tuple (because there is a function-returning-set in the projection : * expressions). If so, try to project another one. : */ : if (node->ss.ps.ps_TupFromTlist) 0.00 : 5b9d97: 80 7f 70 00 cmpb $0x0,0x70(%rdi) 0.00 : 5b9d9b: 74 1c je 5b9db9 : { : TupleTableSlot *result; : ExprDoneCond isDone; : : result = ExecProject(node->ss.ps.ps_ProjInfo, &isDone); 0.00 : 5b9d9d: 48 8b 7f 68 mov 0x68(%rdi),%rdi 0.00 : 5b9da1: 48 8d 75 d4 lea -0x2c(%rbp),%rsi 0.00 : 5b9da5: e8 56 32 ff ff callq 5ad000 : if (isDone == ExprMultipleResult) 0.00 : 5b9daa: 83 7d d4 01 cmpl $0x1,-0x2c(%rbp) 0.00 : 5b9dae: 0f 84 04 02 00 00 je 5b9fb8 : return result; : /* Done with that source tuple... */ : node->ss.ps.ps_TupFromTlist = false; 0.00 : 5b9db4: 41 c6 46 70 00 movb $0x0,0x70(%r14) : /* : * Exit if nothing left to do. (We must do the ps_TupFromTlist check : * first, because in some cases agg_done gets set before we emit the final : * aggregate tuple, and we have to finish running SRFs for it.) : */ : if (node->agg_done) 0.00 : 5b9db9: 31 c0 xor %eax,%eax 0.00 : 5b9dbb: 41 80 be d0 00 00 00 cmpb $0x0,0xd0(%r14) 0.00 : 5b9dc2: 00 0.00 : 5b9dc3: 0f 85 ef 01 00 00 jne 5b9fb8 : return NULL; : : /* Dispatch based on strategy */ : if (((Agg *) node->ss.ps.plan)->aggstrategy == AGG_HASHED) 0.00 : 5b9dc9: 49 8b 46 08 mov 0x8(%r14),%rax 0.00 : 5b9dcd: 48 89 85 10 ff ff ff mov %rax,-0xf0(%rbp) 0.00 : 5b9dd4: 83 78 60 02 cmpl $0x2,0x60(%rax) 0.00 : 5b9dd8: 0f 85 ec 01 00 00 jne 5b9fca : { : if (!node->table_filled) 0.00 : 5b9dde: 31 c0 xor %eax,%eax 0.00 : 5b9de0: 41 80 be 00 01 00 00 cmpb $0x0,0x100(%r14) 0.00 : 5b9de7: 00 0.00 : 5b9de8: 4d 8d be 08 01 00 00 lea 0x108(%r14),%r15 0.00 : 5b9def: 0f 84 5d 07 00 00 je 5ba552 : : /* : * get state info from node : */ : /* econtext is the per-output-tuple expression context */ : econtext = aggstate->ss.ps.ps_ExprContext; 0.00 : 5b9df5: 4d 8b 6e 60 mov 0x60(%r14),%r13 : aggvalues = econtext->ecxt_aggvalues; 0.00 : 5b9df9: 49 8b 55 40 mov 0x40(%r13),%rdx 0.00 : 5b9dfd: 48 89 95 30 ff ff ff mov %rdx,-0xd0(%rbp) : aggnulls = econtext->ecxt_aggnulls; 0.00 : 5b9e04: 49 8b 55 48 mov 0x48(%r13),%rdx 0.00 : 5b9e08: 48 89 95 28 ff ff ff mov %rdx,-0xd8(%rbp) : peragg = aggstate->peragg; 0.00 : 5b9e0f: 49 8b 96 b0 00 00 00 mov 0xb0(%r14),%rdx 0.00 : 5b9e16: 48 89 95 20 ff ff ff mov %rdx,-0xe0(%rbp) : firstSlot = aggstate->ss.ss_ScanTupleSlot; 0.00 : 5b9e1d: 49 8b 96 88 00 00 00 mov 0x88(%r14),%rdx 0.00 : 5b9e24: 48 89 95 18 ff ff ff mov %rdx,-0xe8(%rbp) : : /* : * We loop retrieving groups until we find one satisfying : * aggstate->ss.ps.qual : */ : while (!aggstate->agg_done) 0.00 : 5b9e2b: 84 c0 test %al,%al 0.00 : 5b9e2d: 0f 85 83 01 00 00 jne 5b9fb6 : { : /* : * Find the next entry in the hash table : */ : entry = (AggHashEntry) ScanTupleHashTable(&aggstate->hashiter); 0.00 : 5b9e33: 4c 89 ff mov %r15,%rdi 0.00 : 5b9e36: e8 85 9c 1c 00 callq 783ac0 : if (entry == NULL) 0.00 : 5b9e3b: 48 85 c0 test %rax,%rax : while (!aggstate->agg_done) : { : /* : * Find the next entry in the hash table : */ : entry = (AggHashEntry) ScanTupleHashTable(&aggstate->hashiter); 0.00 : 5b9e3e: 49 89 c4 mov %rax,%r12 : if (entry == NULL) 0.00 : 5b9e41: 0f 84 fc 06 00 00 je 5ba543 : * : * We intentionally don't use ReScanExprContext here; if any aggs have : * registered shutdown callbacks, they mustn't be called yet, since we : * might not be done with that agg. : */ : ResetExprContext(econtext); 0.00 : 5b9e47: 49 8b 7d 28 mov 0x28(%r13),%rdi 0.00 : 5b9e4b: e8 60 eb 1d 00 callq 7989b0 : : /* : * Store the copied first input tuple in the tuple table slot reserved : * for it, so that it can be used in ExecProject. : */ : ExecStoreMinimalTuple(entry->shared.firstTuple, 0.00 : 5b9e50: 48 8b b5 18 ff ff ff mov -0xe8(%rbp),%rsi 0.00 : 5b9e57: 49 8b 3c 24 mov (%r12),%rdi 0.00 : 5b9e5b: 31 d2 xor %edx,%edx 0.00 : 5b9e5d: e8 7e a5 ff ff callq 5b43e0 : : /* : * Finalize each aggregate calculation, and stash results in the : * per-output-tuple context. : */ : for (aggno = 0; aggno < aggstate->numaggs; aggno++) 0.00 : 5b9e62: 41 8b 96 98 00 00 00 mov 0x98(%r14),%edx 0.00 : 5b9e69: 85 d2 test %edx,%edx 0.00 : 5b9e6b: 7e 49 jle 5b9eb6 0.00 : 5b9e6d: 31 db xor %ebx,%ebx : { : AggStatePerAgg peraggstate = &peragg[aggno]; : AggStatePerGroup pergroupstate = &pergroup[aggno]; : : Assert(peraggstate->numSortCols == 0); : finalize_aggregate(aggstate, peraggstate, pergroupstate, 0.00 : 5b9e6f: 48 8b 85 30 ff ff ff mov -0xd0(%rbp),%rax : * Finalize each aggregate calculation, and stash results in the : * per-output-tuple context. : */ : for (aggno = 0; aggno < aggstate->numaggs; aggno++) : { : AggStatePerAgg peraggstate = &peragg[aggno]; 0.00 : 5b9e76: 48 63 fb movslq %ebx,%rdi : : /* : * Finalize each aggregate calculation, and stash results in the : * per-output-tuple context. : */ : for (aggno = 0; aggno < aggstate->numaggs; aggno++) 0.00 : 5b9e79: 83 c3 01 add $0x1,%ebx : { : AggStatePerAgg peraggstate = &peragg[aggno]; : AggStatePerGroup pergroupstate = &pergroup[aggno]; : : Assert(peraggstate->numSortCols == 0); : finalize_aggregate(aggstate, peraggstate, pergroupstate, 0.00 : 5b9e7c: 48 69 f7 a8 04 00 00 imul $0x4a8,%rdi,%rsi 0.00 : 5b9e83: 48 03 b5 20 ff ff ff add -0xe0(%rbp),%rsi 0.00 : 5b9e8a: 48 8d 0c f8 lea (%rax,%rdi,8),%rcx 0.00 : 5b9e8e: 48 89 f8 mov %rdi,%rax 0.00 : 5b9e91: 48 c1 e0 04 shl $0x4,%rax 0.00 : 5b9e95: 49 8d 54 04 08 lea 0x8(%r12,%rax,1),%rdx 0.00 : 5b9e9a: 48 8b 85 28 ff ff ff mov -0xd8(%rbp),%rax 0.00 : 5b9ea1: 4c 8d 04 38 lea (%rax,%rdi,1),%r8 0.00 : 5b9ea5: 4c 89 f7 mov %r14,%rdi 0.00 : 5b9ea8: e8 13 fc ff ff callq 5b9ac0 : : /* : * Finalize each aggregate calculation, and stash results in the : * per-output-tuple context. : */ : for (aggno = 0; aggno < aggstate->numaggs; aggno++) 0.00 : 5b9ead: 41 3b 9e 98 00 00 00 cmp 0x98(%r14),%ebx 0.00 : 5b9eb4: 7c b9 jl 5b9e6f : : /* : * Use the representative input tuple for any references to : * non-aggregated input columns in the qual and tlist. : */ : econtext->ecxt_outertuple = firstSlot; 0.00 : 5b9eb6: 48 8b 95 18 ff ff ff mov -0xe8(%rbp),%rdx : : /* : * Check the qual (HAVING clause); if the group does not match, ignore : * it and loop back to try to process another group. : */ : if (ExecQual(aggstate->ss.ps.qual, econtext, false)) 0.00 : 5b9ebd: 4c 89 ee mov %r13,%rsi : : /* : * Use the representative input tuple for any references to : * non-aggregated input columns in the qual and tlist. : */ : econtext->ecxt_outertuple = firstSlot; 0.00 : 5b9ec0: 49 89 55 18 mov %rdx,0x18(%r13) : : /* : * Check the qual (HAVING clause); if the group does not match, ignore : * it and loop back to try to process another group. : */ : if (ExecQual(aggstate->ss.ps.qual, econtext, false)) 0.00 : 5b9ec4: 49 8b 7e 28 mov 0x28(%r14),%rdi 0.00 : 5b9ec8: 31 d2 xor %edx,%edx 0.00 : 5b9eca: e8 41 30 ff ff callq 5acf10 0.00 : 5b9ecf: 84 c0 test %al,%al 0.00 : 5b9ed1: 0f 85 4e 06 00 00 jne 5ba525 : (isDone == ExprMultipleResult); : return result; : } : } : else : InstrCountFiltered1(aggstate, 1); 0.00 : 5b9ed7: 49 8b 46 18 mov 0x18(%r14),%rax 0.00 : 5b9edb: 48 85 c0 test %rax,%rax 0.00 : 5b9ede: 74 18 je 5b9ef8 0.00 : 5b9ee0: f2 0f 10 05 70 52 1f movsd 0x1f5270(%rip),%xmm0 # 7af158 <__func__.15777+0x10> 0.00 : 5b9ee7: 00 0.00 : 5b9ee8: f2 0f 58 80 c8 00 00 addsd 0xc8(%rax),%xmm0 0.00 : 5b9eef: 00 0.00 : 5b9ef0: f2 0f 11 80 c8 00 00 movsd %xmm0,0xc8(%rax) 0.00 : 5b9ef7: 00 0.00 : 5b9ef8: 41 0f b6 86 d0 00 00 movzbl 0xd0(%r14),%eax 0.00 : 5b9eff: 00 0.00 : 5b9f00: e9 26 ff ff ff jmpq 5b9e2b : MemoryContextReset(workcontext); : : ExecClearTuple(slot1); : } : : if (slot2) 0.00 : 5b9f05: 4d 85 ff test %r15,%r15 0.00 : 5b9f08: 74 08 je 5b9f12 : ExecClearTuple(slot2); 0.00 : 5b9f0a: 4c 89 ff mov %r15,%rdi 0.00 : 5b9f0d: e8 fe a1 ff ff callq 5b4110 : : tuplesort_end(peraggstate->sortstate); 0.00 : 5b9f12: 49 8b bc 24 f8 00 00 mov 0xf8(%r12),%rdi 0.00 : 5b9f19: 00 0.00 : 5b9f1a: e8 c1 52 1e 00 callq 79f1e0 : peraggstate->sortstate = NULL; 0.00 : 5b9f1f: 49 c7 84 24 f8 00 00 movq $0x0,0xf8(%r12) 0.00 : 5b9f26: 00 00 00 00 00 : process_ordered_aggregate_multi(aggstate, : peraggstate, : pergroupstate); : } : : finalize_aggregate(aggstate, peraggstate, pergroupstate, 0.00 : 5b9f2b: 48 8b 55 88 mov -0x78(%rbp),%rdx 0.00 : 5b9f2f: 48 8b 85 68 ff ff ff mov -0x98(%rbp),%rax 0.00 : 5b9f36: 4c 89 e6 mov %r12,%rsi 0.00 : 5b9f39: 4c 89 f7 mov %r14,%rdi 0.00 : 5b9f3c: 48 8d 0c d0 lea (%rax,%rdx,8),%rcx 0.00 : 5b9f40: 48 8b 85 60 ff ff ff mov -0xa0(%rbp),%rax 0.00 : 5b9f47: 4c 8d 04 10 lea (%rax,%rdx,1),%r8 0.00 : 5b9f4b: 48 8b 95 38 ff ff ff mov -0xc8(%rbp),%rdx 0.00 : 5b9f52: e8 69 fb ff ff callq 5b9ac0 : : /* : * Done scanning input tuple group. Finalize each aggregate : * calculation, and stash results in the per-output-tuple context. : */ : for (aggno = 0; aggno < aggstate->numaggs; aggno++) 0.00 : 5b9f57: 83 85 44 ff ff ff 01 addl $0x1,-0xbc(%rbp) 0.00 : 5b9f5e: 8b 95 44 ff ff ff mov -0xbc(%rbp),%edx 0.00 : 5b9f64: 41 3b 96 98 00 00 00 cmp 0x98(%r14),%edx 0.00 : 5b9f6b: 0f 8c f6 01 00 00 jl 5ba167 : : /* : * Check the qual (HAVING clause); if the group does not match, ignore : * it and loop back to try to process another group. : */ : if (ExecQual(aggstate->ss.ps.qual, econtext, false)) 0.00 : 5b9f71: 49 8b 7e 28 mov 0x28(%r14),%rdi 0.00 : 5b9f75: 48 8b b5 78 ff ff ff mov -0x88(%rbp),%rsi 0.00 : 5b9f7c: 31 d2 xor %edx,%edx 0.00 : 5b9f7e: e8 8d 2f ff ff callq 5acf10 0.00 : 5b9f83: 84 c0 test %al,%al 0.00 : 5b9f85: 0f 85 18 05 00 00 jne 5ba4a3 : (isDone == ExprMultipleResult); : return result; : } : } : else : InstrCountFiltered1(aggstate, 1); 0.00 : 5b9f8b: 49 8b 46 18 mov 0x18(%r14),%rax 0.00 : 5b9f8f: 48 85 c0 test %rax,%rax 0.00 : 5b9f92: 74 18 je 5b9fac 0.00 : 5b9f94: f2 0f 10 05 bc 51 1f movsd 0x1f51bc(%rip),%xmm0 # 7af158 <__func__.15777+0x10> 0.00 : 5b9f9b: 00 0.00 : 5b9f9c: f2 0f 58 80 c8 00 00 addsd 0xc8(%rax),%xmm0 0.00 : 5b9fa3: 00 0.00 : 5b9fa4: f2 0f 11 80 c8 00 00 movsd %xmm0,0xc8(%rax) 0.00 : 5b9fab: 00 : : /* : * We loop retrieving groups until we find one matching : * aggstate->ss.ps.qual : */ : while (!aggstate->agg_done) 0.00 : 5b9fac: 41 80 be d0 00 00 00 cmpb $0x0,0xd0(%r14) 0.00 : 5b9fb3: 00 0.00 : 5b9fb4: 74 75 je 5ba02b 0.00 : 5b9fb6: 31 c0 xor %eax,%eax : agg_fill_hash_table(node); : return agg_retrieve_hash_table(node); : } : else : return agg_retrieve_direct(node); : } 0.00 : 5b9fb8: 48 81 c4 d8 00 00 00 add $0xd8,%rsp 0.00 : 5b9fbf: 5b pop %rbx 0.00 : 5b9fc0: 41 5c pop %r12 0.00 : 5b9fc2: 41 5d pop %r13 0.00 : 5b9fc4: 41 5e pop %r14 0.00 : 5b9fc6: 41 5f pop %r15 0.00 : 5b9fc8: c9 leaveq 0.00 : 5b9fc9: c3 retq : /* : * get state info from node : */ : outerPlan = outerPlanState(aggstate); : /* econtext is the per-output-tuple expression context */ : econtext = aggstate->ss.ps.ps_ExprContext; 0.00 : 5b9fca: 49 8b 56 60 mov 0x60(%r14),%rdx : int aggno; : : /* : * get state info from node : */ : outerPlan = outerPlanState(aggstate); 0.00 : 5b9fce: 49 8b 46 30 mov 0x30(%r14),%rax : /* econtext is the per-output-tuple expression context */ : econtext = aggstate->ss.ps.ps_ExprContext; 0.00 : 5b9fd2: 48 89 95 78 ff ff ff mov %rdx,-0x88(%rbp) : int aggno; : : /* : * get state info from node : */ : outerPlan = outerPlanState(aggstate); 0.00 : 5b9fd9: 48 89 45 80 mov %rax,-0x80(%rbp) : /* econtext is the per-output-tuple expression context */ : econtext = aggstate->ss.ps.ps_ExprContext; : aggvalues = econtext->ecxt_aggvalues; 0.00 : 5b9fdd: 48 8b 42 40 mov 0x40(%rdx),%rax 0.00 : 5b9fe1: 48 89 85 68 ff ff ff mov %rax,-0x98(%rbp) : aggnulls = econtext->ecxt_aggnulls; 0.00 : 5b9fe8: 48 8b 52 48 mov 0x48(%rdx),%rdx : /* tmpcontext is the per-input-tuple expression context */ : tmpcontext = aggstate->tmpcontext; 0.00 : 5b9fec: 49 8b 86 c0 00 00 00 mov 0xc0(%r14),%rax : */ : outerPlan = outerPlanState(aggstate); : /* econtext is the per-output-tuple expression context */ : econtext = aggstate->ss.ps.ps_ExprContext; : aggvalues = econtext->ecxt_aggvalues; : aggnulls = econtext->ecxt_aggnulls; 0.00 : 5b9ff3: 48 89 95 60 ff ff ff mov %rdx,-0xa0(%rbp) : /* tmpcontext is the per-input-tuple expression context */ : tmpcontext = aggstate->tmpcontext; : peragg = aggstate->peragg; 0.00 : 5b9ffa: 49 8b 96 b0 00 00 00 mov 0xb0(%r14),%rdx : /* econtext is the per-output-tuple expression context */ : econtext = aggstate->ss.ps.ps_ExprContext; : aggvalues = econtext->ecxt_aggvalues; : aggnulls = econtext->ecxt_aggnulls; : /* tmpcontext is the per-input-tuple expression context */ : tmpcontext = aggstate->tmpcontext; 0.00 : 5ba001: 48 89 85 70 ff ff ff mov %rax,-0x90(%rbp) : peragg = aggstate->peragg; : pergroup = aggstate->pergroup; 0.00 : 5ba008: 49 8b 86 d8 00 00 00 mov 0xd8(%r14),%rax : econtext = aggstate->ss.ps.ps_ExprContext; : aggvalues = econtext->ecxt_aggvalues; : aggnulls = econtext->ecxt_aggnulls; : /* tmpcontext is the per-input-tuple expression context */ : tmpcontext = aggstate->tmpcontext; : peragg = aggstate->peragg; 0.00 : 5ba00f: 48 89 95 58 ff ff ff mov %rdx,-0xa8(%rbp) : pergroup = aggstate->pergroup; : firstSlot = aggstate->ss.ss_ScanTupleSlot; 0.00 : 5ba016: 49 8b 96 88 00 00 00 mov 0x88(%r14),%rdx : aggvalues = econtext->ecxt_aggvalues; : aggnulls = econtext->ecxt_aggnulls; : /* tmpcontext is the per-input-tuple expression context */ : tmpcontext = aggstate->tmpcontext; : peragg = aggstate->peragg; : pergroup = aggstate->pergroup; 0.00 : 5ba01d: 48 89 85 50 ff ff ff mov %rax,-0xb0(%rbp) : firstSlot = aggstate->ss.ss_ScanTupleSlot; 0.00 : 5ba024: 48 89 95 48 ff ff ff mov %rdx,-0xb8(%rbp) : { : /* : * If we don't already have the first tuple of the new group, fetch it : * from the outer plan. : */ : if (aggstate->grp_firstTuple == NULL) 0.00 : 5ba02b: 49 83 be e0 00 00 00 cmpq $0x0,0xe0(%r14) 0.00 : 5ba032: 00 0.00 : 5ba033: 0f 84 a4 04 00 00 je 5ba4dd : * We use ReScanExprContext not just ResetExprContext because we want : * any registered shutdown callbacks to be called. That allows : * aggregate functions to ensure they've cleaned up any non-memory : * resources. : */ : ReScanExprContext(econtext); 0.00 : 5ba039: 48 8b bd 78 ff ff ff mov -0x88(%rbp),%rdi 0.00 : 5ba040: e8 3b b1 ff ff callq 5b5180 : : MemoryContextResetAndDeleteChildren(aggstate->aggcontext); 0.00 : 5ba045: 49 8b be b8 00 00 00 mov 0xb8(%r14),%rdi 0.00 : 5ba04c: e8 bf eb 1d 00 callq 798c10 : : /* : * Initialize working state for a new input tuple group : */ : initialize_aggregates(aggstate, peragg, pergroup); 0.00 : 5ba051: 48 8b 95 50 ff ff ff mov -0xb0(%rbp),%rdx 0.00 : 5ba058: 48 8b b5 58 ff ff ff mov -0xa8(%rbp),%rsi 0.00 : 5ba05f: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba062: e8 69 f5 ff ff callq 5b95d0 : : if (aggstate->grp_firstTuple != NULL) 0.00 : 5ba067: 49 8b be e0 00 00 00 mov 0xe0(%r14),%rdi 0.00 : 5ba06e: 48 85 ff test %rdi,%rdi 0.00 : 5ba071: 0f 84 c5 00 00 00 je 5ba13c : /* : * Store the copied first input tuple in the tuple table slot : * reserved for it. The tuple will be deleted when it is cleared : * from the slot. : */ : ExecStoreTuple(aggstate->grp_firstTuple, 0.00 : 5ba077: 48 8b b5 48 ff ff ff mov -0xb8(%rbp),%rsi 0.00 : 5ba07e: 31 d2 xor %edx,%edx 0.00 : 5ba080: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 5ba085: e8 f6 a3 ff ff callq 5b4480 : InvalidBuffer, : true); : aggstate->grp_firstTuple = NULL; /* don't keep two pointers */ : : /* set up for first advance_aggregates call */ : tmpcontext->ecxt_outertuple = firstSlot; 0.00 : 5ba08a: 48 8b 85 48 ff ff ff mov -0xb8(%rbp),%rax 0.00 : 5ba091: 48 8b 95 70 ff ff ff mov -0x90(%rbp),%rdx : */ : ExecStoreTuple(aggstate->grp_firstTuple, : firstSlot, : InvalidBuffer, : true); : aggstate->grp_firstTuple = NULL; /* don't keep two pointers */ 0.00 : 5ba098: 49 c7 86 e0 00 00 00 movq $0x0,0xe0(%r14) 0.00 : 5ba09f: 00 00 00 00 : : /* set up for first advance_aggregates call */ : tmpcontext->ecxt_outertuple = firstSlot; 0.00 : 5ba0a3: 48 89 42 18 mov %rax,0x18(%rdx) : * Process each outer-plan tuple, and then fetch the next one, : * until we exhaust the outer plan or cross a group boundary. : */ : for (;;) : { : advance_aggregates(aggstate, pergroup); 0.00 : 5ba0a7: 48 8b b5 50 ff ff ff mov -0xb0(%rbp),%rsi 0.00 : 5ba0ae: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba0b1: e8 9a f8 ff ff callq 5b9950 : : /* Reset per-input-tuple context after each tuple */ : ResetExprContext(tmpcontext); 0.00 : 5ba0b6: 48 8b 95 70 ff ff ff mov -0x90(%rbp),%rdx 0.00 : 5ba0bd: 48 8b 7a 28 mov 0x28(%rdx),%rdi 0.00 : 5ba0c1: e8 ea e8 1d 00 callq 7989b0 : : outerslot = ExecProcNode(outerPlan); 0.00 : 5ba0c6: 48 8b 7d 80 mov -0x80(%rbp),%rdi 0.00 : 5ba0ca: e8 d1 23 ff ff callq 5ac4a0 : if (TupIsNull(outerslot)) 0.00 : 5ba0cf: 48 85 c0 test %rax,%rax : advance_aggregates(aggstate, pergroup); : : /* Reset per-input-tuple context after each tuple */ : ResetExprContext(tmpcontext); : : outerslot = ExecProcNode(outerPlan); 0.00 : 5ba0d2: 48 89 c3 mov %rax,%rbx : if (TupIsNull(outerslot)) 0.00 : 5ba0d5: 0f 84 f5 03 00 00 je 5ba4d0 0.00 : 5ba0db: 80 78 04 00 cmpb $0x0,0x4(%rax) 0.00 : 5ba0df: 0f 85 eb 03 00 00 jne 5ba4d0 : /* no more outer-plan tuples available */ : aggstate->agg_done = true; : break; : } : /* set up for next advance_aggregates call */ : tmpcontext->ecxt_outertuple = outerslot; 0.00 : 5ba0e5: 48 8b 85 70 ff ff ff mov -0x90(%rbp),%rax 0.00 : 5ba0ec: 48 89 58 18 mov %rbx,0x18(%rax) : : /* : * If we are grouping, check whether we've crossed a group : * boundary. : */ : if (node->aggstrategy == AGG_SORTED) 0.00 : 5ba0f0: 48 8b 95 10 ff ff ff mov -0xf0(%rbp),%rdx 0.00 : 5ba0f7: 83 7a 60 01 cmpl $0x1,0x60(%rdx) 0.00 : 5ba0fb: 75 aa jne 5ba0a7 : { : if (!execTuplesMatch(firstSlot, 0.00 : 5ba0fd: 48 8b 85 70 ff ff ff mov -0x90(%rbp),%rax 0.00 : 5ba104: 48 8b 4a 68 mov 0x68(%rdx),%rcx 0.00 : 5ba108: 48 89 de mov %rbx,%rsi 0.00 : 5ba10b: 8b 52 64 mov 0x64(%rdx),%edx 0.00 : 5ba10e: 4d 8b 86 a0 00 00 00 mov 0xa0(%r14),%r8 0.00 : 5ba115: 48 8b bd 48 ff ff ff mov -0xb8(%rbp),%rdi 0.00 : 5ba11c: 4c 8b 48 28 mov 0x28(%rax),%r9 0.00 : 5ba120: e8 1b f3 fe ff callq 5a9440 0.00 : 5ba125: 84 c0 test %al,%al 0.00 : 5ba127: 0f 85 7a ff ff ff jne 5ba0a7 : tmpcontext->ecxt_per_tuple_memory)) : { : /* : * Save the first input tuple of the next group. : */ : aggstate->grp_firstTuple = ExecCopySlotTuple(outerslot); 0.00 : 5ba12d: 48 89 df mov %rbx,%rdi 0.00 : 5ba130: e8 7b 9e ff ff callq 5b3fb0 0.00 : 5ba135: 49 89 86 e0 00 00 00 mov %rax,0xe0(%r14) : * qual, and the tlist. (If we are not grouping, and there are no : * input rows at all, we will come here with an empty firstSlot ... : * but if not grouping, there can't be any references to : * non-aggregated input columns, so no problem.) : */ : econtext->ecxt_outertuple = firstSlot; 0.00 : 5ba13c: 48 8b 85 48 ff ff ff mov -0xb8(%rbp),%rax 0.00 : 5ba143: 48 8b 95 78 ff ff ff mov -0x88(%rbp),%rdx 0.00 : 5ba14a: 48 89 42 18 mov %rax,0x18(%rdx) : : /* : * Done scanning input tuple group. Finalize each aggregate : * calculation, and stash results in the per-output-tuple context. : */ : for (aggno = 0; aggno < aggstate->numaggs; aggno++) 0.00 : 5ba14e: 41 8b 86 98 00 00 00 mov 0x98(%r14),%eax 0.00 : 5ba155: 85 c0 test %eax,%eax 0.00 : 5ba157: 0f 8e 14 fe ff ff jle 5b9f71 0.00 : 5ba15d: c7 85 44 ff ff ff 00 movl $0x0,-0xbc(%rbp) 0.00 : 5ba164: 00 00 00 : { : AggStatePerAgg peraggstate = &peragg[aggno]; 0.00 : 5ba167: 48 63 95 44 ff ff ff movslq -0xbc(%rbp),%rdx 0.00 : 5ba16e: 4c 8b a5 58 ff ff ff mov -0xa8(%rbp),%r12 0.00 : 5ba175: 48 69 c2 a8 04 00 00 imul $0x4a8,%rdx,%rax 0.00 : 5ba17c: 48 89 55 88 mov %rdx,-0x78(%rbp) 0.00 : 5ba180: 49 01 c4 add %rax,%r12 : AggStatePerGroup pergroupstate = &pergroup[aggno]; 0.00 : 5ba183: 48 89 d0 mov %rdx,%rax 0.00 : 5ba186: 48 c1 e0 04 shl $0x4,%rax 0.00 : 5ba18a: 48 03 85 50 ff ff ff add -0xb0(%rbp),%rax 0.00 : 5ba191: 48 89 85 38 ff ff ff mov %rax,-0xc8(%rbp) : : if (peraggstate->numSortCols > 0) 0.00 : 5ba198: 41 8b 84 24 8c 00 00 mov 0x8c(%r12),%eax 0.00 : 5ba19f: 00 0.00 : 5ba1a0: 85 c0 test %eax,%eax 0.00 : 5ba1a2: 0f 8e 83 fd ff ff jle 5b9f2b : { : if (peraggstate->numInputs == 1) 0.00 : 5ba1a8: 41 83 7c 24 14 01 cmpl $0x1,0x14(%r12) 0.00 : 5ba1ae: 0f 84 3e 01 00 00 je 5ba2f2 : static void : process_ordered_aggregate_multi(AggState *aggstate, : AggStatePerAgg peraggstate, : AggStatePerGroup pergroupstate) : { : MemoryContext workcontext = aggstate->tmpcontext->ecxt_per_tuple_memory; 0.00 : 5ba1b4: 49 8b 86 c0 00 00 00 mov 0xc0(%r14),%rax 0.00 : 5ba1bb: 48 8b 40 28 mov 0x28(%rax),%rax 0.00 : 5ba1bf: 48 89 45 c0 mov %rax,-0x40(%rbp) : FunctionCallInfo fcinfo = &peraggstate->transfn_fcinfo; : TupleTableSlot *slot1 = peraggstate->evalslot; : TupleTableSlot *slot2 = peraggstate->uniqslot; : int numTransInputs = peraggstate->numTransInputs; : int numDistinctCols = peraggstate->numDistinctCols; 0.00 : 5ba1c3: 41 8b 84 24 90 00 00 mov 0x90(%r12),%eax 0.00 : 5ba1ca: 00 : AggStatePerAgg peraggstate, : AggStatePerGroup pergroupstate) : { : MemoryContext workcontext = aggstate->tmpcontext->ecxt_per_tuple_memory; : FunctionCallInfo fcinfo = &peraggstate->transfn_fcinfo; : TupleTableSlot *slot1 = peraggstate->evalslot; 0.00 : 5ba1cb: 49 8b 9c 24 e8 00 00 mov 0xe8(%r12),%rbx 0.00 : 5ba1d2: 00 : TupleTableSlot *slot2 = peraggstate->uniqslot; 0.00 : 5ba1d3: 4d 8b bc 24 f0 00 00 mov 0xf0(%r12),%r15 0.00 : 5ba1da: 00 : int numTransInputs = peraggstate->numTransInputs; 0.00 : 5ba1db: 45 8b 6c 24 18 mov 0x18(%r12),%r13d : int numDistinctCols = peraggstate->numDistinctCols; 0.00 : 5ba1e0: 89 45 bc mov %eax,-0x44(%rbp) : bool haveOldValue = false; : int i; : : tuplesort_performsort(peraggstate->sortstate); 0.00 : 5ba1e3: 49 8b bc 24 f8 00 00 mov 0xf8(%r12),%rdi 0.00 : 5ba1ea: 00 0.00 : 5ba1eb: e8 00 7e 1e 00 callq 7a1ff0 : : ExecClearTuple(slot1); 0.00 : 5ba1f0: 48 89 df mov %rbx,%rdi 0.00 : 5ba1f3: e8 18 9f ff ff callq 5b4110 : if (slot2) 0.00 : 5ba1f8: 4d 85 ff test %r15,%r15 0.00 : 5ba1fb: 74 08 je 5ba205 : ExecClearTuple(slot2); 0.00 : 5ba1fd: 4c 89 ff mov %r15,%rdi 0.00 : 5ba200: e8 0b 9f ff ff callq 5b4110 0.00 : 5ba205: c6 45 bb 00 movb $0x0,-0x45(%rbp) 0.00 : 5ba209: eb 3d jmp 5ba248 : * transfn. (This will help execTuplesMatch too, so we do it : * immediately.) : */ : slot_getsomeattrs(slot1, numTransInputs); : : if (numDistinctCols == 0 || 0.00 : 5ba20b: 80 7d bb 00 cmpb $0x0,-0x45(%rbp) 0.00 : 5ba20f: 90 nop 0.00 : 5ba210: 74 6c je 5ba27e 0.00 : 5ba212: 49 8b 8c 24 98 00 00 mov 0x98(%r12),%rcx 0.00 : 5ba219: 00 0.00 : 5ba21a: 4c 8b 4d c0 mov -0x40(%rbp),%r9 0.00 : 5ba21e: 4c 89 fe mov %r15,%rsi 0.00 : 5ba221: 4d 8b 84 24 b8 00 00 mov 0xb8(%r12),%r8 0.00 : 5ba228: 00 0.00 : 5ba229: 8b 55 bc mov -0x44(%rbp),%edx 0.00 : 5ba22c: 48 89 df mov %rbx,%rdi 0.00 : 5ba22f: e8 0c f2 fe ff callq 5a9440 0.00 : 5ba234: 84 c0 test %al,%al 0.00 : 5ba236: 74 46 je 5ba27e 0.00 : 5ba238: c6 45 bb 01 movb $0x1,-0x45(%rbp) 0.00 : 5ba23c: 0f 1f 40 00 nopl 0x0(%rax) : : /* Reset context each time, unless execTuplesMatch did it for us */ : if (numDistinctCols == 0) : MemoryContextReset(workcontext); : : ExecClearTuple(slot1); 0.00 : 5ba240: 48 89 df mov %rbx,%rdi 0.00 : 5ba243: e8 c8 9e ff ff callq 5b4110 : : ExecClearTuple(slot1); : if (slot2) : ExecClearTuple(slot2); : : while (tuplesort_gettupleslot(peraggstate->sortstate, true, slot1)) 0.00 : 5ba248: 49 8b bc 24 f8 00 00 mov 0xf8(%r12),%rdi 0.00 : 5ba24f: 00 0.00 : 5ba250: 48 89 da mov %rbx,%rdx 0.00 : 5ba253: be 01 00 00 00 mov $0x1,%esi 0.00 : 5ba258: e8 33 40 1e 00 callq 79e290 0.00 : 5ba25d: 84 c0 test %al,%al 0.00 : 5ba25f: 0f 84 a0 fc ff ff je 5b9f05 : /* : * Extract the first numTransInputs columns as datums to pass to the : * transfn. (This will help execTuplesMatch too, so we do it : * immediately.) : */ : slot_getsomeattrs(slot1, numTransInputs); 0.00 : 5ba265: 44 89 ee mov %r13d,%esi 0.00 : 5ba268: 48 89 df mov %rbx,%rdi 0.00 : 5ba26b: e8 f0 4f eb ff callq 46f260 : : if (numDistinctCols == 0 || 0.00 : 5ba270: 8b 45 bc mov -0x44(%rbp),%eax 0.00 : 5ba273: 85 c0 test %eax,%eax 0.00 : 5ba275: 0f 94 85 0f ff ff ff sete -0xf1(%rbp) 0.00 : 5ba27c: 75 8d jne 5ba20b : peraggstate->equalfns, : workcontext)) : { : /* Load values into fcinfo */ : /* Start from 1, since the 0th arg will be the transition value */ : for (i = 0; i < numTransInputs; i++) 0.00 : 5ba27e: 45 85 ed test %r13d,%r13d 0.00 : 5ba281: 7e 2e jle 5ba2b1 0.00 : 5ba283: 31 d2 xor %edx,%edx 0.00 : 5ba285: 0f 1f 00 nopl (%rax) : { : fcinfo->arg[i + 1] = slot1->tts_values[i]; 0.00 : 5ba288: 48 8b 43 28 mov 0x28(%rbx),%rax 0.00 : 5ba28c: 48 8b 04 d0 mov (%rax,%rdx,8),%rax 0.00 : 5ba290: 49 89 84 d4 28 01 00 mov %rax,0x128(%r12,%rdx,8) 0.00 : 5ba297: 00 : fcinfo->argnull[i + 1] = slot1->tts_isnull[i]; 0.00 : 5ba298: 48 8b 43 30 mov 0x30(%rbx),%rax 0.00 : 5ba29c: 0f b6 04 10 movzbl (%rax,%rdx,1),%eax 0.00 : 5ba2a0: 41 88 84 14 41 04 00 mov %al,0x441(%r12,%rdx,1) 0.00 : 5ba2a7: 00 0.00 : 5ba2a8: 48 83 c2 01 add $0x1,%rdx : peraggstate->equalfns, : workcontext)) : { : /* Load values into fcinfo */ : /* Start from 1, since the 0th arg will be the transition value */ : for (i = 0; i < numTransInputs; i++) 0.00 : 5ba2ac: 41 39 d5 cmp %edx,%r13d 0.00 : 5ba2af: 7f d7 jg 5ba288 : { : fcinfo->arg[i + 1] = slot1->tts_values[i]; : fcinfo->argnull[i + 1] = slot1->tts_isnull[i]; : } : : advance_transition_function(aggstate, peraggstate, pergroupstate); 0.00 : 5ba2b1: 48 8b 95 38 ff ff ff mov -0xc8(%rbp),%rdx 0.00 : 5ba2b8: 4c 89 e6 mov %r12,%rsi 0.00 : 5ba2bb: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba2be: e8 cd f4 ff ff callq 5b9790 : : if (numDistinctCols > 0) 0.00 : 5ba2c3: 8b 45 bc mov -0x44(%rbp),%eax 0.00 : 5ba2c6: 85 c0 test %eax,%eax 0.00 : 5ba2c8: 7e 0d jle 5ba2d7 0.00 : 5ba2ca: 48 89 df mov %rbx,%rdi 0.00 : 5ba2cd: c6 45 bb 01 movb $0x1,-0x45(%rbp) 0.00 : 5ba2d1: 4c 89 fb mov %r15,%rbx 0.00 : 5ba2d4: 49 89 ff mov %rdi,%r15 : haveOldValue = true; : } : } : : /* Reset context each time, unless execTuplesMatch did it for us */ : if (numDistinctCols == 0) 0.00 : 5ba2d7: 80 bd 0f ff ff ff 00 cmpb $0x0,-0xf1(%rbp) 0.00 : 5ba2de: 0f 84 5c ff ff ff je 5ba240 : MemoryContextReset(workcontext); 0.00 : 5ba2e4: 48 8b 7d c0 mov -0x40(%rbp),%rdi 0.00 : 5ba2e8: e8 c3 e6 1d 00 callq 7989b0 0.00 : 5ba2ed: e9 4e ff ff ff jmpq 5ba240 : AggStatePerGroup pergroupstate) : { : Datum oldVal = (Datum) 0; : bool oldIsNull = true; : bool haveOldVal = false; : MemoryContext workcontext = aggstate->tmpcontext->ecxt_per_tuple_memory; 0.00 : 5ba2f2: 49 8b 86 c0 00 00 00 mov 0xc0(%r14),%rax : : tuplesort_performsort(peraggstate->sortstate); : : /* Load the column into argument 1 (arg 0 will be transition value) */ : newVal = fcinfo->arg + 1; : isNull = fcinfo->argnull + 1; 0.00 : 5ba2f9: 45 31 ed xor %r13d,%r13d 0.00 : 5ba2fc: bb 01 00 00 00 mov $0x1,%ebx 0.00 : 5ba301: 45 31 ff xor %r15d,%r15d : AggStatePerGroup pergroupstate) : { : Datum oldVal = (Datum) 0; : bool oldIsNull = true; : bool haveOldVal = false; : MemoryContext workcontext = aggstate->tmpcontext->ecxt_per_tuple_memory; 0.00 : 5ba304: 48 8b 40 28 mov 0x28(%rax),%rax 0.00 : 5ba308: 48 89 45 a8 mov %rax,-0x58(%rbp) : MemoryContext oldContext; : bool isDistinct = (peraggstate->numDistinctCols > 0); 0.00 : 5ba30c: 41 8b 84 24 90 00 00 mov 0x90(%r12),%eax 0.00 : 5ba313: 00 0.00 : 5ba314: 89 45 b4 mov %eax,-0x4c(%rbp) : Datum *newVal; : bool *isNull; : : Assert(peraggstate->numDistinctCols < 2); : : tuplesort_performsort(peraggstate->sortstate); 0.00 : 5ba317: 49 8b bc 24 f8 00 00 mov 0xf8(%r12),%rdi 0.00 : 5ba31e: 00 0.00 : 5ba31f: e8 cc 7c 1e 00 callq 7a1ff0 : : /* Load the column into argument 1 (arg 0 will be transition value) */ : newVal = fcinfo->arg + 1; 0.00 : 5ba324: 49 8d 94 24 28 01 00 lea 0x128(%r12),%rdx 0.00 : 5ba32b: 00 : isNull = fcinfo->argnull + 1; 0.00 : 5ba32c: 49 8d 84 24 41 04 00 lea 0x441(%r12),%rax 0.00 : 5ba333: 00 : Assert(peraggstate->numDistinctCols < 2); : : tuplesort_performsort(peraggstate->sortstate); : : /* Load the column into argument 1 (arg 0 will be transition value) */ : newVal = fcinfo->arg + 1; 0.00 : 5ba334: 48 89 55 98 mov %rdx,-0x68(%rbp) : isNull = fcinfo->argnull + 1; 0.00 : 5ba338: 48 89 45 90 mov %rax,-0x70(%rbp) 0.00 : 5ba33c: eb 3c jmp 5ba37a : if (!peraggstate->inputtypeByVal && !*isNull) : pfree(DatumGetPointer(*newVal)); : } : else : { : advance_transition_function(aggstate, peraggstate, pergroupstate); 0.00 : 5ba33e: 48 8b 95 38 ff ff ff mov -0xc8(%rbp),%rdx 0.00 : 5ba345: 4c 89 e6 mov %r12,%rsi 0.00 : 5ba348: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba34b: e8 40 f4 ff ff callq 5b9790 : /* forget the old value, if any */ : if (!oldIsNull && !peraggstate->inputtypeByVal) 0.00 : 5ba350: 84 db test %bl,%bl 0.00 : 5ba352: 0f 84 98 00 00 00 je 5ba3f0 : pfree(DatumGetPointer(oldVal)); : /* and remember the new one for subsequent equality checks */ : oldVal = *newVal; : oldIsNull = *isNull; 0.00 : 5ba358: 41 0f b6 9c 24 41 04 movzbl 0x441(%r12),%ebx 0.00 : 5ba35f: 00 00 : advance_transition_function(aggstate, peraggstate, pergroupstate); : /* forget the old value, if any */ : if (!oldIsNull && !peraggstate->inputtypeByVal) : pfree(DatumGetPointer(oldVal)); : /* and remember the new one for subsequent equality checks */ : oldVal = *newVal; 0.00 : 5ba361: 4d 8b bc 24 28 01 00 mov 0x128(%r12),%r15 0.00 : 5ba368: 00 : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; : : CurrentMemoryContext = context; 0.00 : 5ba369: 48 8b 55 a0 mov -0x60(%rbp),%rdx 0.00 : 5ba36d: 41 bd 01 00 00 00 mov $0x1,%r13d 0.00 : 5ba373: 48 89 15 e6 04 60 00 mov %rdx,0x6004e6(%rip) # bba860 : * Note: if input type is pass-by-ref, the datums returned by the sort are : * freshly palloc'd in the per-query context, so we must be careful to : * pfree them when they are no longer needed. : */ : : while (tuplesort_getdatum(peraggstate->sortstate, true, 0.00 : 5ba37a: 49 8b bc 24 f8 00 00 mov 0xf8(%r12),%rdi 0.00 : 5ba381: 00 0.00 : 5ba382: 48 8b 4d 90 mov -0x70(%rbp),%rcx 0.00 : 5ba386: be 01 00 00 00 mov $0x1,%esi 0.00 : 5ba38b: 48 8b 55 98 mov -0x68(%rbp),%rdx 0.00 : 5ba38f: e8 2c 3e 1e 00 callq 79e1c0 0.00 : 5ba394: 84 c0 test %al,%al 0.00 : 5ba396: 0f 84 e0 00 00 00 je 5ba47c : { : /* : * Clear and select the working context for evaluation of the equality : * function and transition function. : */ : MemoryContextReset(workcontext); 0.00 : 5ba39c: 48 8b 7d a8 mov -0x58(%rbp),%rdi 0.00 : 5ba3a0: e8 0b e6 1d 00 callq 7989b0 0.00 : 5ba3a5: 48 8b 45 a8 mov -0x58(%rbp),%rax : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.00 : 5ba3a9: 48 8b 15 b0 04 60 00 mov 0x6004b0(%rip),%rdx # bba860 : : CurrentMemoryContext = context; 0.00 : 5ba3b0: 48 89 05 a9 04 60 00 mov %rax,0x6004a9(%rip) # bba860 : /* : * If DISTINCT mode, and not distinct from prior, skip it. : * : * Note: we assume equality functions don't care about collation. : */ : if (isDistinct && 0.00 : 5ba3b7: 8b 45 b4 mov -0x4c(%rbp),%eax : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.00 : 5ba3ba: 48 89 55 a0 mov %rdx,-0x60(%rbp) 0.00 : 5ba3be: 85 c0 test %eax,%eax 0.00 : 5ba3c0: 0f 8e 78 ff ff ff jle 5ba33e 0.00 : 5ba3c6: 45 84 ed test %r13b,%r13b 0.00 : 5ba3c9: 0f 84 6f ff ff ff je 5ba33e 0.00 : 5ba3cf: 84 db test %bl,%bl 0.00 : 5ba3d1: 75 39 jne 5ba40c 0.00 : 5ba3d3: 41 80 bc 24 41 04 00 cmpb $0x0,0x441(%r12) 0.00 : 5ba3da: 00 00 0.00 : 5ba3dc: 74 50 je 5ba42e : if (!peraggstate->inputtypeByVal && !*isNull) : pfree(DatumGetPointer(*newVal)); : } : else : { : advance_transition_function(aggstate, peraggstate, pergroupstate); 0.00 : 5ba3de: 48 8b 95 38 ff ff ff mov -0xc8(%rbp),%rdx 0.00 : 5ba3e5: 4c 89 e6 mov %r12,%rsi 0.00 : 5ba3e8: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba3eb: e8 a0 f3 ff ff callq 5b9790 : /* forget the old value, if any */ : if (!oldIsNull && !peraggstate->inputtypeByVal) 0.00 : 5ba3f0: 41 80 bc 24 d0 00 00 cmpb $0x0,0xd0(%r12) 0.00 : 5ba3f7: 00 00 0.00 : 5ba3f9: 0f 85 59 ff ff ff jne 5ba358 : pfree(DatumGetPointer(oldVal)); 0.00 : 5ba3ff: 4c 89 ff mov %r15,%rdi 0.00 : 5ba402: e8 79 e7 1d 00 callq 798b80 0.00 : 5ba407: e9 4c ff ff ff jmpq 5ba358 : /* : * If DISTINCT mode, and not distinct from prior, skip it. : * : * Note: we assume equality functions don't care about collation. : */ : if (isDistinct && 0.00 : 5ba40c: 41 80 bc 24 41 04 00 cmpb $0x0,0x441(%r12) 0.00 : 5ba413: 00 00 0.00 : 5ba415: 75 35 jne 5ba44c : if (!peraggstate->inputtypeByVal && !*isNull) : pfree(DatumGetPointer(*newVal)); : } : else : { : advance_transition_function(aggstate, peraggstate, pergroupstate); 0.00 : 5ba417: 48 8b 95 38 ff ff ff mov -0xc8(%rbp),%rdx 0.00 : 5ba41e: 4c 89 e6 mov %r12,%rsi 0.00 : 5ba421: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba424: e8 67 f3 ff ff callq 5b9790 0.00 : 5ba429: e9 2a ff ff ff jmpq 5ba358 : /* : * If DISTINCT mode, and not distinct from prior, skip it. : * : * Note: we assume equality functions don't care about collation. : */ : if (isDistinct && 0.00 : 5ba42e: 49 8b 8c 24 28 01 00 mov 0x128(%r12),%rcx 0.00 : 5ba435: 00 0.00 : 5ba436: 49 8b bc 24 b8 00 00 mov 0xb8(%r12),%rdi 0.00 : 5ba43d: 00 0.00 : 5ba43e: 31 f6 xor %esi,%esi 0.00 : 5ba440: 4c 89 fa mov %r15,%rdx 0.00 : 5ba443: e8 e8 3b 1c 00 callq 77e030 0.00 : 5ba448: 84 c0 test %al,%al 0.00 : 5ba44a: 74 92 je 5ba3de : (!oldIsNull && !*isNull && : DatumGetBool(FunctionCall2(&peraggstate->equalfns[0], : oldVal, *newVal))))) : { : /* equal to prior, so forget this one */ : if (!peraggstate->inputtypeByVal && !*isNull) 0.00 : 5ba44c: 41 80 bc 24 d0 00 00 cmpb $0x0,0xd0(%r12) 0.00 : 5ba453: 00 00 0.00 : 5ba455: 0f 85 0e ff ff ff jne 5ba369 0.00 : 5ba45b: 41 80 bc 24 41 04 00 cmpb $0x0,0x441(%r12) 0.00 : 5ba462: 00 00 0.00 : 5ba464: 0f 85 ff fe ff ff jne 5ba369 : pfree(DatumGetPointer(*newVal)); 0.00 : 5ba46a: 49 8b bc 24 28 01 00 mov 0x128(%r12),%rdi 0.00 : 5ba471: 00 0.00 : 5ba472: e8 09 e7 1d 00 callq 798b80 0.00 : 5ba477: e9 ed fe ff ff jmpq 5ba369 : } : : MemoryContextSwitchTo(oldContext); : } : : if (!oldIsNull && !peraggstate->inputtypeByVal) 0.00 : 5ba47c: 84 db test %bl,%bl 0.00 : 5ba47e: 0f 85 8e fa ff ff jne 5b9f12 0.00 : 5ba484: 41 80 bc 24 d0 00 00 cmpb $0x0,0xd0(%r12) 0.00 : 5ba48b: 00 00 0.00 : 5ba48d: 0f 1f 00 nopl (%rax) 0.00 : 5ba490: 0f 85 7c fa ff ff jne 5b9f12 : pfree(DatumGetPointer(oldVal)); 0.00 : 5ba496: 4c 89 ff mov %r15,%rdi 0.00 : 5ba499: e8 e2 e6 1d 00 callq 798b80 0.00 : 5ba49e: e9 6f fa ff ff jmpq 5b9f12 : * and the representative input tuple. : */ : TupleTableSlot *result; : ExprDoneCond isDone; : : result = ExecProject(aggstate->ss.ps.ps_ProjInfo, &isDone); 0.00 : 5ba4a3: 49 8b 7e 68 mov 0x68(%r14),%rdi 0.00 : 5ba4a7: 48 8d 75 d4 lea -0x2c(%rbp),%rsi 0.00 : 5ba4ab: e8 50 2b ff ff callq 5ad000 : : if (isDone != ExprEndResult) 0.00 : 5ba4b0: 8b 55 d4 mov -0x2c(%rbp),%edx 0.00 : 5ba4b3: 83 fa 02 cmp $0x2,%edx 0.00 : 5ba4b6: 0f 84 f0 fa ff ff je 5b9fac : { : aggstate->ss.ps.ps_TupFromTlist = 0.00 : 5ba4bc: 83 ea 01 sub $0x1,%edx 0.00 : 5ba4bf: 41 0f 94 46 70 sete 0x70(%r14) 0.00 : 5ba4c4: e9 ef fa ff ff jmpq 5b9fb8 0.00 : 5ba4c9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : : outerslot = ExecProcNode(outerPlan); : if (TupIsNull(outerslot)) : { : /* no more outer-plan tuples available */ : aggstate->agg_done = true; 0.00 : 5ba4d0: 41 c6 86 d0 00 00 00 movb $0x1,0xd0(%r14) 0.00 : 5ba4d7: 01 0.00 : 5ba4d8: e9 5f fc ff ff jmpq 5ba13c : * If we don't already have the first tuple of the new group, fetch it : * from the outer plan. : */ : if (aggstate->grp_firstTuple == NULL) : { : outerslot = ExecProcNode(outerPlan); 0.00 : 5ba4dd: 48 8b 7d 80 mov -0x80(%rbp),%rdi 0.00 : 5ba4e1: e8 ba 1f ff ff callq 5ac4a0 : if (!TupIsNull(outerslot)) 0.00 : 5ba4e6: 48 85 c0 test %rax,%rax : * If we don't already have the first tuple of the new group, fetch it : * from the outer plan. : */ : if (aggstate->grp_firstTuple == NULL) : { : outerslot = ExecProcNode(outerPlan); 0.00 : 5ba4e9: 48 89 c7 mov %rax,%rdi : if (!TupIsNull(outerslot)) 0.00 : 5ba4ec: 74 06 je 5ba4f4 0.00 : 5ba4ee: 80 78 04 00 cmpb $0x0,0x4(%rax) 0.00 : 5ba4f2: 74 1f je 5ba513 : else : { : /* outer plan produced no tuples at all */ : aggstate->agg_done = true; : /* If we are grouping, we should produce no tuples too */ : if (node->aggstrategy != AGG_PLAIN) 0.00 : 5ba4f4: 48 8b 85 10 ff ff ff mov -0xf0(%rbp),%rax : aggstate->grp_firstTuple = ExecCopySlotTuple(outerslot); : } : else : { : /* outer plan produced no tuples at all */ : aggstate->agg_done = true; 0.00 : 5ba4fb: 41 c6 86 d0 00 00 00 movb $0x1,0xd0(%r14) 0.00 : 5ba502: 01 : /* If we are grouping, we should produce no tuples too */ : if (node->aggstrategy != AGG_PLAIN) 0.00 : 5ba503: 8b 40 60 mov 0x60(%rax),%eax 0.00 : 5ba506: 85 c0 test %eax,%eax 0.00 : 5ba508: 0f 84 2b fb ff ff je 5ba039 0.00 : 5ba50e: e9 a3 fa ff ff jmpq 5b9fb6 : { : /* : * Make a copy of the first input tuple; we will use this for : * comparisons (in group mode) and for projection. : */ : aggstate->grp_firstTuple = ExecCopySlotTuple(outerslot); 0.00 : 5ba513: e8 98 9a ff ff callq 5b3fb0 0.00 : 5ba518: 49 89 86 e0 00 00 00 mov %rax,0xe0(%r14) 0.00 : 5ba51f: 90 nop 0.00 : 5ba520: e9 14 fb ff ff jmpq 5ba039 : * and the representative input tuple. : */ : TupleTableSlot *result; : ExprDoneCond isDone; : : result = ExecProject(aggstate->ss.ps.ps_ProjInfo, &isDone); 0.00 : 5ba525: 49 8b 7e 68 mov 0x68(%r14),%rdi 0.00 : 5ba529: 48 8d 75 d4 lea -0x2c(%rbp),%rsi 0.00 : 5ba52d: e8 ce 2a ff ff callq 5ad000 : : if (isDone != ExprEndResult) 0.00 : 5ba532: 8b 55 d4 mov -0x2c(%rbp),%edx 0.00 : 5ba535: 83 fa 02 cmp $0x2,%edx 0.00 : 5ba538: 0f 84 ba f9 ff ff je 5b9ef8 0.00 : 5ba53e: e9 79 ff ff ff jmpq 5ba4bc : */ : entry = (AggHashEntry) ScanTupleHashTable(&aggstate->hashiter); : if (entry == NULL) : { : /* No more entries in hashtable, so done */ : aggstate->agg_done = TRUE; 0.00 : 5ba543: 41 c6 86 d0 00 00 00 movb $0x1,0xd0(%r14) 0.00 : 5ba54a: 01 0.00 : 5ba54b: 31 c0 xor %eax,%eax 0.00 : 5ba54d: e9 66 fa ff ff jmpq 5b9fb8 : TupleTableSlot *outerslot; : : /* : * get state info from node : */ : outerPlan = outerPlanState(aggstate); 0.00 : 5ba552: 4d 8b 6e 30 mov 0x30(%r14),%r13 : /* tmpcontext is the per-input-tuple expression context */ : tmpcontext = aggstate->tmpcontext; 0.00 : 5ba556: 4d 8b be c0 00 00 00 mov 0xc0(%r14),%r15 : * Process each outer-plan tuple, and then fetch the next one, until we : * exhaust the outer plan. : */ : for (;;) : { : outerslot = ExecProcNode(outerPlan); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1349 1.77 : 5ba55d: 4c 89 ef mov %r13,%rdi 0.00 : 5ba560: e8 3b 1f ff ff callq 5ac4a0 : if (TupIsNull(outerslot)) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1350 1.77 : 5ba565: 48 85 c0 test %rax,%rax : * Process each outer-plan tuple, and then fetch the next one, until we : * exhaust the outer plan. : */ : for (;;) : { : outerslot = ExecProcNode(outerPlan); 0.00 : 5ba568: 48 89 c3 mov %rax,%rbx : if (TupIsNull(outerslot)) 0.00 : 5ba56b: 0f 84 db 00 00 00 je 5ba64c 0.00 : 5ba571: 80 78 04 00 cmpb $0x0,0x4(%rax) 3.54 : 5ba575: 0f 85 d1 00 00 00 jne 5ba64c : break; : /* set up for advance_aggregates call */ : tmpcontext->ecxt_outertuple = outerslot; 0.00 : 5ba57b: 49 89 47 18 mov %rax,0x18(%r15) : * When called, CurrentMemoryContext should be the per-query context. : */ : static AggHashEntry : lookup_hash_entry(AggState *aggstate, TupleTableSlot *inputslot) : { : TupleTableSlot *hashslot = aggstate->hashslot; 0.00 : 5ba57f: 4d 8b a6 f0 00 00 00 mov 0xf0(%r14),%r12 : ListCell *l; : AggHashEntry entry; : bool isnew; : : /* if first time through, initialize hashslot by cloning input slot */ : if (hashslot->tts_tupleDescriptor == NULL) 0.00 : 5ba586: 49 83 7c 24 10 00 cmpq $0x0,0x10(%r12) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1035 1.77 : 5ba58c: 75 14 jne 5ba5a2 : { : ExecSetSlotDescriptor(hashslot, inputslot->tts_tupleDescriptor); 0.00 : 5ba58e: 48 8b 70 10 mov 0x10(%rax),%rsi 0.00 : 5ba592: 4c 89 e7 mov %r12,%rdi 0.00 : 5ba595: e8 16 a0 ff ff callq 5b45b0 : /* Make sure all unused columns are NULLs */ : ExecStoreAllNullTuple(hashslot); 0.00 : 5ba59a: 4c 89 e7 mov %r12,%rdi 0.00 : 5ba59d: e8 1e 9d ff ff callq 5b42c0 : } : : /* transfer just the needed columns into hashslot */ : slot_getsomeattrs(inputslot, linitial_int(aggstate->hash_needed)); 0.00 : 5ba5a2: 49 8b 96 f8 00 00 00 mov 0xf8(%r14),%rdx : #endif /* PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(PG_LIST_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE ListCell * : list_head(const List *l) : { : return l ? l->head : NULL; 0.00 : 5ba5a9: 31 c0 xor %eax,%eax 0.00 : 5ba5ab: 48 85 d2 test %rdx,%rdx 0.00 : 5ba5ae: 74 04 je 5ba5b4 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/nodes/pg_list.h:87 1.77 : 5ba5b0: 48 8b 42 08 mov 0x8(%rdx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1043 0.88 : 5ba5b4: 8b 30 mov (%rax),%esi 3.54 : 5ba5b6: 48 89 df mov %rbx,%rdi 0.00 : 5ba5b9: e8 a2 4c eb ff callq 46f260 : foreach(l, aggstate->hash_needed) 0.00 : 5ba5be: 49 8b 86 f8 00 00 00 mov 0xf8(%r14),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/nodes/pg_list.h:87 1.77 : 5ba5c5: 48 85 c0 test %rax,%rax 0.00 : 5ba5c8: 74 3a je 5ba604 0.00 : 5ba5ca: 48 8b 70 08 mov 0x8(%rax),%rsi /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1044 0.88 : 5ba5ce: 48 85 f6 test %rsi,%rsi 0.00 : 5ba5d1: 74 31 je 5ba604 : { : int varNumber = lfirst_int(l) - 1; : : hashslot->tts_values[varNumber] = inputslot->tts_values[varNumber]; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 0.88 : 5ba5d3: 8b 06 mov (%rsi),%eax /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 6.19 : 5ba5d5: 48 8b 53 28 mov 0x28(%rbx),%rdx 23.01 : 5ba5d9: 49 8b 4c 24 28 mov 0x28(%r12),%rcx /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 0.88 : 5ba5de: 83 e8 01 sub $0x1,%eax 0.88 : 5ba5e1: 48 98 cltq 1.77 : 5ba5e3: 48 8b 14 c2 mov (%rdx,%rax,8),%rdx /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1048 22.12 : 5ba5e7: 48 89 14 c1 mov %rdx,(%rcx,%rax,8) : hashslot->tts_isnull[varNumber] = inputslot->tts_isnull[varNumber]; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1049 11.50 : 5ba5eb: 48 8b 53 30 mov 0x30(%rbx),%rdx 0.00 : 5ba5ef: 49 8b 4c 24 30 mov 0x30(%r12),%rcx 0.00 : 5ba5f4: 0f b6 14 02 movzbl (%rdx,%rax,1),%edx /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1049 3.54 : 5ba5f8: 88 14 01 mov %dl,(%rcx,%rax,1) : ExecStoreAllNullTuple(hashslot); : } : : /* transfer just the needed columns into hashslot */ : slot_getsomeattrs(inputslot, linitial_int(aggstate->hash_needed)); : foreach(l, aggstate->hash_needed) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1044 2.65 : 5ba5fb: 48 8b 76 08 mov 0x8(%rsi),%rsi 0.00 : 5ba5ff: 48 85 f6 test %rsi,%rsi 0.00 : 5ba602: 75 cf jne 5ba5d3 : hashslot->tts_values[varNumber] = inputslot->tts_values[varNumber]; : hashslot->tts_isnull[varNumber] = inputslot->tts_isnull[varNumber]; : } : : /* find or create the hashtable entry using the filtered tuple */ : entry = (AggHashEntry) LookupTupleHashEntry(aggstate->hashtable, /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1053 3.54 : 5ba604: 49 8b be e8 00 00 00 mov 0xe8(%r14),%rdi 0.00 : 5ba60b: 48 8d 55 d4 lea -0x2c(%rbp),%rdx 0.00 : 5ba60f: 4c 89 e6 mov %r12,%rsi 0.00 : 5ba612: e8 59 e8 fe ff callq 5a8e70 : hashslot, : &isnew); : : if (isnew) 0.00 : 5ba617: 80 7d d4 00 cmpb $0x0,-0x2c(%rbp) 0.00 : 5ba61b: 48 8d 58 08 lea 0x8(%rax),%rbx 0.00 : 5ba61f: 74 12 je 5ba633 : { : /* initialize aggregates for new tuple group */ : initialize_aggregates(aggstate, aggstate->peragg, entry->pergroup); 0.00 : 5ba621: 49 8b b6 b0 00 00 00 mov 0xb0(%r14),%rsi 0.00 : 5ba628: 48 89 da mov %rbx,%rdx 0.00 : 5ba62b: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba62e: e8 9d ef ff ff callq 5b95d0 : : /* Find or build hashtable entry for this tuple's group */ : entry = lookup_hash_entry(aggstate, outerslot); : : /* Advance the aggregates */ : advance_aggregates(aggstate, entry->pergroup); /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1359 4.42 : 5ba633: 4c 89 f7 mov %r14,%rdi 0.00 : 5ba636: 48 89 de mov %rbx,%rsi 0.00 : 5ba639: e8 12 f3 ff ff callq 5b9950 : : /* Reset per-input-tuple context after each tuple */ : ResetExprContext(tmpcontext); 0.00 : 5ba63e: 49 8b 7f 28 mov 0x28(%r15),%rdi /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:1362 0.88 : 5ba642: e8 69 e3 1d 00 callq 7989b0 0.00 : 5ba647: e9 11 ff ff ff jmpq 5ba55d : } : : aggstate->table_filled = true; : /* Initialize to walk the hash table */ : ResetTupleHashIterator(aggstate->hashtable, &aggstate->hashiter); 0.00 : 5ba64c: 49 8b 86 e8 00 00 00 mov 0xe8(%r14),%rax : : /* Reset per-input-tuple context after each tuple */ : ResetExprContext(tmpcontext); : } : : aggstate->table_filled = true; 0.00 : 5ba653: 41 c6 86 00 01 00 00 movb $0x1,0x100(%r14) 0.00 : 5ba65a: 01 : /* Initialize to walk the hash table */ : ResetTupleHashIterator(aggstate->hashtable, &aggstate->hashiter); 0.00 : 5ba65b: 4d 8d be 08 01 00 00 lea 0x108(%r14),%r15 0.00 : 5ba662: 48 8b 38 mov (%rax),%rdi 0.00 : 5ba665: e8 f6 92 1c 00 callq 783960 0.00 : 5ba66a: 49 8b 86 e8 00 00 00 mov 0xe8(%r14),%rax 0.00 : 5ba671: 4c 89 ff mov %r15,%rdi 0.00 : 5ba674: 48 8b 30 mov (%rax),%rsi 0.00 : 5ba677: e8 b4 97 1c 00 callq 783e30 0.00 : 5ba67c: 41 0f b6 86 d0 00 00 movzbl 0xd0(%r14),%eax 0.00 : 5ba683: 00 0.00 : 5ba684: e9 6c f7 ff ff jmpq 5b9df5 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 68.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:720 26.55 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:697 3.54 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:780 0.88 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:782 0.88 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:780 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000782ca0 : : CHashBucketScan(CHashTable table, : CHashPtr *start, : uint32 hashcode, : const void *key, : CHashScanResult *res) : { 0.00 : 782ca0: 55 push %rbp 0.00 : 782ca1: 48 89 e5 mov %rsp,%rbp 0.00 : 782ca4: 41 57 push %r15 0.00 : 782ca6: 41 89 d7 mov %edx,%r15d 0.00 : 782ca9: 41 56 push %r14 0.00 : 782cab: 41 55 push %r13 0.00 : 782cad: 49 89 fd mov %rdi,%r13 0.00 : 782cb0: 41 54 push %r12 0.00 : 782cb2: 45 31 e4 xor %r12d,%r12d 0.00 : 782cb5: 53 push %rbx 0.00 : 782cb6: 48 83 ec 18 sub $0x18,%rsp 0.00 : 782cba: 48 89 75 d0 mov %rsi,-0x30(%rbp) 0.00 : 782cbe: 48 89 4d c8 mov %rcx,-0x38(%rbp) 0.00 : 782cc2: 4c 89 45 c0 mov %r8,-0x40(%rbp) : CHashPtr *pointer_to_target; : CHashNode *target_node = NULL; : : retry: : pointer_to_target = start; : target = *pointer_to_target; 0.00 : 782cc6: 48 8b 45 d0 mov -0x30(%rbp),%rax 0.00 : 782cca: 44 8b 10 mov (%rax),%r10d : : /* : * If we've reached the end of the bucket chain, stop; otherwise, : * figure out the actual address of the next item. : */ : if (CHashPtrIsInvalid(target)) /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:697 26.55 : 782ccd: 41 83 fa fd cmp $0xfffffffd,%r10d 0.00 : 782cd1: 0f 87 ff 00 00 00 ja 782dd6 : { : res->found = false; : break; 0.00 : 782cd7: 4c 8b 75 d0 mov -0x30(%rbp),%r14 0.00 : 782cdb: eb 21 jmp 782cfe 0.00 : 782cdd: 0f 1f 00 nopl (%rax) : /* : * Bucket chains are kept in order, so that there is exactly one legal : * point at which any given key can be inserted. The ordering is by : * hashcode first, and then by memcmp ordering of the keys involved. : */ : h = target_node->un.hashcode; 0.00 : 782ce0: 41 8b 44 24 04 mov 0x4(%r12),%eax : if (h == hashcode) 0.00 : 782ce5: 44 39 f8 cmp %r15d,%eax 0.00 : 782ce8: 74 5e je 782d48 : cmp = memcmp(CHashNodeGetItem(target_node), key, : table->desc.key_size); : else if (h > hashcode) 0.00 : 782cea: 41 39 c7 cmp %eax,%r15d /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:782 0.88 : 782ced: 0f 1f 00 nopl (%rax) 0.00 : 782cf0: 72 7b jb 782d6d : break; : } : } : : /* Continue scan from next node. */ : pointer_to_target = &target_node->next; 0.00 : 782cf2: 4d 89 e6 mov %r12,%r14 0.00 : 782cf5: 45 89 c2 mov %r8d,%r10d : : /* : * If we've reached the end of the bucket chain, stop; otherwise, : * figure out the actual address of the next item. : */ : if (CHashPtrIsInvalid(target)) 0.00 : 782cf8: 41 83 fa fd cmp $0xfffffffd,%r10d 0.00 : 782cfc: 77 79 ja 782d77 : { : res->found = false; : break; : } : target_node = CHashTableGetNode(table, target); 0.00 : 782cfe: 44 89 d0 mov %r10d,%eax 0.00 : 782d01: d1 e8 shr %eax 0.00 : 782d03: 41 89 c4 mov %eax,%r12d 0.00 : 782d06: 45 0f af 65 1c imul 0x1c(%r13),%r12d 0.00 : 782d0b: 4d 03 65 30 add 0x30(%r13),%r12 : * target may have been fetched from an arena entry that could be : * concurrently modified, so a dependency barrier is required before : * dereferencing the derived pointer. : */ : pg_read_barrier_depends(); : next = target_node->next; 0.00 : 782d0f: 45 8b 04 24 mov (%r12),%r8d : * ensures that delete-marked elements are removed from bucket chains : * as quickly as possible and reduces code duplication. See : * CHashDelete for further comments about why delete-marking is : * necessary and how it allows safe deletion. : */ : if (CHashPtrIsMarked(next)) /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:720 68.14 : 782d13: 41 f6 c0 01 test $0x1,%r8b 0.00 : 782d17: 74 c7 je 782ce0 : { : zap: : if (__sync_bool_compare_and_swap(pointer_to_target, 0.00 : 782d19: 44 89 c3 mov %r8d,%ebx 0.00 : 782d1c: 44 89 d0 mov %r10d,%eax 0.00 : 782d1f: 83 e3 fe and $0xfffffffe,%ebx 0.00 : 782d22: f0 41 0f b1 1e lock cmpxchg %ebx,(%r14) 0.00 : 782d27: 74 77 je 782da0 : * the node which precedes it before we advance to the next : * node. That could certainly happen occasionally, but we'd : * have to be pretty unlucky to have it happen even twice in : * a row. : */ : CHashTableIncrementStatistic(table, CHS_Scan_Expunge_Fail); 0.00 : 782d29: 49 83 85 88 00 00 00 addq $0x1,0x88(%r13) 0.00 : 782d30: 01 : target = *pointer_to_target; 0.00 : 782d31: 45 8b 16 mov (%r14),%r10d : if (CHashPtrIsMarked(target)) 0.00 : 782d34: 41 f6 c2 01 test $0x1,%r10b 0.00 : 782d38: 74 be je 782cf8 : { : CHashTableIncrementStatistic(table, CHS_Scan_Restart); 0.00 : 782d3a: 49 83 85 90 00 00 00 addq $0x1,0x90(%r13) 0.00 : 782d41: 01 : goto retry; 0.00 : 782d42: eb 82 jmp 782cc6 0.00 : 782d44: 0f 1f 40 00 nopl 0x0(%rax) : * point at which any given key can be inserted. The ordering is by : * hashcode first, and then by memcmp ordering of the keys involved. : */ : h = target_node->un.hashcode; : if (h == hashcode) : cmp = memcmp(CHashNodeGetItem(target_node), key, 0.00 : 782d48: 41 0f b7 4d 0e movzwl 0xe(%r13),%ecx 0.00 : 782d4d: 48 8b 7d c8 mov -0x38(%rbp),%rdi 0.00 : 782d51: 49 8d 74 24 08 lea 0x8(%r12),%rsi 0.00 : 782d56: 48 39 c9 cmp %rcx,%rcx /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:780 3.54 : 782d59: f3 a6 repz cmpsb %es:(%rdi),%ds:(%rsi) 0.88 : 782d5b: 0f 97 c0 seta %al 0.00 : 782d5e: 0f 92 c2 setb %dl 0.00 : 782d61: 28 d0 sub %dl,%al 0.00 : 782d63: 0f be c0 movsbl %al,%eax : * the point where we expect to find the key OR someone delete-marked : * the item and overwrote the hashcode with a gcnext pointer. In the : * latter case we must take care not to be fooled into stopping the : * scan early. : */ : if (cmp >= 0) 0.00 : 782d66: 83 f8 00 cmp $0x0,%eax 0.00 : 782d69: 7c 87 jl 782cf2 : { : if (cmp == 0) 0.00 : 782d6b: 74 5b je 782dc8 : /* : * pg_read_barrier() prevents the reread of the next pointer : * from being speculated ahead of the read of the hash value. : */ : pg_read_barrier(); : next = target_node->next; 0.00 : 782d6d: 45 8b 04 24 mov (%r12),%r8d : if (CHashPtrIsMarked(next)) 0.00 : 782d71: 41 f6 c0 01 test $0x1,%r8b 0.00 : 782d75: 75 a2 jne 782d19 : goto zap; : res->found = false; 0.00 : 782d77: 48 8b 7d c0 mov -0x40(%rbp),%rdi 0.00 : 782d7b: c6 47 18 00 movb $0x0,0x18(%rdi) : pointer_to_target = &target_node->next; : target = next; : } : : /* Send results back to caller. */ : res->target = target; 0.00 : 782d7f: 48 8b 45 c0 mov -0x40(%rbp),%rax 0.00 : 782d83: 44 89 10 mov %r10d,(%rax) : res->pointer_to_target = pointer_to_target; 0.00 : 782d86: 4c 89 70 08 mov %r14,0x8(%rax) : res->target_node = target_node; 0.00 : 782d8a: 4c 89 60 10 mov %r12,0x10(%rax) : } 0.00 : 782d8e: 48 83 c4 18 add $0x18,%rsp 0.00 : 782d92: 5b pop %rbx 0.00 : 782d93: 41 5c pop %r12 0.00 : 782d95: 41 5d pop %r13 0.00 : 782d97: 41 5e pop %r14 0.00 : 782d99: 41 5f pop %r15 0.00 : 782d9b: c9 leaveq 0.00 : 782d9c: c3 retq 0.00 : 782d9d: 0f 1f 00 nopl (%rax) : * delete-mark has been applied. Thus, if we just keep : * following the next pointers, we're guaranteed to visit : * all non-deleted items (and possibly some deleted items) : * that were present at the time we began the scan. : */ : CHashTableIncrementStatistic(table, CHS_Scan_Expunge); 0.00 : 782da0: 49 83 85 80 00 00 00 addq $0x1,0x80(%r13) 0.00 : 782da7: 01 : CHashAddToGarbage(table, hashcode & table->bucket_mask, 0.00 : 782da8: 44 89 fe mov %r15d,%esi 0.00 : 782dab: 41 23 75 10 and 0x10(%r13),%esi 0.00 : 782daf: 44 89 d2 mov %r10d,%edx 0.00 : 782db2: 4c 89 ef mov %r13,%rdi 0.00 : 782db5: e8 96 fe ff ff callq 782c50 0.00 : 782dba: 41 89 da mov %ebx,%r10d 0.00 : 782dbd: e9 36 ff ff ff jmpq 782cf8 0.00 : 782dc2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : */ : if (cmp >= 0) : { : if (cmp == 0) : { : res->found = true; 0.00 : 782dc8: 48 8b 45 c0 mov -0x40(%rbp),%rax 0.00 : 782dcc: c6 40 18 01 movb $0x1,0x18(%rax) : res->next = next; 0.00 : 782dd0: 44 89 40 04 mov %r8d,0x4(%rax) : break; 0.00 : 782dd4: eb a9 jmp 782d7f : : /* : * If we've reached the end of the bucket chain, stop; otherwise, : * figure out the actual address of the next item. : */ : if (CHashPtrIsInvalid(target)) 0.00 : 782dd6: 49 89 c6 mov %rax,%r14 0.00 : 782dd9: eb 9c jmp 782d77 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 27.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2545 25.23 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2545 13.08 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2550 7.48 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2550 6.54 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2550 4.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2545 3.74 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2547 3.74 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2553 2.80 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2547 2.80 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2552 1.87 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2554 0.93 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2546 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d3ca0 : : * float84mul - returns arg1 * arg2 : * float84div - returns arg1 / arg2 : */ : Datum : float84pl(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2545 27.10 : 6d3ca0: 55 push %rbp 25.23 : 6d3ca1: 48 89 e5 mov %rsp,%rbp 0.00 : 6d3ca4: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2545 4.67 : 6d3ca5: 48 89 fb mov %rdi,%rbx 0.00 : 6d3ca8: 48 83 ec 18 sub $0x18,%rsp : float8 arg1 = PG_GETARG_FLOAT8(0); 0.00 : 6d3cac: 48 8b 7f 20 mov 0x20(%rdi),%rdi 0.00 : 6d3cb0: e8 1b 9d 0a 00 callq 77d9d0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2546 0.93 : 6d3cb5: f2 0f 11 45 e0 movsd %xmm0,-0x20(%rbp) : float4 arg2 = PG_GETARG_FLOAT4(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2547 2.80 : 6d3cba: 48 8b 7b 28 mov 0x28(%rbx),%rdi 0.00 : 6d3cbe: e8 ed 9c 0a 00 callq 77d9b0 3.74 : 6d3cc3: f3 0f 11 45 ec movss %xmm0,-0x14(%rbp) : float8 result; : : result = arg1 + arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2550 13.08 : 6d3cc8: 0f 14 c0 unpcklps %xmm0,%xmm0 0.00 : 6d3ccb: 0f 5a c0 cvtps2pd %xmm0,%xmm0 0.00 : 6d3cce: f2 0f 11 45 f0 movsd %xmm0,-0x10(%rbp) 6.54 : 6d3cd3: f2 0f 10 45 e0 movsd -0x20(%rbp),%xmm0 0.00 : 6d3cd8: f2 0f 58 45 f0 addsd -0x10(%rbp),%xmm0 7.48 : 6d3cdd: f2 0f 11 45 f0 movsd %xmm0,-0x10(%rbp) : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2552 2.80 : 6d3ce2: e8 09 5e d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d3ce7: 85 c0 test %eax,%eax 0.00 : 6d3ce9: 74 0e je 6d3cf9 0.00 : 6d3ceb: f2 0f 10 45 e0 movsd -0x20(%rbp),%xmm0 0.00 : 6d3cf0: e8 fb 5d d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d3cf5: 85 c0 test %eax,%eax 0.00 : 6d3cf7: 74 17 je 6d3d10 : PG_RETURN_FLOAT8(result); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2553 3.74 : 6d3cf9: f2 0f 10 45 f0 movsd -0x10(%rbp),%xmm0 : } 0.00 : 6d3cfe: 48 83 c4 18 add $0x18,%rsp 0.00 : 6d3d02: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:2554 1.87 : 6d3d03: c9 leaveq : float8 result; : : result = arg1 + arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); : PG_RETURN_FLOAT8(result); 0.00 : 6d3d04: e9 b7 9c 0a 00 jmpq 77d9c0 0.00 : 6d3d09: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : float4 arg2 = PG_GETARG_FLOAT4(1); : float8 result; : : result = arg1 + arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); 0.00 : 6d3d10: f3 0f 10 45 ec movss -0x14(%rbp),%xmm0 0.00 : 6d3d15: e8 16 5a d9 ff callq 469730 <__isinff@plt> 0.00 : 6d3d1a: 85 c0 test %eax,%eax 0.00 : 6d3d1c: 75 db jne 6d3cf9 0.00 : 6d3d1e: 45 31 c0 xor %r8d,%r8d 0.00 : 6d3d21: b9 e4 b8 8b 00 mov $0x8bb8e4,%ecx 0.00 : 6d3d26: ba f8 09 00 00 mov $0x9f8,%edx 0.00 : 6d3d2b: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d3d30: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d3d35: e8 86 6d 0a 00 callq 77aac0 0.00 : 6d3d3a: 84 c0 test %al,%al 0.00 : 6d3d3c: 75 05 jne 6d3d43 0.00 : 6d3d3e: e8 8d 57 d9 ff callq 4694d0 0.00 : 6d3d43: bf 2f b4 8b 00 mov $0x8bb42f,%edi 0.00 : 6d3d48: 31 c0 xor %eax,%eax 0.00 : 6d3d4a: e8 51 8b 0a 00 callq 77c8a0 0.00 : 6d3d4f: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6d3d54: 89 c3 mov %eax,%ebx 0.00 : 6d3d56: e8 f5 8f 0a 00 callq 77cd50 0.00 : 6d3d5b: 89 de mov %ebx,%esi 0.00 : 6d3d5d: 89 c7 mov %eax,%edi 0.00 : 6d3d5f: 31 c0 xor %eax,%eax 0.00 : 6d3d61: e8 7a 68 0a 00 callq 77a5e0 0.00 : 6d3d66: eb d6 jmp 6d3d3e Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 28.97 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:830 25.23 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:830 8.41 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:835 7.48 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:835 5.61 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:837 4.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:839 3.74 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:830 3.74 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:837 2.80 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:840 1.87 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:831 1.87 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:832 1.87 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:835 1.87 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:832 0.93 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:831 0.93 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:837 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d45a0 : : PG_RETURN_FLOAT8(result); : } : : Datum : float8mul(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:830 25.23 : 6d45a0: 55 push %rbp 28.97 : 6d45a1: 48 89 e5 mov %rsp,%rbp 0.00 : 6d45a4: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:830 3.74 : 6d45a5: 48 89 fb mov %rdi,%rbx 0.00 : 6d45a8: 48 83 ec 18 sub $0x18,%rsp : float8 arg1 = PG_GETARG_FLOAT8(0); 0.00 : 6d45ac: 48 8b 7f 20 mov 0x20(%rdi),%rdi /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:831 0.93 : 6d45b0: e8 1b 94 0a 00 callq 77d9d0 1.87 : 6d45b5: f2 0f 11 45 e0 movsd %xmm0,-0x20(%rbp) : float8 arg2 = PG_GETARG_FLOAT8(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:832 1.87 : 6d45ba: 48 8b 7b 28 mov 0x28(%rbx),%rdi 0.00 : 6d45be: e8 0d 94 0a 00 callq 77d9d0 : float8 result; : : result = arg1 * arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:835 1.87 : 6d45c3: f2 0f 10 4d e0 movsd -0x20(%rbp),%xmm1 : : Datum : float8mul(PG_FUNCTION_ARGS) : { : float8 arg1 = PG_GETARG_FLOAT8(0); : float8 arg2 = PG_GETARG_FLOAT8(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:832 1.87 : 6d45c8: f2 0f 11 45 e8 movsd %xmm0,-0x18(%rbp) : float8 result; : : result = arg1 * arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:835 7.48 : 6d45cd: f2 0f 59 c8 mulsd %xmm0,%xmm1 8.41 : 6d45d1: f2 0f 11 4d f0 movsd %xmm1,-0x10(%rbp) : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:837 3.74 : 6d45d6: 66 0f 28 c1 movapd %xmm1,%xmm0 0.00 : 6d45da: e8 11 55 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d45df: 85 c0 test %eax,%eax 0.00 : 6d45e1: 75 45 jne 6d4628 0.93 : 6d45e3: 66 0f 57 c0 xorpd %xmm0,%xmm0 0.00 : 6d45e7: f2 0f 10 4d f0 movsd -0x10(%rbp),%xmm1 0.00 : 6d45ec: 66 0f 2e c8 ucomisd %xmm0,%xmm1 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:837 5.61 : 6d45f0: 75 20 jne 6d4612 0.00 : 6d45f2: 7a 1e jp 6d4612 0.00 : 6d45f4: f2 0f 10 4d e0 movsd -0x20(%rbp),%xmm1 0.00 : 6d45f9: 66 0f 2e c8 ucomisd %xmm0,%xmm1 0.00 : 6d45fd: 7a 03 jp 6d4602 0.00 : 6d45ff: 90 nop 0.00 : 6d4600: 74 10 je 6d4612 0.00 : 6d4602: f2 0f 10 4d e8 movsd -0x18(%rbp),%xmm1 0.00 : 6d4607: 66 0f 2e c8 ucomisd %xmm0,%xmm1 0.00 : 6d460b: 7a 7c jp 6d4689 0.00 : 6d460d: 0f 1f 00 nopl (%rax) 0.00 : 6d4610: 75 77 jne 6d4689 : arg1 == 0 || arg2 == 0); : PG_RETURN_FLOAT8(result); 0.00 : 6d4612: f2 0f 10 45 f0 movsd -0x10(%rbp),%xmm0 : } 0.00 : 6d4617: 48 83 c4 18 add $0x18,%rsp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:840 2.80 : 6d461b: 5b pop %rbx 0.00 : 6d461c: c9 leaveq : : result = arg1 * arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), : arg1 == 0 || arg2 == 0); : PG_RETURN_FLOAT8(result); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:839 4.67 : 6d461d: e9 9e 93 0a 00 jmpq 77d9c0 0.00 : 6d4622: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : float8 arg2 = PG_GETARG_FLOAT8(1); : float8 result; : : result = arg1 * arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), 0.00 : 6d4628: f2 0f 10 45 e0 movsd -0x20(%rbp),%xmm0 0.00 : 6d462d: e8 be 54 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d4632: 85 c0 test %eax,%eax 0.00 : 6d4634: 75 ad jne 6d45e3 0.00 : 6d4636: f2 0f 10 45 e8 movsd -0x18(%rbp),%xmm0 0.00 : 6d463b: e8 b0 54 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d4640: 85 c0 test %eax,%eax 0.00 : 6d4642: 75 9f jne 6d45e3 0.00 : 6d4644: 45 31 c0 xor %r8d,%r8d 0.00 : 6d4647: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d464c: b9 1e bb 8b 00 mov $0x8bbb1e,%ecx 0.00 : 6d4651: ba 46 03 00 00 mov $0x346,%edx 0.00 : 6d4656: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d465b: e8 60 64 0a 00 callq 77aac0 0.00 : 6d4660: 84 c0 test %al,%al 0.00 : 6d4662: bf 2f b4 8b 00 mov $0x8bb42f,%edi 0.00 : 6d4667: 74 40 je 6d46a9 0.00 : 6d4669: 31 c0 xor %eax,%eax 0.00 : 6d466b: e8 30 82 0a 00 callq 77c8a0 0.00 : 6d4670: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6d4675: 89 c3 mov %eax,%ebx 0.00 : 6d4677: e8 d4 86 0a 00 callq 77cd50 0.00 : 6d467c: 89 de mov %ebx,%esi 0.00 : 6d467e: 89 c7 mov %eax,%edi 0.00 : 6d4680: 31 c0 xor %eax,%eax 0.00 : 6d4682: e8 59 5f 0a 00 callq 77a5e0 0.00 : 6d4687: eb 20 jmp 6d46a9 0.00 : 6d4689: 45 31 c0 xor %r8d,%r8d 0.00 : 6d468c: b9 1e bb 8b 00 mov $0x8bbb1e,%ecx 0.00 : 6d4691: ba 46 03 00 00 mov $0x346,%edx 0.00 : 6d4696: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d469b: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d46a0: e8 1b 64 0a 00 callq 77aac0 0.00 : 6d46a5: 84 c0 test %al,%al 0.00 : 6d46a7: 75 05 jne 6d46ae 0.00 : 6d46a9: e8 22 4e d9 ff callq 4694d0 0.00 : 6d46ae: bf 4c b4 8b 00 mov $0x8bb44c,%edi 0.00 : 6d46b3: eb b4 jmp 6d4669 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 20.75 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 17.92 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1334 16.04 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 16.04 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1334 15.09 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 4.72 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1334 3.77 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 2.83 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 0.94 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 0.94 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 0.94 /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1334 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000046f260 : : * This function forces the entries of the slot's Datum/isnull : * arrays to be valid at least up through the attnum'th entry. : */ : void : slot_getsomeattrs(TupleTableSlot *slot, int attnum) : { /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 16.04 : 46f260: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 0.94 : 46f261: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 20.75 : 46f264: 4c 89 65 f0 mov %r12,-0x10(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 0.94 : 46f268: 4c 89 6d f8 mov %r13,-0x8(%rbp) 3.77 : 46f26c: 49 89 fc mov %rdi,%r12 0.00 : 46f26f: 48 89 5d e8 mov %rbx,-0x18(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 15.09 : 46f273: 48 83 ec 20 sub $0x20,%rsp : HeapTuple tuple; : int attno; : : /* Quick out if we have 'em all already */ : if (slot->tts_nvalid >= attnum) 0.00 : 46f277: 39 77 24 cmp %esi,0x24(%rdi) : * This function forces the entries of the slot's Datum/isnull : * arrays to be valid at least up through the attnum'th entry. : */ : void : slot_getsomeattrs(TupleTableSlot *slot, int attnum) : { /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1296 2.83 : 46f27a: 41 89 f5 mov %esi,%r13d : HeapTuple tuple; : int attno; : : /* Quick out if we have 'em all already */ : if (slot->tts_nvalid >= attnum) 0.00 : 46f27d: 7d 67 jge 46f2e6 : return; : : /* Check for caller error */ : if (attnum <= 0 || attnum > slot->tts_tupleDescriptor->natts) 0.00 : 46f27f: 85 f6 test %esi,%esi 0.00 : 46f281: 7e 75 jle 46f2f8 0.00 : 46f283: 48 8b 47 10 mov 0x10(%rdi),%rax 0.00 : 46f287: 3b 30 cmp (%rax),%esi 0.00 : 46f289: 7f 6d jg 46f2f8 : : /* : * otherwise we had better have a physical tuple (tts_nvalid should equal : * natts in all virtual-tuple cases) : */ : tuple = slot->tts_tuple; 0.00 : 46f28b: 48 8b 47 08 mov 0x8(%rdi),%rax : if (tuple == NULL) /* internal error */ 0.00 : 46f28f: 48 85 c0 test %rax,%rax 0.00 : 46f292: 0f 84 8d 00 00 00 je 46f325 : elog(ERROR, "cannot extract attribute from empty tuple slot"); : : /* : * load up any slots available from physical tuple : */ : attno = HeapTupleHeaderGetNatts(tuple->t_data); 0.00 : 46f298: 48 8b 40 10 mov 0x10(%rax),%rax 0.00 : 46f29c: 0f b7 40 12 movzwl 0x12(%rax),%eax 0.00 : 46f2a0: 25 ff 07 00 00 and $0x7ff,%eax : attno = Min(attno, attnum); 0.00 : 46f2a5: 39 c6 cmp %eax,%esi 0.00 : 46f2a7: 89 c3 mov %eax,%ebx 0.00 : 46f2a9: 0f 4e de cmovle %esi,%ebx : : slot_deform_tuple(slot, attno); 0.00 : 46f2ac: 89 de mov %ebx,%esi 0.00 : 46f2ae: e8 5d fc ff ff callq 46ef10 : : /* : * If tuple doesn't have all the atts indicated by tupleDesc, read the : * rest as null : */ : for (; attno < attnum; attno++) 0.00 : 46f2b3: 41 39 dd cmp %ebx,%r13d 0.00 : 46f2b6: 7e 29 jle 46f2e1 0.00 : 46f2b8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 46f2bf: 00 : { : slot->tts_values[attno] = (Datum) 0; 0.00 : 46f2c0: 49 8b 54 24 28 mov 0x28(%r12),%rdx 0.00 : 46f2c5: 48 63 c3 movslq %ebx,%rax : : /* : * If tuple doesn't have all the atts indicated by tupleDesc, read the : * rest as null : */ : for (; attno < attnum; attno++) 0.00 : 46f2c8: 83 c3 01 add $0x1,%ebx 0.00 : 46f2cb: 41 39 dd cmp %ebx,%r13d : { : slot->tts_values[attno] = (Datum) 0; 0.00 : 46f2ce: 48 c7 04 c2 00 00 00 movq $0x0,(%rdx,%rax,8) 0.00 : 46f2d5: 00 : slot->tts_isnull[attno] = true; 0.00 : 46f2d6: 49 8b 54 24 30 mov 0x30(%r12),%rdx 0.00 : 46f2db: c6 04 02 01 movb $0x1,(%rdx,%rax,1) : : /* : * If tuple doesn't have all the atts indicated by tupleDesc, read the : * rest as null : */ : for (; attno < attnum; attno++) 0.00 : 46f2df: 7f df jg 46f2c0 : { : slot->tts_values[attno] = (Datum) 0; : slot->tts_isnull[attno] = true; : } : slot->tts_nvalid = attnum; 0.00 : 46f2e1: 45 89 6c 24 24 mov %r13d,0x24(%r12) : } /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1334 17.92 : 46f2e6: 48 8b 5d e8 mov -0x18(%rbp),%rbx /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1334 0.94 : 46f2ea: 4c 8b 65 f0 mov -0x10(%rbp),%r12 4.72 : 46f2ee: 4c 8b 6d f8 mov -0x8(%rbp),%r13 0.00 : 46f2f2: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/access/common/heaptuple.c:1334 16.04 : 46f2f3: c3 retq 0.00 : 46f2f4: 0f 1f 40 00 nopl 0x0(%rax) : if (slot->tts_nvalid >= attnum) : return; : : /* Check for caller error */ : if (attnum <= 0 || attnum > slot->tts_tupleDescriptor->natts) : elog(ERROR, "invalid attribute number %d", attnum); 0.00 : 46f2f8: ba c0 f6 7a 00 mov $0x7af6c0,%edx 0.00 : 46f2fd: be 1a 05 00 00 mov $0x51a,%esi 0.00 : 46f302: bf f4 f5 7a 00 mov $0x7af5f4,%edi 0.00 : 46f307: e8 14 c1 30 00 callq 77b420 0.00 : 46f30c: 44 89 ea mov %r13d,%edx 0.00 : 46f30f: be 13 f6 7a 00 mov $0x7af613,%esi 0.00 : 46f314: bf 14 00 00 00 mov $0x14,%edi 0.00 : 46f319: 31 c0 xor %eax,%eax 0.00 : 46f31b: e8 10 bf 30 00 callq 77b230 0.00 : 46f320: e8 ab a1 ff ff callq 4694d0 : * otherwise we had better have a physical tuple (tts_nvalid should equal : * natts in all virtual-tuple cases) : */ : tuple = slot->tts_tuple; : if (tuple == NULL) /* internal error */ : elog(ERROR, "cannot extract attribute from empty tuple slot"); 0.00 : 46f325: ba c0 f6 7a 00 mov $0x7af6c0,%edx 0.00 : 46f32a: be 22 05 00 00 mov $0x522,%esi 0.00 : 46f32f: bf f4 f5 7a 00 mov $0x7af5f4,%edi 0.00 : 46f334: e8 e7 c0 30 00 callq 77b420 0.00 : 46f339: be b0 f7 7a 00 mov $0x7af7b0,%esi 0.00 : 46f33e: bf 14 00 00 00 mov $0x14,%edi 0.00 : 46f343: 31 c0 xor %eax,%eax 0.00 : 46f345: e8 e6 be 30 00 callq 77b230 0.00 : 46f34a: e8 81 a1 ff ff callq 4694d0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 13.21 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 6.60 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 6.60 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 6.60 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 5.66 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 5.66 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 4.72 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:306 4.72 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 4.72 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 3.77 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:490 3.77 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 3.77 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 3.77 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:420 2.83 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:317 2.83 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 2.83 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 2.83 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 2.83 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 2.83 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:500 1.89 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:466 1.89 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 1.89 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 1.89 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 0.94 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 0.94 /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000490350 : : * by using the final values of both b and c. b is perhaps a little less : * well mixed than c, however. : */ : Datum : hash_any(register const unsigned char *k, register int keylen) : { 0.00 : 490350: 55 push %rbp 0.00 : 490351: 41 89 f2 mov %esi,%r10d : /* Set up the internal state */ : len = keylen; : a = b = c = 0x9e3779b9 + len + 3923095; : : /* If the source pointer is word-aligned, we use word-wide fetches */ : if (((uintptr_t) k & UINT32_ALIGN_MASK) == 0) /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:317 2.83 : 490354: 40 f6 c7 03 test $0x3,%dil : c, : len; : : /* Set up the internal state */ : len = keylen; : a = b = c = 0x9e3779b9 + len + 3923095; 0.00 : 490358: 45 8d 82 50 56 73 9e lea -0x618ca9b0(%r10),%r8d : * by using the final values of both b and c. b is perhaps a little less : * well mixed than c, however. : */ : Datum : hash_any(register const unsigned char *k, register int keylen) : { 0.00 : 49035f: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:306 4.72 : 490362: 53 push %rbx : /* Set up the internal state */ : len = keylen; : a = b = c = 0x9e3779b9 + len + 3923095; : : /* If the source pointer is word-aligned, we use word-wide fetches */ : if (((uintptr_t) k & UINT32_ALIGN_MASK) == 0) 0.00 : 490363: 0f 84 f7 00 00 00 je 490460 : else : { : /* Code path for non-aligned source data */ : : /* handle most of the key */ : while (len >= 12) 0.00 : 490369: 83 fe 0b cmp $0xb,%esi : /* fall through */ : case 2: : a += ((uint32) k[1] << 8); : /* fall through */ : case 1: : a += k[0]; 0.00 : 49036c: 45 89 c1 mov %r8d,%r9d 0.00 : 49036f: 44 89 c2 mov %r8d,%edx : else : { : /* Code path for non-aligned source data */ : : /* handle most of the key */ : while (len >= 12) 0.00 : 490372: 0f 86 7e 02 00 00 jbe 4905f6 0.00 : 490378: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 49037f: 00 : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); 0.00 : 490380: 0f b6 4f 05 movzbl 0x5(%rdi),%ecx 0.00 : 490384: 0f b6 47 06 movzbl 0x6(%rdi),%eax : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); 0.00 : 490388: 0f b6 77 09 movzbl 0x9(%rdi),%esi : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); 0.00 : 49038c: c1 e0 10 shl $0x10,%eax 0.00 : 49038f: c1 e1 08 shl $0x8,%ecx 0.00 : 490392: 01 c1 add %eax,%ecx 0.00 : 490394: 0f b6 47 04 movzbl 0x4(%rdi),%eax : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); 0.00 : 490398: c1 e6 08 shl $0x8,%esi : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); 0.00 : 49039b: 01 c1 add %eax,%ecx 0.00 : 49039d: 0f b6 47 07 movzbl 0x7(%rdi),%eax 0.00 : 4903a1: c1 e0 18 shl $0x18,%eax 0.00 : 4903a4: 01 c1 add %eax,%ecx : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); 0.00 : 4903a6: 0f b6 47 0a movzbl 0xa(%rdi),%eax : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); 0.00 : 4903aa: 01 d1 add %edx,%ecx : #ifdef WORDS_BIGENDIAN : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); 0.00 : 4903ac: 0f b6 57 01 movzbl 0x1(%rdi),%edx : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); 0.00 : 4903b0: c1 e0 10 shl $0x10,%eax 0.00 : 4903b3: 01 c6 add %eax,%esi 0.00 : 4903b5: 0f b6 47 08 movzbl 0x8(%rdi),%eax : #ifdef WORDS_BIGENDIAN : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); 0.00 : 4903b9: c1 e2 08 shl $0x8,%edx : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); 0.00 : 4903bc: 01 c6 add %eax,%esi 0.00 : 4903be: 0f b6 47 0b movzbl 0xb(%rdi),%eax 0.00 : 4903c2: c1 e0 18 shl $0x18,%eax 0.00 : 4903c5: 01 c6 add %eax,%esi : #ifdef WORDS_BIGENDIAN : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); 0.00 : 4903c7: 0f b6 47 02 movzbl 0x2(%rdi),%eax : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); 0.00 : 4903cb: 44 01 c6 add %r8d,%esi : #ifdef WORDS_BIGENDIAN : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); 0.00 : 4903ce: c1 e0 10 shl $0x10,%eax 0.00 : 4903d1: 01 c2 add %eax,%edx 0.00 : 4903d3: 0f b6 07 movzbl (%rdi),%eax 0.00 : 4903d6: 01 c2 add %eax,%edx 0.00 : 4903d8: 0f b6 47 03 movzbl 0x3(%rdi),%eax 0.00 : 4903dc: c1 e0 18 shl $0x18,%eax 0.00 : 4903df: 01 c2 add %eax,%edx : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); : #endif /* WORDS_BIGENDIAN */ : mix(a, b, c); 0.00 : 4903e1: 89 f0 mov %esi,%eax : #ifdef WORDS_BIGENDIAN : a += (k[3] + ((uint32) k[2] << 8) + ((uint32) k[1] << 16) + ((uint32) k[0] << 24)); : b += (k[7] + ((uint32) k[6] << 8) + ((uint32) k[5] << 16) + ((uint32) k[4] << 24)); : c += (k[11] + ((uint32) k[10] << 8) + ((uint32) k[9] << 16) + ((uint32) k[8] << 24)); : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); 0.00 : 4903e3: 44 01 ca add %r9d,%edx : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); : #endif /* WORDS_BIGENDIAN */ : mix(a, b, c); 0.00 : 4903e6: c1 c8 1c ror $0x1c,%eax 0.00 : 4903e9: 29 f2 sub %esi,%edx 0.00 : 4903eb: 01 ce add %ecx,%esi 0.00 : 4903ed: 31 c2 xor %eax,%edx 0.00 : 4903ef: 89 d0 mov %edx,%eax 0.00 : 4903f1: 29 d1 sub %edx,%ecx 0.00 : 4903f3: 01 f2 add %esi,%edx 0.00 : 4903f5: c1 c8 1a ror $0x1a,%eax 0.00 : 4903f8: 31 c8 xor %ecx,%eax 0.00 : 4903fa: 89 c1 mov %eax,%ecx 0.00 : 4903fc: 29 c6 sub %eax,%esi 0.00 : 4903fe: 01 d0 add %edx,%eax 0.00 : 490400: c1 c9 18 ror $0x18,%ecx 0.00 : 490403: 31 f1 xor %esi,%ecx 0.00 : 490405: 89 ce mov %ecx,%esi 0.00 : 490407: 29 ca sub %ecx,%edx 0.00 : 490409: 01 c1 add %eax,%ecx 0.00 : 49040b: c1 ce 10 ror $0x10,%esi : k += 12; : len -= 12; 0.00 : 49040e: 41 83 ea 0c sub $0xc,%r10d : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); : #endif /* WORDS_BIGENDIAN */ : mix(a, b, c); : k += 12; 0.00 : 490412: 48 83 c7 0c add $0xc,%rdi : #else /* !WORDS_BIGENDIAN */ : a += (k[0] + ((uint32) k[1] << 8) + ((uint32) k[2] << 16) + ((uint32) k[3] << 24)); : b += (k[4] + ((uint32) k[5] << 8) + ((uint32) k[6] << 16) + ((uint32) k[7] << 24)); : c += (k[8] + ((uint32) k[9] << 8) + ((uint32) k[10] << 16) + ((uint32) k[11] << 24)); : #endif /* WORDS_BIGENDIAN */ : mix(a, b, c); 0.00 : 490416: 31 d6 xor %edx,%esi 0.00 : 490418: 89 f2 mov %esi,%edx 0.00 : 49041a: 29 f0 sub %esi,%eax 0.00 : 49041c: 44 8d 0c 0e lea (%rsi,%rcx,1),%r9d 0.00 : 490420: c1 ca 0d ror $0xd,%edx 0.00 : 490423: 31 c2 xor %eax,%edx 0.00 : 490425: 41 89 d0 mov %edx,%r8d 0.00 : 490428: 29 d1 sub %edx,%ecx 0.00 : 49042a: 44 01 ca add %r9d,%edx 0.00 : 49042d: 41 c1 c8 1c ror $0x1c,%r8d 0.00 : 490431: 41 31 c8 xor %ecx,%r8d : else : { : /* Code path for non-aligned source data */ : : /* handle most of the key */ : while (len >= 12) 0.00 : 490434: 41 83 fa 0b cmp $0xb,%r10d 0.00 : 490438: 0f 87 42 ff ff ff ja 490380 0.00 : 49043e: 45 89 cb mov %r9d,%r11d 0.00 : 490441: 89 d6 mov %edx,%esi 0.00 : 490443: 44 89 c3 mov %r8d,%ebx : case 1: : a += ((uint32) k[0] << 24); : /* case 0: nothing left to add */ : } : #else /* !WORDS_BIGENDIAN */ : switch (len) /* all the case statements fall through */ 0.00 : 490446: 41 83 fa 0b cmp $0xb,%r10d 0.00 : 49044a: 0f 87 01 01 00 00 ja 490551 0.00 : 490450: 44 89 d0 mov %r10d,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:466 1.89 : 490453: ff 24 c5 18 22 7b 00 jmpq *0x7b2218(,%rax,8) 0.00 : 49045a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : { : /* Code path for aligned source data */ : register const uint32 *ka = (const uint32 *) k; : : /* handle most of the key */ : while (len >= 12) 0.00 : 490460: 83 fe 0b cmp $0xb,%esi 0.00 : 490463: 45 89 c1 mov %r8d,%r9d 0.00 : 490466: 44 89 c1 mov %r8d,%ecx 0.00 : 490469: 0f 86 79 01 00 00 jbe 4905e8 0.00 : 49046f: 90 nop : { : a += ka[0]; : b += ka[1]; : c += ka[2]; 0.00 : 490470: 44 89 c6 mov %r8d,%esi 0.00 : 490473: 03 77 08 add 0x8(%rdi),%esi : register const uint32 *ka = (const uint32 *) k; : : /* handle most of the key */ : while (len >= 12) : { : a += ka[0]; 0.00 : 490476: 44 89 c8 mov %r9d,%eax 0.00 : 490479: 03 07 add (%rdi),%eax : b += ka[1]; 0.00 : 49047b: 03 4f 04 add 0x4(%rdi),%ecx : c += ka[2]; : mix(a, b, c); : ka += 3; : len -= 12; 0.00 : 49047e: 41 83 ea 0c sub $0xc,%r10d : { : a += ka[0]; : b += ka[1]; : c += ka[2]; : mix(a, b, c); : ka += 3; 0.00 : 490482: 48 83 c7 0c add $0xc,%rdi : while (len >= 12) : { : a += ka[0]; : b += ka[1]; : c += ka[2]; : mix(a, b, c); 0.00 : 490486: 89 f2 mov %esi,%edx 0.00 : 490488: 29 f0 sub %esi,%eax 0.00 : 49048a: c1 ca 1c ror $0x1c,%edx 0.00 : 49048d: 01 ce add %ecx,%esi 0.00 : 49048f: 31 d0 xor %edx,%eax 0.00 : 490491: 89 c2 mov %eax,%edx 0.00 : 490493: 29 c1 sub %eax,%ecx 0.00 : 490495: 01 f0 add %esi,%eax 0.00 : 490497: c1 ca 1a ror $0x1a,%edx 0.00 : 49049a: 31 ca xor %ecx,%edx 0.00 : 49049c: 89 d1 mov %edx,%ecx 0.00 : 49049e: 29 d6 sub %edx,%esi 0.00 : 4904a0: 01 c2 add %eax,%edx 0.00 : 4904a2: c1 c9 18 ror $0x18,%ecx 0.00 : 4904a5: 31 f1 xor %esi,%ecx 0.00 : 4904a7: 89 ce mov %ecx,%esi 0.00 : 4904a9: 29 c8 sub %ecx,%eax 0.00 : 4904ab: 01 d1 add %edx,%ecx 0.00 : 4904ad: c1 ce 10 ror $0x10,%esi 0.00 : 4904b0: 31 c6 xor %eax,%esi 0.00 : 4904b2: 89 f0 mov %esi,%eax 0.00 : 4904b4: 29 f2 sub %esi,%edx 0.00 : 4904b6: 44 8d 0c 0e lea (%rsi,%rcx,1),%r9d 0.00 : 4904ba: c1 c8 0d ror $0xd,%eax 0.00 : 4904bd: 31 d0 xor %edx,%eax 0.00 : 4904bf: 41 89 c0 mov %eax,%r8d 0.00 : 4904c2: 29 c1 sub %eax,%ecx 0.00 : 4904c4: 41 c1 c8 1c ror $0x1c,%r8d 0.00 : 4904c8: 41 31 c8 xor %ecx,%r8d : { : /* Code path for aligned source data */ : register const uint32 *ka = (const uint32 *) k; : : /* handle most of the key */ : while (len >= 12) 0.00 : 4904cb: 41 83 fa 0b cmp $0xb,%r10d : { : a += ka[0]; : b += ka[1]; : c += ka[2]; : mix(a, b, c); 0.00 : 4904cf: 42 8d 0c 08 lea (%rax,%r9,1),%ecx : { : /* Code path for aligned source data */ : register const uint32 *ka = (const uint32 *) k; : : /* handle most of the key */ : while (len >= 12) 0.00 : 4904d3: 77 9b ja 490470 0.00 : 4904d5: 45 89 cb mov %r9d,%r11d 0.00 : 4904d8: 89 ce mov %ecx,%esi 0.00 : 4904da: 44 89 c3 mov %r8d,%ebx : case 1: : a += ((uint32) k[0] << 24); : /* case 0: nothing left to add */ : } : #else /* !WORDS_BIGENDIAN */ : switch (len) 0.00 : 4904dd: 41 83 fa 0b cmp $0xb,%r10d 0.00 : 4904e1: 77 6e ja 490551 0.00 : 4904e3: 44 89 d0 mov %r10d,%eax 0.00 : 4904e6: ff 24 c5 78 22 7b 00 jmpq *0x7b2278(,%rax,8) : } : #else /* !WORDS_BIGENDIAN */ : switch (len) /* all the case statements fall through */ : { : case 11: : c += ((uint32) k[10] << 24); 0.00 : 4904ed: 0f b6 47 0a movzbl 0xa(%rdi),%eax 0.00 : 4904f1: c1 e0 18 shl $0x18,%eax 0.00 : 4904f4: 42 8d 1c 00 lea (%rax,%r8,1),%ebx : case 10: : c += ((uint32) k[9] << 16); 0.00 : 4904f8: 0f b6 47 09 movzbl 0x9(%rdi),%eax 0.00 : 4904fc: c1 e0 10 shl $0x10,%eax 0.00 : 4904ff: 01 c3 add %eax,%ebx : case 9: : c += ((uint32) k[8] << 8); 0.00 : 490501: 0f b6 47 08 movzbl 0x8(%rdi),%eax 0.00 : 490505: c1 e0 08 shl $0x8,%eax 0.00 : 490508: 01 c3 add %eax,%ebx : /* the lowest byte of c is reserved for the length */ : case 8: : b += ((uint32) k[7] << 24); 0.00 : 49050a: 0f b6 47 07 movzbl 0x7(%rdi),%eax 0.00 : 49050e: c1 e0 18 shl $0x18,%eax 0.00 : 490511: 8d 34 10 lea (%rax,%rdx,1),%esi : case 7: : b += ((uint32) k[6] << 16); 0.00 : 490514: 0f b6 47 06 movzbl 0x6(%rdi),%eax 0.00 : 490518: c1 e0 10 shl $0x10,%eax 0.00 : 49051b: 01 c6 add %eax,%esi : case 6: : b += ((uint32) k[5] << 8); 0.00 : 49051d: 0f b6 47 05 movzbl 0x5(%rdi),%eax 0.00 : 490521: c1 e0 08 shl $0x8,%eax 0.00 : 490524: 01 c6 add %eax,%esi : case 5: : b += k[4]; 0.00 : 490526: 0f b6 47 04 movzbl 0x4(%rdi),%eax 0.00 : 49052a: 01 c6 add %eax,%esi : case 4: : a += ((uint32) k[3] << 24); 0.00 : 49052c: 0f b6 47 03 movzbl 0x3(%rdi),%eax 0.00 : 490530: c1 e0 18 shl $0x18,%eax 0.00 : 490533: 46 8d 1c 08 lea (%rax,%r9,1),%r11d : case 3: : a += ((uint32) k[2] << 16); 0.00 : 490537: 0f b6 47 02 movzbl 0x2(%rdi),%eax 0.00 : 49053b: c1 e0 10 shl $0x10,%eax 0.00 : 49053e: 41 01 c3 add %eax,%r11d : case 2: : a += ((uint32) k[1] << 8); 0.00 : 490541: 0f b6 47 01 movzbl 0x1(%rdi),%eax 0.00 : 490545: c1 e0 08 shl $0x8,%eax 0.00 : 490548: 41 01 c3 add %eax,%r11d : case 1: : a += k[0]; /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:490 3.77 : 49054b: 0f b6 07 movzbl (%rdi),%eax 0.00 : 49054e: 41 01 c3 add %eax,%r11d : /* case 0: nothing left to add */ : } : #endif /* WORDS_BIGENDIAN */ : } : : final(a, b, c); /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 3.77 : 490551: 89 da mov %ebx,%edx 0.00 : 490553: 89 f0 mov %esi,%eax 2.83 : 490555: 31 f2 xor %esi,%edx 0.00 : 490557: c1 c8 12 ror $0x12,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 5.66 : 49055a: 29 c2 sub %eax,%edx /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 1.89 : 49055c: 89 d1 mov %edx,%ecx 0.00 : 49055e: 89 d0 mov %edx,%eax 3.77 : 490560: c1 c8 15 ror $0x15,%eax 0.00 : 490563: 44 31 d9 xor %r11d,%ecx 0.00 : 490566: 29 c1 sub %eax,%ecx 0.94 : 490568: 89 c8 mov %ecx,%eax 0.94 : 49056a: 31 ce xor %ecx,%esi 2.83 : 49056c: c1 c8 07 ror $0x7,%eax 0.00 : 49056f: 29 c6 sub %eax,%esi 0.00 : 490571: 89 f0 mov %esi,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 5.66 : 490573: 31 d0 xor %edx,%eax 6.60 : 490575: 89 f2 mov %esi,%edx 0.00 : 490577: c1 ca 10 ror $0x10,%edx 6.60 : 49057a: 29 d0 sub %edx,%eax 0.00 : 49057c: 89 c2 mov %eax,%edx /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 4.72 : 49057e: 31 ca xor %ecx,%edx 1.89 : 490580: 89 c1 mov %eax,%ecx 0.00 : 490582: c1 c9 1c ror $0x1c,%ecx /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 13.21 : 490585: 29 ca sub %ecx,%edx 0.00 : 490587: 89 d1 mov %edx,%ecx /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 2.83 : 490589: c1 ca 12 ror $0x12,%edx 4.72 : 49058c: 31 f1 xor %esi,%ecx 0.00 : 49058e: 29 d1 sub %edx,%ecx 1.89 : 490590: 31 c8 xor %ecx,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 6.60 : 490592: c1 c9 08 ror $0x8,%ecx /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:496 2.83 : 490595: 29 c8 sub %ecx,%eax : : /* report the result */ : return UInt32GetDatum(c); : } 0.00 : 490597: 5b pop %rbx 0.00 : 490598: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:500 2.83 : 490599: c3 retq : case 8: : b += ka[1]; : a += ka[0]; : break; : case 7: : b += ((uint32) k[6] << 16); 0.00 : 49059a: 0f b6 47 06 movzbl 0x6(%rdi),%eax 0.00 : 49059e: c1 e0 10 shl $0x10,%eax 0.00 : 4905a1: 8d 34 08 lea (%rax,%rcx,1),%esi : /* fall through */ : case 6: : b += ((uint32) k[5] << 8); 0.00 : 4905a4: 0f b6 47 05 movzbl 0x5(%rdi),%eax 0.00 : 4905a8: c1 e0 08 shl $0x8,%eax 0.00 : 4905ab: 01 c6 add %eax,%esi : /* fall through */ : case 5: : b += k[4]; 0.00 : 4905ad: 0f b6 47 04 movzbl 0x4(%rdi),%eax 0.00 : 4905b1: 01 c6 add %eax,%esi : /* fall through */ : case 4: : a += ka[0]; 0.00 : 4905b3: 45 89 cb mov %r9d,%r11d 0.00 : 4905b6: 44 03 1f add (%rdi),%r11d : break; 0.00 : 4905b9: eb 96 jmp 490551 : } : #else /* !WORDS_BIGENDIAN */ : switch (len) : { : case 11: : c += ((uint32) k[10] << 24); 0.00 : 4905bb: 0f b6 47 0a movzbl 0xa(%rdi),%eax 0.00 : 4905bf: c1 e0 18 shl $0x18,%eax 0.00 : 4905c2: 42 8d 1c 00 lea (%rax,%r8,1),%ebx : /* fall through */ : case 10: : c += ((uint32) k[9] << 16); 0.00 : 4905c6: 0f b6 47 09 movzbl 0x9(%rdi),%eax 0.00 : 4905ca: c1 e0 10 shl $0x10,%eax 0.00 : 4905cd: 01 c3 add %eax,%ebx : /* fall through */ : case 9: : c += ((uint32) k[8] << 8); 0.00 : 4905cf: 0f b6 47 08 movzbl 0x8(%rdi),%eax 0.00 : 4905d3: c1 e0 08 shl $0x8,%eax 0.00 : 4905d6: 01 c3 add %eax,%ebx : /* the lowest byte of c is reserved for the length */ : /* fall through */ : case 8: : b += ka[1]; 0.00 : 4905d8: 89 ce mov %ecx,%esi : a += ka[0]; 0.00 : 4905da: 45 89 cb mov %r9d,%r11d : case 9: : c += ((uint32) k[8] << 8); : /* the lowest byte of c is reserved for the length */ : /* fall through */ : case 8: : b += ka[1]; 0.00 : 4905dd: 03 77 04 add 0x4(%rdi),%esi : a += ka[0]; 0.00 : 4905e0: 44 03 1f add (%rdi),%r11d : break; 0.00 : 4905e3: e9 69 ff ff ff jmpq 490551 : { : /* Code path for aligned source data */ : register const uint32 *ka = (const uint32 *) k; : : /* handle most of the key */ : while (len >= 12) 0.00 : 4905e8: 45 89 c3 mov %r8d,%r11d 0.00 : 4905eb: 44 89 c6 mov %r8d,%esi 0.00 : 4905ee: 44 89 c3 mov %r8d,%ebx 0.00 : 4905f1: e9 e7 fe ff ff jmpq 4904dd : else : { : /* Code path for non-aligned source data */ : : /* handle most of the key */ : while (len >= 12) 0.00 : 4905f6: 45 89 c3 mov %r8d,%r11d 0.00 : 4905f9: 44 89 c6 mov %r8d,%esi /home/Computational/mark/src/postgres-andres/src/backend/access/hash/hashfunc.c:420 3.77 : 4905fc: 44 89 c3 mov %r8d,%ebx 0.00 : 4905ff: e9 42 fe ff ff jmpq 490446 : /* fall through */ : case 4: : a += ka[0]; : break; : case 3: : a += ((uint32) k[2] << 16); 0.00 : 490604: 0f b6 47 02 movzbl 0x2(%rdi),%eax 0.00 : 490608: c1 e0 10 shl $0x10,%eax 0.00 : 49060b: 46 8d 1c 08 lea (%rax,%r9,1),%r11d 0.00 : 49060f: e9 2d ff ff ff jmpq 490541 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 37.50 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1051 28.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1057 14.42 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1057 11.54 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1059 5.77 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1054 1.92 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1051 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005aca20 : : * ---------------------------------------------------------------- : */ : static Datum : ExecEvalConst(ExprState *exprstate, ExprContext *econtext, : bool *isNull, ExprDoneCond *isDone) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1051 37.50 : 5aca20: 55 push %rbp : Const *con = (Const *) exprstate->expr; : : if (isDone) 0.00 : 5aca21: 48 85 c9 test %rcx,%rcx : */ : static Datum : ExecEvalConst(ExprState *exprstate, ExprContext *econtext, : bool *isNull, ExprDoneCond *isDone) : { : Const *con = (Const *) exprstate->expr; 0.00 : 5aca24: 48 8b 77 08 mov 0x8(%rdi),%rsi : * ---------------------------------------------------------------- : */ : static Datum : ExecEvalConst(ExprState *exprstate, ExprContext *econtext, : bool *isNull, ExprDoneCond *isDone) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1051 1.92 : 5aca28: 48 89 e5 mov %rsp,%rbp : Const *con = (Const *) exprstate->expr; : : if (isDone) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1054 5.77 : 5aca2b: 74 06 je 5aca33 : *isDone = ExprSingleResult; 0.00 : 5aca2d: c7 01 00 00 00 00 movl $0x0,(%rcx) : : *isNull = con->constisnull; 0.00 : 5aca33: 0f b6 46 20 movzbl 0x20(%rsi),%eax /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1057 28.85 : 5aca37: 88 02 mov %al,(%rdx) 14.42 : 5aca39: 48 8b 46 18 mov 0x18(%rsi),%rax : return con->constvalue; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:1059 11.54 : 5aca3d: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 25.49 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 14.71 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 8.82 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 6.86 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 6.86 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 6.86 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 4.90 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1577 3.92 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 3.92 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 3.92 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 3.92 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 3.92 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 1.96 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1583 1.96 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 0.98 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 0.98 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006425d0 : : * calls for what the user considers a single call of the function. The : * finalize flag should be TRUE on the last call. : */ : void : pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize) : { /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 25.49 : 6425d0: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 3.92 : 6425d1: 48 89 e5 mov %rsp,%rbp 3.92 : 6425d4: 41 55 push %r13 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 14.71 : 6425d6: 41 89 f5 mov %esi,%r13d 6.86 : 6425d9: 41 54 push %r12 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 0.98 : 6425db: 49 89 fc mov %rdi,%r12 3.92 : 6425de: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1576 6.86 : 6425df: 48 83 ec 18 sub $0x18,%rsp : PgStat_FunctionCounts *fs = fcu->fs; /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1577 4.90 : 6425e3: 48 8b 1f mov (%rdi),%rbx : instr_time f_total; : instr_time f_others; : instr_time f_self; : : /* stats not wanted? */ : if (fs == NULL) /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1583 1.96 : 6425e6: 48 85 db test %rbx,%rbx 0.00 : 6425e9: 0f 84 6f 01 00 00 je 64275e : return; : : /* total elapsed time in this function call */ : INSTR_TIME_SET_CURRENT(f_total); 0.00 : 6425ef: 48 8d 7d d0 lea -0x30(%rbp),%rdi 0.00 : 6425f3: 31 f6 xor %esi,%esi 0.00 : 6425f5: e8 c6 6f e2 ff callq 4695c0 : INSTR_TIME_SUBTRACT(f_total, fcu->f_start); 0.00 : 6425fa: 48 8b 4d d8 mov -0x28(%rbp),%rcx 0.00 : 6425fe: 49 2b 4c 24 30 sub 0x30(%r12),%rcx 0.00 : 642603: 48 8b 45 d0 mov -0x30(%rbp),%rax 0.00 : 642607: 49 2b 44 24 28 sub 0x28(%r12),%rax 0.00 : 64260c: 48 85 c9 test %rcx,%rcx 0.00 : 64260f: 48 89 4d d8 mov %rcx,-0x28(%rbp) 0.00 : 642613: 49 89 c1 mov %rax,%r9 0.00 : 642616: 48 89 45 d0 mov %rax,-0x30(%rbp) 0.00 : 64261a: 79 1c jns 642638 0.00 : 64261c: 0f 1f 40 00 nopl 0x0(%rax) : * calls for what the user considers a single call of the function. The : * finalize flag should be TRUE on the last call. : */ : void : pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize) : { 0.00 : 642620: 48 83 e8 01 sub $0x1,%rax : if (fs == NULL) : return; : : /* total elapsed time in this function call */ : INSTR_TIME_SET_CURRENT(f_total); : INSTR_TIME_SUBTRACT(f_total, fcu->f_start); 0.00 : 642624: 48 81 c1 40 42 0f 00 add $0xf4240,%rcx 0.00 : 64262b: 78 f3 js 642620 0.00 : 64262d: 48 89 45 d0 mov %rax,-0x30(%rbp) 0.00 : 642631: 48 89 4d d8 mov %rcx,-0x28(%rbp) 0.00 : 642635: 49 89 c1 mov %rax,%r9 : : /* self usage: elapsed minus anything already charged to other calls */ : f_others = total_func_time; 0.00 : 642638: 4c 8b 05 e9 98 53 00 mov 0x5398e9(%rip),%r8 # b7bf28 0.00 : 64263f: 4c 8b 15 da 98 53 00 mov 0x5398da(%rip),%r10 # b7bf20 : INSTR_TIME_SUBTRACT(f_others, fcu->save_total); 0.00 : 642646: 4c 89 c0 mov %r8,%rax 0.00 : 642649: 4c 89 d2 mov %r10,%rdx 0.00 : 64264c: 49 2b 54 24 18 sub 0x18(%r12),%rdx 0.00 : 642651: 49 2b 44 24 20 sub 0x20(%r12),%rax 0.00 : 642656: 79 14 jns 64266c 0.00 : 642658: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 64265f: 00 0.00 : 642660: 48 83 ea 01 sub $0x1,%rdx 0.00 : 642664: 48 05 40 42 0f 00 add $0xf4240,%rax 0.00 : 64266a: 78 f4 js 642660 : f_self = f_total; : INSTR_TIME_SUBTRACT(f_self, f_others); 0.00 : 64266c: 4c 89 cf mov %r9,%rdi 0.00 : 64266f: 48 89 ce mov %rcx,%rsi 0.00 : 642672: 48 29 d7 sub %rdx,%rdi 0.00 : 642675: 48 29 c6 sub %rax,%rsi 0.00 : 642678: 79 13 jns 64268d 0.00 : 64267a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 642680: 48 83 ef 01 sub $0x1,%rdi 0.00 : 642684: 48 81 c6 40 42 0f 00 add $0xf4240,%rsi 0.00 : 64268b: 78 f3 js 642680 : : /* update backend-wide total time */ : INSTR_TIME_ADD(total_func_time, f_self); 0.00 : 64268d: 4a 8d 04 06 lea (%rsi,%r8,1),%rax 0.00 : 642691: 4a 8d 14 17 lea (%rdi,%r10,1),%rdx 0.00 : 642695: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 64269b: 48 89 15 7e 98 53 00 mov %rdx,0x53987e(%rip) # b7bf20 0.00 : 6426a2: 48 89 05 7f 98 53 00 mov %rax,0x53987f(%rip) # b7bf28 0.00 : 6426a9: 7e 25 jle 6426d0 0.00 : 6426ab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 6426b0: 48 2d 40 42 0f 00 sub $0xf4240,%rax : * calls for what the user considers a single call of the function. The : * finalize flag should be TRUE on the last call. : */ : void : pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize) : { 0.00 : 6426b6: 48 83 c2 01 add $0x1,%rdx : INSTR_TIME_SUBTRACT(f_others, fcu->save_total); : f_self = f_total; : INSTR_TIME_SUBTRACT(f_self, f_others); : : /* update backend-wide total time */ : INSTR_TIME_ADD(total_func_time, f_self); 0.00 : 6426ba: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 6426c0: 7f ee jg 6426b0 0.00 : 6426c2: 48 89 15 57 98 53 00 mov %rdx,0x539857(%rip) # b7bf20 0.00 : 6426c9: 48 89 05 58 98 53 00 mov %rax,0x539858(%rip) # b7bf28 : * pre-call value of f_total_time. This is necessary to avoid : * double-counting any time taken by recursive calls of myself. (We do : * not need any similar kluge for self time, since that already excludes : * any recursive calls.) : */ : INSTR_TIME_ADD(f_total, fcu->save_f_total_time); 0.00 : 6426d0: 48 89 c8 mov %rcx,%rax 0.00 : 6426d3: 49 03 44 24 10 add 0x10(%r12),%rax 0.00 : 6426d8: 4c 89 ca mov %r9,%rdx 0.00 : 6426db: 49 03 54 24 08 add 0x8(%r12),%rdx 0.00 : 6426e0: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 6426e6: 48 89 45 d8 mov %rax,-0x28(%rbp) 0.00 : 6426ea: 48 89 55 d0 mov %rdx,-0x30(%rbp) 0.00 : 6426ee: 7e 1a jle 64270a 0.00 : 6426f0: 48 2d 40 42 0f 00 sub $0xf4240,%rax : * calls for what the user considers a single call of the function. The : * finalize flag should be TRUE on the last call. : */ : void : pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, bool finalize) : { 0.00 : 6426f6: 48 83 c2 01 add $0x1,%rdx : * pre-call value of f_total_time. This is necessary to avoid : * double-counting any time taken by recursive calls of myself. (We do : * not need any similar kluge for self time, since that already excludes : * any recursive calls.) : */ : INSTR_TIME_ADD(f_total, fcu->save_f_total_time); 0.00 : 6426fa: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 642700: 7f ee jg 6426f0 0.00 : 642702: 48 89 55 d0 mov %rdx,-0x30(%rbp) 0.00 : 642706: 48 89 45 d8 mov %rax,-0x28(%rbp) : : /* update counters in function stats table */ : if (finalize) 0.00 : 64270a: 45 84 ed test %r13b,%r13b 0.00 : 64270d: 75 61 jne 642770 : fs->f_numcalls++; : fs->f_total_time = f_total; 0.00 : 64270f: 48 8b 45 d0 mov -0x30(%rbp),%rax 0.00 : 642713: 48 89 43 08 mov %rax,0x8(%rbx) 0.00 : 642717: 48 8b 45 d8 mov -0x28(%rbp),%rax : INSTR_TIME_ADD(fs->f_self_time, f_self); 0.00 : 64271b: 48 01 7b 18 add %rdi,0x18(%rbx) : INSTR_TIME_ADD(f_total, fcu->save_f_total_time); : : /* update counters in function stats table */ : if (finalize) : fs->f_numcalls++; : fs->f_total_time = f_total; 0.00 : 64271f: 48 89 43 10 mov %rax,0x10(%rbx) : INSTR_TIME_ADD(fs->f_self_time, f_self); 0.00 : 642723: 48 89 f0 mov %rsi,%rax 0.00 : 642726: 48 03 43 20 add 0x20(%rbx),%rax 0.00 : 64272a: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 642730: 48 89 43 20 mov %rax,0x20(%rbx) 0.00 : 642734: 7e 21 jle 642757 0.00 : 642736: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 64273d: 00 00 00 0.00 : 642740: 48 2d 40 42 0f 00 sub $0xf4240,%rax 0.00 : 642746: 48 83 43 18 01 addq $0x1,0x18(%rbx) 0.00 : 64274b: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 642751: 48 89 43 20 mov %rax,0x20(%rbx) 0.00 : 642755: 7f e9 jg 642740 : : /* indicate that we have something to send */ : have_function_stats = true; 0.00 : 642757: c6 05 4a 95 53 00 01 movb $0x1,0x53954a(%rip) # b7bca8 : } /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 8.82 : 64275e: 48 83 c4 18 add $0x18,%rsp /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 0.98 : 642762: 5b pop %rbx 1.96 : 642763: 41 5c pop %r12 3.92 : 642765: 41 5d pop %r13 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 6.86 : 642767: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1616 3.92 : 642768: c3 retq 0.00 : 642769: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : */ : INSTR_TIME_ADD(f_total, fcu->save_f_total_time); : : /* update counters in function stats table */ : if (finalize) : fs->f_numcalls++; 0.00 : 642770: 48 83 03 01 addq $0x1,(%rbx) 0.00 : 642774: eb 99 jmp 64270f Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 35.16 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:735 27.47 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:740 9.89 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:740 4.40 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:735 4.40 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:751 3.30 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:735 2.20 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:735 2.20 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:736 2.20 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:737 2.20 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:749 2.20 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:750 1.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:736 1.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:737 1.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:737 1.10 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:750 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d7d90 : : * float4mul - returns arg1 * arg2 : * float4div - returns arg1 / arg2 : */ : Datum : float4pl(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:735 2.20 : 6d7d90: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:735 35.16 : 6d7d91: 48 89 e5 mov %rsp,%rbp 0.00 : 6d7d94: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:735 4.40 : 6d7d95: 48 89 fb mov %rdi,%rbx 3.30 : 6d7d98: 48 83 ec 18 sub $0x18,%rsp : float4 arg1 = PG_GETARG_FLOAT4(0); 0.00 : 6d7d9c: 48 8b 7f 20 mov 0x20(%rdi),%rdi /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:736 2.20 : 6d7da0: e8 0b 5c 0a 00 callq 77d9b0 1.10 : 6d7da5: f3 0f 11 45 ec movss %xmm0,-0x14(%rbp) : float4 arg2 = PG_GETARG_FLOAT4(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:737 1.10 : 6d7daa: 48 8b 7b 28 mov 0x28(%rbx),%rdi 2.20 : 6d7dae: e8 fd 5b 0a 00 callq 77d9b0 1.10 : 6d7db3: f3 0f 11 45 f0 movss %xmm0,-0x10(%rbp) : float4 result; : : result = arg1 + arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:740 9.89 : 6d7db8: f3 0f 10 45 ec movss -0x14(%rbp),%xmm0 0.00 : 6d7dbd: f3 0f 58 45 f0 addss -0x10(%rbp),%xmm0 27.47 : 6d7dc2: f3 0f 11 45 f4 movss %xmm0,-0xc(%rbp) : * because numbers near the underflow value have already been rounded to : * the point where we can't detect that the two values were originally : * different, e.g. on x86, '1e-45'::float4 == '2e-45'::float4 == : * 1.4013e-45. : */ : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:749 2.20 : 6d7dc7: e8 64 19 d9 ff callq 469730 <__isinff@plt> 0.00 : 6d7dcc: 85 c0 test %eax,%eax 0.00 : 6d7dce: 74 0e je 6d7dde 0.00 : 6d7dd0: f3 0f 10 45 ec movss -0x14(%rbp),%xmm0 0.00 : 6d7dd5: e8 56 19 d9 ff callq 469730 <__isinff@plt> 0.00 : 6d7dda: 85 c0 test %eax,%eax 0.00 : 6d7ddc: 74 12 je 6d7df0 : PG_RETURN_FLOAT4(result); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:750 2.20 : 6d7dde: f3 0f 10 45 f4 movss -0xc(%rbp),%xmm0 : } 0.00 : 6d7de3: 48 83 c4 18 add $0x18,%rsp 0.00 : 6d7de7: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:751 4.40 : 6d7de8: c9 leaveq : * the point where we can't detect that the two values were originally : * different, e.g. on x86, '1e-45'::float4 == '2e-45'::float4 == : * 1.4013e-45. : */ : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); : PG_RETURN_FLOAT4(result); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:750 1.10 : 6d7de9: e9 b2 5b 0a 00 jmpq 77d9a0 0.00 : 6d7dee: 66 90 xchg %ax,%ax : * because numbers near the underflow value have already been rounded to : * the point where we can't detect that the two values were originally : * different, e.g. on x86, '1e-45'::float4 == '2e-45'::float4 == : * 1.4013e-45. : */ : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); 0.00 : 6d7df0: f3 0f 10 45 f0 movss -0x10(%rbp),%xmm0 0.00 : 6d7df5: e8 36 19 d9 ff callq 469730 <__isinff@plt> 0.00 : 6d7dfa: 85 c0 test %eax,%eax 0.00 : 6d7dfc: 75 e0 jne 6d7dde 0.00 : 6d7dfe: 45 31 c0 xor %r8d,%r8d 0.00 : 6d7e01: b9 57 bb 8b 00 mov $0x8bbb57,%ecx 0.00 : 6d7e06: ba ed 02 00 00 mov $0x2ed,%edx 0.00 : 6d7e0b: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d7e10: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d7e15: e8 a6 2c 0a 00 callq 77aac0 0.00 : 6d7e1a: 84 c0 test %al,%al 0.00 : 6d7e1c: 75 05 jne 6d7e23 0.00 : 6d7e1e: e8 ad 16 d9 ff callq 4694d0 0.00 : 6d7e23: bf 2f b4 8b 00 mov $0x8bb42f,%edi 0.00 : 6d7e28: 31 c0 xor %eax,%eax 0.00 : 6d7e2a: e8 71 4a 0a 00 callq 77c8a0 0.00 : 6d7e2f: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6d7e34: 89 c3 mov %eax,%ebx 0.00 : 6d7e36: e8 15 4f 0a 00 callq 77cd50 0.00 : 6d7e3b: 89 de mov %ebx,%esi 0.00 : 6d7e3d: 89 c7 mov %eax,%edi 0.00 : 6d7e3f: 31 c0 xor %eax,%eax 0.00 : 6d7e41: e8 9a 27 0a 00 callq 77a5e0 0.00 : 6d7e46: eb d6 jmp 6d7e1e Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 21.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:100 10.23 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:95 9.09 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:77 6.82 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:93 6.82 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:111 5.68 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:85 4.55 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:60 4.55 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:89 3.41 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:60 3.41 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:66 3.41 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:87 2.27 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:77 2.27 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:85 2.27 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:87 2.27 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:111 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:60 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:60 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:60 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:66 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:87 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:111 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:111 1.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:77 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005a9440 : : TupleTableSlot *slot2, : int numCols, : AttrNumber *matchColIdx, : FmgrInfo *eqfunctions, : MemoryContext evalContext) : { 0.00 : 5a9440: 55 push %rbp 0.00 : 5a9441: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:60 3.41 : 5a9444: 41 57 push %r15 0.00 : 5a9446: 49 89 cf mov %rcx,%r15 0.00 : 5a9449: 41 56 push %r14 1.14 : 5a944b: 41 55 push %r13 0.00 : 5a944d: 41 54 push %r12 0.00 : 5a944f: 41 89 d4 mov %edx,%r12d : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; : : CurrentMemoryContext = context; 0.00 : 5a9452: 45 89 e5 mov %r12d,%r13d 1.14 : 5a9455: 53 push %rbx 1.14 : 5a9456: 4c 89 cb mov %r9,%rbx 0.00 : 5a9459: 48 83 ec 38 sub $0x38,%rsp 4.55 : 5a945d: 48 89 7d b8 mov %rdi,-0x48(%rbp) : MemoryContext oldContext; : bool result; : int i; : : /* Reset and switch into the temp context. */ : MemoryContextReset(evalContext); /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:66 1.14 : 5a9461: 4c 89 cf mov %r9,%rdi : TupleTableSlot *slot2, : int numCols, : AttrNumber *matchColIdx, : FmgrInfo *eqfunctions, : MemoryContext evalContext) : { 0.00 : 5a9464: 48 89 75 b0 mov %rsi,-0x50(%rbp) 0.00 : 5a9468: 4c 89 45 a8 mov %r8,-0x58(%rbp) : MemoryContext oldContext; : bool result; : int i; : : /* Reset and switch into the temp context. */ : MemoryContextReset(evalContext); 3.41 : 5a946c: e8 3f f5 1e 00 callq 7989b0 : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.00 : 5a9471: 48 8b 05 e8 13 61 00 mov 0x6113e8(%rip),%rax # bba860 : : CurrentMemoryContext = context; /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 1.14 : 5a9478: 48 89 1d e1 13 61 00 mov %rbx,0x6113e1(%rip) # bba860 : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:93 6.82 : 5a947f: 48 89 45 c0 mov %rax,-0x40(%rbp) 0.00 : 5a9483: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : * comparing at the last field (least significant sort key). That's the : * most likely to be different if we are dealing with sorted input. : */ : result = true; : : for (i = numCols; --i >= 0;) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:77 9.09 : 5a9488: 41 83 ed 01 sub $0x1,%r13d /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:77 2.27 : 5a948c: 78 72 js 5a9500 : { : AttrNumber att = matchColIdx[i]; 0.00 : 5a948e: 4d 63 e5 movslq %r13d,%r12 : Datum attr1, : attr2; : bool isNull1, : isNull2; : : attr1 = slot_getattr(slot1, att, &isNull1); /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:85 2.27 : 5a9491: 48 8b 7d b8 mov -0x48(%rbp),%rdi /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:85 5.68 : 5a9495: 48 8d 55 d7 lea -0x29(%rbp),%rdx 0.00 : 5a9499: 43 0f bf 1c 67 movswl (%r15,%r12,2),%ebx 0.00 : 5a949e: 89 de mov %ebx,%esi 0.00 : 5a94a0: e8 5b 5f ec ff callq 46f400 : : attr2 = slot_getattr(slot2, att, &isNull2); 0.00 : 5a94a5: 48 8b 7d b0 mov -0x50(%rbp),%rdi /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:87 3.41 : 5a94a9: 48 8d 55 d6 lea -0x2a(%rbp),%rdx 2.27 : 5a94ad: 89 de mov %ebx,%esi : Datum attr1, : attr2; : bool isNull1, : isNull2; : : attr1 = slot_getattr(slot1, att, &isNull1); 0.00 : 5a94af: 49 89 c6 mov %rax,%r14 : : attr2 = slot_getattr(slot2, att, &isNull2); 1.14 : 5a94b2: e8 49 5f ec ff callq 46f400 : : if (isNull1 != isNull2) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:89 4.55 : 5a94b7: 0f b6 55 d7 movzbl -0x29(%rbp),%edx 0.00 : 5a94bb: 3a 55 d6 cmp -0x2a(%rbp),%dl 0.00 : 5a94be: 75 21 jne 5a94e1 : { : result = false; /* one null and one not; they aren't equal */ : break; : } : : if (isNull1) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:95 10.23 : 5a94c0: 84 d2 test %dl,%dl 0.00 : 5a94c2: 75 c4 jne 5a9488 : continue; /* both are null, treat as equal */ : : /* Apply the type-specific equality function */ : : if (!DatumGetBool(FunctionCall2(&eqfunctions[i], 0.00 : 5a94c4: 4b 8d 3c 64 lea (%r12,%r12,2),%rdi 0.00 : 5a94c8: 31 f6 xor %esi,%esi 0.00 : 5a94ca: 48 89 c1 mov %rax,%rcx 0.00 : 5a94cd: 4c 89 f2 mov %r14,%rdx 0.00 : 5a94d0: 48 c1 e7 04 shl $0x4,%rdi 0.00 : 5a94d4: 48 03 7d a8 add -0x58(%rbp),%rdi 0.00 : 5a94d8: e8 53 4b 1d 00 callq 77e030 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:100 21.59 : 5a94dd: 84 c0 test %al,%al 0.00 : 5a94df: 75 a7 jne 5a9488 : * comparing at the last field (least significant sort key). That's the : * most likely to be different if we are dealing with sorted input. : */ : result = true; : : for (i = numCols; --i >= 0;) 0.00 : 5a94e1: 31 c0 xor %eax,%eax : : CurrentMemoryContext = context; /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 1.14 : 5a94e3: 48 8b 55 c0 mov -0x40(%rbp),%rdx 0.00 : 5a94e7: 48 89 15 72 13 61 00 mov %rdx,0x611372(%rip) # bba860 : } : : MemoryContextSwitchTo(oldContext); : : return result; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:111 2.27 : 5a94ee: 48 83 c4 38 add $0x38,%rsp 0.00 : 5a94f2: 5b pop %rbx 0.00 : 5a94f3: 41 5c pop %r12 1.14 : 5a94f5: 41 5d pop %r13 0.00 : 5a94f7: 41 5e pop %r14 0.00 : 5a94f9: 41 5f pop %r15 1.14 : 5a94fb: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:111 6.82 : 5a94fc: c3 retq 0.00 : 5a94fd: 0f 1f 00 nopl (%rax) : * comparing at the last field (least significant sort key). That's the : * most likely to be different if we are dealing with sorted input. : */ : result = true; : : for (i = numCols; --i >= 0;) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:77 1.14 : 5a9500: b8 01 00 00 00 mov $0x1,%eax 0.00 : 5a9505: eb dc jmp 5a94e3 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 10.34 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 5.75 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:77 4.60 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:70 4.60 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:99 4.60 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:144 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:77 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:74 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:137 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:141 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:146 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:89 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:94 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:136 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:142 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:146 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:148 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:148 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:148 2.30 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:148 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:70 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:74 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:82 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:99 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:136 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:138 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:139 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:140 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:143 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:143 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:144 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:145 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:146 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:146 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:146 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:146 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:148 1.15 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:148 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b7bd0 : : } : : /* Exit from a plan node */ : void : InstrStopNode(Instrumentation *instr, double nTuples) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:70 1.15 : 5b7bd0: 55 push %rbp 0.00 : 5b7bd1: 48 89 e5 mov %rsp,%rbp 4.60 : 5b7bd4: 53 push %rbx 0.00 : 5b7bd5: 48 89 fb mov %rdi,%rbx 0.00 : 5b7bd8: 48 83 ec 18 sub $0x18,%rsp : : /* count the returned tuples */ : instr->tuplecount += nTuples; : : /* let's update the time only if the timer was requested */ : if (instr->need_timer) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:77 3.45 : 5b7bdc: 80 3f 00 cmpb $0x0,(%rdi) : InstrStopNode(Instrumentation *instr, double nTuples) : { : instr_time endtime; : : /* count the returned tuples */ : instr->tuplecount += nTuples; /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:74 1.15 : 5b7bdf: f2 0f 58 47 30 addsd 0x30(%rdi),%xmm0 3.45 : 5b7be4: f2 0f 11 47 30 movsd %xmm0,0x30(%rdi) : : /* let's update the time only if the timer was requested */ : if (instr->need_timer) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:77 5.75 : 5b7be9: 0f 84 90 00 00 00 je 5b7c7f : { : if (INSTR_TIME_IS_ZERO(instr->starttime)) 0.00 : 5b7bef: 48 83 7f 10 00 cmpq $0x0,0x10(%rdi) 0.00 : 5b7bf4: 75 0b jne 5b7c01 0.00 : 5b7bf6: 48 83 7f 08 00 cmpq $0x0,0x8(%rdi) 0.00 : 5b7bfb: 0f 84 d1 02 00 00 je 5b7ed2 : elog(ERROR, "InstrStopNode called without start"); : : INSTR_TIME_SET_CURRENT(endtime); 0.00 : 5b7c01: 48 8d 7d e0 lea -0x20(%rbp),%rdi /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:82 1.15 : 5b7c05: 31 f6 xor %esi,%esi 0.00 : 5b7c07: e8 b4 19 eb ff callq 4695c0 : INSTR_TIME_ACCUM_DIFF(instr->counter, endtime, instr->starttime); 0.00 : 5b7c0c: 48 8b 45 e0 mov -0x20(%rbp),%rax 0.00 : 5b7c10: 48 03 43 18 add 0x18(%rbx),%rax 0.00 : 5b7c14: 48 2b 43 08 sub 0x8(%rbx),%rax 0.00 : 5b7c18: 48 89 43 18 mov %rax,0x18(%rbx) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 2.30 : 5b7c1c: 48 8b 45 e8 mov -0x18(%rbp),%rax 2.30 : 5b7c20: 48 03 43 20 add 0x20(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 10.34 : 5b7c24: 48 2b 43 10 sub 0x10(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:83 2.30 : 5b7c28: 48 85 c0 test %rax,%rax 1.15 : 5b7c2b: 48 89 43 20 mov %rax,0x20(%rbx) 0.00 : 5b7c2f: 79 36 jns 5b7c67 0.00 : 5b7c31: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 5b7c38: 48 05 40 42 0f 00 add $0xf4240,%rax 0.00 : 5b7c3e: 48 83 6b 18 01 subq $0x1,0x18(%rbx) 0.00 : 5b7c43: 48 85 c0 test %rax,%rax 0.00 : 5b7c46: 48 89 43 20 mov %rax,0x20(%rbx) 0.00 : 5b7c4a: 78 ec js 5b7c38 0.00 : 5b7c4c: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 5b7c52: 7e 1b jle 5b7c6f 0.00 : 5b7c54: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 5b7c58: 48 83 43 18 01 addq $0x1,0x18(%rbx) 0.00 : 5b7c5d: 48 2d 40 42 0f 00 sub $0xf4240,%rax 0.00 : 5b7c63: 48 89 43 20 mov %rax,0x20(%rbx) 3.45 : 5b7c67: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 5b7c6d: 7f e9 jg 5b7c58 : : INSTR_TIME_SET_ZERO(instr->starttime); 0.00 : 5b7c6f: 48 c7 43 08 00 00 00 movq $0x0,0x8(%rbx) 0.00 : 5b7c76: 00 0.00 : 5b7c77: 48 c7 43 10 00 00 00 movq $0x0,0x10(%rbx) 0.00 : 5b7c7e: 00 : } : : /* Add delta of buffer usage since entry to node's totals */ : if (instr->need_bufusage) 0.00 : 5b7c7f: 80 7b 01 00 cmpb $0x0,0x1(%rbx) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:89 2.30 : 5b7c83: 75 33 jne 5b7cb8 : BufferUsageAccumDiff(&instr->bufusage, : &pgBufferUsage, &instr->bufusage_start); : : /* Is this the first tuple of this cycle? */ : if (!instr->running) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:94 2.30 : 5b7c85: 80 7b 02 00 cmpb $0x0,0x2(%rbx) 0.00 : 5b7c89: 75 21 jne 5b7cac : { : instr->running = true; : instr->firsttuple = INSTR_TIME_GET_DOUBLE(instr->counter); 0.00 : 5b7c8b: f2 48 0f 2a 43 20 cvtsi2sdq 0x20(%rbx),%xmm0 0.00 : 5b7c91: f2 0f 5e 05 47 49 2c divsd 0x2c4947(%rip),%xmm0 # 87c5e0 <__func__.18742+0x1b> 0.00 : 5b7c98: 00 0.00 : 5b7c99: f2 48 0f 2a 4b 18 cvtsi2sdq 0x18(%rbx),%xmm1 : &pgBufferUsage, &instr->bufusage_start); : : /* Is this the first tuple of this cycle? */ : if (!instr->running) : { : instr->running = true; 0.00 : 5b7c9f: c6 43 02 01 movb $0x1,0x2(%rbx) : instr->firsttuple = INSTR_TIME_GET_DOUBLE(instr->counter); 0.00 : 5b7ca3: f2 0f 58 c8 addsd %xmm0,%xmm1 0.00 : 5b7ca7: f2 0f 11 4b 28 movsd %xmm1,0x28(%rbx) : } : } /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:99 4.60 : 5b7cac: 48 83 c4 18 add $0x18,%rsp 0.00 : 5b7cb0: 5b pop %rbx 1.15 : 5b7cb1: c9 leaveq 0.00 : 5b7cb2: c3 retq 0.00 : 5b7cb3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : static void : BufferUsageAccumDiff(BufferUsage *dst, : const BufferUsage *add, : const BufferUsage *sub) : { : dst->shared_blks_hit += add->shared_blks_hit - sub->shared_blks_hit; 0.00 : 5b7cb8: 48 8b 05 a1 7a 60 00 mov 0x607aa1(%rip),%rax # bbf760 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:136 1.15 : 5b7cbf: 48 03 83 d8 00 00 00 add 0xd8(%rbx),%rax 0.00 : 5b7cc6: 48 2b 43 38 sub 0x38(%rbx),%rax 2.30 : 5b7cca: 48 89 83 d8 00 00 00 mov %rax,0xd8(%rbx) : dst->shared_blks_read += add->shared_blks_read - sub->shared_blks_read; 0.00 : 5b7cd1: 48 8b 05 90 7a 60 00 mov 0x607a90(%rip),%rax # bbf768 0.00 : 5b7cd8: 48 03 83 e0 00 00 00 add 0xe0(%rbx),%rax 0.00 : 5b7cdf: 48 2b 43 40 sub 0x40(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:137 3.45 : 5b7ce3: 48 89 83 e0 00 00 00 mov %rax,0xe0(%rbx) : dst->shared_blks_dirtied += add->shared_blks_dirtied - sub->shared_blks_dirtied; 0.00 : 5b7cea: 48 8b 05 7f 7a 60 00 mov 0x607a7f(%rip),%rax # bbf770 0.00 : 5b7cf1: 48 03 83 e8 00 00 00 add 0xe8(%rbx),%rax 0.00 : 5b7cf8: 48 2b 43 48 sub 0x48(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:138 1.15 : 5b7cfc: 48 89 83 e8 00 00 00 mov %rax,0xe8(%rbx) : dst->shared_blks_written += add->shared_blks_written - sub->shared_blks_written; 0.00 : 5b7d03: 48 8b 05 6e 7a 60 00 mov 0x607a6e(%rip),%rax # bbf778 0.00 : 5b7d0a: 48 03 83 f0 00 00 00 add 0xf0(%rbx),%rax 0.00 : 5b7d11: 48 2b 43 50 sub 0x50(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:139 1.15 : 5b7d15: 48 89 83 f0 00 00 00 mov %rax,0xf0(%rbx) : dst->local_blks_hit += add->local_blks_hit - sub->local_blks_hit; 0.00 : 5b7d1c: 48 8b 05 5d 7a 60 00 mov 0x607a5d(%rip),%rax # bbf780 0.00 : 5b7d23: 48 03 83 f8 00 00 00 add 0xf8(%rbx),%rax 0.00 : 5b7d2a: 48 2b 43 58 sub 0x58(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:140 1.15 : 5b7d2e: 48 89 83 f8 00 00 00 mov %rax,0xf8(%rbx) : dst->local_blks_read += add->local_blks_read - sub->local_blks_read; 0.00 : 5b7d35: 48 8b 05 4c 7a 60 00 mov 0x607a4c(%rip),%rax # bbf788 0.00 : 5b7d3c: 48 03 83 00 01 00 00 add 0x100(%rbx),%rax 0.00 : 5b7d43: 48 2b 43 60 sub 0x60(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:141 3.45 : 5b7d47: 48 89 83 00 01 00 00 mov %rax,0x100(%rbx) : dst->local_blks_dirtied += add->local_blks_dirtied - sub->local_blks_dirtied; 0.00 : 5b7d4e: 48 8b 05 3b 7a 60 00 mov 0x607a3b(%rip),%rax # bbf790 0.00 : 5b7d55: 48 03 83 08 01 00 00 add 0x108(%rbx),%rax 0.00 : 5b7d5c: 48 2b 43 68 sub 0x68(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:142 2.30 : 5b7d60: 48 89 83 08 01 00 00 mov %rax,0x108(%rbx) : dst->local_blks_written += add->local_blks_written - sub->local_blks_written; /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:143 1.15 : 5b7d67: 48 8b 05 2a 7a 60 00 mov 0x607a2a(%rip),%rax # bbf798 0.00 : 5b7d6e: 48 03 83 10 01 00 00 add 0x110(%rbx),%rax 0.00 : 5b7d75: 48 2b 43 70 sub 0x70(%rbx),%rax 1.15 : 5b7d79: 48 89 83 10 01 00 00 mov %rax,0x110(%rbx) : dst->temp_blks_read += add->temp_blks_read - sub->temp_blks_read; 0.00 : 5b7d80: 48 8b 05 19 7a 60 00 mov 0x607a19(%rip),%rax # bbf7a0 0.00 : 5b7d87: 48 03 83 18 01 00 00 add 0x118(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:144 1.15 : 5b7d8e: 48 2b 43 78 sub 0x78(%rbx),%rax 4.60 : 5b7d92: 48 89 83 18 01 00 00 mov %rax,0x118(%rbx) : dst->temp_blks_written += add->temp_blks_written - sub->temp_blks_written; 0.00 : 5b7d99: 48 8b 05 08 7a 60 00 mov 0x607a08(%rip),%rax # bbf7a8 0.00 : 5b7da0: 48 03 83 20 01 00 00 add 0x120(%rbx),%rax 0.00 : 5b7da7: 48 2b 83 80 00 00 00 sub 0x80(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:145 1.15 : 5b7dae: 48 89 83 20 01 00 00 mov %rax,0x120(%rbx) : INSTR_TIME_ACCUM_DIFF(dst->blk_read_time, /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:146 1.15 : 5b7db5: 48 8b 05 f4 79 60 00 mov 0x6079f4(%rip),%rax # bbf7b0 0.00 : 5b7dbc: 48 03 83 28 01 00 00 add 0x128(%rbx),%rax 0.00 : 5b7dc3: 48 2b 83 88 00 00 00 sub 0x88(%rbx),%rax 3.45 : 5b7dca: 48 89 83 28 01 00 00 mov %rax,0x128(%rbx) 1.15 : 5b7dd1: 48 8b 05 e0 79 60 00 mov 0x6079e0(%rip),%rax # bbf7b8 0.00 : 5b7dd8: 48 03 83 30 01 00 00 add 0x130(%rbx),%rax 0.00 : 5b7ddf: 48 2b 83 90 00 00 00 sub 0x90(%rbx),%rax 1.15 : 5b7de6: 48 85 c0 test %rax,%rax 2.30 : 5b7de9: 48 89 83 30 01 00 00 mov %rax,0x130(%rbx) 0.00 : 5b7df0: 79 43 jns 5b7e35 0.00 : 5b7df2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5b7df8: 48 05 40 42 0f 00 add $0xf4240,%rax 0.00 : 5b7dfe: 48 83 ab 28 01 00 00 subq $0x1,0x128(%rbx) 0.00 : 5b7e05: 01 0.00 : 5b7e06: 48 85 c0 test %rax,%rax 0.00 : 5b7e09: 48 89 83 30 01 00 00 mov %rax,0x130(%rbx) 0.00 : 5b7e10: 78 e6 js 5b7df8 0.00 : 5b7e12: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 5b7e18: 7e 23 jle 5b7e3d 0.00 : 5b7e1a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5b7e20: 48 83 83 28 01 00 00 addq $0x1,0x128(%rbx) 0.00 : 5b7e27: 01 0.00 : 5b7e28: 48 2d 40 42 0f 00 sub $0xf4240,%rax 0.00 : 5b7e2e: 48 89 83 30 01 00 00 mov %rax,0x130(%rbx) 1.15 : 5b7e35: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 5b7e3b: 7f e3 jg 5b7e20 : add->blk_read_time, sub->blk_read_time); : INSTR_TIME_ACCUM_DIFF(dst->blk_write_time, 0.00 : 5b7e3d: 48 8b 05 7c 79 60 00 mov 0x60797c(%rip),%rax # bbf7c0 0.00 : 5b7e44: 48 03 83 38 01 00 00 add 0x138(%rbx),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:148 2.30 : 5b7e4b: 48 2b 83 98 00 00 00 sub 0x98(%rbx),%rax 1.15 : 5b7e52: 48 89 83 38 01 00 00 mov %rax,0x138(%rbx) 2.30 : 5b7e59: 48 8b 05 68 79 60 00 mov 0x607968(%rip),%rax # bbf7c8 1.15 : 5b7e60: 48 03 83 40 01 00 00 add 0x140(%rbx),%rax 0.00 : 5b7e67: 48 2b 83 a0 00 00 00 sub 0xa0(%rbx),%rax 0.00 : 5b7e6e: 48 85 c0 test %rax,%rax 2.30 : 5b7e71: 48 89 83 40 01 00 00 mov %rax,0x140(%rbx) 0.00 : 5b7e78: 79 4b jns 5b7ec5 0.00 : 5b7e7a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5b7e80: 48 05 40 42 0f 00 add $0xf4240,%rax 0.00 : 5b7e86: 48 83 ab 38 01 00 00 subq $0x1,0x138(%rbx) 0.00 : 5b7e8d: 01 0.00 : 5b7e8e: 48 85 c0 test %rax,%rax 0.00 : 5b7e91: 48 89 83 40 01 00 00 mov %rax,0x140(%rbx) 0.00 : 5b7e98: 78 e6 js 5b7e80 0.00 : 5b7e9a: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 5b7ea0: 0f 8e df fd ff ff jle 5b7c85 0.00 : 5b7ea6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 5b7ead: 00 00 00 0.00 : 5b7eb0: 48 83 83 38 01 00 00 addq $0x1,0x138(%rbx) 0.00 : 5b7eb7: 01 0.00 : 5b7eb8: 48 2d 40 42 0f 00 sub $0xf4240,%rax 0.00 : 5b7ebe: 48 89 83 40 01 00 00 mov %rax,0x140(%rbx) 2.30 : 5b7ec5: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 5b7ecb: 7f e3 jg 5b7eb0 0.00 : 5b7ecd: e9 b3 fd ff ff jmpq 5b7c85 : : /* let's update the time only if the timer was requested */ : if (instr->need_timer) : { : if (INSTR_TIME_IS_ZERO(instr->starttime)) : elog(ERROR, "InstrStopNode called without start"); 0.00 : 5b7ed2: ba 8a b6 88 00 mov $0x88b68a,%edx 0.00 : 5b7ed7: be 50 00 00 00 mov $0x50,%esi 0.00 : 5b7edc: bf fa b5 88 00 mov $0x88b5fa,%edi 0.00 : 5b7ee1: e8 3a 35 1c 00 callq 77b420 0.00 : 5b7ee6: be 30 b6 88 00 mov $0x88b630,%esi 0.00 : 5b7eeb: bf 14 00 00 00 mov $0x14,%edi 0.00 : 5b7ef0: 31 c0 xor %eax,%eax 0.00 : 5b7ef2: e8 39 33 1c 00 callq 77b230 0.00 : 5b7ef7: e8 d4 15 eb ff callq 4694d0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 20.93 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 12.79 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1508 9.30 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1546 9.30 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1546 8.14 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 8.14 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1546 6.98 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1508 5.81 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1508 4.65 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 4.65 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1511 3.49 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 2.33 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 2.33 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1508 1.16 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1546 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000642780 : : * Called by the executor before invoking a function. : */ : void : pgstat_init_function_usage(FunctionCallInfoData *fcinfo, : PgStat_FunctionCallUsage *fcu) : { 0.00 : 642780: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 2.33 : 642781: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 8.14 : 642784: 41 54 push %r12 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 4.65 : 642786: 49 89 fc mov %rdi,%r12 3.49 : 642789: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1504 20.93 : 64278a: 48 89 f3 mov %rsi,%rbx 0.00 : 64278d: 48 83 ec 70 sub $0x70,%rsp : PgStat_BackendFunctionEntry *htabent; : bool found; : : if (pgstat_track_functions <= fcinfo->flinfo->fn_stats) /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1508 2.33 : 642791: 48 8b 17 mov (%rdi),%rdx /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1508 12.79 : 642794: 0f b6 42 10 movzbl 0x10(%rdx),%eax 5.81 : 642798: 3b 05 06 94 53 00 cmp 0x539406(%rip),%eax # b7bba4 6.98 : 64279e: 0f 8d ac 00 00 00 jge 642850 : /* stats not wanted */ : fcu->fs = NULL; : return; : } : : if (!pgStatFunctions) 0.00 : 6427a4: 48 83 3d 04 95 53 00 cmpq $0x0,0x539504(%rip) # b7bcb0 0.00 : 6427ab: 00 0.00 : 6427ac: 0f 84 de 00 00 00 je 642890 : &hash_ctl, : HASH_ELEM | HASH_FUNCTION); : } : : /* Get the stats entry for this function, create if necessary */ : htabent = hash_search(pgStatFunctions, &fcinfo->flinfo->fn_oid, 0.00 : 6427b2: 48 8b 3d f7 94 53 00 mov 0x5394f7(%rip),%rdi # b7bcb0 0.00 : 6427b9: 48 8d 72 08 lea 0x8(%rdx),%rsi 0.00 : 6427bd: 48 8d 4d ef lea -0x11(%rbp),%rcx 0.00 : 6427c1: ba 01 00 00 00 mov $0x1,%edx 0.00 : 6427c6: e8 d5 1e 14 00 callq 7846a0 : HASH_ENTER, &found); : if (!found) 0.00 : 6427cb: 80 7d ef 00 cmpb $0x0,-0x11(%rbp) : &hash_ctl, : HASH_ELEM | HASH_FUNCTION); : } : : /* Get the stats entry for this function, create if necessary */ : htabent = hash_search(pgStatFunctions, &fcinfo->flinfo->fn_oid, 0.00 : 6427cf: 48 89 c2 mov %rax,%rdx 0.00 : 6427d2: 48 8d 40 08 lea 0x8(%rax),%rax : HASH_ENTER, &found); : if (!found) 0.00 : 6427d6: 74 40 je 642818 : MemSet(&htabent->f_counts, 0, sizeof(PgStat_FunctionCounts)); : : fcu->fs = &htabent->f_counts; 0.00 : 6427d8: 48 89 03 mov %rax,(%rbx) : : /* save stats for this function, later used to compensate for recursion */ : fcu->save_f_total_time = htabent->f_counts.f_total_time; 0.00 : 6427db: 48 8b 42 10 mov 0x10(%rdx),%rax : : /* save current backend-wide total time */ : fcu->save_total = total_func_time; : : /* get clock time as of function start */ : INSTR_TIME_SET_CURRENT(fcu->f_start); 0.00 : 6427df: 48 8d 7b 28 lea 0x28(%rbx),%rdi 0.00 : 6427e3: 31 f6 xor %esi,%esi : MemSet(&htabent->f_counts, 0, sizeof(PgStat_FunctionCounts)); : : fcu->fs = &htabent->f_counts; : : /* save stats for this function, later used to compensate for recursion */ : fcu->save_f_total_time = htabent->f_counts.f_total_time; 0.00 : 6427e5: 48 89 43 08 mov %rax,0x8(%rbx) 0.00 : 6427e9: 48 8b 42 18 mov 0x18(%rdx),%rax 0.00 : 6427ed: 48 89 43 10 mov %rax,0x10(%rbx) : : /* save current backend-wide total time */ : fcu->save_total = total_func_time; 0.00 : 6427f1: 48 8b 05 28 97 53 00 mov 0x539728(%rip),%rax # b7bf20 0.00 : 6427f8: 48 89 43 18 mov %rax,0x18(%rbx) 0.00 : 6427fc: 48 8b 05 25 97 53 00 mov 0x539725(%rip),%rax # b7bf28 0.00 : 642803: 48 89 43 20 mov %rax,0x20(%rbx) : : /* get clock time as of function start */ : INSTR_TIME_SET_CURRENT(fcu->f_start); 0.00 : 642807: e8 b4 6d e2 ff callq 4695c0 : } 0.00 : 64280c: 48 83 c4 70 add $0x70,%rsp 0.00 : 642810: 5b pop %rbx 0.00 : 642811: 41 5c pop %r12 0.00 : 642813: c9 leaveq 0.00 : 642814: c3 retq 0.00 : 642815: 0f 1f 00 nopl (%rax) : : /* Get the stats entry for this function, create if necessary */ : htabent = hash_search(pgStatFunctions, &fcinfo->flinfo->fn_oid, : HASH_ENTER, &found); : if (!found) : MemSet(&htabent->f_counts, 0, sizeof(PgStat_FunctionCounts)); 0.00 : 642818: a8 07 test $0x7,%al 0.00 : 64281a: 75 44 jne 642860 0.00 : 64281c: 48 c7 42 08 00 00 00 movq $0x0,0x8(%rdx) 0.00 : 642823: 00 0.00 : 642824: 48 c7 42 10 00 00 00 movq $0x0,0x10(%rdx) 0.00 : 64282b: 00 0.00 : 64282c: 48 c7 42 18 00 00 00 movq $0x0,0x18(%rdx) 0.00 : 642833: 00 0.00 : 642834: 48 c7 42 20 00 00 00 movq $0x0,0x20(%rdx) 0.00 : 64283b: 00 0.00 : 64283c: 48 c7 42 28 00 00 00 movq $0x0,0x28(%rdx) 0.00 : 642843: 00 0.00 : 642844: eb 92 jmp 6427d8 0.00 : 642846: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 64284d: 00 00 00 : bool found; : : if (pgstat_track_functions <= fcinfo->flinfo->fn_stats) : { : /* stats not wanted */ : fcu->fs = NULL; /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1511 4.65 : 642850: 48 c7 06 00 00 00 00 movq $0x0,(%rsi) : /* save current backend-wide total time */ : fcu->save_total = total_func_time; : : /* get clock time as of function start */ : INSTR_TIME_SET_CURRENT(fcu->f_start); : } /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1546 9.30 : 642857: 48 83 c4 70 add $0x70,%rsp 0.00 : 64285b: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1546 1.16 : 64285c: 41 5c pop %r12 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/pgstat.c:1546 8.14 : 64285e: c9 leaveq 9.30 : 64285f: c3 retq : : /* Get the stats entry for this function, create if necessary */ : htabent = hash_search(pgStatFunctions, &fcinfo->flinfo->fn_oid, : HASH_ENTER, &found); : if (!found) : MemSet(&htabent->f_counts, 0, sizeof(PgStat_FunctionCounts)); 0.00 : 642860: 48 c7 42 08 00 00 00 movq $0x0,0x8(%rdx) 0.00 : 642867: 00 0.00 : 642868: 48 c7 40 08 00 00 00 movq $0x0,0x8(%rax) 0.00 : 64286f: 00 0.00 : 642870: 48 c7 40 10 00 00 00 movq $0x0,0x10(%rax) 0.00 : 642877: 00 0.00 : 642878: 48 c7 40 18 00 00 00 movq $0x0,0x18(%rax) 0.00 : 64287f: 00 0.00 : 642880: 48 c7 40 20 00 00 00 movq $0x0,0x20(%rax) 0.00 : 642887: 00 0.00 : 642888: e9 4b ff ff ff jmpq 6427d8 0.00 : 64288d: 0f 1f 00 nopl (%rax) : if (!pgStatFunctions) : { : /* First time through - initialize function stat table */ : HASHCTL hash_ctl; : : memset(&hash_ctl, 0, sizeof(hash_ctl)); 0.00 : 642890: 48 8d 55 80 lea -0x80(%rbp),%rdx 0.00 : 642894: 31 c0 xor %eax,%eax 0.00 : 642896: b9 0d 00 00 00 mov $0xd,%ecx : hash_ctl.keysize = sizeof(Oid); : hash_ctl.entrysize = sizeof(PgStat_BackendFunctionEntry); : hash_ctl.hash = oid_hash; : pgStatFunctions = hash_create("Function stat entries", 0.00 : 64289b: be 00 02 00 00 mov $0x200,%esi : if (!pgStatFunctions) : { : /* First time through - initialize function stat table */ : HASHCTL hash_ctl; : : memset(&hash_ctl, 0, sizeof(hash_ctl)); 0.00 : 6428a0: 48 89 d7 mov %rdx,%rdi 0.00 : 6428a3: f3 48 ab rep stos %rax,%es:(%rdi) : hash_ctl.keysize = sizeof(Oid); 0.00 : 6428a6: 48 c7 45 a8 04 00 00 movq $0x4,-0x58(%rbp) 0.00 : 6428ad: 00 : hash_ctl.entrysize = sizeof(PgStat_BackendFunctionEntry); 0.00 : 6428ae: 48 c7 45 b0 30 00 00 movq $0x30,-0x50(%rbp) 0.00 : 6428b5: 00 : hash_ctl.hash = oid_hash; : pgStatFunctions = hash_create("Function stat entries", 0.00 : 6428b6: bf 1c f0 89 00 mov $0x89f01c,%edi : HASHCTL hash_ctl; : : memset(&hash_ctl, 0, sizeof(hash_ctl)); : hash_ctl.keysize = sizeof(Oid); : hash_ctl.entrysize = sizeof(PgStat_BackendFunctionEntry); : hash_ctl.hash = oid_hash; 0.00 : 6428bb: 48 c7 45 b8 50 4f 78 movq $0x784f50,-0x48(%rbp) 0.00 : 6428c2: 00 : pgStatFunctions = hash_create("Function stat entries", 0.00 : 6428c3: b1 30 mov $0x30,%cl 0.00 : 6428c5: e8 e6 1f 14 00 callq 7848b0 0.00 : 6428ca: 48 89 05 df 93 53 00 mov %rax,0x5393df(%rip) # b7bcb0 0.00 : 6428d1: 49 8b 14 24 mov (%r12),%rdx 0.00 : 6428d5: e9 d8 fe ff ff jmpq 6427b2 Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 35.44 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:809 18.99 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:809 8.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:806 7.59 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:813 6.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:804 5.06 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:806 5.06 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:811 3.80 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:809 2.53 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:804 2.53 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:804 2.53 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:805 1.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:812 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d4780 : : * float8mul - returns arg1 * arg2 : * float8div - returns arg1 / arg2 : */ : Datum : float8pl(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:804 2.53 : 6d4780: 55 push %rbp 0.00 : 6d4781: 48 89 e5 mov %rsp,%rbp 0.00 : 6d4784: 53 push %rbx 2.53 : 6d4785: 48 89 fb mov %rdi,%rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:804 6.33 : 6d4788: 48 83 ec 18 sub $0x18,%rsp : float8 arg1 = PG_GETARG_FLOAT8(0); 0.00 : 6d478c: 48 8b 7f 20 mov 0x20(%rdi),%rdi /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:805 2.53 : 6d4790: e8 3b 92 0a 00 callq 77d9d0 0.00 : 6d4795: f2 0f 11 45 e0 movsd %xmm0,-0x20(%rbp) : float8 arg2 = PG_GETARG_FLOAT8(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:806 8.86 : 6d479a: 48 8b 7b 28 mov 0x28(%rbx),%rdi 0.00 : 6d479e: e8 2d 92 0a 00 callq 77d9d0 5.06 : 6d47a3: f2 0f 11 45 e8 movsd %xmm0,-0x18(%rbp) : float8 result; : : result = arg1 + arg2; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:809 18.99 : 6d47a8: f2 0f 10 45 e0 movsd -0x20(%rbp),%xmm0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:809 3.80 : 6d47ad: f2 0f 58 45 e8 addsd -0x18(%rbp),%xmm0 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:809 35.44 : 6d47b2: f2 0f 11 45 f0 movsd %xmm0,-0x10(%rbp) : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:811 5.06 : 6d47b7: e8 34 53 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d47bc: 85 c0 test %eax,%eax 0.00 : 6d47be: 74 0e je 6d47ce 0.00 : 6d47c0: f2 0f 10 45 e0 movsd -0x20(%rbp),%xmm0 0.00 : 6d47c5: e8 26 53 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d47ca: 85 c0 test %eax,%eax 0.00 : 6d47cc: 74 12 je 6d47e0 : PG_RETURN_FLOAT8(result); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:812 1.27 : 6d47ce: f2 0f 10 45 f0 movsd -0x10(%rbp),%xmm0 : } 0.00 : 6d47d3: 48 83 c4 18 add $0x18,%rsp 0.00 : 6d47d7: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:813 7.59 : 6d47d8: c9 leaveq : float8 result; : : result = arg1 + arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); : PG_RETURN_FLOAT8(result); 0.00 : 6d47d9: e9 e2 91 0a 00 jmpq 77d9c0 0.00 : 6d47de: 66 90 xchg %ax,%ax : float8 arg2 = PG_GETARG_FLOAT8(1); : float8 result; : : result = arg1 + arg2; : : CHECKFLOATVAL(result, isinf(arg1) || isinf(arg2), true); 0.00 : 6d47e0: f2 0f 10 45 e8 movsd -0x18(%rbp),%xmm0 0.00 : 6d47e5: e8 06 53 d9 ff callq 469af0 <__isinf@plt> 0.00 : 6d47ea: 85 c0 test %eax,%eax 0.00 : 6d47ec: 75 e0 jne 6d47ce 0.00 : 6d47ee: 45 31 c0 xor %r8d,%r8d 0.00 : 6d47f1: b9 31 bb 8b 00 mov $0x8bbb31,%ecx 0.00 : 6d47f6: ba 2b 03 00 00 mov $0x32b,%edx 0.00 : 6d47fb: be 27 b4 8b 00 mov $0x8bb427,%esi 0.00 : 6d4800: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d4805: e8 b6 62 0a 00 callq 77aac0 0.00 : 6d480a: 84 c0 test %al,%al 0.00 : 6d480c: 75 05 jne 6d4813 0.00 : 6d480e: e8 bd 4c d9 ff callq 4694d0 0.00 : 6d4813: bf 2f b4 8b 00 mov $0x8bb42f,%edi 0.00 : 6d4818: 31 c0 xor %eax,%eax 0.00 : 6d481a: e8 81 80 0a 00 callq 77c8a0 0.00 : 6d481f: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6d4824: 89 c3 mov %eax,%ebx 0.00 : 6d4826: e8 25 85 0a 00 callq 77cd50 0.00 : 6d482b: 89 de mov %ebx,%esi 0.00 : 6d482d: 89 c7 mov %eax,%edi 0.00 : 6d482f: 31 c0 xor %eax,%eax 0.00 : 6d4831: e8 aa 5d 0a 00 callq 77a5e0 0.00 : 6d4836: eb d6 jmp 6d480e Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 14.29 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:870 11.69 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 5.19 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:732 3.90 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 3.90 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:881 3.90 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:870 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:731 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:745 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:866 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:870 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:870 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:872 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:871 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:872 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:774 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:885 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:965 2.60 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:938 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:745 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:864 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:871 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:871 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:877 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:909 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:767 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:766 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:770 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:770 1.30 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:965 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000004960f0 : : static void : heapgettup_pagemode(HeapScanDesc scan, : ScanDirection dir, : int nkeys, : ScanKey key) : { /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 2.60 : 4960f0: 55 push %rbp : HeapTuple tuple = &(scan->rs_ctup); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:731 2.60 : 4960f1: 48 8d 47 48 lea 0x48(%rdi),%rax : static void : heapgettup_pagemode(HeapScanDesc scan, : ScanDirection dir, : int nkeys, : ScanKey key) : { 0.00 : 4960f5: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 3.90 : 4960f8: 41 57 push %r15 1.30 : 4960fa: 41 56 push %r14 1.30 : 4960fc: 41 55 push %r13 1.30 : 4960fe: 49 89 fd mov %rdi,%r13 0.00 : 496101: 41 54 push %r12 2.60 : 496103: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 11.69 : 496104: 48 83 ec 48 sub $0x48,%rsp : HeapTuple tuple = &(scan->rs_ctup); : bool backward = ScanDirectionIsBackward(dir); 0.00 : 496108: 83 fe ff cmp $0xffffffff,%esi : static void : heapgettup_pagemode(HeapScanDesc scan, : ScanDirection dir, : int nkeys, : ScanKey key) : { /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:730 2.60 : 49610b: 89 55 ac mov %edx,-0x54(%rbp) : HeapTuple tuple = &(scan->rs_ctup); : bool backward = ScanDirectionIsBackward(dir); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:732 5.19 : 49610e: 0f 94 45 bf sete -0x41(%rbp) : ItemId lpp; : : /* : * calculate next starting lineindex, given scan direction : */ : if (ScanDirectionIsForward(dir)) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:745 2.60 : 496112: 83 ee 01 sub $0x1,%esi : static void : heapgettup_pagemode(HeapScanDesc scan, : ScanDirection dir, : int nkeys, : ScanKey key) : { 0.00 : 496115: 48 89 4d a0 mov %rcx,-0x60(%rbp) : HeapTuple tuple = &(scan->rs_ctup); 0.00 : 496119: 48 89 45 b0 mov %rax,-0x50(%rbp) : ItemId lpp; : : /* : * calculate next starting lineindex, given scan direction : */ : if (ScanDirectionIsForward(dir)) 1.30 : 49611d: 0f 84 fd 02 00 00 je 496420 : lines = scan->rs_ntuples; : /* page and lineindex now reference the next visible tid */ : : linesleft = lines - lineindex; : } : else if (backward) 0.00 : 496123: 80 7d bf 00 cmpb $0x0,-0x41(%rbp) 0.00 : 496127: 0f 84 67 02 00 00 je 496394 : { : if (!scan->rs_inited) 0.00 : 49612d: 80 7f 41 00 cmpb $0x0,0x41(%rdi) 0.00 : 496131: 0f 84 2a 03 00 00 je 496461 : heapgetpage(scan, page); : } : else : { : /* continue from previously returned page/tuple */ : page = scan->rs_cblock; /* current page */ 0.00 : 496137: 44 8b 7f 60 mov 0x60(%rdi),%r15d : } : : dp = (Page) BufferGetPage(scan->rs_cbuf); 0.00 : 49613b: 41 8b 45 64 mov 0x64(%r13),%eax 0.00 : 49613f: 85 c0 test %eax,%eax 0.00 : 496141: 0f 88 24 05 00 00 js 49666b 0.00 : 496147: 83 e8 01 sub $0x1,%eax 0.00 : 49614a: 4c 63 f0 movslq %eax,%r14 0.00 : 49614d: 49 c1 e6 0d shl $0xd,%r14 0.00 : 496151: 4c 03 35 a0 99 72 00 add 0x7299a0(%rip),%r14 # bbfaf8 : lines = scan->rs_ntuples; : : if (!scan->rs_inited) 0.00 : 496158: 41 80 7d 41 00 cmpb $0x0,0x41(%r13) : /* continue from previously returned page/tuple */ : page = scan->rs_cblock; /* current page */ : } : : dp = (Page) BufferGetPage(scan->rs_cbuf); : lines = scan->rs_ntuples; 0.00 : 49615d: 41 8b 45 78 mov 0x78(%r13),%eax : : if (!scan->rs_inited) 0.00 : 496161: 0f 85 c6 04 00 00 jne 49662d : { : lineindex = lines - 1; 0.00 : 496167: 83 e8 01 sub $0x1,%eax 0.00 : 49616a: 89 45 c0 mov %eax,-0x40(%rbp) : scan->rs_inited = true; 0.00 : 49616d: 41 c6 45 41 01 movb $0x1,0x41(%r13) : { : lineindex = scan->rs_cindex - 1; : } : /* page and lineindex now reference the previous visible tid */ : : linesleft = lineindex + 1; 0.00 : 496172: 8b 55 c0 mov -0x40(%rbp),%edx 0.00 : 496175: 83 c2 01 add $0x1,%edx 0.00 : 496178: 89 55 c4 mov %edx,-0x3c(%rbp) : */ : if (key != NULL) : { : bool valid; : : HeapKeyTest(tuple, RelationGetDescr(scan->rs_rd), 0.00 : 49617b: 8b 55 ac mov -0x54(%rbp),%edx 0.00 : 49617e: 83 ea 01 sub $0x1,%edx /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:881 3.90 : 496181: 89 55 9c mov %edx,-0x64(%rbp) 0.00 : 496184: 0f 1f 40 00 nopl 0x0(%rax) : * advance the scan until we find a qualifying tuple or run out of stuff : * to scan : */ : for (;;) : { : while (linesleft > 0) 0.00 : 496188: 44 8b 45 c4 mov -0x3c(%rbp),%r8d /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:864 1.30 : 49618c: 45 85 c0 test %r8d,%r8d 0.00 : 49618f: 0f 8e 6b 01 00 00 jle 496300 : { : lineoff = scan->rs_vistuples[lineindex]; /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:866 2.60 : 496195: 48 63 45 c0 movslq -0x40(%rbp),%rax 0.00 : 496199: 41 0f b7 4c 45 7c movzwl 0x7c(%r13,%rax,2),%ecx : lpp = PageGetItemId(dp, lineoff); 0.00 : 49619f: 0f b7 d1 movzwl %cx,%edx : Assert(ItemIdIsNormal(lpp)); : : tuple->t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:870 2.60 : 4961a2: 48 83 c2 03 add $0x3,%rdx 3.90 : 4961a6: 41 0f b7 44 96 08 movzwl 0x8(%r14,%rdx,4),%eax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:870 14.29 : 4961ac: 25 ff 7f 00 00 and $0x7fff,%eax 0.00 : 4961b1: 49 8d 04 06 lea (%r14,%rax,1),%rax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:870 2.60 : 4961b5: 49 89 45 58 mov %rax,0x58(%r13) : tuple->t_len = ItemIdGetLength(lpp); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:871 1.30 : 4961b9: 41 0f b7 44 96 0a movzwl 0xa(%r14,%rdx,4),%eax : ItemPointerSet(&(tuple->t_self), page, lineoff); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:872 2.60 : 4961bf: 66 45 89 7d 4e mov %r15w,0x4e(%r13) 0.00 : 4961c4: 66 41 89 4d 50 mov %cx,0x50(%r13) : lineoff = scan->rs_vistuples[lineindex]; : lpp = PageGetItemId(dp, lineoff); : Assert(ItemIdIsNormal(lpp)); : : tuple->t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); : tuple->t_len = ItemIdGetLength(lpp); 0.00 : 4961c9: 66 d1 e8 shr %ax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:871 2.60 : 4961cc: 0f b7 c0 movzwl %ax,%eax 1.30 : 4961cf: 41 89 45 48 mov %eax,0x48(%r13) : ItemPointerSet(&(tuple->t_self), page, lineoff); 0.00 : 4961d3: 44 89 f8 mov %r15d,%eax 0.00 : 4961d6: c1 e8 10 shr $0x10,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:872 2.60 : 4961d9: 66 41 89 45 4c mov %ax,0x4c(%r13) : : /* : * if current tuple qualifies, return it. : */ : if (key != NULL) 0.00 : 4961de: 48 83 7d a0 00 cmpq $0x0,-0x60(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:877 1.30 : 4961e3: 0f 84 87 03 00 00 je 496570 : { : bool valid; : : HeapKeyTest(tuple, RelationGetDescr(scan->rs_rd), 0.00 : 4961e9: 44 8b 4d ac mov -0x54(%rbp),%r9d 0.00 : 4961ed: 45 85 c9 test %r9d,%r9d 0.00 : 4961f0: 0f 84 7a 03 00 00 je 496570 0.00 : 4961f6: 48 8b 5d a0 mov -0x60(%rbp),%rbx 0.00 : 4961fa: 44 8b 65 9c mov -0x64(%rbp),%r12d 0.00 : 4961fe: f6 03 01 testb $0x1,(%rbx) 0.00 : 496201: 0f 84 a3 00 00 00 je 4962aa 0.00 : 496207: e9 c7 00 00 00 jmpq 4962d3 0.00 : 49620c: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 496210: c6 45 d7 00 movb $0x0,-0x29(%rbp) 0.00 : 496214: f6 47 14 01 testb $0x1,0x14(%rdi) 0.00 : 496218: 0f 85 9a 02 00 00 jne 4964b8 0.00 : 49621e: 49 8b 45 00 mov 0x0(%r13),%rax 0.00 : 496222: 48 0f bf d1 movswq %cx,%rdx 0.00 : 496226: 4c 8b 40 38 mov 0x38(%rax),%r8 0.00 : 49622a: 49 8b 40 08 mov 0x8(%r8),%rax 0.00 : 49622e: 48 8b 54 d0 f8 mov -0x8(%rax,%rdx,8),%rdx 0.00 : 496233: 8b 42 54 mov 0x54(%rdx),%eax 0.00 : 496236: 85 c0 test %eax,%eax 0.00 : 496238: 0f 88 02 03 00 00 js 496540 0.00 : 49623e: 80 7a 5c 00 cmpb $0x0,0x5c(%rdx) 0.00 : 496242: 0f 84 d8 02 00 00 je 496520 0.00 : 496248: 0f b7 52 4c movzwl 0x4c(%rdx),%edx 0.00 : 49624c: 66 83 fa 08 cmp $0x8,%dx 0.00 : 496250: 0f 84 02 03 00 00 je 496558 0.00 : 496256: 66 83 fa 04 cmp $0x4,%dx 0.00 : 49625a: 0f 84 88 03 00 00 je 4965e8 0.00 : 496260: 66 83 fa 02 cmp $0x2,%dx 0.00 : 496264: 0f 84 96 03 00 00 je 496600 0.00 : 49626a: 0f b6 57 16 movzbl 0x16(%rdi),%edx 0.00 : 49626e: 48 98 cltq 0.00 : 496270: 48 8d 04 07 lea (%rdi,%rax,1),%rax 0.00 : 496274: 0f b6 14 10 movzbl (%rax,%rdx,1),%edx 0.00 : 496278: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 49627f: 00 0.00 : 496280: 48 8b 4b 40 mov 0x40(%rbx),%rcx 0.00 : 496284: 8b 73 0c mov 0xc(%rbx),%esi 0.00 : 496287: 48 8d 7b 10 lea 0x10(%rbx),%rdi 0.00 : 49628b: e8 a0 7d 2e 00 callq 77e030 0.00 : 496290: 84 c0 test %al,%al 0.00 : 496292: 74 3f je 4962d3 0.00 : 496294: 45 85 e4 test %r12d,%r12d 0.00 : 496297: 0f 84 d3 02 00 00 je 496570 0.00 : 49629d: 48 83 c3 48 add $0x48,%rbx 0.00 : 4962a1: f6 03 01 testb $0x1,(%rbx) 0.00 : 4962a4: 75 2d jne 4962d3 0.00 : 4962a6: 41 83 ec 01 sub $0x1,%r12d 0.00 : 4962aa: 0f b7 4b 04 movzwl 0x4(%rbx),%ecx 0.00 : 4962ae: 66 85 c9 test %cx,%cx 0.00 : 4962b1: 0f 8e 49 02 00 00 jle 496500 0.00 : 4962b7: 49 8b 7d 58 mov 0x58(%r13),%rdi 0.00 : 4962bb: 0f bf f1 movswl %cx,%esi 0.00 : 4962be: 0f b7 47 12 movzwl 0x12(%rdi),%eax 0.00 : 4962c2: 25 ff 07 00 00 and $0x7ff,%eax 0.00 : 4962c7: 39 c6 cmp %eax,%esi 0.00 : 4962c9: 0f 8e 41 ff ff ff jle 496210 0.00 : 4962cf: c6 45 d7 01 movb $0x1,-0x29(%rbp) : */ : --linesleft; : if (backward) : --lineindex; : else : ++lineindex; 0.00 : 4962d3: 8b 55 c0 mov -0x40(%rbp),%edx 0.00 : 4962d6: 8b 45 c0 mov -0x40(%rbp),%eax : } : : /* : * otherwise move to the next item on the page : */ : --linesleft; 0.00 : 4962d9: 83 6d c4 01 subl $0x1,-0x3c(%rbp) : * advance the scan until we find a qualifying tuple or run out of stuff : * to scan : */ : for (;;) : { : while (linesleft > 0) 0.00 : 4962dd: 44 8b 45 c4 mov -0x3c(%rbp),%r8d : */ : --linesleft; : if (backward) : --lineindex; : else : ++lineindex; 0.00 : 4962e1: 83 c2 01 add $0x1,%edx 0.00 : 4962e4: 83 e8 01 sub $0x1,%eax 0.00 : 4962e7: 80 7d bf 00 cmpb $0x0,-0x41(%rbp) 0.00 : 4962eb: 0f 45 d0 cmovne %eax,%edx : * advance the scan until we find a qualifying tuple or run out of stuff : * to scan : */ : for (;;) : { : while (linesleft > 0) 0.00 : 4962ee: 45 85 c0 test %r8d,%r8d : */ : --linesleft; : if (backward) : --lineindex; : else : ++lineindex; 0.00 : 4962f1: 89 55 c0 mov %edx,-0x40(%rbp) : * advance the scan until we find a qualifying tuple or run out of stuff : * to scan : */ : for (;;) : { : while (linesleft > 0) 0.00 : 4962f4: 0f 8f 9b fe ff ff jg 496195 0.00 : 4962fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : : /* : * if we get here, it means we've exhausted the items on this page and : * it's time to move to the next. : */ : if (backward) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:909 1.30 : 496300: 80 7d bf 00 cmpb $0x0,-0x41(%rbp) 0.00 : 496304: 0f 84 86 02 00 00 je 496590 : { : finished = (page == scan->rs_startblock) || 0.00 : 49630a: 45 39 7d 2c cmp %r15d,0x2c(%r13) 0.00 : 49630e: 74 1c je 49632c 0.00 : 496310: 41 8b 45 34 mov 0x34(%r13),%eax 0.00 : 496314: 83 f8 ff cmp $0xffffffff,%eax 0.00 : 496317: 0f 84 15 02 00 00 je 496532 0.00 : 49631d: 83 e8 01 sub $0x1,%eax 0.00 : 496320: 85 c0 test %eax,%eax 0.00 : 496322: 41 89 45 34 mov %eax,0x34(%r13) 0.00 : 496326: 0f 85 06 02 00 00 jne 496532 0.00 : 49632c: bb 01 00 00 00 mov $0x1,%ebx : (scan->rs_numblocks != InvalidBlockNumber ? --scan->rs_numblocks <= 0 : false); : if (page == 0) 0.00 : 496331: 45 85 ff test %r15d,%r15d 0.00 : 496334: 75 04 jne 49633a : page = scan->rs_nblocks; 0.00 : 496336: 45 8b 7d 28 mov 0x28(%r13),%r15d : page--; 0.00 : 49633a: 41 83 ef 01 sub $0x1,%r15d : } : : /* : * return NULL if we've exhausted all the pages : */ : if (finished) 0.00 : 49633e: 84 db test %bl,%bl 0.00 : 496340: 0f 85 f6 02 00 00 jne 49663c : tuple->t_data = NULL; : scan->rs_inited = false; : return; : } : : heapgetpage(scan, page); 0.00 : 496346: 44 89 fe mov %r15d,%esi 0.00 : 496349: 4c 89 ef mov %r13,%rdi 0.00 : 49634c: e8 0f fb ff ff callq 495e60 : : dp = (Page) BufferGetPage(scan->rs_cbuf); 0.00 : 496351: 41 8b 45 64 mov 0x64(%r13),%eax 0.00 : 496355: 85 c0 test %eax,%eax 0.00 : 496357: 0f 88 bb 02 00 00 js 496618 0.00 : 49635d: 83 e8 01 sub $0x1,%eax 0.00 : 496360: 4c 63 f0 movslq %eax,%r14 0.00 : 496363: 49 c1 e6 0d shl $0xd,%r14 0.00 : 496367: 4c 03 35 8a 97 72 00 add 0x72978a(%rip),%r14 # bbfaf8 : lines = scan->rs_ntuples; : linesleft = lines; : if (backward) 0.00 : 49636e: 80 7d bf 00 cmpb $0x0,-0x41(%rbp) : } : : heapgetpage(scan, page); : : dp = (Page) BufferGetPage(scan->rs_cbuf); : lines = scan->rs_ntuples; 0.00 : 496372: 41 8b 45 78 mov 0x78(%r13),%eax : linesleft = lines; : if (backward) 0.00 : 496376: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%rbp) 0.00 : 49637d: 89 45 c4 mov %eax,-0x3c(%rbp) 0.00 : 496380: 0f 84 02 fe ff ff je 496188 : lineindex = lines - 1; 0.00 : 496386: 8d 50 ff lea -0x1(%rax),%edx 0.00 : 496389: 89 45 c4 mov %eax,-0x3c(%rbp) 0.00 : 49638c: 89 55 c0 mov %edx,-0x40(%rbp) 0.00 : 49638f: e9 f4 fd ff ff jmpq 496188 : else : { : /* : * ``no movement'' scan direction: refetch prior tuple : */ : if (!scan->rs_inited) 0.00 : 496394: 80 7f 41 00 cmpb $0x0,0x41(%rdi) 0.00 : 496398: 74 6e je 496408 : Assert(!BufferIsValid(scan->rs_cbuf)); : tuple->t_data = NULL; : return; : } : : page = ItemPointerGetBlockNumber(&(tuple->t_self)); 0.00 : 49639a: 0f b7 77 4c movzwl 0x4c(%rdi),%esi 0.00 : 49639e: 0f b7 47 4e movzwl 0x4e(%rdi),%eax 0.00 : 4963a2: c1 e6 10 shl $0x10,%esi 0.00 : 4963a5: 09 c6 or %eax,%esi : if (page != scan->rs_cblock) 0.00 : 4963a7: 39 77 60 cmp %esi,0x60(%rdi) 0.00 : 4963aa: 74 05 je 4963b1 : heapgetpage(scan, page); 0.00 : 4963ac: e8 af fa ff ff callq 495e60 : : /* Since the tuple was previously fetched, needn't lock page here */ : dp = (Page) BufferGetPage(scan->rs_cbuf); 0.00 : 4963b1: 41 8b 45 64 mov 0x64(%r13),%eax 0.00 : 4963b5: 85 c0 test %eax,%eax 0.00 : 4963b7: 0f 88 d8 02 00 00 js 496695 0.00 : 4963bd: 83 e8 01 sub $0x1,%eax 0.00 : 4963c0: 48 63 c8 movslq %eax,%rcx 0.00 : 4963c3: 48 c1 e1 0d shl $0xd,%rcx 0.00 : 4963c7: 48 03 0d 2a 97 72 00 add 0x72972a(%rip),%rcx # bbfaf8 : lineoff = ItemPointerGetOffsetNumber(&(tuple->t_self)); : lpp = PageGetItemId(dp, lineoff); 0.00 : 4963ce: 41 0f b7 45 50 movzwl 0x50(%r13),%eax : Assert(ItemIdIsNormal(lpp)); : : tuple->t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); 0.00 : 4963d3: 48 83 c0 03 add $0x3,%rax 0.00 : 4963d7: 0f b7 54 81 08 movzwl 0x8(%rcx,%rax,4),%edx 0.00 : 4963dc: 81 e2 ff 7f 00 00 and $0x7fff,%edx 0.00 : 4963e2: 48 8d 14 11 lea (%rcx,%rdx,1),%rdx 0.00 : 4963e6: 49 89 55 58 mov %rdx,0x58(%r13) : tuple->t_len = ItemIdGetLength(lpp); 0.00 : 4963ea: 0f b7 44 81 0a movzwl 0xa(%rcx,%rax,4),%eax 0.00 : 4963ef: 66 d1 e8 shr %ax 0.00 : 4963f2: 0f b7 c0 movzwl %ax,%eax 0.00 : 4963f5: 41 89 45 48 mov %eax,0x48(%r13) : if (backward) : lineindex = lines - 1; : else : lineindex = 0; : } : } 0.00 : 4963f9: 48 83 c4 48 add $0x48,%rsp 0.00 : 4963fd: 5b pop %rbx 0.00 : 4963fe: 41 5c pop %r12 0.00 : 496400: 41 5d pop %r13 0.00 : 496402: 41 5e pop %r14 0.00 : 496404: 41 5f pop %r15 0.00 : 496406: c9 leaveq 0.00 : 496407: c3 retq : * ``no movement'' scan direction: refetch prior tuple : */ : if (!scan->rs_inited) : { : Assert(!BufferIsValid(scan->rs_cbuf)); : tuple->t_data = NULL; 0.00 : 496408: 49 c7 45 58 00 00 00 movq $0x0,0x58(%r13) 0.00 : 49640f: 00 : if (backward) : lineindex = lines - 1; : else : lineindex = 0; : } : } 0.00 : 496410: 48 83 c4 48 add $0x48,%rsp 0.00 : 496414: 5b pop %rbx 0.00 : 496415: 41 5c pop %r12 0.00 : 496417: 41 5d pop %r13 0.00 : 496419: 41 5e pop %r14 0.00 : 49641b: 41 5f pop %r15 0.00 : 49641d: c9 leaveq 0.00 : 49641e: c3 retq 0.00 : 49641f: 90 nop : /* : * calculate next starting lineindex, given scan direction : */ : if (ScanDirectionIsForward(dir)) : { : if (!scan->rs_inited) 0.00 : 496420: 80 7f 41 00 cmpb $0x0,0x41(%rdi) 0.00 : 496424: 74 66 je 49648c : } : else : { : /* continue from previously returned page/tuple */ : page = scan->rs_cblock; /* current page */ : lineindex = scan->rs_cindex + 1; /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:767 1.30 : 496426: 8b 47 70 mov 0x70(%rdi),%eax : scan->rs_inited = true; : } : else : { : /* continue from previously returned page/tuple */ : page = scan->rs_cblock; /* current page */ /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:766 1.30 : 496429: 44 8b 7f 60 mov 0x60(%rdi),%r15d : lineindex = scan->rs_cindex + 1; 0.00 : 49642d: 83 c0 01 add $0x1,%eax 0.00 : 496430: 89 45 c0 mov %eax,-0x40(%rbp) : } : : dp = (Page) BufferGetPage(scan->rs_cbuf); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:770 1.30 : 496433: 41 8b 45 64 mov 0x64(%r13),%eax 0.00 : 496437: 85 c0 test %eax,%eax 0.00 : 496439: 0f 88 41 02 00 00 js 496680 0.00 : 49643f: 83 e8 01 sub $0x1,%eax 0.00 : 496442: 4c 63 f0 movslq %eax,%r14 0.00 : 496445: 49 c1 e6 0d shl $0xd,%r14 1.30 : 496449: 4c 03 35 a8 96 72 00 add 0x7296a8(%rip),%r14 # bbfaf8 : lines = scan->rs_ntuples; : /* page and lineindex now reference the next visible tid */ : : linesleft = lines - lineindex; 0.00 : 496450: 41 8b 55 78 mov 0x78(%r13),%edx 0.00 : 496454: 8b 45 c0 mov -0x40(%rbp),%eax 0.00 : 496457: 29 c2 sub %eax,%edx /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:774 2.60 : 496459: 89 55 c4 mov %edx,-0x3c(%rbp) 0.00 : 49645c: e9 1a fd ff ff jmpq 49617b : if (!scan->rs_inited) : { : /* : * return null immediately if relation is empty : */ : if (scan->rs_nblocks == 0) 0.00 : 496461: 44 8b 57 28 mov 0x28(%rdi),%r10d 0.00 : 496465: 45 85 d2 test %r10d,%r10d 0.00 : 496468: 74 9e je 496408 : * time, and much more likely that we'll just bollix things for : * forward scanners. : */ : scan->rs_syncscan = false; : /* start from last page of the scan */ : if (scan->rs_startblock > 0) 0.00 : 49646a: 8b 47 2c mov 0x2c(%rdi),%eax : * Disable reporting to syncscan logic in a backwards scan; it's : * not very likely anyone else is doing the same thing at the same : * time, and much more likely that we'll just bollix things for : * forward scanners. : */ : scan->rs_syncscan = false; 0.00 : 49646d: c6 47 40 00 movb $0x0,0x40(%rdi) : /* start from last page of the scan */ : if (scan->rs_startblock > 0) 0.00 : 496471: 85 c0 test %eax,%eax 0.00 : 496473: 75 03 jne 496478 : page = scan->rs_startblock - 1; : else : page = scan->rs_nblocks - 1; 0.00 : 496475: 8b 47 28 mov 0x28(%rdi),%eax 0.00 : 496478: 44 8d 78 ff lea -0x1(%rax),%r15d : heapgetpage(scan, page); 0.00 : 49647c: 4c 89 ef mov %r13,%rdi 0.00 : 49647f: 44 89 fe mov %r15d,%esi 0.00 : 496482: e8 d9 f9 ff ff callq 495e60 0.00 : 496487: e9 af fc ff ff jmpq 49613b : if (!scan->rs_inited) : { : /* : * return null immediately if relation is empty : */ : if (scan->rs_nblocks == 0) 0.00 : 49648c: 44 8b 5f 28 mov 0x28(%rdi),%r11d 0.00 : 496490: 45 85 db test %r11d,%r11d 0.00 : 496493: 0f 84 6f ff ff ff je 496408 : { : Assert(!BufferIsValid(scan->rs_cbuf)); : tuple->t_data = NULL; : return; : } : page = scan->rs_startblock; /* first page */ 0.00 : 496499: 44 8b 7f 2c mov 0x2c(%rdi),%r15d : heapgetpage(scan, page); 0.00 : 49649d: 44 89 fe mov %r15d,%esi 0.00 : 4964a0: e8 bb f9 ff ff callq 495e60 : lineindex = 0; : scan->rs_inited = true; 0.00 : 4964a5: 41 c6 45 41 01 movb $0x1,0x41(%r13) 0.00 : 4964aa: c7 45 c0 00 00 00 00 movl $0x0,-0x40(%rbp) 0.00 : 4964b1: eb 80 jmp 496433 0.00 : 4964b3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : */ : if (key != NULL) : { : bool valid; : : HeapKeyTest(tuple, RelationGetDescr(scan->rs_rd), 0.00 : 4964b8: 0f bf 73 04 movswl 0x4(%rbx),%esi 0.00 : 4964bc: 8d 4e ff lea -0x1(%rsi),%ecx 0.00 : 4964bf: 89 c8 mov %ecx,%eax 0.00 : 4964c1: 83 e1 07 and $0x7,%ecx 0.00 : 4964c4: c1 f8 03 sar $0x3,%eax 0.00 : 4964c7: 48 98 cltq 0.00 : 4964c9: 0f b6 44 07 17 movzbl 0x17(%rdi,%rax,1),%eax 0.00 : 4964ce: d3 f8 sar %cl,%eax 0.00 : 4964d0: a8 01 test $0x1,%al 0.00 : 4964d2: 0f 84 f7 fd ff ff je 4962cf 0.00 : 4964d8: 49 8b 45 00 mov 0x0(%r13),%rax 0.00 : 4964dc: 48 8b 7d b0 mov -0x50(%rbp),%rdi 0.00 : 4964e0: 48 8b 50 38 mov 0x38(%rax),%rdx 0.00 : 4964e4: e8 a7 94 fd ff callq 46f990 0.00 : 4964e9: 48 89 c2 mov %rax,%rdx 0.00 : 4964ec: 80 7d d7 00 cmpb $0x0,-0x29(%rbp) 0.00 : 4964f0: 0f 84 8a fd ff ff je 496280 0.00 : 4964f6: e9 d8 fd ff ff jmpq 4962d3 0.00 : 4964fb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 496500: 49 8b 45 00 mov 0x0(%r13),%rax 0.00 : 496504: 48 8b 7d b0 mov -0x50(%rbp),%rdi 0.00 : 496508: 0f bf f1 movswl %cx,%esi 0.00 : 49650b: 48 8d 4d d7 lea -0x29(%rbp),%rcx 0.00 : 49650f: 48 8b 50 38 mov 0x38(%rax),%rdx 0.00 : 496513: e8 b8 87 fd ff callq 46ecd0 0.00 : 496518: 48 89 c2 mov %rax,%rdx 0.00 : 49651b: eb cf jmp 4964ec 0.00 : 49651d: 0f 1f 00 nopl (%rax) 0.00 : 496520: 0f b6 57 16 movzbl 0x16(%rdi),%edx 0.00 : 496524: 48 98 cltq 0.00 : 496526: 48 01 d0 add %rdx,%rax 0.00 : 496529: 48 8d 14 07 lea (%rdi,%rax,1),%rdx 0.00 : 49652d: e9 4e fd ff ff jmpq 496280 : * if we get here, it means we've exhausted the items on this page and : * it's time to move to the next. : */ : if (backward) : { : finished = (page == scan->rs_startblock) || 0.00 : 496532: 31 db xor %ebx,%ebx 0.00 : 496534: e9 f8 fd ff ff jmpq 496331 0.00 : 496539: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : */ : if (key != NULL) : { : bool valid; : : HeapKeyTest(tuple, RelationGetDescr(scan->rs_rd), 0.00 : 496540: 48 8b 7d b0 mov -0x50(%rbp),%rdi 0.00 : 496544: 4c 89 c2 mov %r8,%rdx 0.00 : 496547: e8 44 94 fd ff callq 46f990 0.00 : 49654c: 48 89 c2 mov %rax,%rdx 0.00 : 49654f: eb 9b jmp 4964ec 0.00 : 496551: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 496558: 0f b6 57 16 movzbl 0x16(%rdi),%edx 0.00 : 49655c: 48 98 cltq 0.00 : 49655e: 48 8d 04 07 lea (%rdi,%rax,1),%rax 0.00 : 496562: 48 8b 14 10 mov (%rax,%rdx,1),%rdx 0.00 : 496566: e9 15 fd ff ff jmpq 496280 0.00 : 49656b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : nkeys, key, valid); : if (valid) : { : scan->rs_cindex = lineindex; 0.00 : 496570: 8b 45 c0 mov -0x40(%rbp),%eax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:885 2.60 : 496573: 41 89 45 70 mov %eax,0x70(%r13) : if (backward) : lineindex = lines - 1; : else : lineindex = 0; : } : } 0.00 : 496577: 48 83 c4 48 add $0x48,%rsp /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:965 1.30 : 49657b: 5b pop %rbx 0.00 : 49657c: 41 5c pop %r12 0.00 : 49657e: 41 5d pop %r13 0.00 : 496580: 41 5e pop %r14 0.00 : 496582: 41 5f pop %r15 0.00 : 496584: c9 leaveq 2.60 : 496585: c3 retq 0.00 : 496586: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 49658d: 00 00 00 : page = scan->rs_nblocks; : page--; : } : else : { : page++; 0.00 : 496590: 41 83 c7 01 add $0x1,%r15d : if (page >= scan->rs_nblocks) 0.00 : 496594: 45 3b 7d 28 cmp 0x28(%r13),%r15d 0.00 : 496598: b8 00 00 00 00 mov $0x0,%eax 0.00 : 49659d: 44 0f 43 f8 cmovae %eax,%r15d : page = 0; : finished = (page == scan->rs_startblock) || 0.00 : 4965a1: 45 39 7d 2c cmp %r15d,0x2c(%r13) 0.00 : 4965a5: 74 14 je 4965bb 0.00 : 4965a7: 41 8b 45 34 mov 0x34(%r13),%eax 0.00 : 4965ab: 83 f8 ff cmp $0xffffffff,%eax 0.00 : 4965ae: 74 2c je 4965dc 0.00 : 4965b0: 83 e8 01 sub $0x1,%eax 0.00 : 4965b3: 85 c0 test %eax,%eax 0.00 : 4965b5: 41 89 45 34 mov %eax,0x34(%r13) 0.00 : 4965b9: 75 21 jne 4965dc 0.00 : 4965bb: bb 01 00 00 00 mov $0x1,%ebx : * rel. That's not strictly necessary, but otherwise when you run : * the same query multiple times the starting position would shift : * a little bit backwards on every invocation, which is confusing. : * We don't guarantee any specific ordering in general, though. : */ : if (scan->rs_syncscan) 0.00 : 4965c0: 41 80 7d 40 00 cmpb $0x0,0x40(%r13) 0.00 : 4965c5: 0f 84 73 fd ff ff je 49633e : ss_report_location(scan->rs_rd, page); 0.00 : 4965cb: 49 8b 7d 00 mov 0x0(%r13),%rdi /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:938 2.60 : 4965cf: 44 89 fe mov %r15d,%esi 0.00 : 4965d2: e8 49 a8 00 00 callq 4a0e20 0.00 : 4965d7: e9 62 fd ff ff jmpq 49633e : else : { : page++; : if (page >= scan->rs_nblocks) : page = 0; : finished = (page == scan->rs_startblock) || 0.00 : 4965dc: 31 db xor %ebx,%ebx 0.00 : 4965de: 66 90 xchg %ax,%ax 0.00 : 4965e0: eb de jmp 4965c0 0.00 : 4965e2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : */ : if (key != NULL) : { : bool valid; : : HeapKeyTest(tuple, RelationGetDescr(scan->rs_rd), 0.00 : 4965e8: 0f b6 57 16 movzbl 0x16(%rdi),%edx 0.00 : 4965ec: 48 98 cltq 0.00 : 4965ee: 48 8d 04 07 lea (%rdi,%rax,1),%rax 0.00 : 4965f2: 8b 14 10 mov (%rax,%rdx,1),%edx 0.00 : 4965f5: e9 86 fc ff ff jmpq 496280 0.00 : 4965fa: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 496600: 0f b6 57 16 movzbl 0x16(%rdi),%edx 0.00 : 496604: 48 98 cltq 0.00 : 496606: 48 8d 04 07 lea (%rdi,%rax,1),%rax 0.00 : 49660a: 0f b7 14 10 movzwl (%rax,%rdx,1),%edx 0.00 : 49660e: e9 6d fc ff ff jmpq 496280 0.00 : 496613: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : return; : } : : heapgetpage(scan, page); : : dp = (Page) BufferGetPage(scan->rs_cbuf); 0.00 : 496618: f7 d0 not %eax 0.00 : 49661a: 48 63 d0 movslq %eax,%rdx 0.00 : 49661d: 48 8b 05 f4 6a 6e 00 mov 0x6e6af4(%rip),%rax # b7d118 0.00 : 496624: 4c 8b 34 d0 mov (%rax,%rdx,8),%r14 0.00 : 496628: e9 41 fd ff ff jmpq 49636e : lineindex = lines - 1; : scan->rs_inited = true; : } : else : { : lineindex = scan->rs_cindex - 1; 0.00 : 49662d: 41 8b 45 70 mov 0x70(%r13),%eax 0.00 : 496631: 83 e8 01 sub $0x1,%eax 0.00 : 496634: 89 45 c0 mov %eax,-0x40(%rbp) 0.00 : 496637: e9 36 fb ff ff jmpq 496172 : /* : * return NULL if we've exhausted all the pages : */ : if (finished) : { : if (BufferIsValid(scan->rs_cbuf)) 0.00 : 49663c: 41 8b 7d 64 mov 0x64(%r13),%edi 0.00 : 496640: 85 ff test %edi,%edi 0.00 : 496642: 74 05 je 496649 : ReleaseBuffer(scan->rs_cbuf); 0.00 : 496644: e8 17 e8 1d 00 callq 674e60 : scan->rs_cbuf = InvalidBuffer; 0.00 : 496649: 41 c7 45 64 00 00 00 movl $0x0,0x64(%r13) 0.00 : 496650: 00 : scan->rs_cblock = InvalidBlockNumber; 0.00 : 496651: 41 c7 45 60 ff ff ff movl $0xffffffff,0x60(%r13) 0.00 : 496658: ff : tuple->t_data = NULL; 0.00 : 496659: 49 c7 45 58 00 00 00 movq $0x0,0x58(%r13) 0.00 : 496660: 00 : scan->rs_inited = false; 0.00 : 496661: 41 c6 45 41 00 movb $0x0,0x41(%r13) : if (backward) : lineindex = lines - 1; : else : lineindex = 0; : } : } 0.00 : 496666: e9 a5 fd ff ff jmpq 496410 : { : /* continue from previously returned page/tuple */ : page = scan->rs_cblock; /* current page */ : } : : dp = (Page) BufferGetPage(scan->rs_cbuf); 0.00 : 49666b: f7 d0 not %eax 0.00 : 49666d: 48 63 d0 movslq %eax,%rdx 0.00 : 496670: 48 8b 05 a1 6a 6e 00 mov 0x6e6aa1(%rip),%rax # b7d118 0.00 : 496677: 4c 8b 34 d0 mov (%rax,%rdx,8),%r14 0.00 : 49667b: e9 d8 fa ff ff jmpq 496158 : /* continue from previously returned page/tuple */ : page = scan->rs_cblock; /* current page */ : lineindex = scan->rs_cindex + 1; : } : : dp = (Page) BufferGetPage(scan->rs_cbuf); 0.00 : 496680: f7 d0 not %eax 0.00 : 496682: 48 63 d0 movslq %eax,%rdx 0.00 : 496685: 48 8b 05 8c 6a 6e 00 mov 0x6e6a8c(%rip),%rax # b7d118 0.00 : 49668c: 4c 8b 34 d0 mov (%rax,%rdx,8),%r14 0.00 : 496690: e9 bb fd ff ff jmpq 496450 : page = ItemPointerGetBlockNumber(&(tuple->t_self)); : if (page != scan->rs_cblock) : heapgetpage(scan, page); : : /* Since the tuple was previously fetched, needn't lock page here */ : dp = (Page) BufferGetPage(scan->rs_cbuf); 0.00 : 496695: f7 d0 not %eax 0.00 : 496697: 48 63 d0 movslq %eax,%rdx 0.00 : 49669a: 48 8b 05 77 6a 6e 00 mov 0x6e6a77(%rip),%rax # b7d118 0.00 : 4966a1: 48 8b 0c d0 mov (%rax,%rdx,8),%rcx 0.00 : 4966a5: e9 24 fd ff ff jmpq 4963ce Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 14.49 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:504 11.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:515 11.59 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:504 8.70 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:483 7.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:479 5.80 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:479 5.80 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:504 4.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:504 4.35 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:513 2.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:489 2.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:513 2.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:513 2.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:515 2.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:519 2.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:526 1.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:479 1.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:519 1.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:519 1.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:526 1.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:526 1.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:526 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005a9120 : : * Also, the caller must select an appropriate memory context for running : * the hash functions. (dynahash.c doesn't change CurrentMemoryContext.) : */ : static uint32 : TupleHashTableHash(const void *key, Size keysize) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:479 7.25 : 5a9120: 55 push %rbp 0.00 : 5a9121: 48 89 e5 mov %rsp,%rbp 0.00 : 5a9124: 41 57 push %r15 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:479 1.45 : 5a9126: 41 56 push %r14 0.00 : 5a9128: 41 55 push %r13 0.00 : 5a912a: 41 54 push %r12 0.00 : 5a912c: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:479 5.80 : 5a912d: 48 83 ec 18 sub $0x18,%rsp : MinimalTuple tuple = ((const TupleHashEntryData *) key)->firstTuple; : TupleTableSlot *slot; : TupleHashTable hashtable = CurTupleHashTable; 0.00 : 5a9131: 48 8b 1d 88 07 5d 00 mov 0x5d0788(%rip),%rbx # b798c0 : * the hash functions. (dynahash.c doesn't change CurrentMemoryContext.) : */ : static uint32 : TupleHashTableHash(const void *key, Size keysize) : { : MinimalTuple tuple = ((const TupleHashEntryData *) key)->firstTuple; 0.00 : 5a9138: 48 8b 3f mov (%rdi),%rdi : TupleTableSlot *slot; : TupleHashTable hashtable = CurTupleHashTable; : int numCols = hashtable->numCols; /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:483 8.70 : 5a913b: 8b 43 08 mov 0x8(%rbx),%eax : AttrNumber *keyColIdx = hashtable->keyColIdx; : FmgrInfo *hashfunctions; : uint32 hashkey = 0; : int i; : : if (tuple == NULL) 0.00 : 5a913e: 48 85 ff test %rdi,%rdi : TupleHashTableHash(const void *key, Size keysize) : { : MinimalTuple tuple = ((const TupleHashEntryData *) key)->firstTuple; : TupleTableSlot *slot; : TupleHashTable hashtable = CurTupleHashTable; : int numCols = hashtable->numCols; 0.00 : 5a9141: 89 45 c4 mov %eax,-0x3c(%rbp) : AttrNumber *keyColIdx = hashtable->keyColIdx; 0.00 : 5a9144: 4c 8b 63 10 mov 0x10(%rbx),%r12 : FmgrInfo *hashfunctions; : uint32 hashkey = 0; : int i; : : if (tuple == NULL) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:489 2.90 : 5a9148: 0f 84 8a 00 00 00 je 5a91d8 : } : else : { : /* Process a tuple already stored in the table */ : /* (this case never actually occurs in current dynahash.c code) */ : slot = hashtable->tableslot; 0.00 : 5a914e: 4c 8b 7b 40 mov 0x40(%rbx),%r15 : ExecStoreMinimalTuple(tuple, slot, false); 0.00 : 5a9152: 31 d2 xor %edx,%edx 0.00 : 5a9154: 4c 89 fe mov %r15,%rsi 0.00 : 5a9157: e8 84 b2 00 00 callq 5b43e0 : hashfunctions = hashtable->tab_hash_funcs; 0.00 : 5a915c: 48 8b 43 18 mov 0x18(%rbx),%rax : } : : for (i = 0; i < numCols; i++) 0.00 : 5a9160: 8b 55 c4 mov -0x3c(%rbp),%edx 0.00 : 5a9163: 45 31 ed xor %r13d,%r13d 0.00 : 5a9166: 85 d2 test %edx,%edx 0.00 : 5a9168: 7e 58 jle 5a91c2 0.00 : 5a916a: 49 89 c6 mov %rax,%r14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:504 4.35 : 5a916d: 45 31 ed xor %r13d,%r13d 0.00 : 5a9170: 31 db xor %ebx,%ebx 0.00 : 5a9172: eb 14 jmp 5a9188 0.00 : 5a9174: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 5a9178: 83 c3 01 add $0x1,%ebx 0.00 : 5a917b: 49 83 c4 02 add $0x2,%r12 0.00 : 5a917f: 49 83 c6 30 add $0x30,%r14 0.00 : 5a9183: 39 5d c4 cmp %ebx,-0x3c(%rbp) 0.00 : 5a9186: 7e 3a jle 5a91c2 : bool isNull; : : /* rotate hashkey left 1 bit at each step */ : hashkey = (hashkey << 1) | ((hashkey & 0x80000000) ? 1 : 0); : : attr = slot_getattr(slot, att, &isNull); /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:513 2.90 : 5a9188: 41 0f bf 34 24 movswl (%r12),%esi 2.90 : 5a918d: 48 8d 55 d7 lea -0x29(%rbp),%rdx 0.00 : 5a9191: 4c 89 ff mov %r15,%rdi : AttrNumber att = keyColIdx[i]; : Datum attr; : bool isNull; : : /* rotate hashkey left 1 bit at each step */ : hashkey = (hashkey << 1) | ((hashkey & 0x80000000) ? 1 : 0); 0.00 : 5a9194: 41 d1 c5 rol %r13d : : attr = slot_getattr(slot, att, &isNull); 4.35 : 5a9197: e8 64 62 ec ff callq 46f400 : : if (!isNull) /* treat nulls as having hash key 0 */ /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:515 2.90 : 5a919c: 80 7d d7 00 cmpb $0x0,-0x29(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:515 11.59 : 5a91a0: 75 d6 jne 5a9178 : { : uint32 hkey; : : hkey = DatumGetUInt32(FunctionCall1(&hashfunctions[i], /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:519 1.45 : 5a91a2: 31 f6 xor %esi,%esi 0.00 : 5a91a4: 4c 89 f7 mov %r14,%rdi 1.45 : 5a91a7: 48 89 c2 mov %rax,%rdx 2.90 : 5a91aa: e8 21 4f 1d 00 callq 77e0d0 : slot = hashtable->tableslot; : ExecStoreMinimalTuple(tuple, slot, false); : hashfunctions = hashtable->tab_hash_funcs; : } : : for (i = 0; i < numCols; i++) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:504 5.80 : 5a91af: 83 c3 01 add $0x1,%ebx : { : uint32 hkey; : : hkey = DatumGetUInt32(FunctionCall1(&hashfunctions[i], : attr)); : hashkey ^= hkey; 0.00 : 5a91b2: 41 31 c5 xor %eax,%r13d : slot = hashtable->tableslot; : ExecStoreMinimalTuple(tuple, slot, false); : hashfunctions = hashtable->tab_hash_funcs; : } : : for (i = 0; i < numCols; i++) 0.00 : 5a91b5: 49 83 c4 02 add $0x2,%r12 0.00 : 5a91b9: 49 83 c6 30 add $0x30,%r14 11.59 : 5a91bd: 39 5d c4 cmp %ebx,-0x3c(%rbp) 14.49 : 5a91c0: 7f c6 jg 5a9188 : hashkey ^= hkey; : } : } : : return hashkey; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:526 1.45 : 5a91c2: 48 83 c4 18 add $0x18,%rsp 0.00 : 5a91c6: 44 89 e8 mov %r13d,%eax 0.00 : 5a91c9: 5b pop %rbx 1.45 : 5a91ca: 41 5c pop %r12 0.00 : 5a91cc: 41 5d pop %r13 1.45 : 5a91ce: 41 5e pop %r14 0.00 : 5a91d0: 41 5f pop %r15 2.90 : 5a91d2: c9 leaveq 0.00 : 5a91d3: c3 retq 0.00 : 5a91d4: 0f 1f 40 00 nopl 0x0(%rax) : int i; : : if (tuple == NULL) : { : /* Process the current input tuple for the table */ : slot = hashtable->inputslot; 0.00 : 5a91d8: 4c 8b 7b 48 mov 0x48(%rbx),%r15 : hashfunctions = hashtable->in_hash_funcs; 0.00 : 5a91dc: 48 8b 43 50 mov 0x50(%rbx),%rax 0.00 : 5a91e0: e9 7b ff ff ff jmpq 5a9160 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 34.85 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2195 27.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2195 19.70 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2211 12.12 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2211 6.06 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2195 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077d9c0 : : } : #endif /* USE_FLOAT4_BYVAL */ : : Datum : Float8GetDatum(float8 X) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2195 34.85 : 77d9c0: 55 push %rbp 0.00 : 77d9c1: 48 89 e5 mov %rsp,%rbp 6.06 : 77d9c4: f2 0f 11 45 f8 movsd %xmm0,-0x8(%rbp) 27.27 : 77d9c9: 48 8b 45 f8 mov -0x8(%rbp),%rax : float8 *retval = (float8 *) palloc(sizeof(float8)); : : *retval = X; : return PointerGetDatum(retval); : #endif : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2211 31.82 : 77d9cd: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 27.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1327 12.12 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1309 12.12 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1321 12.12 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1327 10.61 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1309 6.06 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1331 4.55 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1317 4.55 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1317 3.03 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1324 3.03 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1322 3.03 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1324 1.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1317 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077e030 : : return result; : } : : Datum : FunctionCall2Coll(FmgrInfo *flinfo, Oid collation, Datum arg1, Datum arg2) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1309 12.12 : 77e030: 55 push %rbp 0.00 : 77e031: 48 89 f8 mov %rdi,%rax 0.00 : 77e034: 48 89 e5 mov %rsp,%rbp 10.61 : 77e037: 48 81 ec b0 03 00 00 sub $0x3b0,%rsp : * utils/sort/tuplesort.c! : */ : FunctionCallInfoData fcinfo; : Datum result; : : InitFunctionCallInfoData(fcinfo, flinfo, 2, collation, NULL, NULL); 0.00 : 77e03e: 48 89 bd 50 fc ff ff mov %rdi,-0x3b0(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1317 4.55 : 77e045: 48 c7 85 58 fc ff ff movq $0x0,-0x3a8(%rbp) 0.00 : 77e04c: 00 00 00 00 : fcinfo.arg[0] = arg1; : fcinfo.arg[1] = arg2; : fcinfo.argnull[0] = false; : fcinfo.argnull[1] = false; : : result = FunctionCallInvoke(&fcinfo); /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1324 3.03 : 77e050: 48 8d bd 50 fc ff ff lea -0x3b0(%rbp),%rdi : * utils/sort/tuplesort.c! : */ : FunctionCallInfoData fcinfo; : Datum result; : : InitFunctionCallInfoData(fcinfo, flinfo, 2, collation, NULL, NULL); 0.00 : 77e057: 48 c7 85 60 fc ff ff movq $0x0,-0x3a0(%rbp) 0.00 : 77e05e: 00 00 00 00 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1317 1.52 : 77e062: 89 b5 68 fc ff ff mov %esi,-0x398(%rbp) 0.00 : 77e068: c6 85 6c fc ff ff 00 movb $0x0,-0x394(%rbp) 4.55 : 77e06f: 66 c7 85 6e fc ff ff movw $0x2,-0x392(%rbp) 0.00 : 77e076: 02 00 : : fcinfo.arg[0] = arg1; 0.00 : 77e078: 48 89 95 70 fc ff ff mov %rdx,-0x390(%rbp) : fcinfo.arg[1] = arg2; 0.00 : 77e07f: 48 89 8d 78 fc ff ff mov %rcx,-0x388(%rbp) : fcinfo.argnull[0] = false; /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1321 12.12 : 77e086: c6 45 90 00 movb $0x0,-0x70(%rbp) : fcinfo.argnull[1] = false; /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1322 3.03 : 77e08a: c6 45 91 00 movb $0x0,-0x6f(%rbp) : : result = FunctionCallInvoke(&fcinfo); /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1324 3.03 : 77e08e: ff 10 callq *(%rax) : : /* Check for null result, since caller is clearly not expecting one */ : if (unlikely(fcinfo.isnull)) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1327 12.12 : 77e090: 80 bd 6c fc ff ff 00 cmpb $0x0,-0x394(%rbp) 27.27 : 77e097: 75 02 jne 77e09b : elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid); : : return result; : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1331 6.06 : 77e099: c9 leaveq 0.00 : 77e09a: c3 retq : : result = FunctionCallInvoke(&fcinfo); : : /* Check for null result, since caller is clearly not expecting one */ : if (unlikely(fcinfo.isnull)) : elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid); 0.00 : 77e09b: ba 40 52 8d 00 mov $0x8d5240,%edx 0.00 : 77e0a0: be 30 05 00 00 mov $0x530,%esi 0.00 : 77e0a5: bf b3 47 8d 00 mov $0x8d47b3,%edi 0.00 : 77e0aa: e8 71 d3 ff ff callq 77b420 0.00 : 77e0af: 48 8b 85 50 fc ff ff mov -0x3b0(%rbp),%rax 0.00 : 77e0b6: be 97 4c 8d 00 mov $0x8d4c97,%esi 0.00 : 77e0bb: bf 14 00 00 00 mov $0x14,%edi 0.00 : 77e0c0: 8b 50 08 mov 0x8(%rax),%edx 0.00 : 77e0c3: 31 c0 xor %eax,%eax 0.00 : 77e0c5: e8 66 d1 ff ff callq 77b230 0.00 : 77e0ca: e8 01 b4 ce ff callq 4694d0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 31.03 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:511 22.41 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:508 20.69 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:499 6.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:508 6.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:507 6.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:508 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:511 1.72 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:499 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b3a20 : : Assert(slot != NULL); : Assert(slot->tts_tupleDescriptor != NULL); : Assert(slot->tts_isempty); : : slot->tts_isempty = false; : slot->tts_nvalid = slot->tts_tupleDescriptor->natts; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:508 6.90 : 5b3a20: 48 8b 47 10 mov 0x10(%rdi),%rax : * This is a bit unclean but it avoids one round of data copying. : * -------------------------------- : */ : TupleTableSlot * : ExecStoreVirtualTuple(TupleTableSlot *slot) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:499 20.69 : 5b3a24: 55 push %rbp : */ : Assert(slot != NULL); : Assert(slot->tts_tupleDescriptor != NULL); : Assert(slot->tts_isempty); : : slot->tts_isempty = false; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:507 6.90 : 5b3a25: c6 47 04 00 movb $0x0,0x4(%rdi) : * This is a bit unclean but it avoids one round of data copying. : * -------------------------------- : */ : TupleTableSlot * : ExecStoreVirtualTuple(TupleTableSlot *slot) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:499 1.72 : 5b3a29: 48 89 e5 mov %rsp,%rbp : Assert(slot != NULL); : Assert(slot->tts_tupleDescriptor != NULL); : Assert(slot->tts_isempty); : : slot->tts_isempty = false; : slot->tts_nvalid = slot->tts_tupleDescriptor->natts; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:508 22.41 : 5b3a2c: 8b 00 mov (%rax),%eax 6.90 : 5b3a2e: 89 47 24 mov %eax,0x24(%rdi) : : return slot; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:511 3.45 : 5b3a31: 48 89 f8 mov %rdi,%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:511 31.03 : 5b3a34: c9 leaveq Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 21.15 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2269 15.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 13.46 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2274 9.62 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2269 9.62 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 7.69 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 7.69 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2274 5.77 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 5.77 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2274 3.85 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077ece0 : : return heap_tuple_untoast_attr_slice(datum, first, count); : } : : struct varlena * : pg_detoast_datum_packed(struct varlena * datum) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2269 21.15 : 77ece0: 55 push %rbp : if (VARATT_IS_COMPRESSED(datum) || VARATT_IS_EXTERNAL(datum)) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 15.38 : 77ece1: 0f b6 17 movzbl (%rdi),%edx : return heap_tuple_untoast_attr_slice(datum, first, count); : } : : struct varlena * : pg_detoast_datum_packed(struct varlena * datum) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2269 9.62 : 77ece4: 48 89 e5 mov %rsp,%rbp : if (VARATT_IS_COMPRESSED(datum) || VARATT_IS_EXTERNAL(datum)) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 5.77 : 77ece7: 89 d0 mov %edx,%eax /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 3.85 : 77ece9: 83 e0 03 and $0x3,%eax /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2270 9.62 : 77ecec: 83 f8 02 cmp $0x2,%eax 0.00 : 77ecef: 74 0f je 77ed00 7.69 : 77ecf1: 80 ea 01 sub $0x1,%dl 0.00 : 77ecf4: 74 0a je 77ed00 : return heap_tuple_untoast_attr(datum); : else : return datum; : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2274 7.69 : 77ecf6: 48 89 f8 mov %rdi,%rax 5.77 : 77ecf9: c9 leaveq 13.46 : 77ecfa: c3 retq 0.00 : 77ecfb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 77ed00: c9 leaveq : : struct varlena * : pg_detoast_datum_packed(struct varlena * datum) : { : if (VARATT_IS_COMPRESSED(datum) || VARATT_IS_EXTERNAL(datum)) : return heap_tuple_untoast_attr(datum); 0.00 : 77ed01: e9 4a 41 d2 ff jmpq 4a2e50 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 22.73 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1296 22.73 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1301 15.91 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1305 6.82 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1289 6.82 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1301 4.55 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1289 4.55 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1298 2.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1289 2.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1293 2.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1293 2.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1293 2.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1293 2.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1295 2.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1305 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077e0d0 : : * directly-computed parameter list. Note that neither arguments nor result : * are allowed to be NULL. : */ : Datum : FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1289 2.27 : 77e0d0: 55 push %rbp 0.00 : 77e0d1: 48 89 f8 mov %rdi,%rax /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1289 6.82 : 77e0d4: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1289 4.55 : 77e0d7: 48 81 ec b0 03 00 00 sub $0x3b0,%rsp : FunctionCallInfoData fcinfo; : Datum result; : : InitFunctionCallInfoData(fcinfo, flinfo, 1, collation, NULL, NULL); /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1293 2.27 : 77e0de: 48 89 bd 50 fc ff ff mov %rdi,-0x3b0(%rbp) 2.27 : 77e0e5: 48 c7 85 58 fc ff ff movq $0x0,-0x3a8(%rbp) 0.00 : 77e0ec: 00 00 00 00 : : fcinfo.arg[0] = arg1; : fcinfo.argnull[0] = false; : : result = FunctionCallInvoke(&fcinfo); /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1298 4.55 : 77e0f0: 48 8d bd 50 fc ff ff lea -0x3b0(%rbp),%rdi : FunctionCall1Coll(FmgrInfo *flinfo, Oid collation, Datum arg1) : { : FunctionCallInfoData fcinfo; : Datum result; : : InitFunctionCallInfoData(fcinfo, flinfo, 1, collation, NULL, NULL); 0.00 : 77e0f7: 48 c7 85 60 fc ff ff movq $0x0,-0x3a0(%rbp) 0.00 : 77e0fe: 00 00 00 00 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1293 2.27 : 77e102: 89 b5 68 fc ff ff mov %esi,-0x398(%rbp) 2.27 : 77e108: c6 85 6c fc ff ff 00 movb $0x0,-0x394(%rbp) 0.00 : 77e10f: 66 c7 85 6e fc ff ff movw $0x1,-0x392(%rbp) 0.00 : 77e116: 01 00 : : fcinfo.arg[0] = arg1; /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1295 2.27 : 77e118: 48 89 95 70 fc ff ff mov %rdx,-0x390(%rbp) : fcinfo.argnull[0] = false; /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1296 22.73 : 77e11f: c6 45 90 00 movb $0x0,-0x70(%rbp) : : result = FunctionCallInvoke(&fcinfo); 0.00 : 77e123: ff 10 callq *(%rax) : : /* Check for null result, since caller is clearly not expecting one */ : if (unlikely(fcinfo.isnull)) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1301 22.73 : 77e125: 80 bd 6c fc ff ff 00 cmpb $0x0,-0x394(%rbp) 6.82 : 77e12c: 75 02 jne 77e130 : elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid); : : return result; : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1305 15.91 : 77e12e: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:1305 2.27 : 77e12f: c3 retq : : result = FunctionCallInvoke(&fcinfo); : : /* Check for null result, since caller is clearly not expecting one */ : if (unlikely(fcinfo.isnull)) : elog(ERROR, "function %u returned NULL", fcinfo.flinfo->fn_oid); 0.00 : 77e130: ba 60 52 8d 00 mov $0x8d5260,%edx 0.00 : 77e135: be 16 05 00 00 mov $0x516,%esi 0.00 : 77e13a: bf b3 47 8d 00 mov $0x8d47b3,%edi 0.00 : 77e13f: e8 dc d2 ff ff callq 77b420 0.00 : 77e144: 48 8b 85 50 fc ff ff mov -0x3b0(%rbp),%rax 0.00 : 77e14b: be 97 4c 8d 00 mov $0x8d4c97,%esi 0.00 : 77e150: bf 14 00 00 00 mov $0x14,%edi 0.00 : 77e155: 8b 50 08 mov 0x8(%rax),%edx 0.00 : 77e158: 31 c0 xor %eax,%eax 0.00 : 77e15a: e8 d1 d0 ff ff callq 77b230 0.00 : 77e15f: e8 6c b3 ce ff callq 4694d0 Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 18.18 ??:0 11.36 ??:0 11.36 ??:0 11.36 ??:0 11.36 ??:0 9.09 ??:0 6.82 ??:0 6.82 ??:0 6.82 ??:0 4.55 ??:0 2.27 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000000321d0 <__isinff>: ??:0 11.36 : 321d0: 66 0f 7e c1 movd %xmm0,%ecx 0.00 : 321d4: 89 ca mov %ecx,%edx ??:0 4.55 : 321d6: c1 f9 1e sar $0x1e,%ecx ??:0 11.36 : 321d9: 81 e2 ff ff ff 7f and $0x7fffffff,%edx ??:0 2.27 : 321df: 81 f2 00 00 80 7f xor $0x7f800000,%edx ??:0 6.82 : 321e5: 89 d0 mov %edx,%eax 6.82 : 321e7: f7 d8 neg %eax 6.82 : 321e9: 09 d0 or %edx,%eax 9.09 : 321eb: c1 f8 1f sar $0x1f,%eax 11.36 : 321ee: f7 d0 not %eax 29.55 : 321f0: 21 c8 and %ecx,%eax Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 19.05 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:513 16.67 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:510 11.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:400 9.52 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:513 9.52 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:400 7.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:359 7.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:509 7.14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:510 2.38 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:359 2.38 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:356 2.38 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:361 2.38 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:364 2.38 /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:367 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005ac4a0 : : TupleTableSlot * : ExecProcNode(PlanState *node) : { : TupleTableSlot *result; : : CHECK_FOR_INTERRUPTS(); /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:359 2.38 : 5ac4a0: 0f b6 05 e9 db 60 00 movzbl 0x60dbe9(%rip),%eax # bba090 : * Execute the given node to return a(nother) tuple. : * ---------------------------------------------------------------- : */ : TupleTableSlot * : ExecProcNode(PlanState *node) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:356 2.38 : 5ac4a7: 55 push %rbp 0.00 : 5ac4a8: 48 89 e5 mov %rsp,%rbp 0.00 : 5ac4ab: 41 54 push %r12 0.00 : 5ac4ad: 49 89 fc mov %rdi,%r12 : TupleTableSlot *result; : : CHECK_FOR_INTERRUPTS(); 0.00 : 5ac4b0: 84 c0 test %al,%al : * Execute the given node to return a(nother) tuple. : * ---------------------------------------------------------------- : */ : TupleTableSlot * : ExecProcNode(PlanState *node) : { 0.00 : 5ac4b2: 53 push %rbx : TupleTableSlot *result; : : CHECK_FOR_INTERRUPTS(); /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:359 7.14 : 5ac4b3: 75 6b jne 5ac520 : : if (node->chgParam != NULL) /* something changed */ /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:361 2.38 : 5ac4b5: 49 83 7c 24 50 00 cmpq $0x0,0x50(%r12) 0.00 : 5ac4bb: 74 08 je 5ac4c5 : ExecReScan(node); /* let ReScan handle this */ 0.00 : 5ac4bd: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac4c0: e8 db bf ff ff callq 5a84a0 : : if (node->instrument) 0.00 : 5ac4c5: 49 8b 7c 24 18 mov 0x18(%r12),%rdi /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:364 2.38 : 5ac4ca: 48 85 ff test %rdi,%rdi 0.00 : 5ac4cd: 74 05 je 5ac4d4 : InstrStartNode(node->instrument); 0.00 : 5ac4cf: e8 2c ba 00 00 callq 5b7f00 : : switch (nodeTag(node)) 0.00 : 5ac4d4: 41 8b 04 24 mov (%r12),%eax /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:367 2.38 : 5ac4d8: 2d c9 00 00 00 sub $0xc9,%eax 0.00 : 5ac4dd: 83 f8 21 cmp $0x21,%eax 0.00 : 5ac4e0: 76 2e jbe 5ac510 : case T_LimitState: : result = ExecLimit((LimitState *) node); : break; : : default: : elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); 0.00 : 5ac4e2: ba e2 a3 88 00 mov $0x88a3e2,%edx 0.00 : 5ac4e7: be f8 01 00 00 mov $0x1f8,%esi 0.00 : 5ac4ec: bf 75 a0 88 00 mov $0x88a075,%edi 0.00 : 5ac4f1: e8 2a ef 1c 00 callq 77b420 0.00 : 5ac4f6: 41 8b 14 24 mov (%r12),%edx 0.00 : 5ac4fa: be 5c 17 87 00 mov $0x87175c,%esi 0.00 : 5ac4ff: bf 14 00 00 00 mov $0x14,%edi 0.00 : 5ac504: 31 c0 xor %eax,%eax 0.00 : 5ac506: e8 25 ed 1c 00 callq 77b230 0.00 : 5ac50b: e8 c0 cf eb ff callq 4694d0 : ExecReScan(node); /* let ReScan handle this */ : : if (node->instrument) : InstrStartNode(node->instrument); : : switch (nodeTag(node)) 0.00 : 5ac510: 89 c0 mov %eax,%eax 0.00 : 5ac512: ff 24 c5 a0 a1 88 00 jmpq *0x88a1a0(,%rax,8) 0.00 : 5ac519: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : TupleTableSlot * : ExecProcNode(PlanState *node) : { : TupleTableSlot *result; : : CHECK_FOR_INTERRUPTS(); 0.00 : 5ac520: e8 7b fd 0e 00 callq 69c2a0 0.00 : 5ac525: eb 8e jmp 5ac4b5 0.00 : 5ac527: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5ac52e: 00 00 : case T_LockRowsState: : result = ExecLockRows((LockRowsState *) node); : break; : : case T_LimitState: : result = ExecLimit((LimitState *) node); 0.00 : 5ac530: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac533: e8 a8 3c 01 00 callq 5c01e0 0.00 : 5ac538: 48 89 c3 mov %rax,%rbx 0.00 : 5ac53b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : elog(ERROR, "unrecognized node type: %d", (int) nodeTag(node)); : result = NULL; : break; : } : : if (node->instrument) /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:509 7.14 : 5ac540: 49 8b 7c 24 18 mov 0x18(%r12),%rdi 0.00 : 5ac545: 48 85 ff test %rdi,%rdi 0.00 : 5ac548: 74 20 je 5ac56a : InstrStopNode(node->instrument, TupIsNull(result) ? 0.0 : 1.0); 0.00 : 5ac54a: 48 85 db test %rbx,%rbx 0.00 : 5ac54d: 0f 84 ed 01 00 00 je 5ac740 0.00 : 5ac553: 80 7b 04 00 cmpb $0x0,0x4(%rbx) /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:510 7.14 : 5ac557: 0f 85 e3 01 00 00 jne 5ac740 0.00 : 5ac55d: f2 0f 10 05 f3 2b 20 movsd 0x202bf3(%rip),%xmm0 # 7af158 <__func__.15777+0x10> 0.00 : 5ac564: 00 16.67 : 5ac565: e8 66 b6 00 00 callq 5b7bd0 : : return result; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:513 9.52 : 5ac56a: 48 89 d8 mov %rbx,%rax 0.00 : 5ac56d: 5b pop %rbx 0.00 : 5ac56e: 41 5c pop %r12 0.00 : 5ac570: c9 leaveq 19.05 : 5ac571: c3 retq 0.00 : 5ac572: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : case T_SetOpState: : result = ExecSetOp((SetOpState *) node); : break; : : case T_LockRowsState: : result = ExecLockRows((LockRowsState *) node); 0.00 : 5ac578: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac57b: e8 a0 40 01 00 callq 5c0620 0.00 : 5ac580: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac583: eb bb jmp 5ac540 0.00 : 5ac585: 0f 1f 00 nopl (%rax) : case T_HashState: : result = ExecHash((HashState *) node); : break; : : case T_SetOpState: : result = ExecSetOp((SetOpState *) node); 0.00 : 5ac588: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac58b: e8 60 98 01 00 callq 5c5df0 0.00 : 5ac590: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac593: eb ab jmp 5ac540 0.00 : 5ac595: 0f 1f 00 nopl (%rax) : case T_UniqueState: : result = ExecUnique((UniqueState *) node); : break; : : case T_HashState: : result = ExecHash((HashState *) node); 0.00 : 5ac598: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac59b: e8 d0 02 01 00 callq 5bc870 0.00 : 5ac5a0: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac5a3: eb 9b jmp 5ac540 0.00 : 5ac5a5: 0f 1f 00 nopl (%rax) : case T_WindowAggState: : result = ExecWindowAgg((WindowAggState *) node); : break; : : case T_UniqueState: : result = ExecUnique((UniqueState *) node); 0.00 : 5ac5a8: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac5ab: e8 20 a0 01 00 callq 5c65d0 0.00 : 5ac5b0: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac5b3: eb 8b jmp 5ac540 0.00 : 5ac5b5: 0f 1f 00 nopl (%rax) : case T_AggState: : result = ExecAgg((AggState *) node); : break; : : case T_WindowAggState: : result = ExecWindowAgg((WindowAggState *) node); 0.00 : 5ac5b8: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac5bb: e8 90 00 02 00 callq 5cc650 0.00 : 5ac5c0: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac5c3: e9 78 ff ff ff jmpq 5ac540 0.00 : 5ac5c8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5ac5cf: 00 : case T_GroupState: : result = ExecGroup((GroupState *) node); : break; : : case T_AggState: : result = ExecAgg((AggState *) node); 0.00 : 5ac5d0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac5d3: e8 a8 d7 00 00 callq 5b9d80 0.00 : 5ac5d8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac5db: e9 60 ff ff ff jmpq 5ac540 : case T_SortState: : result = ExecSort((SortState *) node); : break; : : case T_GroupState: : result = ExecGroup((GroupState *) node); 0.00 : 5ac5e0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac5e3: e8 88 ab 01 00 callq 5c7170 0.00 : 5ac5e8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac5eb: e9 50 ff ff ff jmpq 5ac540 : case T_MaterialState: : result = ExecMaterial((MaterialState *) node); : break; : : case T_SortState: : result = ExecSort((SortState *) node); 0.00 : 5ac5f0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac5f3: e8 48 9d 01 00 callq 5c6340 0.00 : 5ac5f8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac5fb: e9 40 ff ff ff jmpq 5ac540 : : /* : * materialization nodes : */ : case T_MaterialState: : result = ExecMaterial((MaterialState *) node); 0.00 : 5ac600: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac603: e8 38 47 01 00 callq 5c0d40 0.00 : 5ac608: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac60b: e9 30 ff ff ff jmpq 5ac540 : case T_MergeJoinState: : result = ExecMergeJoin((MergeJoinState *) node); : break; : : case T_HashJoinState: : result = ExecHashJoin((HashJoinState *) node); 0.00 : 5ac610: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac613: e8 88 14 01 00 callq 5bdaa0 0.00 : 5ac618: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac61b: e9 20 ff ff ff jmpq 5ac540 : case T_NestLoopState: : result = ExecNestLoop((NestLoopState *) node); : break; : : case T_MergeJoinState: : result = ExecMergeJoin((MergeJoinState *) node); 0.00 : 5ac620: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac623: e8 08 5a 01 00 callq 5c2030 0.00 : 5ac628: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac62b: e9 10 ff ff ff jmpq 5ac540 : : /* : * join nodes : */ : case T_NestLoopState: : result = ExecNestLoop((NestLoopState *) node); 0.00 : 5ac630: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac633: e8 08 7c 01 00 callq 5c4240 0.00 : 5ac638: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac63b: e9 00 ff ff ff jmpq 5ac540 : case T_WorkTableScanState: : result = ExecWorkTableScan((WorkTableScanState *) node); : break; : : case T_ForeignScanState: : result = ExecForeignScan((ForeignScanState *) node); 0.00 : 5ac640: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac643: e8 f8 d2 01 00 callq 5c9940 0.00 : 5ac648: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac64b: e9 f0 fe ff ff jmpq 5ac540 : case T_CteScanState: : result = ExecCteScan((CteScanState *) node); : break; : : case T_WorkTableScanState: : result = ExecWorkTableScan((WorkTableScanState *) node); 0.00 : 5ac650: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac653: e8 f8 a8 01 00 callq 5c6f50 0.00 : 5ac658: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac65b: e9 e0 fe ff ff jmpq 5ac540 : case T_ValuesScanState: : result = ExecValuesScan((ValuesScanState *) node); : break; : : case T_CteScanState: : result = ExecCteScan((CteScanState *) node); 0.00 : 5ac660: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac663: e8 28 a6 01 00 callq 5c6c90 0.00 : 5ac668: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac66b: e9 d0 fe ff ff jmpq 5ac540 : case T_FunctionScanState: : result = ExecFunctionScan((FunctionScanState *) node); : break; : : case T_ValuesScanState: : result = ExecValuesScan((ValuesScanState *) node); 0.00 : 5ac670: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac673: e8 18 a2 01 00 callq 5c6890 0.00 : 5ac678: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac67b: e9 c0 fe ff ff jmpq 5ac540 : case T_SubqueryScanState: : result = ExecSubqueryScan((SubqueryScanState *) node); : break; : : case T_FunctionScanState: : result = ExecFunctionScan((FunctionScanState *) node); 0.00 : 5ac680: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac683: e8 28 86 01 00 callq 5c4cb0 0.00 : 5ac688: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac68b: e9 b0 fe ff ff jmpq 5ac540 : case T_TidScanState: : result = ExecTidScan((TidScanState *) node); : break; : : case T_SubqueryScanState: : result = ExecSubqueryScan((SubqueryScanState *) node); 0.00 : 5ac690: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac693: e8 d8 c7 01 00 callq 5c8e70 0.00 : 5ac698: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac69b: e9 a0 fe ff ff jmpq 5ac540 : case T_BitmapHeapScanState: : result = ExecBitmapHeapScan((BitmapHeapScanState *) node); : break; : : case T_TidScanState: : result = ExecTidScan((TidScanState *) node); 0.00 : 5ac6a0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac6a3: e8 58 ca 01 00 callq 5c9100 0.00 : 5ac6a8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac6ab: e9 90 fe ff ff jmpq 5ac540 : break; : : /* BitmapIndexScanState does not yield tuples */ : : case T_BitmapHeapScanState: : result = ExecBitmapHeapScan((BitmapHeapScanState *) node); 0.00 : 5ac6b0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac6b3: e8 68 e8 00 00 callq 5baf20 0.00 : 5ac6b8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac6bb: e9 80 fe ff ff jmpq 5ac540 : case T_IndexScanState: : result = ExecIndexScan((IndexScanState *) node); : break; : : case T_IndexOnlyScanState: : result = ExecIndexOnlyScan((IndexOnlyScanState *) node); 0.00 : 5ac6c0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac6c3: e8 b8 33 01 00 callq 5bfa80 0.00 : 5ac6c8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac6cb: e9 70 fe ff ff jmpq 5ac540 : case T_SeqScanState: : result = ExecSeqScan((SeqScanState *) node); : break; : : case T_IndexScanState: : result = ExecIndexScan((IndexScanState *) node); 0.00 : 5ac6d0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac6d3: e8 08 2e 01 00 callq 5bf4e0 0.00 : 5ac6d8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac6db: e9 60 fe ff ff jmpq 5ac540 : : /* : * scan nodes : */ : case T_SeqScanState: : result = ExecSeqScan((SeqScanState *) node); /home/Computational/mark/src/postgres-andres/src/backend/executor/execProcnode.c:400 9.52 : 5ac6e0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac6e3: e8 28 92 01 00 callq 5c5910 11.90 : 5ac6e8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac6eb: e9 50 fe ff ff jmpq 5ac540 : case T_MergeAppendState: : result = ExecMergeAppend((MergeAppendState *) node); : break; : : case T_RecursiveUnionState: : result = ExecRecursiveUnion((RecursiveUnionState *) node); 0.00 : 5ac6f0: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac6f3: e8 d8 8b 01 00 callq 5c52d0 0.00 : 5ac6f8: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac6fb: e9 40 fe ff ff jmpq 5ac540 : case T_AppendState: : result = ExecAppend((AppendState *) node); : break; : : case T_MergeAppendState: : result = ExecMergeAppend((MergeAppendState *) node); 0.00 : 5ac700: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac703: e8 c8 48 01 00 callq 5c0fd0 0.00 : 5ac708: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac70b: e9 30 fe ff ff jmpq 5ac540 : case T_ModifyTableState: : result = ExecModifyTable((ModifyTableState *) node); : break; : : case T_AppendState: : result = ExecAppend((AppendState *) node); 0.00 : 5ac710: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac713: e8 68 ba 00 00 callq 5b8180 0.00 : 5ac718: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac71b: e9 20 fe ff ff jmpq 5ac540 : case T_ResultState: : result = ExecResult((ResultState *) node); : break; : : case T_ModifyTableState: : result = ExecModifyTable((ModifyTableState *) node); 0.00 : 5ac720: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac723: e8 d8 6a 01 00 callq 5c3200 0.00 : 5ac728: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac72b: e9 10 fe ff ff jmpq 5ac540 : { : /* : * control nodes : */ : case T_ResultState: : result = ExecResult((ResultState *) node); 0.00 : 5ac730: 4c 89 e7 mov %r12,%rdi 0.00 : 5ac733: e8 08 8f 01 00 callq 5c5640 0.00 : 5ac738: 48 89 c3 mov %rax,%rbx : break; 0.00 : 5ac73b: e9 00 fe ff ff jmpq 5ac540 : result = NULL; : break; : } : : if (node->instrument) : InstrStopNode(node->instrument, TupIsNull(result) ? 0.0 : 1.0); 0.00 : 5ac740: 66 0f 57 c0 xorpd %xmm0,%xmm0 0.00 : 5ac744: e9 1c fe ff ff jmpq 5ac565 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 16.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1805 14.29 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 14.29 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1805 9.52 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 7.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 7.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 7.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1805 4.76 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 2.38 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1805 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006d4940 : : * user will have doubtless lost interest anyway...) : */ : : static float8 * : check_float8_array(ArrayType *transarray, const char *caller, int n) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 2.38 : 6d4940: 55 push %rbp 4.76 : 6d4941: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 9.52 : 6d4944: 48 89 5d f0 mov %rbx,-0x10(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 2.38 : 6d4948: 4c 89 65 f8 mov %r12,-0x8(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 7.14 : 6d494c: 48 83 ec 10 sub $0x10,%rsp : /* : * We expect the input to be an N-element float array; verify that. We : * don't need to use deconstruct_array() since the array data is just : * going to look like a C array of N float8 values. : */ : if (ARR_NDIM(transarray) != 1 || /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 2.38 : 6d4950: 83 7f 04 01 cmpl $0x1,0x4(%rdi) : * user will have doubtless lost interest anyway...) : */ : : static float8 * : check_float8_array(ArrayType *transarray, const char *caller, int n) : { 0.00 : 6d4954: 49 89 f4 mov %rsi,%r12 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1793 2.38 : 6d4957: 89 d3 mov %edx,%ebx : /* : * We expect the input to be an N-element float array; verify that. We : * don't need to use deconstruct_array() since the array data is just : * going to look like a C array of N float8 values. : */ : if (ARR_NDIM(transarray) != 1 || /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 7.14 : 6d4959: 75 05 jne 6d4960 14.29 : 6d495b: 39 57 10 cmp %edx,0x10(%rdi) 0.00 : 6d495e: 74 30 je 6d4990 : ARR_DIMS(transarray)[0] != n || : ARR_HASNULL(transarray) || : ARR_ELEMTYPE(transarray) != FLOAT8OID) : elog(ERROR, "%s: expected %d-element float8 array", caller, n); 0.00 : 6d4960: ba 40 b9 8b 00 mov $0x8bb940,%edx 0.00 : 6d4965: be 0b 07 00 00 mov $0x70b,%esi 0.00 : 6d496a: bf 27 b4 8b 00 mov $0x8bb427,%edi 0.00 : 6d496f: e8 ac 6a 0a 00 callq 77b420 0.00 : 6d4974: 89 d9 mov %ebx,%ecx 0.00 : 6d4976: 4c 89 e2 mov %r12,%rdx 0.00 : 6d4979: be b8 b6 8b 00 mov $0x8bb6b8,%esi 0.00 : 6d497e: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6d4983: 31 c0 xor %eax,%eax 0.00 : 6d4985: e8 a6 68 0a 00 callq 77b230 0.00 : 6d498a: e8 41 4b d9 ff callq 4694d0 0.00 : 6d498f: 90 nop : /* : * We expect the input to be an N-element float array; verify that. We : * don't need to use deconstruct_array() since the array data is just : * going to look like a C array of N float8 values. : */ : if (ARR_NDIM(transarray) != 1 || 0.00 : 6d4990: 8b 47 08 mov 0x8(%rdi),%eax /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1799 2.38 : 6d4993: 85 c0 test %eax,%eax 0.00 : 6d4995: 75 c9 jne 6d4960 0.00 : 6d4997: 81 7f 0c bd 02 00 00 cmpl $0x2bd,0xc(%rdi) 2.38 : 6d499e: 66 90 xchg %ax,%ax 2.38 : 6d49a0: 75 be jne 6d4960 : ARR_DIMS(transarray)[0] != n || : ARR_HASNULL(transarray) || : ARR_ELEMTYPE(transarray) != FLOAT8OID) : elog(ERROR, "%s: expected %d-element float8 array", caller, n); 0.00 : 6d49a2: 48 8d 47 18 lea 0x18(%rdi),%rax : return (float8 *) ARR_DATA_PTR(transarray); : } /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/float.c:1805 14.29 : 6d49a6: 48 8b 1c 24 mov (%rsp),%rbx 16.67 : 6d49aa: 4c 8b 64 24 08 mov 0x8(%rsp),%r12 9.52 : 6d49af: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 9.76 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:175 7.32 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:43 7.32 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:195 7.32 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:230 4.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 4.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 4.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:121 4.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:122 4.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:129 4.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:43 4.88 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:82 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:121 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:140 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:155 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:41 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:223 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:200 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:230 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:230 2.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:230 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b3750 : : */ : TupleTableSlot * : ExecScan(ScanState *node, : ExecScanAccessMtd accessMtd, /* function returning a tuple */ : ExecScanRecheckMtd recheckMtd) : { 0.00 : 5b3750: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:111 2.44 : 5b3751: 48 89 e5 mov %rsp,%rbp 2.44 : 5b3754: 41 57 push %r15 2.44 : 5b3756: 41 56 push %r14 2.44 : 5b3758: 41 55 push %r13 0.00 : 5b375a: 41 54 push %r12 0.00 : 5b375c: 49 89 fc mov %rdi,%r12 0.00 : 5b375f: 53 push %rbx 2.44 : 5b3760: 48 83 ec 28 sub $0x28,%rsp 4.88 : 5b3764: 48 89 75 b8 mov %rsi,-0x48(%rbp) 4.88 : 5b3768: 48 89 55 b0 mov %rdx,-0x50(%rbp) : TupleTableSlot *resultSlot; : : /* : * Fetch data from node : */ : qual = node->ps.qual; /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:121 4.88 : 5b376c: 48 8b 47 28 mov 0x28(%rdi),%rax : : /* : * If we have neither a qual to check nor a projection to do, just skip : * all the overhead and return the raw scan tuple. : */ : if (!qual && !projInfo) 0.00 : 5b3770: 48 85 c0 test %rax,%rax : TupleTableSlot *resultSlot; : : /* : * Fetch data from node : */ : qual = node->ps.qual; 2.44 : 5b3773: 48 89 45 c0 mov %rax,-0x40(%rbp) : projInfo = node->ps.ps_ProjInfo; /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:122 4.88 : 5b3777: 4c 8b 77 68 mov 0x68(%rdi),%r14 : econtext = node->ps.ps_ExprContext; 0.00 : 5b377b: 4c 8b 6f 60 mov 0x60(%rdi),%r13 : : /* : * If we have neither a qual to check nor a projection to do, just skip : * all the overhead and return the raw scan tuple. : */ : if (!qual && !projInfo) 0.00 : 5b377f: 41 0f 94 c7 sete %r15b /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:129 4.88 : 5b3783: 75 09 jne 5b378e 0.00 : 5b3785: 4d 85 f6 test %r14,%r14 0.00 : 5b3788: 0f 84 d6 01 00 00 je 5b3964 : /* : * Check to see if we're still projecting out tuples from a previous scan : * tuple (because there is a function-returning-set in the projection : * expressions). If so, try to project another one. : */ : if (node->ps.ps_TupFromTlist) /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:140 2.44 : 5b378e: 41 80 7c 24 70 00 cmpb $0x0,0x70(%r12) 0.00 : 5b3794: 0f 85 a6 01 00 00 jne 5b3940 0.00 : 5b379a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : /* : * Reset per-tuple memory context to free any expression evaluation : * storage allocated in the previous tuple cycle. Note this can't happen : * until we're done projecting out tuples from a scan tuple. : */ : ResetExprContext(econtext); /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:155 2.44 : 5b37a0: 49 8b 7d 28 mov 0x28(%r13),%rdi 0.00 : 5b37a4: e8 07 52 1e 00 callq 7989b0 : */ : for (;;) : { : TupleTableSlot *slot; : : CHECK_FOR_INTERRUPTS(); 0.00 : 5b37a9: 0f b6 05 e0 68 60 00 movzbl 0x6068e0(%rip),%eax # bba090 0.00 : 5b37b0: 84 c0 test %al,%al 0.00 : 5b37b2: 0f 85 50 01 00 00 jne 5b3908 : static inline TupleTableSlot * : ExecScanFetch(ScanState *node, : ExecScanAccessMtd accessMtd, : ExecScanRecheckMtd recheckMtd) : { : EState *estate = node->ps.state; /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:41 2.44 : 5b37b8: 49 8b 54 24 10 mov 0x10(%r12),%rdx : : if (estate->es_epqTuple != NULL) /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:43 7.32 : 5b37bd: 48 83 ba d0 00 00 00 cmpq $0x0,0xd0(%rdx) 0.00 : 5b37c4: 00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:43 4.88 : 5b37c5: 0f 84 0d 01 00 00 je 5b38d8 : * conditions. : */ : Index scanrelid = ((Scan *) node->ps.plan)->scanrelid; : : Assert(scanrelid > 0); : if (estate->es_epqTupleSet[scanrelid - 1]) 0.00 : 5b37cb: 49 8b 44 24 08 mov 0x8(%r12),%rax 0.00 : 5b37d0: 8b 40 60 mov 0x60(%rax),%eax 0.00 : 5b37d3: 8d 48 ff lea -0x1(%rax),%ecx 0.00 : 5b37d6: 48 8b 82 d8 00 00 00 mov 0xd8(%rdx),%rax 0.00 : 5b37dd: 80 3c 08 00 cmpb $0x0,(%rax,%rcx,1) 0.00 : 5b37e1: 0f 84 f1 00 00 00 je 5b38d8 : { : TupleTableSlot *slot = node->ss_ScanTupleSlot; : : /* Return empty slot if we already returned a tuple */ : if (estate->es_epqScanDone[scanrelid - 1]) 0.00 : 5b37e7: 48 89 c8 mov %rcx,%rax 0.00 : 5b37ea: 48 03 82 e0 00 00 00 add 0xe0(%rdx),%rax : Index scanrelid = ((Scan *) node->ps.plan)->scanrelid; : : Assert(scanrelid > 0); : if (estate->es_epqTupleSet[scanrelid - 1]) : { : TupleTableSlot *slot = node->ss_ScanTupleSlot; 0.00 : 5b37f1: 49 8b 9c 24 88 00 00 mov 0x88(%r12),%rbx 0.00 : 5b37f8: 00 : : /* Return empty slot if we already returned a tuple */ : if (estate->es_epqScanDone[scanrelid - 1]) 0.00 : 5b37f9: 80 38 00 cmpb $0x0,(%rax) 0.00 : 5b37fc: 0f 85 16 01 00 00 jne 5b3918 : return ExecClearTuple(slot); : /* Else mark to remember that we shouldn't return more */ : estate->es_epqScanDone[scanrelid - 1] = true; 0.00 : 5b3802: c6 00 01 movb $0x1,(%rax) : : /* Return empty slot if we haven't got a test tuple */ : if (estate->es_epqTuple[scanrelid - 1] == NULL) 0.00 : 5b3805: 48 8b 82 d0 00 00 00 mov 0xd0(%rdx),%rax 0.00 : 5b380c: 48 8b 3c c8 mov (%rax,%rcx,8),%rdi 0.00 : 5b3810: 48 85 ff test %rdi,%rdi 0.00 : 5b3813: 0f 84 ff 00 00 00 je 5b3918 : return ExecClearTuple(slot); : : /* Store test tuple in the plan node's scan slot */ : ExecStoreTuple(estate->es_epqTuple[scanrelid - 1], 0.00 : 5b3819: 31 c9 xor %ecx,%ecx 0.00 : 5b381b: 31 d2 xor %edx,%edx 0.00 : 5b381d: 48 89 de mov %rbx,%rsi 0.00 : 5b3820: e8 5b 0c 00 00 callq 5b4480 : slot, InvalidBuffer, false); : : /* Check if it meets the access-method conditions */ : if (!(*recheckMtd) (node, slot)) 0.00 : 5b3825: 48 89 de mov %rbx,%rsi 0.00 : 5b3828: 4c 89 e7 mov %r12,%rdi 0.00 : 5b382b: ff 55 b0 callq *-0x50(%rbp) 0.00 : 5b382e: 84 c0 test %al,%al 0.00 : 5b3830: 0f 84 fa 00 00 00 je 5b3930 : * if the slot returned by the accessMtd contains NULL, then it means : * there is nothing more to scan so we just return an empty slot, : * being careful to use the projection result slot so it has correct : * tupleDesc. : */ : if (TupIsNull(slot)) 0.00 : 5b3836: 48 85 db test %rbx,%rbx 0.00 : 5b3839: 0f 84 ab 00 00 00 je 5b38ea /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:175 9.76 : 5b383f: 80 7b 04 00 cmpb $0x0,0x4(%rbx) 0.00 : 5b3843: 0f 85 a1 00 00 00 jne 5b38ea : * : * check for non-nil qual here to avoid a function call to ExecQual() : * when the qual is nil ... saves only a few cycles, but they add up : * ... : */ : if (!qual || ExecQual(qual, econtext, false)) 0.00 : 5b3849: 45 84 ff test %r15b,%r15b : } : : /* : * place the current tuple into the expr context : */ : econtext->ecxt_scantuple = slot; 0.00 : 5b384c: 49 89 5d 08 mov %rbx,0x8(%r13) : * : * check for non-nil qual here to avoid a function call to ExecQual() : * when the qual is nil ... saves only a few cycles, but they add up : * ... : */ : if (!qual || ExecQual(qual, econtext, false)) 0.00 : 5b3850: 75 3e jne 5b3890 0.00 : 5b3852: 48 8b 7d c0 mov -0x40(%rbp),%rdi 0.00 : 5b3856: 31 d2 xor %edx,%edx 0.00 : 5b3858: 4c 89 ee mov %r13,%rsi /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:195 7.32 : 5b385b: e8 b0 96 ff ff callq 5acf10 0.00 : 5b3860: 84 c0 test %al,%al 0.00 : 5b3862: 75 2c jne 5b3890 : */ : return slot; : } : } : else : InstrCountFiltered1(node, 1); 0.00 : 5b3864: 49 8b 44 24 18 mov 0x18(%r12),%rax 0.00 : 5b3869: 48 85 c0 test %rax,%rax 0.00 : 5b386c: 0f 84 2e ff ff ff je 5b37a0 0.00 : 5b3872: f2 0f 10 05 de b8 1f movsd 0x1fb8de(%rip),%xmm0 # 7af158 <__func__.15777+0x10> 0.00 : 5b3879: 00 0.00 : 5b387a: f2 0f 58 80 c8 00 00 addsd 0xc8(%rax),%xmm0 0.00 : 5b3881: 00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:223 2.44 : 5b3882: f2 0f 11 80 c8 00 00 movsd %xmm0,0xc8(%rax) 0.00 : 5b3889: 00 0.00 : 5b388a: e9 11 ff ff ff jmpq 5b37a0 0.00 : 5b388f: 90 nop : if (!qual || ExecQual(qual, econtext, false)) : { : /* : * Found a satisfactory scan tuple. : */ : if (projInfo) /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:200 2.44 : 5b3890: 4d 85 f6 test %r14,%r14 0.00 : 5b3893: 74 2b je 5b38c0 : /* : * Form a projection tuple, store it in the result tuple slot : * and return it --- unless we find we can project no tuples : * from this scan tuple, in which case continue scan. : */ : resultSlot = ExecProject(projInfo, &isDone); 0.00 : 5b3895: 48 8d 75 d4 lea -0x2c(%rbp),%rsi 0.00 : 5b3899: 4c 89 f7 mov %r14,%rdi 0.00 : 5b389c: e8 5f 97 ff ff callq 5ad000 0.00 : 5b38a1: 48 89 c3 mov %rax,%rbx : if (isDone != ExprEndResult) 0.00 : 5b38a4: 8b 45 d4 mov -0x2c(%rbp),%eax 0.00 : 5b38a7: 83 f8 02 cmp $0x2,%eax 0.00 : 5b38aa: 0f 84 f0 fe ff ff je 5b37a0 : { : node->ps.ps_TupFromTlist = (isDone == ExprMultipleResult); 0.00 : 5b38b0: 83 e8 01 sub $0x1,%eax 0.00 : 5b38b3: 41 0f 94 44 24 70 sete 0x70(%r12) 0.00 : 5b38b9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : /* : * Tuple fails qual, so free per-tuple memory and try again. : */ : ResetExprContext(econtext); : } : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:230 2.44 : 5b38c0: 48 83 c4 28 add $0x28,%rsp 0.00 : 5b38c4: 48 89 d8 mov %rbx,%rax 0.00 : 5b38c7: 5b pop %rbx 2.44 : 5b38c8: 41 5c pop %r12 0.00 : 5b38ca: 41 5d pop %r13 0.00 : 5b38cc: 41 5e pop %r14 0.00 : 5b38ce: 41 5f pop %r15 /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:230 7.32 : 5b38d0: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:230 2.44 : 5b38d1: c3 retq 0.00 : 5b38d2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : } : : /* : * Run the node-type-specific access method function to get the next tuple : */ : return (*accessMtd) (node); /home/Computational/mark/src/postgres-andres/src/backend/executor/execScan.c:82 4.88 : 5b38d8: 4c 89 e7 mov %r12,%rdi 0.00 : 5b38db: ff 55 b8 callq *-0x48(%rbp) 0.00 : 5b38de: 48 89 c3 mov %rax,%rbx : * if the slot returned by the accessMtd contains NULL, then it means : * there is nothing more to scan so we just return an empty slot, : * being careful to use the projection result slot so it has correct : * tupleDesc. : */ : if (TupIsNull(slot)) 0.00 : 5b38e1: 48 85 db test %rbx,%rbx 0.00 : 5b38e4: 0f 85 55 ff ff ff jne 5b383f : { : if (projInfo) 0.00 : 5b38ea: 4d 85 f6 test %r14,%r14 0.00 : 5b38ed: 0f 1f 00 nopl (%rax) 0.00 : 5b38f0: 74 ce je 5b38c0 : return ExecClearTuple(projInfo->pi_slot); 0.00 : 5b38f2: 49 8b 7e 18 mov 0x18(%r14),%rdi 0.00 : 5b38f6: e8 15 08 00 00 callq 5b4110 0.00 : 5b38fb: 48 89 c3 mov %rax,%rbx 0.00 : 5b38fe: 66 90 xchg %ax,%ax : /* : * Tuple fails qual, so free per-tuple memory and try again. : */ : ResetExprContext(econtext); : } : } 0.00 : 5b3900: eb be jmp 5b38c0 0.00 : 5b3902: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : */ : for (;;) : { : TupleTableSlot *slot; : : CHECK_FOR_INTERRUPTS(); 0.00 : 5b3908: e8 93 89 0e 00 callq 69c2a0 0.00 : 5b390d: 0f 1f 00 nopl (%rax) 0.00 : 5b3910: e9 a3 fe ff ff jmpq 5b37b8 0.00 : 5b3915: 0f 1f 00 nopl (%rax) : /* Else mark to remember that we shouldn't return more */ : estate->es_epqScanDone[scanrelid - 1] = true; : : /* Return empty slot if we haven't got a test tuple */ : if (estate->es_epqTuple[scanrelid - 1] == NULL) : return ExecClearTuple(slot); 0.00 : 5b3918: 48 89 df mov %rbx,%rdi 0.00 : 5b391b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5b3920: e8 eb 07 00 00 callq 5b4110 0.00 : 5b3925: 48 89 c3 mov %rax,%rbx 0.00 : 5b3928: e9 09 ff ff ff jmpq 5b3836 0.00 : 5b392d: 0f 1f 00 nopl (%rax) : ExecStoreTuple(estate->es_epqTuple[scanrelid - 1], : slot, InvalidBuffer, false); : : /* Check if it meets the access-method conditions */ : if (!(*recheckMtd) (node, slot)) : ExecClearTuple(slot); /* would not be returned by scan */ 0.00 : 5b3930: 48 89 df mov %rbx,%rdi 0.00 : 5b3933: e8 d8 07 00 00 callq 5b4110 0.00 : 5b3938: e9 f9 fe ff ff jmpq 5b3836 0.00 : 5b393d: 0f 1f 00 nopl (%rax) : * expressions). If so, try to project another one. : */ : if (node->ps.ps_TupFromTlist) : { : Assert(projInfo); /* can't get here if not projecting */ : resultSlot = ExecProject(projInfo, &isDone); 0.00 : 5b3940: 48 8d 75 d4 lea -0x2c(%rbp),%rsi 0.00 : 5b3944: 4c 89 f7 mov %r14,%rdi 0.00 : 5b3947: e8 b4 96 ff ff callq 5ad000 : if (isDone == ExprMultipleResult) 0.00 : 5b394c: 83 7d d4 01 cmpl $0x1,-0x2c(%rbp) : * expressions). If so, try to project another one. : */ : if (node->ps.ps_TupFromTlist) : { : Assert(projInfo); /* can't get here if not projecting */ : resultSlot = ExecProject(projInfo, &isDone); 0.00 : 5b3950: 48 89 c3 mov %rax,%rbx : if (isDone == ExprMultipleResult) 0.00 : 5b3953: 0f 84 67 ff ff ff je 5b38c0 : return resultSlot; : /* Done with that source tuple... */ : node->ps.ps_TupFromTlist = false; 0.00 : 5b3959: 41 c6 44 24 70 00 movb $0x0,0x70(%r12) 0.00 : 5b395f: e9 3c fe ff ff jmpq 5b37a0 : * If we have neither a qual to check nor a projection to do, just skip : * all the overhead and return the raw scan tuple. : */ : if (!qual && !projInfo) : { : ResetExprContext(econtext); 0.00 : 5b3964: 49 8b 7d 28 mov 0x28(%r13),%rdi 0.00 : 5b3968: e8 43 50 1e 00 callq 7989b0 : static inline TupleTableSlot * : ExecScanFetch(ScanState *node, : ExecScanAccessMtd accessMtd, : ExecScanRecheckMtd recheckMtd) : { : EState *estate = node->ps.state; 0.00 : 5b396d: 49 8b 54 24 10 mov 0x10(%r12),%rdx : : if (estate->es_epqTuple != NULL) 0.00 : 5b3972: 48 83 ba d0 00 00 00 cmpq $0x0,0xd0(%rdx) 0.00 : 5b3979: 00 0.00 : 5b397a: 74 74 je 5b39f0 : * conditions. : */ : Index scanrelid = ((Scan *) node->ps.plan)->scanrelid; : : Assert(scanrelid > 0); : if (estate->es_epqTupleSet[scanrelid - 1]) 0.00 : 5b397c: 49 8b 44 24 08 mov 0x8(%r12),%rax 0.00 : 5b3981: 8b 40 60 mov 0x60(%rax),%eax 0.00 : 5b3984: 8d 48 ff lea -0x1(%rax),%ecx 0.00 : 5b3987: 48 8b 82 d8 00 00 00 mov 0xd8(%rdx),%rax 0.00 : 5b398e: 80 3c 08 00 cmpb $0x0,(%rax,%rcx,1) 0.00 : 5b3992: 74 5c je 5b39f0 : { : TupleTableSlot *slot = node->ss_ScanTupleSlot; : : /* Return empty slot if we already returned a tuple */ : if (estate->es_epqScanDone[scanrelid - 1]) 0.00 : 5b3994: 48 89 c8 mov %rcx,%rax 0.00 : 5b3997: 48 03 82 e0 00 00 00 add 0xe0(%rdx),%rax : Index scanrelid = ((Scan *) node->ps.plan)->scanrelid; : : Assert(scanrelid > 0); : if (estate->es_epqTupleSet[scanrelid - 1]) : { : TupleTableSlot *slot = node->ss_ScanTupleSlot; 0.00 : 5b399e: 49 8b 9c 24 88 00 00 mov 0x88(%r12),%rbx 0.00 : 5b39a5: 00 : : /* Return empty slot if we already returned a tuple */ : if (estate->es_epqScanDone[scanrelid - 1]) 0.00 : 5b39a6: 80 38 00 cmpb $0x0,(%rax) 0.00 : 5b39a9: 75 5a jne 5b3a05 : return ExecClearTuple(slot); : /* Else mark to remember that we shouldn't return more */ : estate->es_epqScanDone[scanrelid - 1] = true; 0.00 : 5b39ab: c6 00 01 movb $0x1,(%rax) : : /* Return empty slot if we haven't got a test tuple */ : if (estate->es_epqTuple[scanrelid - 1] == NULL) 0.00 : 5b39ae: 48 8b 82 d0 00 00 00 mov 0xd0(%rdx),%rax 0.00 : 5b39b5: 48 8b 3c c8 mov (%rax,%rcx,8),%rdi 0.00 : 5b39b9: 48 85 ff test %rdi,%rdi 0.00 : 5b39bc: 74 47 je 5b3a05 : return ExecClearTuple(slot); : : /* Store test tuple in the plan node's scan slot */ : ExecStoreTuple(estate->es_epqTuple[scanrelid - 1], 0.00 : 5b39be: 31 c9 xor %ecx,%ecx 0.00 : 5b39c0: 31 d2 xor %edx,%edx 0.00 : 5b39c2: 48 89 de mov %rbx,%rsi 0.00 : 5b39c5: e8 b6 0a 00 00 callq 5b4480 : slot, InvalidBuffer, false); : : /* Check if it meets the access-method conditions */ : if (!(*recheckMtd) (node, slot)) 0.00 : 5b39ca: 48 89 de mov %rbx,%rsi 0.00 : 5b39cd: 4c 89 e7 mov %r12,%rdi 0.00 : 5b39d0: ff 55 b0 callq *-0x50(%rbp) 0.00 : 5b39d3: 84 c0 test %al,%al 0.00 : 5b39d5: 0f 85 e5 fe ff ff jne 5b38c0 : ExecClearTuple(slot); /* would not be returned by scan */ 0.00 : 5b39db: 48 89 df mov %rbx,%rdi 0.00 : 5b39de: e8 2d 07 00 00 callq 5b4110 0.00 : 5b39e3: e9 d8 fe ff ff jmpq 5b38c0 0.00 : 5b39e8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5b39ef: 00 : } : : /* : * Run the node-type-specific access method function to get the next tuple : */ : return (*accessMtd) (node); 0.00 : 5b39f0: 4c 89 e7 mov %r12,%rdi 0.00 : 5b39f3: ff 55 b8 callq *-0x48(%rbp) 0.00 : 5b39f6: 48 89 c3 mov %rax,%rbx 0.00 : 5b39f9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 5b3a00: e9 bb fe ff ff jmpq 5b38c0 : /* Else mark to remember that we shouldn't return more */ : estate->es_epqScanDone[scanrelid - 1] = true; : : /* Return empty slot if we haven't got a test tuple */ : if (estate->es_epqTuple[scanrelid - 1] == NULL) : return ExecClearTuple(slot); 0.00 : 5b3a05: 48 89 df mov %rbx,%rdi 0.00 : 5b3a08: e8 03 07 00 00 callq 5b4110 0.00 : 5b3a0d: 48 89 c3 mov %rax,%rbx 0.00 : 5b3a10: e9 ab fe ff ff jmpq 5b38c0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 20.51 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:394 17.95 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:415 15.38 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:393 10.26 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:402 7.69 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:403 5.13 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:396 5.13 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:396 5.13 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:404 2.56 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:404 2.56 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:403 2.56 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:411 2.56 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:411 2.56 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:393 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000495e60 : : * In page-at-a-time mode it performs additional work, namely determining : * which tuples on the page are visible. : */ : static void : heapgetpage(HeapScanDesc scan, BlockNumber page) : { 0.00 : 495e60: 55 push %rbp 0.00 : 495e61: 48 89 e5 mov %rsp,%rbp 0.00 : 495e64: 41 57 push %r15 0.00 : 495e66: 41 56 push %r14 0.00 : 495e68: 49 89 fe mov %rdi,%r14 0.00 : 495e6b: 41 55 push %r13 0.00 : 495e6d: 41 54 push %r12 0.00 : 495e6f: 53 push %rbx 0.00 : 495e70: 48 83 ec 78 sub $0x78,%rsp 0.00 : 495e74: 89 b5 6c ff ff ff mov %esi,-0x94(%rbp) : bool all_visible; : : Assert(page < scan->rs_nblocks); : : /* release previous scan buffer, if any */ : if (BufferIsValid(scan->rs_cbuf)) 0.00 : 495e7a: 8b 7f 64 mov 0x64(%rdi),%edi 0.00 : 495e7d: 85 ff test %edi,%edi 0.00 : 495e7f: 0f 85 fb 01 00 00 jne 496080 : /* : * Be sure to check for interrupts at least once per page. Checks at : * higher code levels won't be able to stop a seqscan that encounters many : * pages' worth of consecutive dead tuples. : */ : CHECK_FOR_INTERRUPTS(); 0.00 : 495e85: 0f b6 05 04 42 72 00 movzbl 0x724204(%rip),%eax # bba090 0.00 : 495e8c: 84 c0 test %al,%al 0.00 : 495e8e: 0f 85 d4 01 00 00 jne 496068 : : /* read page using selected strategy */ : scan->rs_cbuf = ReadBufferExtended(scan->rs_rd, MAIN_FORKNUM, page, 0.00 : 495e94: 4d 8b 46 38 mov 0x38(%r14),%r8 0.00 : 495e98: 8b 95 6c ff ff ff mov -0x94(%rbp),%edx 0.00 : 495e9e: 31 c9 xor %ecx,%ecx 0.00 : 495ea0: 49 8b 3e mov (%r14),%rdi 0.00 : 495ea3: 31 f6 xor %esi,%esi 0.00 : 495ea5: e8 c6 06 1e 00 callq 676570 : RBM_NORMAL, scan->rs_strategy); : scan->rs_cblock = page; : : if (!scan->rs_pageatatime) 0.00 : 495eaa: 41 80 7e 21 00 cmpb $0x0,0x21(%r14) : * pages' worth of consecutive dead tuples. : */ : CHECK_FOR_INTERRUPTS(); : : /* read page using selected strategy */ : scan->rs_cbuf = ReadBufferExtended(scan->rs_rd, MAIN_FORKNUM, page, 0.00 : 495eaf: 41 89 c7 mov %eax,%r15d 0.00 : 495eb2: 41 89 46 64 mov %eax,0x64(%r14) : RBM_NORMAL, scan->rs_strategy); : scan->rs_cblock = page; 0.00 : 495eb6: 8b 85 6c ff ff ff mov -0x94(%rbp),%eax 0.00 : 495ebc: 41 89 46 60 mov %eax,0x60(%r14) : : if (!scan->rs_pageatatime) 0.00 : 495ec0: 75 16 jne 495ed8 : : LockBuffer(buffer, BUFFER_LOCK_UNLOCK); : : Assert(ntup <= MaxHeapTuplesPerPage); : scan->rs_ntuples = ntup; : } 0.00 : 495ec2: 48 83 c4 78 add $0x78,%rsp 0.00 : 495ec6: 5b pop %rbx 0.00 : 495ec7: 41 5c pop %r12 0.00 : 495ec9: 41 5d pop %r13 0.00 : 495ecb: 41 5e pop %r14 0.00 : 495ecd: 41 5f pop %r15 0.00 : 495ecf: c9 leaveq 0.00 : 495ed0: c3 retq 0.00 : 495ed1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : : if (!scan->rs_pageatatime) : return; : : buffer = scan->rs_cbuf; : snapshot = scan->rs_snapshot; 0.00 : 495ed8: 49 8b 4e 08 mov 0x8(%r14),%rcx : : /* : * Prune and repair fragmentation for the whole page, if possible. : */ : heap_page_prune_opt(scan->rs_rd, buffer); 0.00 : 495edc: 44 89 fe mov %r15d,%esi : : if (!scan->rs_pageatatime) : return; : : buffer = scan->rs_cbuf; : snapshot = scan->rs_snapshot; 0.00 : 495edf: 48 89 4d 88 mov %rcx,-0x78(%rbp) : : /* : * Prune and repair fragmentation for the whole page, if possible. : */ : heap_page_prune_opt(scan->rs_rd, buffer); 0.00 : 495ee3: 49 8b 3e mov (%r14),%rdi 0.00 : 495ee6: e8 65 97 00 00 callq 49f650 : /* : * We must hold share lock on the buffer content while examining tuple : * visibility. Afterwards, however, the tuples we have found to be : * visible are guaranteed good as long as we hold the buffer pin. : */ : LockBuffer(buffer, BUFFER_LOCK_SHARE); 0.00 : 495eeb: be 01 00 00 00 mov $0x1,%esi 0.00 : 495ef0: 44 89 ff mov %r15d,%edi 0.00 : 495ef3: e8 18 e8 1d 00 callq 674710 : : dp = (Page) BufferGetPage(buffer); 0.00 : 495ef8: 45 85 ff test %r15d,%r15d 0.00 : 495efb: 0f 88 cf 01 00 00 js 4960d0 0.00 : 495f01: 41 8d 47 ff lea -0x1(%r15),%eax 0.00 : 495f05: 48 63 d8 movslq %eax,%rbx 0.00 : 495f08: 48 c1 e3 0d shl $0xd,%rbx 0.00 : 495f0c: 48 03 1d e5 9b 72 00 add 0x729be5(%rip),%rbx # bbfaf8 : lines = PageGetMaxOffsetNumber(dp); 0.00 : 495f13: 0f b7 43 0c movzwl 0xc(%rbx),%eax 0.00 : 495f17: c7 45 90 00 00 00 00 movl $0x0,-0x70(%rbp) 0.00 : 495f1e: 66 83 f8 18 cmp $0x18,%ax 0.00 : 495f22: 0f 87 88 01 00 00 ja 4960b0 : * the page-level flag can be trusted in the same way, because it might : * get propagated somehow without being explicitly WAL-logged, e.g. via a : * full page write. Until we can prove that beyond doubt, let's check each : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; 0.00 : 495f28: c6 45 af 00 movb $0x0,-0x51(%rbp) 0.00 : 495f2c: f6 43 0a 04 testb $0x4,0xa(%rbx) 0.00 : 495f30: 0f 85 62 01 00 00 jne 496098 : : for (lineoff = FirstOffsetNumber, lpp = PageGetItemId(dp, lineoff); : lineoff <= lines; 0.00 : 495f36: 8b 7d 90 mov -0x70(%rbp),%edi : lineoff++, lpp++) 0.00 : 495f39: c7 45 a8 00 00 00 00 movl $0x0,-0x58(%rbp) : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; : : for (lineoff = FirstOffsetNumber, lpp = PageGetItemId(dp, lineoff); : lineoff <= lines; 0.00 : 495f40: 85 ff test %edi,%edi 0.00 : 495f42: 0f 8e c8 00 00 00 jle 496010 : bool valid; : : loctup.t_tableOid = RelationGetRelid(scan->rs_rd); : loctup.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); : loctup.t_len = ItemIdGetLength(lpp); : ItemPointerSet(&(loctup.t_self), page, lineoff); 0.00 : 495f48: 8b 8d 6c ff ff ff mov -0x94(%rbp),%ecx : * full page write. Until we can prove that beyond doubt, let's check each : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; : : for (lineoff = FirstOffsetNumber, lpp = PageGetItemId(dp, lineoff); 0.00 : 495f4e: 4c 8d 6b 18 lea 0x18(%rbx),%r13 : bool valid; : : loctup.t_tableOid = RelationGetRelid(scan->rs_rd); : loctup.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); : loctup.t_len = ItemIdGetLength(lpp); : ItemPointerSet(&(loctup.t_self), page, lineoff); 0.00 : 495f52: 41 bc 01 00 00 00 mov $0x1,%r12d 0.00 : 495f58: c1 e9 10 shr $0x10,%ecx 0.00 : 495f5b: 66 89 8d 70 ff ff ff mov %cx,-0x90(%rbp) 0.00 : 495f62: eb 19 jmp 495f7d 0.00 : 495f64: 0f 1f 40 00 nopl 0x0(%rax) : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; : : for (lineoff = FirstOffsetNumber, lpp = PageGetItemId(dp, lineoff); : lineoff <= lines; : lineoff++, lpp++) 0.00 : 495f68: 41 83 c4 01 add $0x1,%r12d : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; : : for (lineoff = FirstOffsetNumber, lpp = PageGetItemId(dp, lineoff); : lineoff <= lines; 0.00 : 495f6c: 41 0f b7 c4 movzwl %r12w,%eax 0.00 : 495f70: 39 45 90 cmp %eax,-0x70(%rbp) 0.00 : 495f73: 0f 8c 97 00 00 00 jl 496010 : lineoff++, lpp++) 0.00 : 495f79: 49 83 c5 04 add $0x4,%r13 : { : if (ItemIdIsNormal(lpp)) 0.00 : 495f7d: 41 8b 45 00 mov 0x0(%r13),%eax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:396 5.13 : 495f81: 25 00 80 01 00 and $0x18000,%eax 5.13 : 495f86: 3d 00 80 00 00 cmp $0x8000,%eax 0.00 : 495f8b: 75 db jne 495f68 : { : HeapTupleData loctup; : bool valid; : : loctup.t_tableOid = RelationGetRelid(scan->rs_rd); 0.00 : 495f8d: 49 8b 36 mov (%r14),%rsi : loctup.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); : loctup.t_len = ItemIdGetLength(lpp); : ItemPointerSet(&(loctup.t_self), page, lineoff); 0.00 : 495f90: 0f b7 8d 6c ff ff ff movzwl -0x94(%rbp),%ecx : if (ItemIdIsNormal(lpp)) : { : HeapTupleData loctup; : bool valid; : : loctup.t_tableOid = RelationGetRelid(scan->rs_rd); 0.00 : 495f97: 8b 46 40 mov 0x40(%rsi),%eax 0.00 : 495f9a: 89 45 bc mov %eax,-0x44(%rbp) : loctup.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); 0.00 : 495f9d: 41 0f b7 45 00 movzwl 0x0(%r13),%eax 0.00 : 495fa2: 25 ff 7f 00 00 and $0x7fff,%eax 0.00 : 495fa7: 48 8d 04 03 lea (%rbx,%rax,1),%rax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:402 10.26 : 495fab: 48 89 45 c0 mov %rax,-0x40(%rbp) : loctup.t_len = ItemIdGetLength(lpp); 0.00 : 495faf: 41 0f b7 45 02 movzwl 0x2(%r13),%eax : ItemPointerSet(&(loctup.t_self), page, lineoff); 0.00 : 495fb4: 66 89 4d b6 mov %cx,-0x4a(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:404 2.56 : 495fb8: 66 44 89 65 b8 mov %r12w,-0x48(%rbp) : HeapTupleData loctup; : bool valid; : : loctup.t_tableOid = RelationGetRelid(scan->rs_rd); : loctup.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); : loctup.t_len = ItemIdGetLength(lpp); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:403 7.69 : 495fbd: 66 d1 e8 shr %ax : ItemPointerSet(&(loctup.t_self), page, lineoff); : : if (all_visible) 0.00 : 495fc0: 80 7d af 00 cmpb $0x0,-0x51(%rbp) : HeapTupleData loctup; : bool valid; : : loctup.t_tableOid = RelationGetRelid(scan->rs_rd); : loctup.t_data = (HeapTupleHeader) PageGetItem((Page) dp, lpp); : loctup.t_len = ItemIdGetLength(lpp); 0.00 : 495fc4: 0f b7 c0 movzwl %ax,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:403 2.56 : 495fc7: 89 45 b0 mov %eax,-0x50(%rbp) : ItemPointerSet(&(loctup.t_self), page, lineoff); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:404 5.13 : 495fca: 0f b7 85 70 ff ff ff movzwl -0x90(%rbp),%eax 0.00 : 495fd1: 66 89 45 b4 mov %ax,-0x4c(%rbp) : : if (all_visible) 0.00 : 495fd5: 74 59 je 496030 : valid = true; : else : valid = HeapTupleSatisfiesVisibility(&loctup, snapshot, buffer); : : CheckForSerializableConflictOut(valid, scan->rs_rd, &loctup, 0.00 : 495fd7: 4c 8b 45 88 mov -0x78(%rbp),%r8 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:411 2.56 : 495fdb: 48 8d 55 b0 lea -0x50(%rbp),%rdx 2.56 : 495fdf: 44 89 f9 mov %r15d,%ecx 0.00 : 495fe2: bf 01 00 00 00 mov $0x1,%edi 0.00 : 495fe7: e8 74 e6 1f 00 callq 694660 : buffer, snapshot); : : if (valid) : scan->rs_vistuples[ntup++] = lineoff; 0.00 : 495fec: 48 63 45 a8 movslq -0x58(%rbp),%rax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:415 17.95 : 495ff0: 66 45 89 64 46 7c mov %r12w,0x7c(%r14,%rax,2) : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; : : for (lineoff = FirstOffsetNumber, lpp = PageGetItemId(dp, lineoff); : lineoff <= lines; : lineoff++, lpp++) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:394 20.51 : 495ff6: 41 83 c4 01 add $0x1,%r12d : : CheckForSerializableConflictOut(valid, scan->rs_rd, &loctup, : buffer, snapshot); : : if (valid) : scan->rs_vistuples[ntup++] = lineoff; 0.00 : 495ffa: 83 45 a8 01 addl $0x1,-0x58(%rbp) : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; : : for (lineoff = FirstOffsetNumber, lpp = PageGetItemId(dp, lineoff); : lineoff <= lines; /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:393 2.56 : 495ffe: 41 0f b7 c4 movzwl %r12w,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:393 15.38 : 496002: 39 45 90 cmp %eax,-0x70(%rbp) 0.00 : 496005: 0f 8d 6e ff ff ff jge 495f79 0.00 : 49600b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : if (valid) : scan->rs_vistuples[ntup++] = lineoff; : } : } : : LockBuffer(buffer, BUFFER_LOCK_UNLOCK); 0.00 : 496010: 44 89 ff mov %r15d,%edi 0.00 : 496013: 31 f6 xor %esi,%esi 0.00 : 496015: e8 f6 e6 1d 00 callq 674710 : : Assert(ntup <= MaxHeapTuplesPerPage); : scan->rs_ntuples = ntup; 0.00 : 49601a: 8b 45 a8 mov -0x58(%rbp),%eax 0.00 : 49601d: 41 89 46 78 mov %eax,0x78(%r14) : } 0.00 : 496021: 48 83 c4 78 add $0x78,%rsp 0.00 : 496025: 5b pop %rbx 0.00 : 496026: 41 5c pop %r12 0.00 : 496028: 41 5d pop %r13 0.00 : 49602a: 41 5e pop %r14 0.00 : 49602c: 41 5f pop %r15 0.00 : 49602e: c9 leaveq 0.00 : 49602f: c3 retq : ItemPointerSet(&(loctup.t_self), page, lineoff); : : if (all_visible) : valid = true; : else : valid = HeapTupleSatisfiesVisibility(&loctup, snapshot, buffer); 0.00 : 496030: 48 8b 75 88 mov -0x78(%rbp),%rsi 0.00 : 496034: 44 89 fa mov %r15d,%edx 0.00 : 496037: 48 8d 7d b0 lea -0x50(%rbp),%rdi 0.00 : 49603b: ff 16 callq *(%rsi) : : CheckForSerializableConflictOut(valid, scan->rs_rd, &loctup, 0.00 : 49603d: 4c 8b 45 88 mov -0x78(%rbp),%r8 : ItemPointerSet(&(loctup.t_self), page, lineoff); : : if (all_visible) : valid = true; : else : valid = HeapTupleSatisfiesVisibility(&loctup, snapshot, buffer); 0.00 : 496041: 88 45 ae mov %al,-0x52(%rbp) : : CheckForSerializableConflictOut(valid, scan->rs_rd, &loctup, 0.00 : 496044: 48 8d 55 b0 lea -0x50(%rbp),%rdx 0.00 : 496048: 49 8b 36 mov (%r14),%rsi 0.00 : 49604b: 0f be f8 movsbl %al,%edi 0.00 : 49604e: 44 89 f9 mov %r15d,%ecx 0.00 : 496051: e8 0a e6 1f 00 callq 694660 : buffer, snapshot); : : if (valid) 0.00 : 496056: 80 7d ae 00 cmpb $0x0,-0x52(%rbp) 0.00 : 49605a: 0f 84 08 ff ff ff je 495f68 0.00 : 496060: eb 8a jmp 495fec 0.00 : 496062: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 496068: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 49606f: 00 : /* : * Be sure to check for interrupts at least once per page. Checks at : * higher code levels won't be able to stop a seqscan that encounters many : * pages' worth of consecutive dead tuples. : */ : CHECK_FOR_INTERRUPTS(); 0.00 : 496070: e8 2b 62 20 00 callq 69c2a0 0.00 : 496075: 0f 1f 00 nopl (%rax) 0.00 : 496078: e9 17 fe ff ff jmpq 495e94 0.00 : 49607d: 0f 1f 00 nopl (%rax) : Assert(page < scan->rs_nblocks); : : /* release previous scan buffer, if any */ : if (BufferIsValid(scan->rs_cbuf)) : { : ReleaseBuffer(scan->rs_cbuf); 0.00 : 496080: e8 db ed 1d 00 callq 674e60 : scan->rs_cbuf = InvalidBuffer; 0.00 : 496085: 41 c7 46 64 00 00 00 movl $0x0,0x64(%r14) 0.00 : 49608c: 00 0.00 : 49608d: 0f 1f 00 nopl (%rax) 0.00 : 496090: e9 f0 fd ff ff jmpq 495e85 0.00 : 496095: 0f 1f 00 nopl (%rax) : * the page-level flag can be trusted in the same way, because it might : * get propagated somehow without being explicitly WAL-logged, e.g. via a : * full page write. Until we can prove that beyond doubt, let's check each : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; 0.00 : 496098: 48 8b 45 88 mov -0x78(%rbp),%rax 0.00 : 49609c: 80 78 29 00 cmpb $0x0,0x29(%rax) 0.00 : 4960a0: 0f 94 45 af sete -0x51(%rbp) 0.00 : 4960a4: e9 8d fe ff ff jmpq 495f36 0.00 : 4960a9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : * visible are guaranteed good as long as we hold the buffer pin. : */ : LockBuffer(buffer, BUFFER_LOCK_SHARE); : : dp = (Page) BufferGetPage(buffer); : lines = PageGetMaxOffsetNumber(dp); 0.00 : 4960b0: 0f b7 c0 movzwl %ax,%eax : * the page-level flag can be trusted in the same way, because it might : * get propagated somehow without being explicitly WAL-logged, e.g. via a : * full page write. Until we can prove that beyond doubt, let's check each : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; 0.00 : 4960b3: c6 45 af 00 movb $0x0,-0x51(%rbp) : * visible are guaranteed good as long as we hold the buffer pin. : */ : LockBuffer(buffer, BUFFER_LOCK_SHARE); : : dp = (Page) BufferGetPage(buffer); : lines = PageGetMaxOffsetNumber(dp); 0.00 : 4960b7: 48 83 e8 18 sub $0x18,%rax 0.00 : 4960bb: 48 c1 e8 02 shr $0x2,%rax 0.00 : 4960bf: 89 45 90 mov %eax,-0x70(%rbp) : * the page-level flag can be trusted in the same way, because it might : * get propagated somehow without being explicitly WAL-logged, e.g. via a : * full page write. Until we can prove that beyond doubt, let's check each : * tuple for visibility the hard way. : */ : all_visible = PageIsAllVisible(dp) && !snapshot->takenDuringRecovery; 0.00 : 4960c2: f6 43 0a 04 testb $0x4,0xa(%rbx) 0.00 : 4960c6: 0f 84 6a fe ff ff je 495f36 0.00 : 4960cc: eb ca jmp 496098 0.00 : 4960ce: 66 90 xchg %ax,%ax : * visibility. Afterwards, however, the tuples we have found to be : * visible are guaranteed good as long as we hold the buffer pin. : */ : LockBuffer(buffer, BUFFER_LOCK_SHARE); : : dp = (Page) BufferGetPage(buffer); 0.00 : 4960d0: 44 89 f8 mov %r15d,%eax 0.00 : 4960d3: 48 8b 15 3e 70 6e 00 mov 0x6e703e(%rip),%rdx # b7d118 0.00 : 4960da: f7 d0 not %eax 0.00 : 4960dc: 48 98 cltq 0.00 : 4960de: 48 8b 1c c2 mov (%rdx,%rax,8),%rbx 0.00 : 4960e2: e9 2c fe ff ff jmpq 495f13 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 18.92 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 16.22 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:151 13.51 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:158 10.81 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 10.81 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:147 8.11 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:158 5.41 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:151 5.41 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:158 2.70 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 2.70 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 2.70 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 2.70 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:147 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000007989b0 : : * The type-specific reset routine handles the context itself, but we : * have to do the recursion for the children. : */ : void : MemoryContextReset(MemoryContext context) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 18.92 : 7989b0: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 2.70 : 7989b1: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 10.81 : 7989b4: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:143 2.70 : 7989b5: 48 89 fb mov %rdi,%rbx 2.70 : 7989b8: 48 83 ec 08 sub $0x8,%rsp : AssertArg(MemoryContextIsValid(context)); : : /* save a function call in common case where there are no children */ : if (context->firstchild != NULL) /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:147 2.70 : 7989bc: 48 83 7f 18 00 cmpq $0x0,0x18(%rdi) /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:147 10.81 : 7989c1: 74 05 je 7989c8 : MemoryContextResetChildren(context); 0.00 : 7989c3: e8 b8 ff ff ff callq 798980 : : /* Nothing to do if no pallocs since startup or last reset */ : if (!context->isReset) /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:151 5.41 : 7989c8: 80 7b 30 00 cmpb $0x0,0x30(%rbx) 16.22 : 7989cc: 75 0e jne 7989dc : { : (*context->methods->reset) (context); 0.00 : 7989ce: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 7989d2: 48 89 df mov %rbx,%rdi 0.00 : 7989d5: ff 50 20 callq *0x20(%rax) : context->isReset = true; 0.00 : 7989d8: c6 43 30 01 movb $0x1,0x30(%rbx) : VALGRIND_DESTROY_MEMPOOL(context); : VALGRIND_CREATE_MEMPOOL(context, 0, false); : } : } /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:158 5.41 : 7989dc: 48 83 c4 08 add $0x8,%rsp 0.00 : 7989e0: 5b pop %rbx 21.62 : 7989e1: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 27.78 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1508 19.44 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1506 11.11 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1483 8.33 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1483 8.33 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1488 5.56 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1483 5.56 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1509 2.78 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1483 2.78 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1488 2.78 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1494 2.78 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1506 2.78 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1506 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000496e90 : : #endif /* !defined(HEAPDEBUGALL) */ : : : HeapTuple : heap_getnext(HeapScanDesc scan, ScanDirection direction) : { /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1483 5.56 : 496e90: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1483 2.78 : 496e91: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1483 11.11 : 496e94: 53 push %rbx 8.33 : 496e95: 48 89 fb mov %rdi,%rbx 0.00 : 496e98: 48 83 ec 08 sub $0x8,%rsp : /* Note: no locking manipulations needed */ : : HEAPDEBUG_1; /* heap_getnext( info ) */ : : if (scan->rs_pageatatime) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1488 8.33 : 496e9c: 80 7f 21 00 cmpb $0x0,0x21(%rdi) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1488 2.78 : 496ea0: 74 3e je 496ee0 : heapgettup_pagemode(scan, direction, 0.00 : 496ea2: 48 8b 4f 18 mov 0x18(%rdi),%rcx 0.00 : 496ea6: 8b 57 10 mov 0x10(%rdi),%edx 0.00 : 496ea9: e8 42 f2 ff ff callq 4960f0 : scan->rs_nkeys, scan->rs_key); : else : heapgettup(scan, direction, scan->rs_nkeys, scan->rs_key); : : if (scan->rs_ctup.t_data == NULL) 0.00 : 496eae: 31 c0 xor %eax,%eax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1494 2.78 : 496eb0: 48 83 7b 58 00 cmpq $0x0,0x58(%rbx) 0.00 : 496eb5: 74 18 je 496ecf : * if we get here it means we have a new current scan tuple, so point to : * the proper return buffer and return the tuple. : */ : HEAPDEBUG_3; /* heap_getnext returning tuple */ : : pgstat_count_heap_getnext(scan->rs_rd); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1506 2.78 : 496eb7: 48 8b 03 mov (%rbx),%rax 0.00 : 496eba: 48 8b 80 38 01 00 00 mov 0x138(%rax),%rax /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1506 19.44 : 496ec1: 48 85 c0 test %rax,%rax 0.00 : 496ec4: 74 05 je 496ecb /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1506 2.78 : 496ec6: 48 83 40 18 01 addq $0x1,0x18(%rax) : : return &(scan->rs_ctup); /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1508 27.78 : 496ecb: 48 8d 43 48 lea 0x48(%rbx),%rax : } 0.00 : 496ecf: 48 83 c4 08 add $0x8,%rsp 0.00 : 496ed3: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/access/heap/heapam.c:1509 5.56 : 496ed4: c9 leaveq 0.00 : 496ed5: c3 retq 0.00 : 496ed6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 496edd: 00 00 00 : : if (scan->rs_pageatatime) : heapgettup_pagemode(scan, direction, : scan->rs_nkeys, scan->rs_key); : else : heapgettup(scan, direction, scan->rs_nkeys, scan->rs_key); 0.00 : 496ee0: 48 8b 4f 18 mov 0x18(%rdi),%rcx 0.00 : 496ee4: 8b 57 10 mov 0x10(%rdi),%edx 0.00 : 496ee7: e8 c4 f7 ff ff callq 4966b0 0.00 : 496eec: eb c0 jmp 496eae Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 27.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5169 11.11 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5130 11.11 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5169 8.33 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5130 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5130 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5161 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5190 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5130 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:93 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5161 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5167 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5167 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5167 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5179 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5190 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005acf10 : : * : * ---------------------------------------------------------------- : */ : bool : ExecQual(List *qual, ExprContext *econtext, bool resultForNull) : { 0.00 : 5acf10: 55 push %rbp 0.00 : 5acf11: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5130 11.11 : 5acf14: 41 57 push %r15 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5130 2.78 : 5acf16: 41 56 push %r14 0.00 : 5acf18: 41 89 d6 mov %edx,%r14d /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5130 8.33 : 5acf1b: 41 55 push %r13 0.00 : 5acf1d: 41 54 push %r12 0.00 : 5acf1f: 49 89 f4 mov %rsi,%r12 0.00 : 5acf22: 53 push %rbx 5.56 : 5acf23: 48 83 ec 18 sub $0x18,%rsp : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; : : CurrentMemoryContext = context; /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 2.78 : 5acf27: 48 8b 46 28 mov 0x28(%rsi),%rax : #endif /* PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(PG_LIST_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE ListCell * : list_head(const List *l) : { : return l ? l->head : NULL; 0.00 : 5acf2b: 48 85 ff test %rdi,%rdi : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:93 2.78 : 5acf2e: 4c 8b 3d 2b d9 60 00 mov 0x60d92b(%rip),%r15 # bba860 : : CurrentMemoryContext = context; 0.00 : 5acf35: 48 89 05 24 d9 60 00 mov %rax,0x60d924(%rip) # bba860 0.00 : 5acf3c: 74 4a je 5acf88 0.00 : 5acf3e: 48 8b 5f 08 mov 0x8(%rdi),%rbx : * or more NULL subresult, with all the rest TRUE) and the caller has : * specified resultForNull = TRUE. : */ : result = true; : : foreach(l, qual) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5161 5.56 : 5acf42: 48 85 db test %rbx,%rbx 0.00 : 5acf45: 74 41 je 5acf88 0.00 : 5acf47: 4c 8d 6d d7 lea -0x29(%rbp),%r13 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5161 2.78 : 5acf4b: eb 11 jmp 5acf5e 0.00 : 5acf4d: 0f 1f 00 nopl (%rax) : : expr_value = ExecEvalExpr(clause, econtext, &isNull, NULL); : : if (isNull) : { : if (resultForNull == false) 0.00 : 5acf50: 45 84 f6 test %r14b,%r14b 0.00 : 5acf53: 74 24 je 5acf79 : * or more NULL subresult, with all the rest TRUE) and the caller has : * specified resultForNull = TRUE. : */ : result = true; : : foreach(l, qual) 0.00 : 5acf55: 48 8b 5b 08 mov 0x8(%rbx),%rbx 0.00 : 5acf59: 48 85 db test %rbx,%rbx 0.00 : 5acf5c: 74 2a je 5acf88 : { : ExprState *clause = (ExprState *) lfirst(l); 0.00 : 5acf5e: 48 8b 03 mov (%rbx),%rax : Datum expr_value; : bool isNull; : : expr_value = ExecEvalExpr(clause, econtext, &isNull, NULL); /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5167 2.78 : 5acf61: 31 c9 xor %ecx,%ecx 0.00 : 5acf63: 4c 89 ea mov %r13,%rdx 2.78 : 5acf66: 4c 89 e6 mov %r12,%rsi 0.00 : 5acf69: 48 89 c7 mov %rax,%rdi 2.78 : 5acf6c: ff 50 10 callq *0x10(%rax) : : if (isNull) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5169 11.11 : 5acf6f: 80 7d d7 00 cmpb $0x0,-0x29(%rbp) 27.78 : 5acf73: 75 db jne 5acf50 : break; : } : } : else : { : if (!DatumGetBool(expr_value)) /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5179 2.78 : 5acf75: 84 c0 test %al,%al 0.00 : 5acf77: 75 dc jne 5acf55 : * or more NULL subresult, with all the rest TRUE) and the caller has : * specified resultForNull = TRUE. : */ : result = true; : : foreach(l, qual) 0.00 : 5acf79: 31 c0 xor %eax,%eax 0.00 : 5acf7b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5acf80: eb 0b jmp 5acf8d 0.00 : 5acf82: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5acf88: b8 01 00 00 00 mov $0x1,%eax 0.00 : 5acf8d: 4c 89 3d cc d8 60 00 mov %r15,0x60d8cc(%rip) # bba860 : } : : MemoryContextSwitchTo(oldContext); : : return result; : } 0.00 : 5acf94: 48 83 c4 18 add $0x18,%rsp /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5190 2.78 : 5acf98: 5b pop %rbx 0.00 : 5acf99: 41 5c pop %r12 0.00 : 5acf9b: 41 5d pop %r13 0.00 : 5acf9d: 41 5e pop %r14 0.00 : 5acf9f: 41 5f pop %r15 /home/Computational/mark/src/postgres-andres/src/backend/executor/execQual.c:5190 5.56 : 5acfa1: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 19.44 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:63 11.11 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 8.33 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 8.33 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:53 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:53 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:54 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 5.56 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:65 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:53 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:53 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:56 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:56 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 2.78 /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:65 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b7f00 : : } : : /* Entry to a plan node */ : void : InstrStartNode(Instrumentation *instr) : { 0.00 : 5b7f00: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:53 2.78 : 5b7f01: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:53 5.56 : 5b7f04: 53 push %rbx 5.56 : 5b7f05: 48 89 fb mov %rdi,%rbx /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:53 2.78 : 5b7f08: 48 83 ec 08 sub $0x8,%rsp : if (instr->need_timer) 0.00 : 5b7f0c: 80 3f 00 cmpb $0x0,(%rdi) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:54 5.56 : 5b7f0f: 74 4a je 5b7f5b : { : if (INSTR_TIME_IS_ZERO(instr->starttime)) 0.00 : 5b7f11: 48 83 7f 10 00 cmpq $0x0,0x10(%rdi) 0.00 : 5b7f16: 75 07 jne 5b7f1f /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:56 2.78 : 5b7f18: 48 83 7f 08 00 cmpq $0x0,0x8(%rdi) 2.78 : 5b7f1d: 74 31 je 5b7f50 : INSTR_TIME_SET_CURRENT(instr->starttime); : else : elog(ERROR, "InstrStartNode called twice in a row"); 0.00 : 5b7f1f: ba 98 b6 88 00 mov $0x88b698,%edx 0.00 : 5b7f24: be 3b 00 00 00 mov $0x3b,%esi 0.00 : 5b7f29: bf fa b5 88 00 mov $0x88b5fa,%edi 0.00 : 5b7f2e: e8 ed 34 1c 00 callq 77b420 0.00 : 5b7f33: be 58 b6 88 00 mov $0x88b658,%esi 0.00 : 5b7f38: bf 14 00 00 00 mov $0x14,%edi 0.00 : 5b7f3d: 31 c0 xor %eax,%eax 0.00 : 5b7f3f: e8 ec 32 1c 00 callq 77b230 0.00 : 5b7f44: e8 87 15 eb ff callq 4694d0 0.00 : 5b7f49: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : InstrStartNode(Instrumentation *instr) : { : if (instr->need_timer) : { : if (INSTR_TIME_IS_ZERO(instr->starttime)) : INSTR_TIME_SET_CURRENT(instr->starttime); 0.00 : 5b7f50: 48 8d 7f 08 lea 0x8(%rdi),%rdi 0.00 : 5b7f54: 31 f6 xor %esi,%esi 0.00 : 5b7f56: e8 65 16 eb ff callq 4695c0 : else : elog(ERROR, "InstrStartNode called twice in a row"); : } : : /* save buffer usage totals at node entry, if needed */ : if (instr->need_bufusage) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:63 19.44 : 5b7f5b: 80 7b 01 00 cmpb $0x0,0x1(%rbx) 0.00 : 5b7f5f: 0f 84 a9 00 00 00 je 5b800e : instr->bufusage_start = pgBufferUsage; 0.00 : 5b7f65: 48 8b 05 f4 77 60 00 mov 0x6077f4(%rip),%rax # bbf760 0.00 : 5b7f6c: 48 89 43 38 mov %rax,0x38(%rbx) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 5.56 : 5b7f70: 48 8b 05 f1 77 60 00 mov 0x6077f1(%rip),%rax # bbf768 0.00 : 5b7f77: 48 89 43 40 mov %rax,0x40(%rbx) 0.00 : 5b7f7b: 48 8b 05 ee 77 60 00 mov 0x6077ee(%rip),%rax # bbf770 0.00 : 5b7f82: 48 89 43 48 mov %rax,0x48(%rbx) 8.33 : 5b7f86: 48 8b 05 eb 77 60 00 mov 0x6077eb(%rip),%rax # bbf778 0.00 : 5b7f8d: 48 89 43 50 mov %rax,0x50(%rbx) 0.00 : 5b7f91: 48 8b 05 e8 77 60 00 mov 0x6077e8(%rip),%rax # bbf780 0.00 : 5b7f98: 48 89 43 58 mov %rax,0x58(%rbx) 11.11 : 5b7f9c: 48 8b 05 e5 77 60 00 mov 0x6077e5(%rip),%rax # bbf788 0.00 : 5b7fa3: 48 89 43 60 mov %rax,0x60(%rbx) 0.00 : 5b7fa7: 48 8b 05 e2 77 60 00 mov 0x6077e2(%rip),%rax # bbf790 0.00 : 5b7fae: 48 89 43 68 mov %rax,0x68(%rbx) 5.56 : 5b7fb2: 48 8b 05 df 77 60 00 mov 0x6077df(%rip),%rax # bbf798 0.00 : 5b7fb9: 48 89 43 70 mov %rax,0x70(%rbx) 0.00 : 5b7fbd: 48 8b 05 dc 77 60 00 mov 0x6077dc(%rip),%rax # bbf7a0 0.00 : 5b7fc4: 48 89 43 78 mov %rax,0x78(%rbx) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 2.78 : 5b7fc8: 48 8b 05 d9 77 60 00 mov 0x6077d9(%rip),%rax # bbf7a8 0.00 : 5b7fcf: 48 89 83 80 00 00 00 mov %rax,0x80(%rbx) 0.00 : 5b7fd6: 48 8b 05 d3 77 60 00 mov 0x6077d3(%rip),%rax # bbf7b0 0.00 : 5b7fdd: 48 89 83 88 00 00 00 mov %rax,0x88(%rbx) 2.78 : 5b7fe4: 48 8b 05 cd 77 60 00 mov 0x6077cd(%rip),%rax # bbf7b8 0.00 : 5b7feb: 48 89 83 90 00 00 00 mov %rax,0x90(%rbx) 0.00 : 5b7ff2: 48 8b 05 c7 77 60 00 mov 0x6077c7(%rip),%rax # bbf7c0 0.00 : 5b7ff9: 48 89 83 98 00 00 00 mov %rax,0x98(%rbx) /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:64 8.33 : 5b8000: 48 8b 05 c1 77 60 00 mov 0x6077c1(%rip),%rax # bbf7c8 0.00 : 5b8007: 48 89 83 a0 00 00 00 mov %rax,0xa0(%rbx) : } /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:65 2.78 : 5b800e: 48 83 c4 08 add $0x8,%rsp 0.00 : 5b8012: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/executor/instrument.c:65 5.56 : 5b8013: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 17.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 14.29 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:923 8.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 8.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:920 8.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:923 5.71 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 5.71 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:914 5.71 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:915 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:909 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:909 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:915 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:917 2.86 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:923 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000758300 : : * but if we ever change the semantics of bpchar comparison to trust : * strcoll() completely, we'd need to do something different in non-C locales. : */ : Datum : hashbpchar(PG_FUNCTION_ARGS) : { 8.57 : 758300: 55 push %rbp 5.71 : 758301: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 2.86 : 758304: 48 89 5d e8 mov %rbx,-0x18(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 17.14 : 758308: 4c 89 65 f0 mov %r12,-0x10(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:908 2.86 : 75830c: 49 89 fc mov %rdi,%r12 2.86 : 75830f: 4c 89 6d f8 mov %r13,-0x8(%rbp) 2.86 : 758313: 48 83 ec 20 sub $0x20,%rsp : BpChar *key = PG_GETARG_BPCHAR_PP(0); 0.00 : 758317: 48 8b 7f 20 mov 0x20(%rdi),%rdi /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:909 2.86 : 75831b: e8 c0 69 02 00 callq 77ece0 2.86 : 758320: 49 89 c5 mov %rax,%r13 : char *keydata; : int keylen; : Datum result; : : keydata = VARDATA_ANY(key); 0.00 : 758323: 48 8d 58 01 lea 0x1(%rax),%rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:914 5.71 : 758327: 48 8d 40 04 lea 0x4(%rax),%rax 0.00 : 75832b: 41 f6 45 00 01 testb $0x1,0x0(%r13) : keylen = bcTruelen(key); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:915 2.86 : 758330: 4c 89 ef mov %r13,%rdi : BpChar *key = PG_GETARG_BPCHAR_PP(0); : char *keydata; : int keylen; : Datum result; : : keydata = VARDATA_ANY(key); 0.00 : 758333: 48 0f 44 d8 cmove %rax,%rbx : keylen = bcTruelen(key); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:915 5.71 : 758337: e8 54 fa ff ff callq 757d90 : : result = hash_any((unsigned char *) keydata, keylen); 0.00 : 75833c: 48 89 df mov %rbx,%rdi : char *keydata; : int keylen; : Datum result; : : keydata = VARDATA_ANY(key); : keylen = bcTruelen(key); 0.00 : 75833f: 89 c6 mov %eax,%esi : : result = hash_any((unsigned char *) keydata, keylen); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:917 2.86 : 758341: e8 0a 80 d3 ff callq 490350 : : /* Avoid leaking memory for toasted inputs */ : PG_FREE_IF_COPY(key, 0); 0.00 : 758346: 4d 3b 6c 24 20 cmp 0x20(%r12),%r13 : Datum result; : : keydata = VARDATA_ANY(key); : keylen = bcTruelen(key); : : result = hash_any((unsigned char *) keydata, keylen); 0.00 : 75834b: 48 89 c3 mov %rax,%rbx : : /* Avoid leaking memory for toasted inputs */ : PG_FREE_IF_COPY(key, 0); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:920 8.57 : 75834e: 74 08 je 758358 0.00 : 758350: 4c 89 ef mov %r13,%rdi 0.00 : 758353: e8 28 08 04 00 callq 798b80 : : return result; : } 0.00 : 758358: 48 89 d8 mov %rbx,%rax 0.00 : 75835b: 4c 8b 65 f0 mov -0x10(%rbp),%r12 0.00 : 75835f: 48 8b 5d e8 mov -0x18(%rbp),%rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/varchar.c:923 14.29 : 758363: 4c 8b 6d f8 mov -0x8(%rbp),%r13 11.43 : 758367: c9 leaveq Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 31.43 ??:0 22.86 ??:0 20.00 ??:0 17.14 ??:0 8.57 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000099390 <__gettimeofday>: ??:0 22.86 : 99390: 48 83 ec 08 sub $0x8,%rsp 0.00 : 99394: 48 8b 05 ad de 2d 00 mov 0x2ddead(%rip),%rax # 377248 <__vdso_gettimeofday> 8.57 : 9939b: 48 c1 c8 11 ror $0x11,%rax 20.00 : 9939f: 64 48 33 04 25 30 00 xor %fs:0x30,%rax 0.00 : 993a6: 00 00 31.43 : 993a8: ff d0 callq *%rax 17.14 : 993aa: 3d 01 f0 ff ff cmp $0xfffff001,%eax 0.00 : 993af: 73 05 jae 993b6 <__gettimeofday+0x26> 0.00 : 993b1: 48 83 c4 08 add $0x8,%rsp 0.00 : 993b5: c3 retq 0.00 : 993b6: 48 8b 0d 7b 8a 2d 00 mov 0x2d8a7b(%rip),%rcx # 371e38 <_DYNAMIC+0x2d8> 0.00 : 993bd: 31 d2 xor %edx,%edx 0.00 : 993bf: 48 29 c2 sub %rax,%rdx 0.00 : 993c2: 64 89 11 mov %edx,%fs:(%rcx) 0.00 : 993c5: 48 83 c8 ff or $0xffffffffffffffff,%rax 0.00 : 993c9: eb e6 jmp 993b1 <__gettimeofday+0x21> Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 18.75 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:374 15.62 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:373 12.50 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:410 9.38 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:333 9.38 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:410 6.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:341 6.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 6.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:367 6.25 /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 3.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:333 3.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:374 3.12 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:410 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005a8e70 : : * zeroed. : */ : TupleHashEntry : LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot, : bool *isnew) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:333 9.38 : 5a8e70: 55 push %rbp 0.00 : 5a8e71: 48 89 e5 mov %rsp,%rbp 0.00 : 5a8e74: 4c 89 65 e0 mov %r12,-0x20(%rbp) 0.00 : 5a8e78: 4c 89 6d e8 mov %r13,-0x18(%rbp) 0.00 : 5a8e7c: 49 89 fc mov %rdi,%r12 0.00 : 5a8e7f: 4c 89 75 f0 mov %r14,-0x10(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:333 3.12 : 5a8e83: 48 89 5d d8 mov %rbx,-0x28(%rbp) 0.00 : 5a8e87: 49 89 f6 mov %rsi,%r14 0.00 : 5a8e8a: 4c 89 7d f8 mov %r15,-0x8(%rbp) 0.00 : 5a8e8e: 48 83 ec 50 sub $0x50,%rsp : TupleHashTable saveCurHT; : TupleHashEntryData dummy; : bool found; : : /* If first time through, clone the input slot to make table slot */ : if (hashtable->tableslot == NULL) /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:341 6.25 : 5a8e92: 48 83 7f 40 00 cmpq $0x0,0x40(%rdi) : * zeroed. : */ : TupleHashEntry : LookupTupleHashEntry(TupleHashTable hashtable, TupleTableSlot *slot, : bool *isnew) : { 0.00 : 5a8e97: 49 89 d5 mov %rdx,%r13 : TupleHashTable saveCurHT; : TupleHashEntryData dummy; : bool found; : : /* If first time through, clone the input slot to make table slot */ : if (hashtable->tableslot == NULL) 0.00 : 5a8e9a: 0f 84 08 01 00 00 je 5a8fa8 : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.00 : 5a8ea0: 48 8b 05 b9 19 61 00 mov 0x6119b9(%rip),%rax # bba860 : saveCurHT = CurTupleHashTable; : CurTupleHashTable = hashtable; : : /* Search the hash table */ : dummy.firstTuple = NULL; /* flag to reference inputslot */ : entry = (TupleHashEntry) hash_search(hashtable->hashtab, /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:374 18.75 : 5a8ea7: 31 d2 xor %edx,%edx 0.00 : 5a8ea9: 48 8d 4d cf lea -0x31(%rbp),%rcx 0.00 : 5a8ead: 4d 85 ed test %r13,%r13 0.00 : 5a8eb0: 48 8d 75 c0 lea -0x40(%rbp),%rsi : : saveCurHT = CurTupleHashTable; : CurTupleHashTable = hashtable; : : /* Search the hash table */ : dummy.firstTuple = NULL; /* flag to reference inputslot */ /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:373 15.62 : 5a8eb4: 48 c7 45 c0 00 00 00 movq $0x0,-0x40(%rbp) 0.00 : 5a8ebb: 00 : entry = (TupleHashEntry) hash_search(hashtable->hashtab, 0.00 : 5a8ebc: 0f 95 c2 setne %dl 0.00 : 5a8ebf: 48 89 45 b8 mov %rax,-0x48(%rbp) : : CurrentMemoryContext = context; 0.00 : 5a8ec3: 49 8b 44 24 30 mov 0x30(%r12),%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 6.25 : 5a8ec8: 48 89 05 91 19 61 00 mov %rax,0x611991(%rip) # bba860 : * : * We save and restore CurTupleHashTable just in case someone manages to : * invoke this code re-entrantly. : */ : hashtable->inputslot = slot; : hashtable->in_hash_funcs = hashtable->tab_hash_funcs; 0.00 : 5a8ecf: 49 8b 44 24 18 mov 0x18(%r12),%rax : * Set up data needed by hash and match functions : * : * We save and restore CurTupleHashTable just in case someone manages to : * invoke this code re-entrantly. : */ : hashtable->inputslot = slot; 0.00 : 5a8ed4: 4d 89 74 24 48 mov %r14,0x48(%r12) : hashtable->in_hash_funcs = hashtable->tab_hash_funcs; 0.00 : 5a8ed9: 49 89 44 24 50 mov %rax,0x50(%r12) : hashtable->cur_eq_funcs = hashtable->tab_eq_funcs; /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:367 6.25 : 5a8ede: 49 8b 44 24 20 mov 0x20(%r12),%rax 0.00 : 5a8ee3: 49 89 44 24 58 mov %rax,0x58(%r12) : : saveCurHT = CurTupleHashTable; 0.00 : 5a8ee8: 4c 8b 3d d1 09 5d 00 mov 0x5d09d1(%rip),%r15 # b798c0 : CurTupleHashTable = hashtable; 0.00 : 5a8eef: 4c 89 25 ca 09 5d 00 mov %r12,0x5d09ca(%rip) # b798c0 : : /* Search the hash table */ : dummy.firstTuple = NULL; /* flag to reference inputslot */ : entry = (TupleHashEntry) hash_search(hashtable->hashtab, /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:374 3.12 : 5a8ef6: 49 8b 3c 24 mov (%r12),%rdi 0.00 : 5a8efa: e8 a1 b7 1d 00 callq 7846a0 : &dummy, : isnew ? HASH_ENTER : HASH_FIND, : &found); : : if (isnew) 0.00 : 5a8eff: 4d 85 ed test %r13,%r13 : saveCurHT = CurTupleHashTable; : CurTupleHashTable = hashtable; : : /* Search the hash table */ : dummy.firstTuple = NULL; /* flag to reference inputslot */ : entry = (TupleHashEntry) hash_search(hashtable->hashtab, 0.00 : 5a8f02: 48 89 c3 mov %rax,%rbx : &dummy, : isnew ? HASH_ENTER : HASH_FIND, : &found); : : if (isnew) 0.00 : 5a8f05: 74 41 je 5a8f48 : { : if (found) 0.00 : 5a8f07: 80 7d cf 00 cmpb $0x0,-0x31(%rbp) 0.00 : 5a8f0b: 75 6b jne 5a8f78 : * : * Zero any caller-requested space in the entry. (This zaps the : * "key data" dynahash.c copied into the new entry, but we don't : * care since we're about to overwrite it anyway.) : */ : MemSet(entry, 0, hashtable->entrysize); 0.00 : 5a8f0d: 49 8b 54 24 38 mov 0x38(%r12),%rdx 0.00 : 5a8f12: 48 09 d0 or %rdx,%rax 0.00 : 5a8f15: a8 07 test $0x7,%al 0.00 : 5a8f17: 75 09 jne 5a8f22 0.00 : 5a8f19: 48 81 fa 00 04 00 00 cmp $0x400,%rdx 0.00 : 5a8f20: 76 5e jbe 5a8f80 0.00 : 5a8f22: 31 f6 xor %esi,%esi 0.00 : 5a8f24: 48 89 df mov %rbx,%rdi 0.00 : 5a8f27: e8 f4 04 ec ff callq 469420 0.00 : 5a8f2c: 49 8b 44 24 28 mov 0x28(%r12),%rax : : /* Copy the first tuple into the table context */ : MemoryContextSwitchTo(hashtable->tablecxt); : entry->firstTuple = ExecCopySlotMinimalTuple(slot); 0.00 : 5a8f31: 4c 89 f7 mov %r14,%rdi 0.00 : 5a8f34: 48 89 05 25 19 61 00 mov %rax,0x611925(%rip) # bba860 0.00 : 5a8f3b: e8 c0 af 00 00 callq 5b3f00 0.00 : 5a8f40: 48 89 03 mov %rax,(%rbx) : : *isnew = true; 0.00 : 5a8f43: 41 c6 45 00 01 movb $0x1,0x0(%r13) /home/Computational/mark/src/postgres-andres/src/backend/executor/../../../src/include/utils/palloc.h:95 6.25 : 5a8f48: 48 8b 45 b8 mov -0x48(%rbp),%rax : } : } : : CurTupleHashTable = saveCurHT; 0.00 : 5a8f4c: 4c 89 3d 6d 09 5d 00 mov %r15,0x5d096d(%rip) # b798c0 : : MemoryContextSwitchTo(oldContext); : : return entry; : } 0.00 : 5a8f53: 4c 8b 65 e0 mov -0x20(%rbp),%r12 0.00 : 5a8f57: 4c 8b 6d e8 mov -0x18(%rbp),%r13 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:410 9.38 : 5a8f5b: 4c 8b 75 f0 mov -0x10(%rbp),%r14 0.00 : 5a8f5f: 4c 8b 7d f8 mov -0x8(%rbp),%r15 0.00 : 5a8f63: 48 89 05 f6 18 61 00 mov %rax,0x6118f6(%rip) # bba860 0.00 : 5a8f6a: 48 89 d8 mov %rbx,%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:410 3.12 : 5a8f6d: 48 8b 5d d8 mov -0x28(%rbp),%rbx 0.00 : 5a8f71: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:410 12.50 : 5a8f72: c3 retq 0.00 : 5a8f73: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : if (isnew) : { : if (found) : { : /* found pre-existing entry */ : *isnew = false; 0.00 : 5a8f78: 41 c6 45 00 00 movb $0x0,0x0(%r13) 0.00 : 5a8f7d: eb c9 jmp 5a8f48 0.00 : 5a8f7f: 90 nop : * : * Zero any caller-requested space in the entry. (This zaps the : * "key data" dynahash.c copied into the new entry, but we don't : * care since we're about to overwrite it anyway.) : */ : MemSet(entry, 0, hashtable->entrysize); 0.00 : 5a8f80: 48 8d 14 13 lea (%rbx,%rdx,1),%rdx 0.00 : 5a8f84: 48 89 d8 mov %rbx,%rax 0.00 : 5a8f87: 48 39 d3 cmp %rdx,%rbx 0.00 : 5a8f8a: 73 a0 jae 5a8f2c 0.00 : 5a8f8c: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 5a8f90: 48 c7 00 00 00 00 00 movq $0x0,(%rax) 0.00 : 5a8f97: 48 83 c0 08 add $0x8,%rax 0.00 : 5a8f9b: 48 39 c2 cmp %rax,%rdx 0.00 : 5a8f9e: 77 f0 ja 5a8f90 0.00 : 5a8fa0: eb 8a jmp 5a8f2c 0.00 : 5a8fa2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 5a8fa8: 48 8b 47 28 mov 0x28(%rdi),%rax : #endif /* !PG_USE_INLINE */ : #if defined(PG_USE_INLINE) || defined(MCXT_INCLUDE_DEFINITIONS) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; 0.00 : 5a8fac: 48 8b 1d ad 18 61 00 mov 0x6118ad(%rip),%rbx # bba860 : : CurrentMemoryContext = context; 0.00 : 5a8fb3: 48 89 05 a6 18 61 00 mov %rax,0x6118a6(%rip) # bba860 : : /* : * We copy the input tuple descriptor just for safety --- we assume : * all input tuples will have equivalent descriptors. : */ : tupdesc = CreateTupleDescCopy(slot->tts_tupleDescriptor); 0.00 : 5a8fba: 48 8b 7e 10 mov 0x10(%rsi),%rdi 0.00 : 5a8fbe: e8 bd be ec ff callq 474e80 0.00 : 5a8fc3: 48 89 c7 mov %rax,%rdi : hashtable->tableslot = MakeSingleTupleTableSlot(tupdesc); 0.00 : 5a8fc6: e8 85 b7 00 00 callq 5b4750 0.00 : 5a8fcb: 49 89 44 24 40 mov %rax,0x40(%r12) 0.00 : 5a8fd0: 48 89 1d 89 18 61 00 mov %rbx,0x611889(%rip) # bba860 0.00 : 5a8fd7: e9 c4 fe ff ff jmpq 5a8ea0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 26.67 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2159 26.67 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2161 20.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2159 20.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2176 3.33 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2158 3.33 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2161 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b8340 : : * identity of the memory context that aggregate transition values are : * being stored in. : */ : int : AggCheckCallContext(FunctionCallInfo fcinfo, MemoryContext *aggcontext) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2158 3.33 : 5b8340: 55 push %rbp : if (fcinfo->context && IsA(fcinfo->context, AggState)) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2159 20.00 : 5b8341: 48 8b 57 08 mov 0x8(%rdi),%rdx : * identity of the memory context that aggregate transition values are : * being stored in. : */ : int : AggCheckCallContext(FunctionCallInfo fcinfo, MemoryContext *aggcontext) : { 0.00 : 5b8345: 48 89 e5 mov %rsp,%rbp : if (fcinfo->context && IsA(fcinfo->context, AggState)) 0.00 : 5b8348: 48 85 d2 test %rdx,%rdx 0.00 : 5b834b: 74 10 je 5b835d 26.67 : 5b834d: 8b 02 mov (%rdx),%eax 0.00 : 5b834f: 3d e4 00 00 00 cmp $0xe4,%eax 0.00 : 5b8354: 74 3a je 5b8390 : { : if (aggcontext) : *aggcontext = ((AggState *) fcinfo->context)->aggcontext; : return AGG_CONTEXT_AGGREGATE; : } : if (fcinfo->context && IsA(fcinfo->context, WindowAggState)) 0.00 : 5b8356: 3d e5 00 00 00 cmp $0xe5,%eax 0.00 : 5b835b: 74 13 je 5b8370 : *aggcontext = ((WindowAggState *) fcinfo->context)->curaggcontext; : return AGG_CONTEXT_WINDOW; : } : : /* this is just to prevent "uninitialized variable" warnings */ : if (aggcontext) 0.00 : 5b835d: 31 c0 xor %eax,%eax 0.00 : 5b835f: 48 85 f6 test %rsi,%rsi 0.00 : 5b8362: 74 09 je 5b836d : *aggcontext = NULL; 0.00 : 5b8364: 48 c7 06 00 00 00 00 movq $0x0,(%rsi) 0.00 : 5b836b: 31 c0 xor %eax,%eax : return 0; : } 0.00 : 5b836d: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2176 20.00 : 5b836e: c3 retq 0.00 : 5b836f: 90 nop : *aggcontext = ((AggState *) fcinfo->context)->aggcontext; : return AGG_CONTEXT_AGGREGATE; : } : if (fcinfo->context && IsA(fcinfo->context, WindowAggState)) : { : if (aggcontext) 0.00 : 5b8370: 48 85 f6 test %rsi,%rsi 0.00 : 5b8373: b0 02 mov $0x2,%al 0.00 : 5b8375: 74 f6 je 5b836d : *aggcontext = ((WindowAggState *) fcinfo->context)->curaggcontext; 0.00 : 5b8377: 48 8b 82 40 01 00 00 mov 0x140(%rdx),%rax 0.00 : 5b837e: 48 89 06 mov %rax,(%rsi) 0.00 : 5b8381: b8 02 00 00 00 mov $0x2,%eax : : /* this is just to prevent "uninitialized variable" warnings */ : if (aggcontext) : *aggcontext = NULL; : return 0; : } 0.00 : 5b8386: c9 leaveq 0.00 : 5b8387: c3 retq 0.00 : 5b8388: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 5b838f: 00 : int : AggCheckCallContext(FunctionCallInfo fcinfo, MemoryContext *aggcontext) : { : if (fcinfo->context && IsA(fcinfo->context, AggState)) : { : if (aggcontext) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2161 3.33 : 5b8390: 48 85 f6 test %rsi,%rsi 0.00 : 5b8393: b0 01 mov $0x1,%al /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeAgg.c:2161 26.67 : 5b8395: 74 d6 je 5b836d : *aggcontext = ((AggState *) fcinfo->context)->aggcontext; 0.00 : 5b8397: 48 8b 82 b8 00 00 00 mov 0xb8(%rdx),%rax 0.00 : 5b839e: 48 89 06 mov %rax,(%rsi) 0.00 : 5b83a1: b8 01 00 00 00 mov $0x1,%eax : : /* this is just to prevent "uninitialized variable" warnings */ : if (aggcontext) : *aggcontext = NULL; : return 0; : } 0.00 : 5b83a6: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 23.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:616 20.00 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:617 16.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:609 6.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:609 6.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:611 6.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:614 6.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:616 6.67 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:617 3.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:609 3.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:614 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006c9820 : : PG_RETURN_BOOL(timestamp_cmp_internal(dt1, dt2) > 0); : } : : Datum : date_le_timestamp(PG_FUNCTION_ARGS) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:609 16.67 : 6c9820: 55 push %rbp 6.67 : 6c9821: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:609 3.33 : 6c9824: 53 push %rbx 0.00 : 6c9825: 48 83 ec 08 sub $0x8,%rsp : DateADT dateVal = PG_GETARG_DATEADT(0); : Timestamp dt2 = PG_GETARG_TIMESTAMP(1); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:611 6.67 : 6c9829: 48 8b 5f 28 mov 0x28(%rdi),%rbx : Timestamp dt1; : : dt1 = date2timestamp(dateVal); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:614 6.67 : 6c982d: 48 8b 7f 20 mov 0x20(%rdi),%rdi 0.00 : 6c9831: e8 da dd ff ff callq 6c7610 : : PG_RETURN_BOOL(timestamp_cmp_internal(dt1, dt2) <= 0); 0.00 : 6c9836: 48 89 de mov %rbx,%rsi : { : DateADT dateVal = PG_GETARG_DATEADT(0); : Timestamp dt2 = PG_GETARG_TIMESTAMP(1); : Timestamp dt1; : : dt1 = date2timestamp(dateVal); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:614 3.33 : 6c9839: 48 89 c7 mov %rax,%rdi : : PG_RETURN_BOOL(timestamp_cmp_internal(dt1, dt2) <= 0); 0.00 : 6c983c: e8 2f 70 07 00 callq 740870 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:616 23.33 : 6c9841: 85 c0 test %eax,%eax 0.00 : 6c9843: 0f 9e c0 setle %al : } 0.00 : 6c9846: 48 83 c4 08 add $0x8,%rsp : Timestamp dt2 = PG_GETARG_TIMESTAMP(1); : Timestamp dt1; : : dt1 = date2timestamp(dateVal); : : PG_RETURN_BOOL(timestamp_cmp_internal(dt1, dt2) <= 0); 6.67 : 6c984a: 0f b6 c0 movzbl %al,%eax : } 0.00 : 6c984d: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:617 26.67 : 6c984e: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 34.48 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:573 17.24 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:564 13.79 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:573 10.34 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:541 6.90 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:564 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:559 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:541 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:559 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:564 3.45 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:564 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005a9510 : : * Also, the caller must select an appropriate memory context for running : * the compare functions. (dynahash.c doesn't change CurrentMemoryContext.) : */ : static int : TupleHashTableMatch(const void *key1, const void *key2, Size keysize) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:541 10.34 : 5a9510: 55 push %rbp : * LookupTupleHashEntry's dummy TupleHashEntryData. The other direction : * could be supported too, but is not currently used by dynahash.c. : */ : Assert(tuple1 != NULL); : slot1 = hashtable->tableslot; : ExecStoreMinimalTuple(tuple1, slot1, false); /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:559 3.45 : 5a9511: 31 d2 xor %edx,%edx : * Also, the caller must select an appropriate memory context for running : * the compare functions. (dynahash.c doesn't change CurrentMemoryContext.) : */ : static int : TupleHashTableMatch(const void *key1, const void *key2, Size keysize) : { 0.00 : 5a9513: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:541 3.45 : 5a9516: 41 54 push %r12 0.00 : 5a9518: 53 push %rbx : #ifdef USE_ASSERT_CHECKING : MinimalTuple tuple2 = ((const TupleHashEntryData *) key2)->firstTuple; : #endif : TupleTableSlot *slot1; : TupleTableSlot *slot2; : TupleHashTable hashtable = CurTupleHashTable; 0.00 : 5a9519: 48 8b 1d a0 03 5d 00 mov 0x5d03a0(%rip),%rbx # b798c0 : * LookupTupleHashEntry's dummy TupleHashEntryData. The other direction : * could be supported too, but is not currently used by dynahash.c. : */ : Assert(tuple1 != NULL); : slot1 = hashtable->tableslot; : ExecStoreMinimalTuple(tuple1, slot1, false); /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:559 3.45 : 5a9520: 48 8b 3f mov (%rdi),%rdi : * argument being an actual table entry, and the second argument being : * LookupTupleHashEntry's dummy TupleHashEntryData. The other direction : * could be supported too, but is not currently used by dynahash.c. : */ : Assert(tuple1 != NULL); : slot1 = hashtable->tableslot; 0.00 : 5a9523: 4c 8b 63 40 mov 0x40(%rbx),%r12 : ExecStoreMinimalTuple(tuple1, slot1, false); 0.00 : 5a9527: 4c 89 e6 mov %r12,%rsi 0.00 : 5a952a: e8 b1 ae 00 00 callq 5b43e0 : Assert(tuple2 == NULL); : slot2 = hashtable->inputslot; : : /* For crosstype comparisons, the inputslot must be first */ : if (execTuplesMatch(slot2, 0.00 : 5a952f: 48 8b 4b 10 mov 0x10(%rbx),%rcx 0.00 : 5a9533: 8b 53 08 mov 0x8(%rbx),%edx /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:564 6.90 : 5a9536: 4c 89 e6 mov %r12,%rsi /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:564 3.45 : 5a9539: 48 8b 7b 48 mov 0x48(%rbx),%rdi 0.00 : 5a953d: 4c 8b 4b 30 mov 0x30(%rbx),%r9 0.00 : 5a9541: 4c 8b 43 58 mov 0x58(%rbx),%r8 3.45 : 5a9545: e8 f6 fe ff ff callq 5a9440 /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:564 17.24 : 5a954a: 84 c0 test %al,%al : hashtable->cur_eq_funcs, : hashtable->tempcxt)) : return 0; : else : return 1; : } 0.00 : 5a954c: 5b pop %rbx : ExecStoreMinimalTuple(tuple1, slot1, false); : Assert(tuple2 == NULL); : slot2 = hashtable->inputslot; : : /* For crosstype comparisons, the inputslot must be first */ : if (execTuplesMatch(slot2, 0.00 : 5a954d: 0f 94 c0 sete %al 0.00 : 5a9550: 0f b6 c0 movzbl %al,%eax : hashtable->cur_eq_funcs, : hashtable->tempcxt)) : return 0; : else : return 1; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execGrouping.c:573 13.79 : 5a9553: 41 5c pop %r12 34.48 : 5a9555: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 37.93 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2237 31.03 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2242 20.69 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2238 3.45 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2238 3.45 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2237 3.45 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2242 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077ed10 : : *------------------------------------------------------------------------- : */ : : struct varlena * : pg_detoast_datum(struct varlena * datum) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2237 37.93 : 77ed10: 55 push %rbp : if (VARATT_IS_EXTENDED(datum)) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2238 3.45 : 77ed11: f6 07 03 testb $0x3,(%rdi) : *------------------------------------------------------------------------- : */ : : struct varlena * : pg_detoast_datum(struct varlena * datum) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2237 3.45 : 77ed14: 48 89 e5 mov %rsp,%rbp : if (VARATT_IS_EXTENDED(datum)) /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2238 20.69 : 77ed17: 75 07 jne 77ed20 : return heap_tuple_untoast_attr(datum); : else : return datum; : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2242 3.45 : 77ed19: 48 89 f8 mov %rdi,%rax 0.00 : 77ed1c: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2242 31.03 : 77ed1d: c3 retq 0.00 : 77ed1e: 66 90 xchg %ax,%ax 0.00 : 77ed20: c9 leaveq : : struct varlena * : pg_detoast_datum(struct varlena * datum) : { : if (VARATT_IS_EXTENDED(datum)) : return heap_tuple_untoast_attr(datum); 0.00 : 77ed21: e9 2a 41 d2 ff jmpq 4a2e50 Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 14.29 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 14.29 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 10.71 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 10.71 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 10.71 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:483 7.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:470 7.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 7.14 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:483 3.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 3.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 3.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 3.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 3.57 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006c7610 : : * time zone : */ : : static Timestamp : date2timestamp(DateADT dateVal) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 14.29 : 6c7610: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 3.57 : 6c7611: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 10.71 : 6c7614: 53 push %rbx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:459 3.57 : 6c7615: 48 83 ec 08 sub $0x8,%rsp : Timestamp result; : : if (DATE_IS_NOBEGIN(dateVal)) 0.00 : 6c7619: 81 ff 00 00 00 80 cmp $0x80000000,%edi 0.00 : 6c761f: 74 57 je 6c7678 : TIMESTAMP_NOBEGIN(result); : else if (DATE_IS_NOEND(dateVal)) 0.00 : 6c7621: 81 ff ff ff ff 7f cmp $0x7fffffff,%edi 0.00 : 6c7627: 48 be ff ff ff ff ff movabs $0x7fffffffffffffff,%rsi 0.00 : 6c762e: ff ff 7f 0.00 : 6c7631: 74 37 je 6c766a : TIMESTAMP_NOEND(result); : else : { : #ifdef HAVE_INT64_TIMESTAMP : /* date is days since 2000, timestamp is microseconds since same... */ : result = dateVal * USECS_PER_DAY; 0.00 : 6c7633: 48 63 cf movslq %edi,%rcx 0.00 : 6c7636: 48 b8 00 60 d7 1d 14 movabs $0x141dd76000,%rax 0.00 : 6c763d: 00 00 00 : /* Date's range is wider than timestamp's, so check for overflow */ : if (result / USECS_PER_DAY != dateVal) 0.00 : 6c7640: 48 ba 97 b8 a1 56 b9 movabs $0x32e73fb956a1b897,%rdx 0.00 : 6c7647: 3f e7 32 : TIMESTAMP_NOEND(result); : else : { : #ifdef HAVE_INT64_TIMESTAMP : /* date is days since 2000, timestamp is microseconds since same... */ : result = dateVal * USECS_PER_DAY; /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:470 7.14 : 6c764a: 48 89 ce mov %rcx,%rsi 0.00 : 6c764d: 48 0f af f0 imul %rax,%rsi : /* Date's range is wider than timestamp's, so check for overflow */ : if (result / USECS_PER_DAY != dateVal) /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 7.14 : 6c7651: 48 89 f0 mov %rsi,%rax /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 3.57 : 6c7654: 48 f7 ea imul %rdx 3.57 : 6c7657: 48 89 f0 mov %rsi,%rax 0.00 : 6c765a: 48 c1 f8 3f sar $0x3f,%rax 3.57 : 6c765e: 48 c1 fa 22 sar $0x22,%rdx /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:472 10.71 : 6c7662: 48 29 c2 sub %rax,%rdx 14.29 : 6c7665: 48 39 d1 cmp %rdx,%rcx 0.00 : 6c7668: 75 22 jne 6c768c : result = dateVal * (double) SECS_PER_DAY; : #endif : } : : return result; : } /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/date.c:483 7.14 : 6c766a: 48 83 c4 08 add $0x8,%rsp 0.00 : 6c766e: 48 89 f0 mov %rsi,%rax 0.00 : 6c7671: 5b pop %rbx 0.00 : 6c7672: c9 leaveq 10.71 : 6c7673: c3 retq 0.00 : 6c7674: 0f 1f 40 00 nopl 0x0(%rax) : #ifdef HAVE_INT64_TIMESTAMP : /* date is days since 2000, timestamp is microseconds since same... */ : result = dateVal * USECS_PER_DAY; : /* Date's range is wider than timestamp's, so check for overflow */ : if (result / USECS_PER_DAY != dateVal) : ereport(ERROR, 0.00 : 6c7678: 48 be 00 00 00 00 00 movabs $0x8000000000000000,%rsi 0.00 : 6c767f: 00 00 80 : result = dateVal * (double) SECS_PER_DAY; : #endif : } : : return result; : } 0.00 : 6c7682: 48 83 c4 08 add $0x8,%rsp 0.00 : 6c7686: 48 89 f0 mov %rsi,%rax 0.00 : 6c7689: 5b pop %rbx 0.00 : 6c768a: c9 leaveq 0.00 : 6c768b: c3 retq : #ifdef HAVE_INT64_TIMESTAMP : /* date is days since 2000, timestamp is microseconds since same... */ : result = dateVal * USECS_PER_DAY; : /* Date's range is wider than timestamp's, so check for overflow */ : if (result / USECS_PER_DAY != dateVal) : ereport(ERROR, 0.00 : 6c768c: 45 31 c0 xor %r8d,%r8d 0.00 : 6c768f: b9 c7 9a 8b 00 mov $0x8b9ac7,%ecx 0.00 : 6c7694: ba db 01 00 00 mov $0x1db,%edx 0.00 : 6c7699: be d3 94 8b 00 mov $0x8b94d3,%esi 0.00 : 6c769e: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6c76a3: e8 18 34 0b 00 callq 77aac0 0.00 : 6c76a8: 84 c0 test %al,%al 0.00 : 6c76aa: 75 05 jne 6c76b1 0.00 : 6c76ac: e8 1f 1e da ff callq 4694d0 0.00 : 6c76b1: bf 90 95 8b 00 mov $0x8b9590,%edi 0.00 : 6c76b6: 31 c0 xor %eax,%eax 0.00 : 6c76b8: e8 e3 51 0b 00 callq 77c8a0 0.00 : 6c76bd: bf 82 00 00 08 mov $0x8000082,%edi 0.00 : 6c76c2: 89 c3 mov %eax,%ebx 0.00 : 6c76c4: e8 87 56 0b 00 callq 77cd50 0.00 : 6c76c9: 89 de mov %ebx,%esi 0.00 : 6c76cb: 89 c7 mov %eax,%edi 0.00 : 6c76cd: 31 c0 xor %eax,%eax 0.00 : 6c76cf: e8 0c 2f 0b 00 callq 77a5e0 0.00 : 6c76d4: eb d6 jmp 6c76ac Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 19.23 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:359 19.23 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 7.69 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 7.69 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 7.69 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 7.69 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 7.69 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 3.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 3.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:347 3.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:373 3.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:355 3.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 3.85 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b4480 : : TupleTableSlot * : ExecStoreTuple(HeapTuple tuple, : TupleTableSlot *slot, : Buffer buffer, : bool shouldFree) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 3.85 : 5b4480: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 7.69 : 5b4481: 48 89 e5 mov %rsp,%rbp 0.00 : 5b4484: 48 89 5d e0 mov %rbx,-0x20(%rbp) 0.00 : 5b4488: 4c 89 65 e8 mov %r12,-0x18(%rbp) 7.69 : 5b448c: 48 89 f3 mov %rsi,%rbx 0.00 : 5b448f: 4c 89 6d f0 mov %r13,-0x10(%rbp) 0.00 : 5b4493: 4c 89 75 f8 mov %r14,-0x8(%rbp) 7.69 : 5b4497: 48 83 ec 20 sub $0x20,%rsp : Assert(BufferIsValid(buffer) ? (!shouldFree) : true); : : /* : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:347 3.85 : 5b449b: 80 7e 05 00 cmpb $0x0,0x5(%rsi) : TupleTableSlot * : ExecStoreTuple(HeapTuple tuple, : TupleTableSlot *slot, : Buffer buffer, : bool shouldFree) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:334 7.69 : 5b449f: 49 89 fe mov %rdi,%r14 0.00 : 5b44a2: 41 89 d4 mov %edx,%r12d 0.00 : 5b44a5: 41 89 cd mov %ecx,%r13d : Assert(BufferIsValid(buffer) ? (!shouldFree) : true); : : /* : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) 0.00 : 5b44a8: 0f 85 92 00 00 00 jne 5b4540 : heap_freetuple(slot->tts_tuple); : if (slot->tts_shouldFreeMin) 0.00 : 5b44ae: 80 7b 06 00 cmpb $0x0,0x6(%rbx) 0.00 : 5b44b2: 75 74 jne 5b4528 : * This is coded to optimize the case where the slot previously held a : * tuple on the same disk page: in that case releasing and re-acquiring : * the pin is a waste of cycles. This is a common situation during : * seqscans, so it's worth troubling over. : */ : if (slot->tts_buffer != buffer) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:373 3.85 : 5b44b4: 8b 7b 20 mov 0x20(%rbx),%edi : heap_free_minimal_tuple(slot->tts_mintuple); : : /* : * Store the new tuple into the specified slot. : */ : slot->tts_isempty = false; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:355 3.85 : 5b44b7: c6 43 04 00 movb $0x0,0x4(%rbx) : slot->tts_shouldFree = shouldFree; 0.00 : 5b44bb: 44 88 6b 05 mov %r13b,0x5(%rbx) : slot->tts_shouldFreeMin = false; 0.00 : 5b44bf: c6 43 06 00 movb $0x0,0x6(%rbx) : slot->tts_tuple = tuple; 0.00 : 5b44c3: 4c 89 73 08 mov %r14,0x8(%rbx) : slot->tts_mintuple = NULL; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:359 19.23 : 5b44c7: 48 c7 43 38 00 00 00 movq $0x0,0x38(%rbx) 0.00 : 5b44ce: 00 : * This is coded to optimize the case where the slot previously held a : * tuple on the same disk page: in that case releasing and re-acquiring : * the pin is a waste of cycles. This is a common situation during : * seqscans, so it's worth troubling over. : */ : if (slot->tts_buffer != buffer) 0.00 : 5b44cf: 44 39 e7 cmp %r12d,%edi : slot->tts_shouldFreeMin = false; : slot->tts_tuple = tuple; : slot->tts_mintuple = NULL; : : /* Mark extracted state invalid */ : slot->tts_nvalid = 0; 0.00 : 5b44d2: c7 43 24 00 00 00 00 movl $0x0,0x24(%rbx) : * This is coded to optimize the case where the slot previously held a : * tuple on the same disk page: in that case releasing and re-acquiring : * the pin is a waste of cycles. This is a common situation during : * seqscans, so it's worth troubling over. : */ : if (slot->tts_buffer != buffer) 0.00 : 5b44d9: 74 0d je 5b44e8 : { : if (BufferIsValid(slot->tts_buffer)) 0.00 : 5b44db: 85 ff test %edi,%edi 0.00 : 5b44dd: 75 31 jne 5b4510 : ReleaseBuffer(slot->tts_buffer); : slot->tts_buffer = buffer; : if (BufferIsValid(buffer)) 0.00 : 5b44df: 45 85 e4 test %r12d,%r12d : */ : if (slot->tts_buffer != buffer) : { : if (BufferIsValid(slot->tts_buffer)) : ReleaseBuffer(slot->tts_buffer); : slot->tts_buffer = buffer; 0.00 : 5b44e2: 44 89 63 20 mov %r12d,0x20(%rbx) : if (BufferIsValid(buffer)) 0.00 : 5b44e6: 75 18 jne 5b4500 : IncrBufferRefCount(buffer); : } : : return slot; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 3.85 : 5b44e8: 48 89 d8 mov %rbx,%rax 0.00 : 5b44eb: 4c 8b 64 24 08 mov 0x8(%rsp),%r12 0.00 : 5b44f0: 48 8b 1c 24 mov (%rsp),%rbx 0.00 : 5b44f4: 4c 8b 6c 24 10 mov 0x10(%rsp),%r13 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 7.69 : 5b44f9: 4c 8b 74 24 18 mov 0x18(%rsp),%r14 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 3.85 : 5b44fe: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:383 19.23 : 5b44ff: c3 retq : { : if (BufferIsValid(slot->tts_buffer)) : ReleaseBuffer(slot->tts_buffer); : slot->tts_buffer = buffer; : if (BufferIsValid(buffer)) : IncrBufferRefCount(buffer); 0.00 : 5b4500: 44 89 e7 mov %r12d,%edi 0.00 : 5b4503: e8 58 06 0c 00 callq 674b60 0.00 : 5b4508: eb de jmp 5b44e8 0.00 : 5b450a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : * seqscans, so it's worth troubling over. : */ : if (slot->tts_buffer != buffer) : { : if (BufferIsValid(slot->tts_buffer)) : ReleaseBuffer(slot->tts_buffer); 0.00 : 5b4510: e8 4b 09 0c 00 callq 674e60 : slot->tts_buffer = buffer; : if (BufferIsValid(buffer)) 0.00 : 5b4515: 45 85 e4 test %r12d,%r12d : */ : if (slot->tts_buffer != buffer) : { : if (BufferIsValid(slot->tts_buffer)) : ReleaseBuffer(slot->tts_buffer); : slot->tts_buffer = buffer; 0.00 : 5b4518: 44 89 63 20 mov %r12d,0x20(%rbx) 0.00 : 5b451c: 0f 1f 40 00 nopl 0x0(%rax) : if (BufferIsValid(buffer)) 0.00 : 5b4520: 74 c6 je 5b44e8 0.00 : 5b4522: eb dc jmp 5b4500 0.00 : 5b4524: 0f 1f 40 00 nopl 0x0(%rax) : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) : heap_freetuple(slot->tts_tuple); : if (slot->tts_shouldFreeMin) : heap_free_minimal_tuple(slot->tts_mintuple); 0.00 : 5b4528: 48 8b 7b 38 mov 0x38(%rbx),%rdi 0.00 : 5b452c: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 5b4530: e8 7b a7 eb ff callq 46ecb0 0.00 : 5b4535: e9 7a ff ff ff jmpq 5b44b4 0.00 : 5b453a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : : /* : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) : heap_freetuple(slot->tts_tuple); 0.00 : 5b4540: 48 8b 7e 08 mov 0x8(%rsi),%rdi 0.00 : 5b4544: e8 77 a7 eb ff callq 46ecc0 0.00 : 5b4549: e9 60 ff ff ff jmpq 5b44ae Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 16.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:397 16.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:438 12.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:408 12.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:438 8.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:397 8.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:416 8.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:419 4.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:408 4.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:425 4.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:427 4.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:430 4.00 /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:438 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005b43e0 : : */ : TupleTableSlot * : ExecStoreMinimalTuple(MinimalTuple mtup, : TupleTableSlot *slot, : bool shouldFree) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:397 16.00 : 5b43e0: 55 push %rbp 0.00 : 5b43e1: 48 89 e5 mov %rsp,%rbp 0.00 : 5b43e4: 48 89 5d e8 mov %rbx,-0x18(%rbp) 0.00 : 5b43e8: 4c 89 65 f0 mov %r12,-0x10(%rbp) 0.00 : 5b43ec: 48 89 f3 mov %rsi,%rbx 0.00 : 5b43ef: 4c 89 6d f8 mov %r13,-0x8(%rbp) 8.00 : 5b43f3: 48 83 ec 20 sub $0x20,%rsp : Assert(slot->tts_tupleDescriptor != NULL); : : /* : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:408 4.00 : 5b43f7: 80 7e 05 00 cmpb $0x0,0x5(%rsi) : */ : TupleTableSlot * : ExecStoreMinimalTuple(MinimalTuple mtup, : TupleTableSlot *slot, : bool shouldFree) : { 0.00 : 5b43fb: 49 89 fc mov %rdi,%r12 0.00 : 5b43fe: 41 89 d5 mov %edx,%r13d : Assert(slot->tts_tupleDescriptor != NULL); : : /* : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:408 12.00 : 5b4401: 75 6d jne 5b4470 : heap_freetuple(slot->tts_tuple); : if (slot->tts_shouldFreeMin) 0.00 : 5b4403: 80 7b 06 00 cmpb $0x0,0x6(%rbx) 0.00 : 5b4407: 75 57 jne 5b4460 : heap_free_minimal_tuple(slot->tts_mintuple); : : /* : * Drop the pin on the referenced buffer, if there is one. : */ : if (BufferIsValid(slot->tts_buffer)) 0.00 : 5b4409: 8b 7b 20 mov 0x20(%rbx),%edi /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:416 8.00 : 5b440c: 85 ff test %edi,%edi 0.00 : 5b440e: 74 05 je 5b4415 : ReleaseBuffer(slot->tts_buffer); 0.00 : 5b4410: e8 4b 0a 0c 00 callq 674e60 : * Store the new tuple into the specified slot. : */ : slot->tts_isempty = false; : slot->tts_shouldFree = false; : slot->tts_shouldFreeMin = shouldFree; : slot->tts_tuple = &slot->tts_minhdr; 0.00 : 5b4415: 48 8d 43 40 lea 0x40(%rbx),%rax : /* : * Store the new tuple into the specified slot. : */ : slot->tts_isempty = false; : slot->tts_shouldFree = false; : slot->tts_shouldFreeMin = shouldFree; 0.00 : 5b4419: 44 88 6b 06 mov %r13b,0x6(%rbx) : slot->tts_tuple = &slot->tts_minhdr; : slot->tts_mintuple = mtup; 0.00 : 5b441d: 4c 89 63 38 mov %r12,0x38(%rbx) : * Drop the pin on the referenced buffer, if there is one. : */ : if (BufferIsValid(slot->tts_buffer)) : ReleaseBuffer(slot->tts_buffer); : : slot->tts_buffer = InvalidBuffer; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:419 8.00 : 5b4421: c7 43 20 00 00 00 00 movl $0x0,0x20(%rbx) : : /* : * Store the new tuple into the specified slot. : */ : slot->tts_isempty = false; 0.00 : 5b4428: c6 43 04 00 movb $0x0,0x4(%rbx) : slot->tts_shouldFree = false; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:425 4.00 : 5b442c: c6 43 05 00 movb $0x0,0x5(%rbx) : slot->tts_shouldFreeMin = shouldFree; : slot->tts_tuple = &slot->tts_minhdr; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:427 4.00 : 5b4430: 48 89 43 08 mov %rax,0x8(%rbx) : slot->tts_mintuple = mtup; : : slot->tts_minhdr.t_len = mtup->t_len + MINIMAL_TUPLE_OFFSET; /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:430 4.00 : 5b4434: 41 8b 04 24 mov (%r12),%eax : : /* Mark extracted state invalid */ : slot->tts_nvalid = 0; : : return slot; : } /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:438 16.00 : 5b4438: 4c 8b 6d f8 mov -0x8(%rbp),%r13 : slot->tts_minhdr.t_len = mtup->t_len + MINIMAL_TUPLE_OFFSET; : slot->tts_minhdr.t_data = (HeapTupleHeader) ((char *) mtup - MINIMAL_TUPLE_OFFSET); : /* no need to set t_self or t_tableOid since we won't allow access */ : : /* Mark extracted state invalid */ : slot->tts_nvalid = 0; 0.00 : 5b443c: c7 43 24 00 00 00 00 movl $0x0,0x24(%rbx) : slot->tts_shouldFree = false; : slot->tts_shouldFreeMin = shouldFree; : slot->tts_tuple = &slot->tts_minhdr; : slot->tts_mintuple = mtup; : : slot->tts_minhdr.t_len = mtup->t_len + MINIMAL_TUPLE_OFFSET; 0.00 : 5b4443: 83 c0 08 add $0x8,%eax 0.00 : 5b4446: 89 43 40 mov %eax,0x40(%rbx) : slot->tts_minhdr.t_data = (HeapTupleHeader) ((char *) mtup - MINIMAL_TUPLE_OFFSET); 0.00 : 5b4449: 49 8d 44 24 f8 lea -0x8(%r12),%rax : : /* Mark extracted state invalid */ : slot->tts_nvalid = 0; : : return slot; : } 0.00 : 5b444e: 4c 8b 65 f0 mov -0x10(%rbp),%r12 : slot->tts_shouldFreeMin = shouldFree; : slot->tts_tuple = &slot->tts_minhdr; : slot->tts_mintuple = mtup; : : slot->tts_minhdr.t_len = mtup->t_len + MINIMAL_TUPLE_OFFSET; : slot->tts_minhdr.t_data = (HeapTupleHeader) ((char *) mtup - MINIMAL_TUPLE_OFFSET); 0.00 : 5b4452: 48 89 43 50 mov %rax,0x50(%rbx) : : /* Mark extracted state invalid */ : slot->tts_nvalid = 0; : : return slot; : } 0.00 : 5b4456: 48 89 d8 mov %rbx,%rax /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:438 4.00 : 5b4459: 48 8b 5d e8 mov -0x18(%rbp),%rbx 0.00 : 5b445d: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/executor/execTuples.c:438 12.00 : 5b445e: c3 retq 0.00 : 5b445f: 90 nop : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) : heap_freetuple(slot->tts_tuple); : if (slot->tts_shouldFreeMin) : heap_free_minimal_tuple(slot->tts_mintuple); 0.00 : 5b4460: 48 8b 7b 38 mov 0x38(%rbx),%rdi 0.00 : 5b4464: e8 47 a8 eb ff callq 46ecb0 0.00 : 5b4469: eb 9e jmp 5b4409 0.00 : 5b446b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : : /* : * Free any old physical tuple belonging to the slot. : */ : if (slot->tts_shouldFree) : heap_freetuple(slot->tts_tuple); 0.00 : 5b4470: 48 8b 7e 08 mov 0x8(%rsi),%rdi 0.00 : 5b4474: e8 47 a8 eb ff callq 46ecc0 0.00 : 5b4479: eb 88 jmp 5b4403 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 23.81 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:810 23.81 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:811 19.05 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:810 14.29 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:810 14.29 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:816 4.76 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:811 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000007846a0 : : void * : hash_search(HTAB *hashp, : const void *keyPtr, : HASHACTION action, : bool *foundPtr) : { 0.00 : 7846a0: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:810 23.81 : 7846a1: 48 89 e5 mov %rsp,%rbp 0.00 : 7846a4: 48 89 5d e0 mov %rbx,-0x20(%rbp) 0.00 : 7846a8: 4c 89 65 e8 mov %r12,-0x18(%rbp) 19.05 : 7846ac: 48 89 fb mov %rdi,%rbx 0.00 : 7846af: 4c 89 6d f0 mov %r13,-0x10(%rbp) 0.00 : 7846b3: 4c 89 75 f8 mov %r14,-0x8(%rbp) 0.00 : 7846b7: 49 89 f5 mov %rsi,%r13 14.29 : 7846ba: 48 83 ec 20 sub $0x20,%rsp 0.00 : 7846be: 41 89 d6 mov %edx,%r14d 0.00 : 7846c1: 49 89 cc mov %rcx,%r12 : return hash_search_with_hash_value(hashp, 0.00 : 7846c4: 48 8b 77 48 mov 0x48(%rdi),%rsi /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:811 4.76 : 7846c8: 4c 89 ef mov %r13,%rdi 0.00 : 7846cb: ff 53 10 callq *0x10(%rbx) 0.00 : 7846ce: 4d 89 e0 mov %r12,%r8 0.00 : 7846d1: 44 89 f1 mov %r14d,%ecx 0.00 : 7846d4: 4c 89 ee mov %r13,%rsi 0.00 : 7846d7: 48 89 df mov %rbx,%rdi : keyPtr, : hashp->hash(keyPtr, hashp->keysize), : action, : foundPtr); : } /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:816 14.29 : 7846da: 4c 8b 64 24 08 mov 0x8(%rsp),%r12 0.00 : 7846df: 48 8b 1c 24 mov (%rsp),%rbx 0.00 : 7846e3: 4c 8b 6c 24 10 mov 0x10(%rsp),%r13 0.00 : 7846e8: 4c 8b 74 24 18 mov 0x18(%rsp),%r14 : hash_search(HTAB *hashp, : const void *keyPtr, : HASHACTION action, : bool *foundPtr) : { : return hash_search_with_hash_value(hashp, 0.00 : 7846ed: 89 c2 mov %eax,%edx : keyPtr, : hashp->hash(keyPtr, hashp->keysize), : action, : foundPtr); : } 0.00 : 7846ef: c9 leaveq : hash_search(HTAB *hashp, : const void *keyPtr, : HASHACTION action, : bool *foundPtr) : { : return hash_search_with_hash_value(hashp, /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/dynahash.c:811 23.81 : 7846f0: e9 5b f9 ff ff jmpq 784050 Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 26.32 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:61 21.05 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:48 15.79 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:77 10.53 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:76 10.53 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:86 5.26 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:48 5.26 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:48 5.26 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:86 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005c5930 : : * This is a workhorse for ExecSeqScan : * ---------------------------------------------------------------- : */ : static TupleTableSlot * : SeqNext(SeqScanState *node) : { /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:48 21.05 : 5c5930: 55 push %rbp 0.00 : 5c5931: 48 89 e5 mov %rsp,%rbp 0.00 : 5c5934: 48 89 5d f0 mov %rbx,-0x10(%rbp) 5.26 : 5c5938: 4c 89 65 f8 mov %r12,-0x8(%rbp) 5.26 : 5c593c: 48 83 ec 10 sub $0x10,%rsp : slot = node->ss_ScanTupleSlot; : : /* : * get the next tuple from the table : */ : tuple = heap_getnext(scandesc, direction); 0.00 : 5c5940: 48 8b 47 10 mov 0x10(%rdi),%rax : TupleTableSlot *slot; : : /* : * get information from the estate and scan state : */ : scandesc = node->ss_currentScanDesc; 0.00 : 5c5944: 4c 8b a7 80 00 00 00 mov 0x80(%rdi),%r12 : estate = node->ps.state; : direction = estate->es_direction; : slot = node->ss_ScanTupleSlot; /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:61 26.32 : 5c594b: 48 8b 9f 88 00 00 00 mov 0x88(%rdi),%rbx : : /* : * get the next tuple from the table : */ : tuple = heap_getnext(scandesc, direction); 0.00 : 5c5952: 8b 70 04 mov 0x4(%rax),%esi 0.00 : 5c5955: 4c 89 e7 mov %r12,%rdi 0.00 : 5c5958: e8 33 15 ed ff callq 496e90 : * tuples returned by heap_getnext() are pointers onto disk pages and were : * not created with palloc() and so should not be pfree()'d. Note also : * that ExecStoreTuple will increment the refcount of the buffer; the : * refcount will not be dropped until the tuple table slot is cleared. : */ : if (tuple) /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:76 10.53 : 5c595d: 48 85 c0 test %rax,%rax 0.00 : 5c5960: 74 26 je 5c5988 : ExecStoreTuple(tuple, /* tuple to store */ 0.00 : 5c5962: 41 8b 54 24 64 mov 0x64(%r12),%edx 0.00 : 5c5967: 31 c9 xor %ecx,%ecx 0.00 : 5c5969: 48 89 de mov %rbx,%rsi /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:77 15.79 : 5c596c: 48 89 c7 mov %rax,%rdi 0.00 : 5c596f: e8 0c eb fe ff callq 5b4480 : false); /* don't pfree this pointer */ : else : ExecClearTuple(slot); : : return slot; : } 0.00 : 5c5974: 48 89 d8 mov %rbx,%rax 0.00 : 5c5977: 4c 8b 64 24 08 mov 0x8(%rsp),%r12 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:86 10.53 : 5c597c: 48 8b 1c 24 mov (%rsp),%rbx 0.00 : 5c5980: c9 leaveq 5.26 : 5c5981: c3 retq 0.00 : 5c5982: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : slot, /* slot to store in */ : scandesc->rs_cbuf, /* buffer associated with this : * tuple */ : false); /* don't pfree this pointer */ : else : ExecClearTuple(slot); 0.00 : 5c5988: 48 89 df mov %rbx,%rdi 0.00 : 5c598b: e8 80 e7 fe ff callq 5b4110 0.00 : 5c5990: eb e2 jmp 5c5974 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 88.89 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/lwlock.c:666 5.56 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/lwlock.c:702 5.56 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/../../../../src/include/port/atomics/arch-x86.h:202 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000068eec0 : : * for 'potentially_spurious'. Its value will be set to true if we possibly : * did so. The caller then has to handle that scenario. : */ : static bool : LWLockAttemptLock(LWLock* lock, LWLockMode mode, bool *potentially_spurious) : { 0.00 : 68eec0: 55 push %rbp : lwstats = get_lwlock_stats_entry(lock); : #endif : : AssertArg(mode == LW_EXCLUSIVE || mode == LW_SHARED); : : if (potentially_spurious != NULL) 0.00 : 68eec1: 48 85 d2 test %rdx,%rdx : * for 'potentially_spurious'. Its value will be set to true if we possibly : * did so. The caller then has to handle that scenario. : */ : static bool : LWLockAttemptLock(LWLock* lock, LWLockMode mode, bool *potentially_spurious) : { 0.00 : 68eec4: 48 89 e5 mov %rsp,%rbp : lwstats = get_lwlock_stats_entry(lock); : #endif : : AssertArg(mode == LW_EXCLUSIVE || mode == LW_SHARED); : : if (potentially_spurious != NULL) 0.00 : 68eec7: 74 03 je 68eecc : *potentially_spurious = false; 0.00 : 68eec9: c6 02 00 movb $0x0,(%rdx) : : if (mode == LW_EXCLUSIVE) 0.00 : 68eecc: 85 f6 test %esi,%esi 0.00 : 68eece: 75 28 jne 68eef8 : #ifndef PG_HAVE_ATOMIC_READ_U32 : #define PG_HAVE_ATOMIC_READ_U32 : static inline uint32 : pg_atomic_read_u32_impl(volatile pg_atomic_uint32 *ptr) : { : return *(&ptr->value); 0.00 : 68eed0: 8b 47 04 mov 0x4(%rdi),%eax : * First check whether the variable is free without a atomic : * operation; it's often quite a bit cheaper for contended : * locks. Doing so can cause a superflous shared-exclusive cacheline : * transition, but benchmarks show that it's still worth doing so. : */ : expected = pg_atomic_read_u32(&lock->lockcount); 0.00 : 68eed3: 48 8d 57 04 lea 0x4(%rdi),%rdx : : if (expected != 0) 0.00 : 68eed7: 85 c0 test %eax,%eax 0.00 : 68eed9: 75 65 jne 68ef40 : : /* : * Perform cmpxchg and use the zero flag which it implicitly sets when : * equal to measure the success. : */ : __asm__ __volatile__( 0.00 : 68eedb: b9 00 00 00 40 mov $0x40000000,%ecx 0.00 : 68eee0: 89 f0 mov %esi,%eax 0.00 : 68eee2: f0 0f b1 0a lock cmpxchg %ecx,(%rdx) 0.00 : 68eee6: 40 0f 94 c6 sete %sil 0.00 : 68eeea: 40 84 f6 test %sil,%sil 0.00 : 68eeed: 0f 94 c1 sete %cl : return false; : } : } : : pg_unreachable(); : } 0.00 : 68eef0: 89 c8 mov %ecx,%eax /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/lwlock.c:702 5.56 : 68eef2: c9 leaveq 0.00 : 68eef3: c3 retq 0.00 : 68eef4: 0f 1f 40 00 nopl 0x0(%rax) : /* : * If the caller is interested in spurious locks, do an unlocked check : * first. This is useful if potentially spurious results have a : * noticeable cost. : */ : if (potentially_spurious != NULL && 0.00 : 68eef8: 48 85 d2 test %rdx,%rdx 0.00 : 68eefb: 48 8d 77 04 lea 0x4(%rdi),%rsi 0.00 : 68eeff: 74 0e je 68ef0f 0.00 : 68ef01: 8b 47 04 mov 0x4(%rdi),%eax 0.00 : 68ef04: 48 8d 77 04 lea 0x4(%rdi),%rsi 0.00 : 68ef08: 3d ff ff ff 3f cmp $0x3fffffff,%eax 0.00 : 68ef0d: 77 31 ja 68ef40 : #define PG_HAVE_ATOMIC_FETCH_ADD_U32 : static inline uint32 : pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_) : { : uint32 res; : __asm__ __volatile__( 0.00 : 68ef0f: b8 01 00 00 00 mov $0x1,%eax /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/../../../../src/include/port/atomics/arch-x86.h:202 5.56 : 68ef14: f0 0f c1 06 lock xadd %eax,(%rsi) : * might have to back out again if it turns out somebody else has an : * exclusive lock. : */ : oldstate = pg_atomic_fetch_add_u32(&lock->lockcount, 1); : : if (oldstate >= EXCLUSIVE_LOCK) /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/lwlock.c:666 88.89 : 68ef18: 31 c9 xor %ecx,%ecx 0.00 : 68ef1a: 3d ff ff ff 3f cmp $0x3fffffff,%eax 0.00 : 68ef1f: 76 cf jbe 68eef0 0.00 : 68ef21: b8 ff ff ff ff mov $0xffffffff,%eax 0.00 : 68ef26: f0 0f c1 06 lock xadd %eax,(%rsi) : * problems exist. : */ : pg_atomic_fetch_sub_u32(&lock->lockcount, 1); : : : if (potentially_spurious != NULL) 0.00 : 68ef2a: 48 85 d2 test %rdx,%rdx 0.00 : 68ef2d: 74 11 je 68ef40 : *potentially_spurious = true; 0.00 : 68ef2f: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 68ef34: c6 02 01 movb $0x1,(%rdx) : return false; : } : } : : pg_unreachable(); : } 0.00 : 68ef37: 89 c8 mov %ecx,%eax 0.00 : 68ef39: c9 leaveq 0.00 : 68ef3a: c3 retq 0.00 : 68ef3b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : */ : pg_atomic_fetch_sub_u32(&lock->lockcount, 1); : : : if (potentially_spurious != NULL) : *potentially_spurious = true; 0.00 : 68ef40: b9 01 00 00 00 mov $0x1,%ecx : return false; : } : } : : pg_unreachable(); : } 0.00 : 68ef45: c9 leaveq 0.00 : 68ef46: 89 c8 mov %ecx,%eax Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 80.00 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/pruneheap.c:109 13.33 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/pruneheap.c:109 6.67 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/pruneheap.c:75 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000049f650 : : * OldestXmin is the cutoff XID used to distinguish whether tuples are DEAD : * or RECENTLY_DEAD (see HeapTupleSatisfiesVacuum). : */ : void : heap_page_prune_opt(Relation relation, Buffer buffer) : { 0.00 : 49f650: 55 push %rbp 0.00 : 49f651: 48 89 e5 mov %rsp,%rbp 0.00 : 49f654: 4c 89 65 e0 mov %r12,-0x20(%rbp) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/pruneheap.c:75 6.67 : 49f658: 4c 89 75 f0 mov %r14,-0x10(%rbp) 0.00 : 49f65c: 41 89 f4 mov %esi,%r12d 0.00 : 49f65f: 48 89 5d d8 mov %rbx,-0x28(%rbp) 0.00 : 49f663: 4c 89 6d e8 mov %r13,-0x18(%rbp) 0.00 : 49f667: 49 89 fe mov %rdi,%r14 0.00 : 49f66a: 4c 89 7d f8 mov %r15,-0x8(%rbp) 0.00 : 49f66e: 48 83 ec 40 sub $0x40,%rsp : Page page = BufferGetPage(buffer); 0.00 : 49f672: 85 f6 test %esi,%esi 0.00 : 49f674: 0f 88 fe 00 00 00 js 49f778 0.00 : 49f67a: 41 8d 44 24 ff lea -0x1(%r12),%eax 0.00 : 49f67f: 48 63 d8 movslq %eax,%rbx 0.00 : 49f682: 48 c1 e3 0d shl $0xd,%rbx 0.00 : 49f686: 48 03 1d 6b 04 72 00 add 0x72046b(%rip),%rbx # bbfaf8 : /* : * We can't write WAL in recovery mode, so there's no point trying to : * clean the page. The master will likely issue a cleaning WAL record soon : * anyway, so this is no particular loss. : */ : if (RecoveryInProgress()) 0.00 : 49f68d: e8 2e de 02 00 callq 4cd4c0 0.00 : 49f692: 84 c0 test %al,%al 0.00 : 49f694: 74 1a je 49f6b0 : } : : /* And release buffer lock */ : LockBuffer(buffer, BUFFER_LOCK_UNLOCK); : } : } 0.00 : 49f696: 48 8b 5d d8 mov -0x28(%rbp),%rbx 0.00 : 49f69a: 4c 8b 65 e0 mov -0x20(%rbp),%r12 0.00 : 49f69e: 4c 8b 6d e8 mov -0x18(%rbp),%r13 0.00 : 49f6a2: 4c 8b 75 f0 mov -0x10(%rbp),%r14 0.00 : 49f6a6: 4c 8b 7d f8 mov -0x8(%rbp),%r15 0.00 : 49f6aa: c9 leaveq 0.00 : 49f6ab: c3 retq 0.00 : 49f6ac: 0f 1f 40 00 nopl 0x0(%rax) : * catalog relation or a user defined, additional, catalog relation, we : * need to use the horizon that includes slots, otherwise the data-only : * horizon can be used. Note that the toast relation of user defined : * relations are *not* considered catalog relations. : */ : if (IsCatalogRelation(relation) || 0.00 : 49f6b0: 4c 89 f7 mov %r14,%rdi 0.00 : 49f6b3: e8 28 37 04 00 callq 4e2de0 0.00 : 49f6b8: 84 c0 test %al,%al 0.00 : 49f6ba: 0f 84 d0 00 00 00 je 49f790 : RelationIsAccessibleInLogicalDecoding(relation)) : OldestXmin = RecentGlobalXmin; 0.00 : 49f6c0: 44 8b 3d 39 b2 71 00 mov 0x71b239(%rip),%r15d # bba900 : * Let's see if we really need pruning. : * : * Forget it if page is not hinted to contain something prunable that's : * older than OldestXmin. : */ : if (!PageIsPrunable(page, OldestXmin)) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/pruneheap.c:109 13.33 : 49f6c7: 8b 7b 14 mov 0x14(%rbx),%edi 80.00 : 49f6ca: 85 ff test %edi,%edi 0.00 : 49f6cc: 74 c8 je 49f696 0.00 : 49f6ce: 44 89 fe mov %r15d,%esi 0.00 : 49f6d1: e8 0a 09 02 00 callq 4bffe0 0.00 : 49f6d6: 84 c0 test %al,%al 0.00 : 49f6d8: 74 bc je 49f696 : * unlikely to be *seriously* wrong, though, since reading either pd_lower : * or pd_upper is probably atomic. Avoiding taking a lock seems more : * important than sometimes getting a wrong answer in what is after all : * just a heuristic estimate. : */ : minfree = RelationGetTargetPageFreeSpace(relation, 0.00 : 49f6da: 49 8b 96 98 00 00 00 mov 0x98(%r14),%rdx 0.00 : 49f6e1: 41 bd 33 03 00 00 mov $0x333,%r13d 0.00 : 49f6e7: 48 85 d2 test %rdx,%rdx 0.00 : 49f6ea: 74 2f je 49f71b 0.00 : 49f6ec: b9 64 00 00 00 mov $0x64,%ecx 0.00 : 49f6f1: 2b 4a 04 sub 0x4(%rdx),%ecx 0.00 : 49f6f4: ba 1f 85 eb 51 mov $0x51eb851f,%edx 0.00 : 49f6f9: c1 e1 0d shl $0xd,%ecx 0.00 : 49f6fc: 89 c8 mov %ecx,%eax 0.00 : 49f6fe: c1 f9 1f sar $0x1f,%ecx 0.00 : 49f701: f7 ea imul %edx 0.00 : 49f703: b8 33 03 00 00 mov $0x333,%eax 0.00 : 49f708: c1 fa 05 sar $0x5,%edx 0.00 : 49f70b: 29 ca sub %ecx,%edx 0.00 : 49f70d: 4c 63 ea movslq %edx,%r13 0.00 : 49f710: 49 81 fd 33 03 00 00 cmp $0x333,%r13 0.00 : 49f717: 4c 0f 42 e8 cmovb %rax,%r13 : HEAP_DEFAULT_FILLFACTOR); : minfree = Max(minfree, BLCKSZ / 10); : : if (PageIsFull(page) || PageGetHeapFreeSpace(page) < minfree) 0.00 : 49f71b: f6 43 0a 02 testb $0x2,0xa(%rbx) 0.00 : 49f71f: 75 11 jne 49f732 0.00 : 49f721: 48 89 df mov %rbx,%rdi 0.00 : 49f724: e8 37 56 1f 00 callq 694d60 0.00 : 49f729: 4c 39 e8 cmp %r13,%rax 0.00 : 49f72c: 0f 83 64 ff ff ff jae 49f696 : { : /* OK, try to get exclusive buffer lock */ : if (!ConditionalLockBufferForCleanup(buffer)) 0.00 : 49f732: 44 89 e7 mov %r12d,%edi 0.00 : 49f735: e8 26 78 1d 00 callq 676f60 0.00 : 49f73a: 84 c0 test %al,%al 0.00 : 49f73c: 0f 84 54 ff ff ff je 49f696 : * Now that we have buffer lock, get accurate information about the : * page's free space, and recheck the heuristic about whether to : * prune. (We needn't recheck PageIsPrunable, since no one else could : * have pruned while we hold pin.) : */ : if (PageIsFull(page) || PageGetHeapFreeSpace(page) < minfree) 0.00 : 49f742: f6 43 0a 02 testb $0x2,0xa(%rbx) 0.00 : 49f746: 74 68 je 49f7b0 : { : TransactionId ignore = InvalidTransactionId; /* return value not : * needed */ : : /* OK to prune */ : (void) heap_page_prune(relation, buffer, OldestXmin, true, &ignore); 0.00 : 49f748: 4c 8d 45 d4 lea -0x2c(%rbp),%r8 0.00 : 49f74c: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 49f751: 44 89 fa mov %r15d,%edx 0.00 : 49f754: 44 89 e6 mov %r12d,%esi 0.00 : 49f757: 4c 89 f7 mov %r14,%rdi : * prune. (We needn't recheck PageIsPrunable, since no one else could : * have pruned while we hold pin.) : */ : if (PageIsFull(page) || PageGetHeapFreeSpace(page) < minfree) : { : TransactionId ignore = InvalidTransactionId; /* return value not 0.00 : 49f75a: c7 45 d4 00 00 00 00 movl $0x0,-0x2c(%rbp) : * needed */ : : /* OK to prune */ : (void) heap_page_prune(relation, buffer, OldestXmin, true, &ignore); 0.00 : 49f761: e8 5a f4 ff ff callq 49ebc0 : } : : /* And release buffer lock */ : LockBuffer(buffer, BUFFER_LOCK_UNLOCK); 0.00 : 49f766: 31 f6 xor %esi,%esi 0.00 : 49f768: 44 89 e7 mov %r12d,%edi 0.00 : 49f76b: e8 a0 4f 1d 00 callq 674710 0.00 : 49f770: e9 21 ff ff ff jmpq 49f696 0.00 : 49f775: 0f 1f 00 nopl (%rax) : * or RECENTLY_DEAD (see HeapTupleSatisfiesVacuum). : */ : void : heap_page_prune_opt(Relation relation, Buffer buffer) : { : Page page = BufferGetPage(buffer); 0.00 : 49f778: 89 f0 mov %esi,%eax 0.00 : 49f77a: 48 8b 15 97 d9 6d 00 mov 0x6dd997(%rip),%rdx # b7d118 0.00 : 49f781: f7 d0 not %eax 0.00 : 49f783: 48 98 cltq 0.00 : 49f785: 48 8b 1c c2 mov (%rdx,%rax,8),%rbx 0.00 : 49f789: e9 ff fe ff ff jmpq 49f68d 0.00 : 49f78e: 66 90 xchg %ax,%ax : * catalog relation or a user defined, additional, catalog relation, we : * need to use the horizon that includes slots, otherwise the data-only : * horizon can be used. Note that the toast relation of user defined : * relations are *not* considered catalog relations. : */ : if (IsCatalogRelation(relation) || 0.00 : 49f790: 83 3d c5 99 6d 00 02 cmpl $0x2,0x6d99c5(%rip) # b7915c 0.00 : 49f797: 7e 0a jle 49f7a3 0.00 : 49f799: 49 8b 46 30 mov 0x30(%r14),%rax 0.00 : 49f79d: 80 78 6e 70 cmpb $0x70,0x6e(%rax) 0.00 : 49f7a1: 74 25 je 49f7c8 : RelationIsAccessibleInLogicalDecoding(relation)) : OldestXmin = RecentGlobalXmin; : else : OldestXmin = RecentGlobalDataXmin; 0.00 : 49f7a3: 44 8b 3d 5a b1 71 00 mov 0x71b15a(%rip),%r15d # bba904 0.00 : 49f7aa: e9 18 ff ff ff jmpq 49f6c7 0.00 : 49f7af: 90 nop : * Now that we have buffer lock, get accurate information about the : * page's free space, and recheck the heuristic about whether to : * prune. (We needn't recheck PageIsPrunable, since no one else could : * have pruned while we hold pin.) : */ : if (PageIsFull(page) || PageGetHeapFreeSpace(page) < minfree) 0.00 : 49f7b0: 48 89 df mov %rbx,%rdi 0.00 : 49f7b3: e8 a8 55 1f 00 callq 694d60 0.00 : 49f7b8: 4c 39 e8 cmp %r13,%rax 0.00 : 49f7bb: 73 a9 jae 49f766 0.00 : 49f7bd: 0f 1f 00 nopl (%rax) 0.00 : 49f7c0: eb 86 jmp 49f748 0.00 : 49f7c2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : * catalog relation or a user defined, additional, catalog relation, we : * need to use the horizon that includes slots, otherwise the data-only : * horizon can be used. Note that the toast relation of user defined : * relations are *not* considered catalog relations. : */ : if (IsCatalogRelation(relation) || 0.00 : 49f7c8: 4c 89 f7 mov %r14,%rdi 0.00 : 49f7cb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 49f7d0: e8 0b 36 04 00 callq 4e2de0 0.00 : 49f7d5: 84 c0 test %al,%al 0.00 : 49f7d7: 0f 85 e3 fe ff ff jne 49f6c0 0.00 : 49f7dd: 49 8b 86 98 00 00 00 mov 0x98(%r14),%rax 0.00 : 49f7e4: 48 85 c0 test %rax,%rax 0.00 : 49f7e7: 74 ba je 49f7a3 0.00 : 49f7e9: 80 78 48 00 cmpb $0x0,0x48(%rax) 0.00 : 49f7ed: 74 b4 je 49f7a3 0.00 : 49f7ef: 90 nop 0.00 : 49f7f0: e9 cb fe ff ff jmpq 49f6c0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 30.77 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:3871 15.38 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:4064 7.69 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:3871 7.69 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:3871 7.69 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:3871 7.69 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:491 7.69 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:491 7.69 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:4064 7.69 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:4064 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000694660 : : */ : void : CheckForSerializableConflictOut(bool visible, Relation relation, : HeapTuple tuple, Buffer buffer, : Snapshot snapshot) : { /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:3871 7.69 : 694660: 55 push %rbp 0.00 : 694661: 48 89 e5 mov %rsp,%rbp 30.77 : 694664: 4c 89 65 f0 mov %r12,-0x10(%rbp) 7.69 : 694668: 4c 89 6d f8 mov %r13,-0x8(%rbp) 0.00 : 69466c: 49 89 d4 mov %rdx,%r12 0.00 : 69466f: 48 89 5d e8 mov %rbx,-0x18(%rbp) 7.69 : 694673: 48 83 ec 30 sub $0x30,%rsp : */ : static inline bool : SerializationNeededForRead(Relation relation, Snapshot snapshot) : { : /* Nothing to do if this is not a serializable transaction */ : if (MySerializableXact == InvalidSerializableXact) /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:491 7.69 : 694677: 48 8b 15 42 a0 4e 00 mov 0x4ea042(%rip),%rdx # b7e6c0 : */ : void : CheckForSerializableConflictOut(bool visible, Relation relation, : HeapTuple tuple, Buffer buffer, : Snapshot snapshot) : { 0.00 : 69467e: 41 89 fd mov %edi,%r13d : */ : static inline bool : SerializationNeededForRead(Relation relation, Snapshot snapshot) : { : /* Nothing to do if this is not a serializable transaction */ : if (MySerializableXact == InvalidSerializableXact) 7.69 : 694681: 48 85 d2 test %rdx,%rdx 0.00 : 694684: 74 13 je 694699 : * This excludes things like CLUSTER and REINDEX. They use the wholesale : * functions TransferPredicateLocksToHeapRelation() and : * CheckTableForSerializableConflictIn() to participate serialization, but : * the scans involved don't need serialization. : */ : if (!IsMVCCSnapshot(snapshot)) 0.00 : 694686: 49 8b 00 mov (%r8),%rax 0.00 : 694689: 48 3d 50 57 7a 00 cmp $0x7a5750,%rax 0.00 : 69468f: 74 1f je 6946b0 0.00 : 694691: 48 3d 60 47 7a 00 cmp $0x7a4760,%rax 0.00 : 694697: 74 17 je 6946b0 : * Flag the conflict. But first, if this conflict creates a dangerous : * structure, ereport an error. : */ : FlagRWConflict(MySerializableXact, sxact); : LWLockRelease(SerializableXactHashLock); : } /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/predicate.c:4064 7.69 : 694699: 48 8b 5d e8 mov -0x18(%rbp),%rbx 0.00 : 69469d: 4c 8b 65 f0 mov -0x10(%rbp),%r12 7.69 : 6946a1: 4c 8b 6d f8 mov -0x8(%rbp),%r13 0.00 : 6946a5: c9 leaveq 15.38 : 6946a6: c3 retq 0.00 : 6946a7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 6946ae: 00 00 : * : * A transaction is flagged as RO_SAFE if all concurrent R/W transactions : * commit without having conflicts out to an earlier snapshot, thus : * ensuring that no conflicts are possible for this transaction. : */ : if (SxactIsROSafe(MySerializableXact)) 0.00 : 6946b0: 8b 52 7c mov 0x7c(%rdx),%edx 0.00 : 6946b3: 84 d2 test %dl,%dl 0.00 : 6946b5: 78 69 js 694720 : * relations are exempt, as are materialized views. : */ : static inline bool : PredicateLockingNeededForRelation(Relation relation) : { : return !(relation->rd_id < FirstBootstrapObjectId || 0.00 : 6946b7: 81 7e 40 0f 27 00 00 cmpl $0x270f,0x40(%rsi) 0.00 : 6946be: 76 d9 jbe 694699 0.00 : 6946c0: 48 8b 46 30 mov 0x30(%rsi),%rax 0.00 : 6946c4: 80 78 6e 74 cmpb $0x74,0x6e(%rax) 0.00 : 6946c8: 74 cf je 694699 0.00 : 6946ca: 80 78 6f 6d cmpb $0x6d,0x6f(%rax) 0.00 : 6946ce: 66 90 xchg %ax,%ax 0.00 : 6946d0: 74 c7 je 694699 : : if (!SerializationNeededForRead(relation, snapshot)) : return; : : /* Check if someone else has already decided that we need to die */ : if (SxactIsDoomed(MySerializableXact)) 0.00 : 6946d2: 83 e2 08 and $0x8,%edx 0.00 : 6946d5: 0f 85 55 02 00 00 jne 694930 : * transaction, either to create it not visible to us, or to delete it : * while it is visible to us. The "visible" bool indicates whether the : * tuple is visible to us, while HeapTupleSatisfiesVacuum checks what else : * is going on with it. : */ : htsvResult = HeapTupleSatisfiesVacuum(tuple, TransactionXmin, buffer); 0.00 : 6946db: 8b 35 77 e0 4d 00 mov 0x4de077(%rip),%esi # b72758 0.00 : 6946e1: 89 ca mov %ecx,%edx 0.00 : 6946e3: 4c 89 e7 mov %r12,%rdi 0.00 : 6946e6: e8 35 04 11 00 callq 7a4b20 : switch (htsvResult) 0.00 : 6946eb: 83 f8 04 cmp $0x4,%eax : * transaction, either to create it not visible to us, or to delete it : * while it is visible to us. The "visible" bool indicates whether the : * tuple is visible to us, while HeapTupleSatisfiesVacuum checks what else : * is going on with it. : */ : htsvResult = HeapTupleSatisfiesVacuum(tuple, TransactionXmin, buffer); 0.00 : 6946ee: 89 c3 mov %eax,%ebx : switch (htsvResult) 0.00 : 6946f0: 76 3e jbe 694730 : /* : * The only way to get to this default clause is if a new value is : * added to the enum type without adding it to this switch : * statement. That's a bug, so elog. : */ : elog(ERROR, "unrecognized return value from HeapTupleSatisfiesVacuum: %u", htsvResult); 0.00 : 6946f2: ba e0 da 8a 00 mov $0x8adae0,%edx 0.00 : 6946f7: be 56 0f 00 00 mov $0xf56,%esi 0.00 : 6946fc: bf d3 d1 8a 00 mov $0x8ad1d3,%edi 0.00 : 694701: e8 1a 6d 0e 00 callq 77b420 0.00 : 694706: 89 da mov %ebx,%edx 0.00 : 694708: be a0 d8 8a 00 mov $0x8ad8a0,%esi 0.00 : 69470d: bf 14 00 00 00 mov $0x14,%edi 0.00 : 694712: 31 c0 xor %eax,%eax 0.00 : 694714: e8 17 6b 0e 00 callq 77b230 0.00 : 694719: e8 b2 4d dd ff callq 4694d0 0.00 : 69471e: 66 90 xchg %ax,%ax : * commit without having conflicts out to an earlier snapshot, thus : * ensuring that no conflicts are possible for this transaction. : */ : if (SxactIsROSafe(MySerializableXact)) : { : ReleasePredicateLocks(false); 0.00 : 694720: 31 ff xor %edi,%edi 0.00 : 694722: e8 c9 e1 ff ff callq 6928f0 0.00 : 694727: e9 6d ff ff ff jmpq 694699 0.00 : 69472c: 0f 1f 40 00 nopl 0x0(%rax) : * while it is visible to us. The "visible" bool indicates whether the : * tuple is visible to us, while HeapTupleSatisfiesVacuum checks what else : * is going on with it. : */ : htsvResult = HeapTupleSatisfiesVacuum(tuple, TransactionXmin, buffer); : switch (htsvResult) 0.00 : 694730: 89 c0 mov %eax,%eax 0.00 : 694732: ff 24 c5 c0 d9 8a 00 jmpq *0x8ad9c0(,%rax,8) 0.00 : 694739: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : if (visible) : return; : xid = HeapTupleHeaderGetXmin(tuple->t_data); : break; : case HEAPTUPLE_RECENTLY_DEAD: : if (!visible) 0.00 : 694740: 45 84 ed test %r13b,%r13b 0.00 : 694743: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 694748: 0f 84 4b ff ff ff je 694699 : return; : xid = HeapTupleHeaderGetUpdateXid(tuple->t_data); : break; : case HEAPTUPLE_DELETE_IN_PROGRESS: : xid = HeapTupleHeaderGetUpdateXid(tuple->t_data); 0.00 : 69474e: 49 8b 7c 24 10 mov 0x10(%r12),%rdi 0.00 : 694753: 0f b7 57 14 movzwl 0x14(%rdi),%edx 0.00 : 694757: 89 d0 mov %edx,%eax 0.00 : 694759: 25 00 18 00 00 and $0x1800,%eax 0.00 : 69475e: 3d 00 10 00 00 cmp $0x1000,%eax 0.00 : 694763: 0f 84 f7 00 00 00 je 694860 0.00 : 694769: 8b 5f 04 mov 0x4(%rdi),%ebx : : /* : * Find top level xid. Bail out if xid is too early to be a conflict, or : * if it's our own xid. : */ : if (TransactionIdEquals(xid, GetTopTransactionIdIfAny())) 0.00 : 69476c: e8 0f c4 e2 ff callq 4c0b80 0.00 : 694771: 39 d8 cmp %ebx,%eax 0.00 : 694773: 0f 84 20 ff ff ff je 694699 : return; : xid = SubTransGetTopmostTransaction(xid); 0.00 : 694779: 89 df mov %ebx,%edi 0.00 : 69477b: e8 70 21 e3 ff callq 4c68f0 : if (TransactionIdPrecedes(xid, TransactionXmin)) 0.00 : 694780: 8b 35 d2 df 4d 00 mov 0x4ddfd2(%rip),%esi # b72758 0.00 : 694786: 89 c7 mov %eax,%edi : * Find top level xid. Bail out if xid is too early to be a conflict, or : * if it's our own xid. : */ : if (TransactionIdEquals(xid, GetTopTransactionIdIfAny())) : return; : xid = SubTransGetTopmostTransaction(xid); 0.00 : 694788: 89 c3 mov %eax,%ebx : if (TransactionIdPrecedes(xid, TransactionXmin)) 0.00 : 69478a: e8 51 b8 e2 ff callq 4bffe0 0.00 : 69478f: 84 c0 test %al,%al 0.00 : 694791: 0f 85 02 ff ff ff jne 694699 : return; : if (TransactionIdEquals(xid, GetTopTransactionIdIfAny())) 0.00 : 694797: e8 e4 c3 e2 ff callq 4c0b80 0.00 : 69479c: 39 c3 cmp %eax,%ebx 0.00 : 69479e: 66 90 xchg %ax,%ax 0.00 : 6947a0: 0f 84 f3 fe ff ff je 694699 : : /* : * Find sxact or summarized info for the top level xid. : */ : sxidtag.xid = xid; : LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE); 0.00 : 6947a6: 48 8b 3d 53 92 4e 00 mov 0x4e9253(%rip),%rdi # b7da00 0.00 : 6947ad: 31 f6 xor %esi,%esi : return; : : /* : * Find sxact or summarized info for the top level xid. : */ : sxidtag.xid = xid; 0.00 : 6947af: 89 5d d0 mov %ebx,-0x30(%rbp) : LWLockAcquire(SerializableXactHashLock, LW_EXCLUSIVE); 0.00 : 6947b2: 48 81 c7 80 03 00 00 add $0x380,%rdi 0.00 : 6947b9: e8 32 b3 ff ff callq 68faf0 : sxid = (SERIALIZABLEXID *) 0.00 : 6947be: 48 8b 3d 93 9f 4e 00 mov 0x4e9f93(%rip),%rdi # b7e758 0.00 : 6947c5: 48 8d 75 d0 lea -0x30(%rbp),%rsi 0.00 : 6947c9: 31 c9 xor %ecx,%ecx 0.00 : 6947cb: 31 d2 xor %edx,%edx 0.00 : 6947cd: e8 ce fe 0e 00 callq 7846a0 : hash_search(SerializableXidHash, &sxidtag, HASH_FIND, NULL); : if (!sxid) 0.00 : 6947d2: 48 85 c0 test %rax,%rax 0.00 : 6947d5: 0f 84 c5 01 00 00 je 6949a0 : : /* It's not serializable or otherwise not important. */ : LWLockRelease(SerializableXactHashLock); : return; : } : sxact = sxid->myXact; 0.00 : 6947db: 4c 8b 60 08 mov 0x8(%rax),%r12 : Assert(TransactionIdEquals(sxact->topXid, xid)); : if (sxact == MySerializableXact || SxactIsDoomed(sxact)) 0.00 : 6947df: 48 8b 0d da 9e 4e 00 mov 0x4e9eda(%rip),%rcx # b7e6c0 0.00 : 6947e6: 49 39 cc cmp %rcx,%r12 0.00 : 6947e9: 0f 84 b1 00 00 00 je 6948a0 0.00 : 6947ef: 41 8b 54 24 7c mov 0x7c(%r12),%edx 0.00 : 6947f4: f6 c2 08 test $0x8,%dl 0.00 : 6947f7: 0f 85 a3 00 00 00 jne 6948a0 : * We have a conflict out to a transaction which has a conflict out to a : * summarized transaction. That summarized transaction must have : * committed first, and we can't tell when it committed in relation to our : * snapshot acquisition, so something needs to be canceled. : */ : if (SxactHasSummaryConflictOut(sxact)) 0.00 : 6947fd: f6 c6 04 test $0x4,%dh 0.00 : 694800: 0f 84 b2 00 00 00 je 6948b8 : { : if (!SxactIsPrepared(sxact)) 0.00 : 694806: f6 c2 02 test $0x2,%dl 0.00 : 694809: 0f 85 39 03 00 00 jne 694b48 : { : sxact->flags |= SXACT_FLAG_DOOMED; 0.00 : 69480f: 83 ca 08 or $0x8,%edx 0.00 : 694812: 41 89 54 24 7c mov %edx,0x7c(%r12) : LWLockRelease(SerializableXactHashLock); 0.00 : 694817: 48 8b 3d e2 91 4e 00 mov 0x4e91e2(%rip),%rdi # b7da00 0.00 : 69481e: 48 81 c7 80 03 00 00 add $0x380,%rdi 0.00 : 694825: e8 76 ab ff ff callq 68f3a0 : * Flag the conflict. But first, if this conflict creates a dangerous : * structure, ereport an error. : */ : FlagRWConflict(MySerializableXact, sxact); : LWLockRelease(SerializableXactHashLock); : } 0.00 : 69482a: e9 6a fe ff ff jmpq 694699 0.00 : 69482f: 90 nop : */ : htsvResult = HeapTupleSatisfiesVacuum(tuple, TransactionXmin, buffer); : switch (htsvResult) : { : case HEAPTUPLE_LIVE: : if (visible) 0.00 : 694830: 45 84 ed test %r13b,%r13b 0.00 : 694833: 0f 85 60 fe ff ff jne 694699 : break; : case HEAPTUPLE_DELETE_IN_PROGRESS: : xid = HeapTupleHeaderGetUpdateXid(tuple->t_data); : break; : case HEAPTUPLE_INSERT_IN_PROGRESS: : xid = HeapTupleHeaderGetXmin(tuple->t_data); 0.00 : 694839: 49 8b 54 24 10 mov 0x10(%r12),%rdx : /* : * The only way to get to this default clause is if a new value is : * added to the enum type without adding it to this switch : * statement. That's a bug, so elog. : */ : elog(ERROR, "unrecognized return value from HeapTupleSatisfiesVacuum: %u", htsvResult); 0.00 : 69483e: bb 02 00 00 00 mov $0x2,%ebx : break; : case HEAPTUPLE_DELETE_IN_PROGRESS: : xid = HeapTupleHeaderGetUpdateXid(tuple->t_data); : break; : case HEAPTUPLE_INSERT_IN_PROGRESS: : xid = HeapTupleHeaderGetXmin(tuple->t_data); 0.00 : 694843: 0f b7 42 14 movzwl 0x14(%rdx),%eax 0.00 : 694847: 25 00 03 00 00 and $0x300,%eax 0.00 : 69484c: 3d 00 03 00 00 cmp $0x300,%eax 0.00 : 694851: 0f 84 15 ff ff ff je 69476c 0.00 : 694857: 8b 1a mov (%rdx),%ebx 0.00 : 694859: e9 0e ff ff ff jmpq 69476c 0.00 : 69485e: 66 90 xchg %ax,%ax : if (!visible) : return; : xid = HeapTupleHeaderGetUpdateXid(tuple->t_data); : break; : case HEAPTUPLE_DELETE_IN_PROGRESS: : xid = HeapTupleHeaderGetUpdateXid(tuple->t_data); 0.00 : 694860: 84 d2 test %dl,%dl 0.00 : 694862: 0f 88 01 ff ff ff js 694769 0.00 : 694868: e8 b3 28 e0 ff callq 497120 0.00 : 69486d: 89 c3 mov %eax,%ebx 0.00 : 69486f: 90 nop 0.00 : 694870: e9 f7 fe ff ff jmpq 69476c : /* This write was already in our snapshot; no conflict. */ : LWLockRelease(SerializableXactHashLock); : return; : } : : if (RWConflictExists(MySerializableXact, sxact)) 0.00 : 694875: 48 8b 3d 44 9e 4e 00 mov 0x4e9e44(%rip),%rdi # b7e6c0 0.00 : 69487c: 4c 89 e6 mov %r12,%rsi 0.00 : 69487f: e8 1c cc ff ff callq 6914a0 0.00 : 694884: 84 c0 test %al,%al 0.00 : 694886: 75 18 jne 6948a0 : : /* : * Flag the conflict. But first, if this conflict creates a dangerous : * structure, ereport an error. : */ : FlagRWConflict(MySerializableXact, sxact); 0.00 : 694888: 48 8b 3d 31 9e 4e 00 mov 0x4e9e31(%rip),%rdi # b7e6c0 0.00 : 69488f: 4c 89 e6 mov %r12,%rsi 0.00 : 694892: e8 79 c5 ff ff callq 690e10 0.00 : 694897: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 69489e: 00 00 : LWLockRelease(SerializableXactHashLock); 0.00 : 6948a0: 48 8b 3d 59 91 4e 00 mov 0x4e9159(%rip),%rdi # b7da00 0.00 : 6948a7: 48 81 c7 80 03 00 00 add $0x380,%rdi 0.00 : 6948ae: e8 ed aa ff ff callq 68f3a0 0.00 : 6948b3: e9 e1 fd ff ff jmpq 694699 : /* : * If this is a read-only transaction and the writing transaction has : * committed, and it doesn't have a rw-conflict to a transaction which : * committed before it, no conflict. : */ : if (SxactIsReadOnly(MySerializableXact) 0.00 : 6948b8: f6 41 7c 20 testb $0x20,0x7c(%rcx) 0.00 : 6948bc: 74 10 je 6948ce 0.00 : 6948be: 89 d0 mov %edx,%eax 0.00 : 6948c0: 25 01 04 00 00 and $0x401,%eax 0.00 : 6948c5: 83 e8 01 sub $0x1,%eax 0.00 : 6948c8: 0f 84 e9 01 00 00 je 694ab7 : uint32 i; : : Assert(TransactionIdIsValid(xid)); : Assert(!TransactionIdEquals(xid, GetTopTransactionIdIfAny())); : : snap = GetTransactionSnapshot(); 0.00 : 6948ce: e8 3d 2d 11 00 callq 7a7610 : : if (TransactionIdPrecedes(xid, snap->xmin)) 0.00 : 6948d3: 8b 70 08 mov 0x8(%rax),%esi 0.00 : 6948d6: 89 df mov %ebx,%edi : uint32 i; : : Assert(TransactionIdIsValid(xid)); : Assert(!TransactionIdEquals(xid, GetTopTransactionIdIfAny())); : : snap = GetTransactionSnapshot(); 0.00 : 6948d8: 49 89 c5 mov %rax,%r13 : : if (TransactionIdPrecedes(xid, snap->xmin)) 0.00 : 6948db: e8 00 b7 e2 ff callq 4bffe0 0.00 : 6948e0: 84 c0 test %al,%al 0.00 : 6948e2: 75 bc jne 6948a0 : return false; : : if (TransactionIdFollowsOrEquals(xid, snap->xmax)) 0.00 : 6948e4: 41 8b 75 0c mov 0xc(%r13),%esi 0.00 : 6948e8: 89 df mov %ebx,%edi 0.00 : 6948ea: e8 81 b7 e2 ff callq 4c0070 0.00 : 6948ef: 84 c0 test %al,%al 0.00 : 6948f1: 75 82 jne 694875 : return true; : : for (i = 0; i < snap->xcnt; i++) 0.00 : 6948f3: 41 8b 75 18 mov 0x18(%r13),%esi 0.00 : 6948f7: 85 f6 test %esi,%esi 0.00 : 6948f9: 74 a5 je 6948a0 : { : if (xid == snap->xip[i]) 0.00 : 6948fb: 49 8b 45 10 mov 0x10(%r13),%rax 0.00 : 6948ff: 31 d2 xor %edx,%edx 0.00 : 694901: 3b 18 cmp (%rax),%ebx 0.00 : 694903: 48 89 c1 mov %rax,%rcx 0.00 : 694906: 75 17 jne 69491f 0.00 : 694908: e9 68 ff ff ff jmpq 694875 0.00 : 69490d: 0f 1f 00 nopl (%rax) 0.00 : 694910: 8b 41 04 mov 0x4(%rcx),%eax 0.00 : 694913: 48 83 c1 04 add $0x4,%rcx 0.00 : 694917: 39 c3 cmp %eax,%ebx 0.00 : 694919: 0f 84 56 ff ff ff je 694875 : return false; : : if (TransactionIdFollowsOrEquals(xid, snap->xmax)) : return true; : : for (i = 0; i < snap->xcnt; i++) 0.00 : 69491f: 83 c2 01 add $0x1,%edx 0.00 : 694922: 39 f2 cmp %esi,%edx 0.00 : 694924: 72 ea jb 694910 0.00 : 694926: e9 75 ff ff ff jmpq 6948a0 0.00 : 69492b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : return; : : /* Check if someone else has already decided that we need to die */ : if (SxactIsDoomed(MySerializableXact)) : { : ereport(ERROR, 0.00 : 694930: 45 31 c0 xor %r8d,%r8d 0.00 : 694933: b9 e0 da 8a 00 mov $0x8adae0,%ecx 0.00 : 694938: ba 30 0f 00 00 mov $0xf30,%edx 0.00 : 69493d: be d3 d1 8a 00 mov $0x8ad1d3,%esi 0.00 : 694942: bf 14 00 00 00 mov $0x14,%edi 0.00 : 694947: e8 74 61 0e 00 callq 77aac0 0.00 : 69494c: 84 c0 test %al,%al 0.00 : 69494e: 0f 84 c5 fd ff ff je 694719 0.00 : 694954: bf c8 d2 8a 00 mov $0x8ad2c8,%edi 0.00 : 694959: 31 c0 xor %eax,%eax 0.00 : 69495b: e8 40 73 0e 00 callq 77bca0 0.00 : 694960: bf 48 d8 8a 00 mov $0x8ad848,%edi 0.00 : 694965: 41 89 c5 mov %eax,%r13d : return; : } : else : { : LWLockRelease(SerializableXactHashLock); : ereport(ERROR, 0.00 : 694968: 31 c0 xor %eax,%eax 0.00 : 69496a: e8 11 7a 0e 00 callq 77c380 0.00 : 69496f: 89 c3 mov %eax,%ebx 0.00 : 694971: bf 48 d3 8a 00 mov $0x8ad348,%edi 0.00 : 694976: 31 c0 xor %eax,%eax 0.00 : 694978: e8 23 7f 0e 00 callq 77c8a0 0.00 : 69497d: bf 04 00 00 01 mov $0x1000004,%edi 0.00 : 694982: 41 89 c4 mov %eax,%r12d 0.00 : 694985: e8 c6 83 0e 00 callq 77cd50 0.00 : 69498a: 44 89 e9 mov %r13d,%ecx 0.00 : 69498d: 89 c7 mov %eax,%edi 0.00 : 69498f: 89 da mov %ebx,%edx 0.00 : 694991: 44 89 e6 mov %r12d,%esi 0.00 : 694994: 31 c0 xor %eax,%eax 0.00 : 694996: e8 45 5c 0e 00 callq 77a5e0 0.00 : 69499b: e9 79 fd ff ff jmpq 694719 : SerCommitSeqNo val; : int slotno; : : Assert(TransactionIdIsValid(xid)); : : LWLockAcquire(OldSerXidLock, LW_SHARED); 0.00 : 6949a0: 48 8b 3d 59 90 4e 00 mov 0x4e9059(%rip),%rdi # b7da00 0.00 : 6949a7: be 01 00 00 00 mov $0x1,%esi 0.00 : 6949ac: 48 81 c7 e0 03 00 00 add $0x3e0,%rdi 0.00 : 6949b3: e8 38 b1 ff ff callq 68faf0 : headXid = oldSerXidControl->headXid; 0.00 : 6949b8: 48 8b 05 79 9d 4e 00 mov 0x4e9d79(%rip),%rax # b7e738 : tailXid = oldSerXidControl->tailXid; : LWLockRelease(OldSerXidLock); 0.00 : 6949bf: 48 8b 3d 3a 90 4e 00 mov 0x4e903a(%rip),%rdi # b7da00 : int slotno; : : Assert(TransactionIdIsValid(xid)); : : LWLockAcquire(OldSerXidLock, LW_SHARED); : headXid = oldSerXidControl->headXid; 0.00 : 6949c6: 44 8b 60 04 mov 0x4(%rax),%r12d : tailXid = oldSerXidControl->tailXid; : LWLockRelease(OldSerXidLock); 0.00 : 6949ca: 48 81 c7 e0 03 00 00 add $0x3e0,%rdi : : Assert(TransactionIdIsValid(xid)); : : LWLockAcquire(OldSerXidLock, LW_SHARED); : headXid = oldSerXidControl->headXid; : tailXid = oldSerXidControl->tailXid; 0.00 : 6949d1: 44 8b 68 08 mov 0x8(%rax),%r13d : LWLockRelease(OldSerXidLock); 0.00 : 6949d5: e8 c6 a9 ff ff callq 68f3a0 : : if (!TransactionIdIsValid(headXid)) 0.00 : 6949da: 45 85 e4 test %r12d,%r12d 0.00 : 6949dd: 0f 84 bd fe ff ff je 6948a0 : return 0; : : Assert(TransactionIdIsValid(tailXid)); : : if (TransactionIdPrecedes(xid, tailXid) 0.00 : 6949e3: 44 89 ee mov %r13d,%esi 0.00 : 6949e6: 89 df mov %ebx,%edi 0.00 : 6949e8: e8 f3 b5 e2 ff callq 4bffe0 0.00 : 6949ed: 84 c0 test %al,%al 0.00 : 6949ef: 0f 85 ab fe ff ff jne 6948a0 0.00 : 6949f5: 44 89 e6 mov %r12d,%esi 0.00 : 6949f8: 89 df mov %ebx,%edi 0.00 : 6949fa: e8 41 b6 e2 ff callq 4c0040 0.00 : 6949ff: 84 c0 test %al,%al 0.00 : 694a01: 0f 85 99 fe ff ff jne 6948a0 : : /* : * The following function must be called without holding OldSerXidLock, : * but will return with that lock held, which must then be released. : */ : slotno = SimpleLruReadPage_ReadOnly(OldSerXidSlruCtl, 0.00 : 694a07: 89 de mov %ebx,%esi 0.00 : 694a09: 89 da mov %ebx,%edx 0.00 : 694a0b: bf e0 e6 b7 00 mov $0xb7e6e0,%edi 0.00 : 694a10: c1 ee 0a shr $0xa,%esi 0.00 : 694a13: 81 e6 ff ff 1f 00 and $0x1fffff,%esi 0.00 : 694a19: e8 02 1a e3 ff callq 4c6420 : OldSerXidPage(xid), xid); : val = OldSerXidValue(slotno, xid); 0.00 : 694a1e: 48 8b 15 bb 9c 4e 00 mov 0x4e9cbb(%rip),%rdx # b7e6e0 0.00 : 694a25: 48 98 cltq 0.00 : 694a27: 48 89 d9 mov %rbx,%rcx 0.00 : 694a2a: 81 e1 ff 03 00 00 and $0x3ff,%ecx : LWLockRelease(OldSerXidLock); 0.00 : 694a30: 48 8b 3d c9 8f 4e 00 mov 0x4e8fc9(%rip),%rdi # b7da00 : * The following function must be called without holding OldSerXidLock, : * but will return with that lock held, which must then be released. : */ : slotno = SimpleLruReadPage_ReadOnly(OldSerXidSlruCtl, : OldSerXidPage(xid), xid); : val = OldSerXidValue(slotno, xid); 0.00 : 694a37: 48 8b 52 10 mov 0x10(%rdx),%rdx : LWLockRelease(OldSerXidLock); 0.00 : 694a3b: 48 81 c7 e0 03 00 00 add $0x3e0,%rdi : * The following function must be called without holding OldSerXidLock, : * but will return with that lock held, which must then be released. : */ : slotno = SimpleLruReadPage_ReadOnly(OldSerXidSlruCtl, : OldSerXidPage(xid), xid); : val = OldSerXidValue(slotno, xid); 0.00 : 694a42: 48 8b 04 c2 mov (%rdx,%rax,8),%rax 0.00 : 694a46: 4c 8b 24 c8 mov (%rax,%rcx,8),%r12 : LWLockRelease(OldSerXidLock); 0.00 : 694a4a: e8 51 a9 ff ff callq 68f3a0 : * got pushed out to SLRU storage for "old committed" transactions. : */ : SerCommitSeqNo conflictCommitSeqNo; : : conflictCommitSeqNo = OldSerXidGetMinConflictCommitSeqNo(xid); : if (conflictCommitSeqNo != 0) 0.00 : 694a4f: 4d 85 e4 test %r12,%r12 0.00 : 694a52: 0f 84 48 fe ff ff je 6948a0 : { : if (conflictCommitSeqNo != InvalidSerCommitSeqNo 0.00 : 694a58: 49 83 fc ff cmp $0xffffffffffffffff,%r12 0.00 : 694a5c: 74 77 je 694ad5 0.00 : 694a5e: 48 8b 05 5b 9c 4e 00 mov 0x4e9c5b(%rip),%rax # b7e6c0 0.00 : 694a65: f6 40 7c 20 testb $0x20,0x7c(%rax) 0.00 : 694a69: 74 06 je 694a71 0.00 : 694a6b: 4c 39 60 18 cmp %r12,0x18(%rax) 0.00 : 694a6f: 72 6b jb 694adc : && (!SxactIsReadOnly(MySerializableXact) : || conflictCommitSeqNo : <= MySerializableXact->SeqNo.lastCommitBeforeSnapshot)) : ereport(ERROR, 0.00 : 694a71: 45 31 c0 xor %r8d,%r8d 0.00 : 694a74: b9 e0 da 8a 00 mov $0x8adae0,%ecx 0.00 : 694a79: ba 89 0f 00 00 mov $0xf89,%edx 0.00 : 694a7e: be d3 d1 8a 00 mov $0x8ad1d3,%esi 0.00 : 694a83: bf 14 00 00 00 mov $0x14,%edi 0.00 : 694a88: e8 33 60 0e 00 callq 77aac0 0.00 : 694a8d: 84 c0 test %al,%al 0.00 : 694a8f: 0f 84 84 fc ff ff je 694719 0.00 : 694a95: bf c8 d2 8a 00 mov $0x8ad2c8,%edi 0.00 : 694a9a: 31 c0 xor %eax,%eax 0.00 : 694a9c: e8 ff 71 0e 00 callq 77bca0 0.00 : 694aa1: 89 de mov %ebx,%esi 0.00 : 694aa3: 41 89 c5 mov %eax,%r13d 0.00 : 694aa6: bf e0 d8 8a 00 mov $0x8ad8e0,%edi 0.00 : 694aab: 31 c0 xor %eax,%eax 0.00 : 694aad: e8 ce 78 0e 00 callq 77c380 0.00 : 694ab2: e9 b8 fe ff ff jmpq 69496f : /* : * If this is a read-only transaction and the writing transaction has : * committed, and it doesn't have a rw-conflict to a transaction which : * committed before it, no conflict. : */ : if (SxactIsReadOnly(MySerializableXact) 0.00 : 694ab7: 83 e2 10 and $0x10,%edx 0.00 : 694aba: 0f 84 e0 fd ff ff je 6948a0 0.00 : 694ac0: 49 8b 44 24 18 mov 0x18(%r12),%rax 0.00 : 694ac5: 48 39 41 18 cmp %rax,0x18(%rcx) 0.00 : 694ac9: 0f 83 ff fd ff ff jae 6948ce 0.00 : 694acf: 90 nop 0.00 : 694ad0: e9 cb fd ff ff jmpq 6948a0 0.00 : 694ad5: 48 8b 05 e4 9b 4e 00 mov 0x4e9be4(%rip),%rax # b7e6c0 : (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), : errmsg("could not serialize access due to read/write dependencies among transactions"), : errdetail_internal("Reason code: Canceled on conflict out to old pivot %u.", xid), : errhint("The transaction might succeed if retried."))); : : if (SxactHasSummaryConflictIn(MySerializableXact) 0.00 : 694adc: f6 40 7d 02 testb $0x2,0x7d(%rax) 0.00 : 694ae0: 75 0d jne 694aef 0.00 : 694ae2: 48 8d 78 30 lea 0x30(%rax),%rdi 0.00 : 694ae6: e8 25 ea fe ff callq 683510 0.00 : 694aeb: 84 c0 test %al,%al 0.00 : 694aed: 75 46 jne 694b35 : || !SHMQueueEmpty(&MySerializableXact->inConflicts)) : ereport(ERROR, 0.00 : 694aef: 45 31 c0 xor %r8d,%r8d 0.00 : 694af2: b9 e0 da 8a 00 mov $0x8adae0,%ecx 0.00 : 694af7: ba 91 0f 00 00 mov $0xf91,%edx 0.00 : 694afc: be d3 d1 8a 00 mov $0x8ad1d3,%esi 0.00 : 694b01: bf 14 00 00 00 mov $0x14,%edi 0.00 : 694b06: e8 b5 5f 0e 00 callq 77aac0 0.00 : 694b0b: 84 c0 test %al,%al 0.00 : 694b0d: 0f 84 06 fc ff ff je 694719 0.00 : 694b13: bf c8 d2 8a 00 mov $0x8ad2c8,%edi 0.00 : 694b18: 31 c0 xor %eax,%eax 0.00 : 694b1a: e8 81 71 0e 00 callq 77bca0 0.00 : 694b1f: 89 de mov %ebx,%esi 0.00 : 694b21: 41 89 c5 mov %eax,%r13d 0.00 : 694b24: bf 18 d9 8a 00 mov $0x8ad918,%edi 0.00 : 694b29: 31 c0 xor %eax,%eax 0.00 : 694b2b: e8 50 78 0e 00 callq 77c380 0.00 : 694b30: e9 3a fe ff ff jmpq 69496f : (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE), : errmsg("could not serialize access due to read/write dependencies among transactions"), : errdetail_internal("Reason code: Canceled on identification as a pivot, with conflict out to old committed transaction %u.", xid), : errhint("The transaction might succeed if retried."))); : : MySerializableXact->flags |= SXACT_FLAG_SUMMARY_CONFLICT_OUT; 0.00 : 694b35: 48 8b 05 84 9b 4e 00 mov 0x4e9b84(%rip),%rax # b7e6c0 0.00 : 694b3c: 81 48 7c 00 04 00 00 orl $0x400,0x7c(%rax) 0.00 : 694b43: e9 58 fd ff ff jmpq 6948a0 : LWLockRelease(SerializableXactHashLock); : return; : } : else : { : LWLockRelease(SerializableXactHashLock); 0.00 : 694b48: 48 8b 3d b1 8e 4e 00 mov 0x4e8eb1(%rip),%rdi # b7da00 0.00 : 694b4f: 48 81 c7 80 03 00 00 add $0x380,%rdi 0.00 : 694b56: e8 45 a8 ff ff callq 68f3a0 : ereport(ERROR, 0.00 : 694b5b: 45 31 c0 xor %r8d,%r8d 0.00 : 694b5e: b9 e0 da 8a 00 mov $0x8adae0,%ecx 0.00 : 694b63: ba b8 0f 00 00 mov $0xfb8,%edx 0.00 : 694b68: be d3 d1 8a 00 mov $0x8ad1d3,%esi 0.00 : 694b6d: bf 14 00 00 00 mov $0x14,%edi 0.00 : 694b72: e8 49 5f 0e 00 callq 77aac0 0.00 : 694b77: 84 c0 test %al,%al 0.00 : 694b79: 0f 84 9a fb ff ff je 694719 0.00 : 694b7f: bf c8 d2 8a 00 mov $0x8ad2c8,%edi 0.00 : 694b84: 31 c0 xor %eax,%eax 0.00 : 694b86: e8 15 71 0e 00 callq 77bca0 0.00 : 694b8b: bf 80 d9 8a 00 mov $0x8ad980,%edi 0.00 : 694b90: 41 89 c5 mov %eax,%r13d 0.00 : 694b93: e9 d0 fd ff ff jmpq 694968 Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1283 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000674c30 : : * Returns TRUE if buffer is BM_VALID, else FALSE. This provision allows : * some callers to avoid an extra spinlock cycle. : */ : static bool : PinBuffer(volatile BufferDesc *buf, BufferAccessStrategy strategy) : { 0.00 : 674c30: 55 push %rbp : int b = buf->buf_id; : bool result; : PrivateRefCountEntry *ref; : : ref = GetPrivateRefCountEntry(b + 1, true, true); 0.00 : 674c31: ba 01 00 00 00 mov $0x1,%edx : * Returns TRUE if buffer is BM_VALID, else FALSE. This provision allows : * some callers to avoid an extra spinlock cycle. : */ : static bool : PinBuffer(volatile BufferDesc *buf, BufferAccessStrategy strategy) : { 0.00 : 674c36: 48 89 e5 mov %rsp,%rbp 0.00 : 674c39: 48 89 5d e0 mov %rbx,-0x20(%rbp) 0.00 : 674c3d: 4c 89 65 e8 mov %r12,-0x18(%rbp) 0.00 : 674c41: 48 89 fb mov %rdi,%rbx 0.00 : 674c44: 4c 89 6d f0 mov %r13,-0x10(%rbp) 0.00 : 674c48: 4c 89 75 f8 mov %r14,-0x8(%rbp) 0.00 : 674c4c: 48 83 ec 20 sub $0x20,%rsp : int b = buf->buf_id; 0.00 : 674c50: 8b 7f 24 mov 0x24(%rdi),%edi : * Returns TRUE if buffer is BM_VALID, else FALSE. This provision allows : * some callers to avoid an extra spinlock cycle. : */ : static bool : PinBuffer(volatile BufferDesc *buf, BufferAccessStrategy strategy) : { /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1283 100.00 : 674c53: 49 89 f6 mov %rsi,%r14 : int b = buf->buf_id; : bool result; : PrivateRefCountEntry *ref; : : ref = GetPrivateRefCountEntry(b + 1, true, true); 0.00 : 674c56: be 01 00 00 00 mov $0x1,%esi : : if (ref->refcount == 0) 0.00 : 674c5b: 41 bd 01 00 00 00 mov $0x1,%r13d : { : int b = buf->buf_id; : bool result; : PrivateRefCountEntry *ref; : : ref = GetPrivateRefCountEntry(b + 1, true, true); 0.00 : 674c61: 83 c7 01 add $0x1,%edi 0.00 : 674c64: e8 b7 f8 ff ff callq 674520 0.00 : 674c69: 49 89 c4 mov %rax,%r12 : : if (ref->refcount == 0) 0.00 : 674c6c: 8b 40 04 mov 0x4(%rax),%eax 0.00 : 674c6f: 85 c0 test %eax,%eax 0.00 : 674c71: 75 43 jne 674cb6 : { : LockBufHdr(buf); 0.00 : 674c73: 48 8d 7b 20 lea 0x20(%rbx),%rdi : static __inline__ int : tas(volatile slock_t *lock) : { : register slock_t _res = 1; : : __asm__ __volatile__( 0.00 : 674c77: b8 01 00 00 00 mov $0x1,%eax 0.00 : 674c7c: f0 86 07 lock xchg %al,(%rdi) 0.00 : 674c7f: 84 c0 test %al,%al 0.00 : 674c81: 75 6d jne 674cf0 : buf->refcount++; 0.00 : 674c83: 8b 43 18 mov 0x18(%rbx),%eax 0.00 : 674c86: 83 c0 01 add $0x1,%eax : if (strategy == NULL) 0.00 : 674c89: 4d 85 f6 test %r14,%r14 : ref = GetPrivateRefCountEntry(b + 1, true, true); : : if (ref->refcount == 0) : { : LockBufHdr(buf); : buf->refcount++; 0.00 : 674c8c: 89 43 18 mov %eax,0x18(%rbx) : if (strategy == NULL) 0.00 : 674c8f: 74 7c je 674d0d : if (buf->usage_count < BM_MAX_USAGE_COUNT) : buf->usage_count++; : } : else : { : if (buf->usage_count == 0) 0.00 : 674c91: 0f b7 43 16 movzwl 0x16(%rbx),%eax 0.00 : 674c95: 66 85 c0 test %ax,%ax 0.00 : 674c98: 75 06 jne 674ca0 : buf->usage_count = 1; 0.00 : 674c9a: 66 c7 43 16 01 00 movw $0x1,0x16(%rbx) : } : result = (buf->flags & BM_VALID) != 0; 0.00 : 674ca0: 0f b7 43 14 movzwl 0x14(%rbx),%eax 0.00 : 674ca4: d1 e8 shr %eax 0.00 : 674ca6: 41 89 c5 mov %eax,%r13d 0.00 : 674ca9: 41 83 e5 01 and $0x1,%r13d : UnlockBufHdr(buf); 0.00 : 674cad: c6 43 20 00 movb $0x0,0x20(%rbx) 0.00 : 674cb1: 41 8b 44 24 04 mov 0x4(%r12),%eax : { : /* If we previously pinned the buffer, it must surely be valid */ : result = true; : } : : ref->refcount++; 0.00 : 674cb6: 83 c0 01 add $0x1,%eax 0.00 : 674cb9: 41 89 44 24 04 mov %eax,0x4(%r12) : Assert(ref->refcount > 0); : ResourceOwnerRememberBuffer(CurrentResourceOwner, 0.00 : 674cbe: 8b 73 24 mov 0x24(%rbx),%esi 0.00 : 674cc1: 48 8b 3d f8 5b 54 00 mov 0x545bf8(%rip),%rdi # bba8c0 0.00 : 674cc8: 83 c6 01 add $0x1,%esi 0.00 : 674ccb: e8 d0 54 12 00 callq 79a1a0 : BufferDescriptorGetBuffer(buf)); : return result; : } 0.00 : 674cd0: 44 89 e8 mov %r13d,%eax 0.00 : 674cd3: 48 8b 1c 24 mov (%rsp),%rbx 0.00 : 674cd7: 4c 8b 64 24 08 mov 0x8(%rsp),%r12 0.00 : 674cdc: 4c 8b 6c 24 10 mov 0x10(%rsp),%r13 0.00 : 674ce1: 4c 8b 74 24 18 mov 0x18(%rsp),%r14 0.00 : 674ce6: c9 leaveq 0.00 : 674ce7: c3 retq 0.00 : 674ce8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 674cef: 00 : : ref = GetPrivateRefCountEntry(b + 1, true, true); : : if (ref->refcount == 0) : { : LockBufHdr(buf); 0.00 : 674cf0: ba 0c 05 00 00 mov $0x50c,%edx 0.00 : 674cf5: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 674cfa: e8 41 b3 01 00 callq 690040 : buf->refcount++; 0.00 : 674cff: 8b 43 18 mov 0x18(%rbx),%eax 0.00 : 674d02: 83 c0 01 add $0x1,%eax : if (strategy == NULL) 0.00 : 674d05: 4d 85 f6 test %r14,%r14 : ref = GetPrivateRefCountEntry(b + 1, true, true); : : if (ref->refcount == 0) : { : LockBufHdr(buf); : buf->refcount++; 0.00 : 674d08: 89 43 18 mov %eax,0x18(%rbx) : if (strategy == NULL) 0.00 : 674d0b: 75 84 jne 674c91 : { : if (buf->usage_count < BM_MAX_USAGE_COUNT) 0.00 : 674d0d: 0f b7 43 16 movzwl 0x16(%rbx),%eax 0.00 : 674d11: 66 83 f8 04 cmp $0x4,%ax 0.00 : 674d15: 77 89 ja 674ca0 : buf->usage_count++; 0.00 : 674d17: 0f b7 43 16 movzwl 0x16(%rbx),%eax 0.00 : 674d1b: 83 c0 01 add $0x1,%eax 0.00 : 674d1e: 66 89 43 16 mov %ax,0x16(%rbx) 0.00 : 674d22: e9 79 ff ff ff jmpq 674ca0 Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 27.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:706 27.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:718 18.18 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:678 18.18 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:711 9.09 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:678 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006ed180 : : } : : : Datum : int8inc(PG_FUNCTION_ARGS) : { 0.00 : 6ed180: 55 push %rbp /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:678 18.18 : 6ed181: 48 89 e5 mov %rsp,%rbp 9.09 : 6ed184: 53 push %rbx 0.00 : 6ed185: 48 83 ec 08 sub $0x8,%rsp : } : else : #endif : { : /* Not called as an aggregate, so just do it the dumb way */ : int64 arg = PG_GETARG_INT64(0); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:706 27.27 : 6ed189: 48 8b 57 20 mov 0x20(%rdi),%rdx : int64 result; : : result = arg + 1; : /* Overflow check */ : if (result < 0 && arg > 0) 0.00 : 6ed18d: 48 89 d0 mov %rdx,%rax 0.00 : 6ed190: 48 83 c0 01 add $0x1,%rax /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:711 18.18 : 6ed194: 78 0a js 6ed1a0 : (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), : errmsg("bigint out of range"))); : : PG_RETURN_INT64(result); : } : } 0.00 : 6ed196: 48 83 c4 08 add $0x8,%rsp 0.00 : 6ed19a: 5b pop %rbx 0.00 : 6ed19b: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/int8.c:718 27.27 : 6ed19c: c3 retq 0.00 : 6ed19d: 0f 1f 00 nopl (%rax) : int64 arg = PG_GETARG_INT64(0); : int64 result; : : result = arg + 1; : /* Overflow check */ : if (result < 0 && arg > 0) 0.00 : 6ed1a0: 48 85 d2 test %rdx,%rdx 0.00 : 6ed1a3: 7e f1 jle 6ed196 : ereport(ERROR, 0.00 : 6ed1a5: 45 31 c0 xor %r8d,%r8d 0.00 : 6ed1a8: b9 3a ee 8b 00 mov $0x8bee3a,%ecx 0.00 : 6ed1ad: ba ca 02 00 00 mov $0x2ca,%edx 0.00 : 6ed1b2: be d3 ec 8b 00 mov $0x8becd3,%esi 0.00 : 6ed1b7: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6ed1bc: e8 ff d8 08 00 callq 77aac0 0.00 : 6ed1c1: 84 c0 test %al,%al 0.00 : 6ed1c3: 75 05 jne 6ed1ca 0.00 : 6ed1c5: e8 06 c3 d7 ff callq 4694d0 0.00 : 6ed1ca: bf eb ec 8b 00 mov $0x8beceb,%edi 0.00 : 6ed1cf: 31 c0 xor %eax,%eax 0.00 : 6ed1d1: e8 ca f6 08 00 callq 77c8a0 0.00 : 6ed1d6: bf 82 00 00 03 mov $0x3000082,%edi 0.00 : 6ed1db: 89 c3 mov %eax,%ebx 0.00 : 6ed1dd: e8 6e fb 08 00 callq 77cd50 0.00 : 6ed1e2: 89 de mov %ebx,%esi 0.00 : 6ed1e4: 89 c7 mov %eax,%edi 0.00 : 6ed1e6: 31 c0 xor %eax,%eax 0.00 : 6ed1e8: e8 f3 d3 08 00 callq 77a5e0 0.00 : 6ed1ed: eb d6 jmp 6ed1c5 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 45.45 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/timestamp.c:2123 27.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/timestamp.c:2123 18.18 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/timestamp.c:2154 9.09 /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/timestamp.c:2154 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000740870 : : * : * collate invalid timestamp at the end : */ : int : timestamp_cmp_internal(Timestamp dt1, Timestamp dt2) : { 0.00 : 740870: 55 push %rbp : #ifdef HAVE_INT64_TIMESTAMP : return (dt1 < dt2) ? -1 : ((dt1 > dt2) ? 1 : 0); /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/timestamp.c:2123 45.45 : 740871: 48 39 f7 cmp %rsi,%rdi 0.00 : 740874: b8 ff ff ff ff mov $0xffffffff,%eax : * : * collate invalid timestamp at the end : */ : int : timestamp_cmp_internal(Timestamp dt1, Timestamp dt2) : { 0.00 : 740879: 48 89 e5 mov %rsp,%rbp : #ifdef HAVE_INT64_TIMESTAMP : return (dt1 < dt2) ? -1 : ((dt1 > dt2) ? 1 : 0); 27.27 : 74087c: 7c 06 jl 740884 0.00 : 74087e: 0f 9f c0 setg %al 0.00 : 740881: 0f b6 c0 movzbl %al,%eax : return -1; : else : return 0; : } : #endif : } /home/Computational/mark/src/postgres-andres/src/backend/utils/adt/timestamp.c:2154 27.27 : 740884: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 45.45 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2175 27.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2159 27.27 /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2159 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000077d9a0 : : } : #endif /* USE_FLOAT8_BYVAL */ : : Datum : Float4GetDatum(float4 X) : { /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2159 27.27 : 77d9a0: 55 push %rbp 0.00 : 77d9a1: 48 89 e5 mov %rsp,%rbp 0.00 : 77d9a4: f3 0f 11 45 fc movss %xmm0,-0x4(%rbp) 27.27 : 77d9a9: 8b 45 fc mov -0x4(%rbp),%eax : float4 *retval = (float4 *) palloc(sizeof(float4)); : : *retval = X; : return PointerGetDatum(retval); : #endif : } /home/Computational/mark/src/postgres-andres/src/backend/utils/fmgr/fmgr.c:2175 45.45 : 77d9ac: c9 leaveq Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 62.50 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1870 12.50 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1857 12.50 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1857 12.50 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1901 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000675260 : : * : * Note: caller must have done ResourceOwnerEnlargeBuffers. : */ : static int : SyncOneBuffer(int buf_id, bool skip_recently_used) : { /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1857 12.50 : 675260: 55 push %rbp : static __inline__ int : tas(volatile slock_t *lock) : { : register slock_t _res = 1; : : __asm__ __volatile__( 0.00 : 675261: b8 01 00 00 00 mov $0x1,%eax 0.00 : 675266: 48 89 e5 mov %rsp,%rbp 12.50 : 675269: 48 89 5d e8 mov %rbx,-0x18(%rbp) : volatile BufferDesc *bufHdr = &BufferDescriptors[buf_id]; 0.00 : 67526d: 48 63 df movslq %edi,%rbx : * : * Note: caller must have done ResourceOwnerEnlargeBuffers. : */ : static int : SyncOneBuffer(int buf_id, bool skip_recently_used) : { 0.00 : 675270: 4c 89 6d f8 mov %r13,-0x8(%rbp) 0.00 : 675274: 4c 89 65 f0 mov %r12,-0x10(%rbp) : volatile BufferDesc *bufHdr = &BufferDescriptors[buf_id]; 0.00 : 675278: 48 c1 e3 06 shl $0x6,%rbx : * : * Note: caller must have done ResourceOwnerEnlargeBuffers. : */ : static int : SyncOneBuffer(int buf_id, bool skip_recently_used) : { 0.00 : 67527c: 48 83 ec 20 sub $0x20,%rsp : volatile BufferDesc *bufHdr = &BufferDescriptors[buf_id]; 0.00 : 675280: 48 03 1d 79 a8 54 00 add 0x54a879(%rip),%rbx # bbfb00 : * : * Note: caller must have done ResourceOwnerEnlargeBuffers. : */ : static int : SyncOneBuffer(int buf_id, bool skip_recently_used) : { 0.00 : 675287: 41 89 f5 mov %esi,%r13d : * as we mark pages dirty in access methods *before* logging changes with : * XLogInsert(): if someone marks the buffer dirty just after our check we : * don't worry because our checkpoint.redo points before log record for : * upcoming changes and so we are not required to write such dirty buffer. : */ : LockBufHdr(bufHdr); 0.00 : 67528a: 48 8d 7b 20 lea 0x20(%rbx),%rdi 0.00 : 67528e: f0 86 07 lock xchg %al,(%rdi) /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1870 62.50 : 675291: 84 c0 test %al,%al 0.00 : 675293: 75 5b jne 6752f0 : : if (bufHdr->refcount == 0 && bufHdr->usage_count == 0) 0.00 : 675295: 8b 43 18 mov 0x18(%rbx),%eax 0.00 : 675298: 85 c0 test %eax,%eax 0.00 : 67529a: 75 0f jne 6752ab 0.00 : 67529c: 0f b7 43 16 movzwl 0x16(%rbx),%eax : result |= BUF_REUSABLE; : else if (skip_recently_used) : { : /* Caller told us not to write recently-used buffers */ : UnlockBufHdr(bufHdr); 0.00 : 6752a0: 41 bc 02 00 00 00 mov $0x2,%r12d : * don't worry because our checkpoint.redo points before log record for : * upcoming changes and so we are not required to write such dirty buffer. : */ : LockBufHdr(bufHdr); : : if (bufHdr->refcount == 0 && bufHdr->usage_count == 0) 0.00 : 6752a6: 66 85 c0 test %ax,%ax 0.00 : 6752a9: 74 08 je 6752b3 : result |= BUF_REUSABLE; : else if (skip_recently_used) 0.00 : 6752ab: 45 31 e4 xor %r12d,%r12d 0.00 : 6752ae: 45 84 ed test %r13b,%r13b 0.00 : 6752b1: 75 2d jne 6752e0 : /* Caller told us not to write recently-used buffers */ : UnlockBufHdr(bufHdr); : return result; : } : : if (!(bufHdr->flags & BM_VALID) || !(bufHdr->flags & BM_DIRTY)) 0.00 : 6752b3: 0f b7 43 14 movzwl 0x14(%rbx),%eax 0.00 : 6752b7: a8 02 test $0x2,%al 0.00 : 6752b9: 74 08 je 6752c3 0.00 : 6752bb: 0f b7 43 14 movzwl 0x14(%rbx),%eax 0.00 : 6752bf: a8 01 test $0x1,%al 0.00 : 6752c1: 75 45 jne 675308 : { : /* It's clean, so nothing to do */ : UnlockBufHdr(bufHdr); 0.00 : 6752c3: c6 43 20 00 movb $0x0,0x20(%rbx) : : LWLockRelease(bufHdr->content_lock); : UnpinBuffer(bufHdr, true); : : return result | BUF_WRITTEN; : } 0.00 : 6752c7: 44 89 e0 mov %r12d,%eax 0.00 : 6752ca: 48 8b 5d e8 mov -0x18(%rbp),%rbx 0.00 : 6752ce: 4c 8b 65 f0 mov -0x10(%rbp),%r12 0.00 : 6752d2: 4c 8b 6d f8 mov -0x8(%rbp),%r13 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1901 12.50 : 6752d6: c9 leaveq 0.00 : 6752d7: c3 retq 0.00 : 6752d8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 6752df: 00 : if (bufHdr->refcount == 0 && bufHdr->usage_count == 0) : result |= BUF_REUSABLE; : else if (skip_recently_used) : { : /* Caller told us not to write recently-used buffers */ : UnlockBufHdr(bufHdr); 0.00 : 6752e0: 45 31 e4 xor %r12d,%r12d 0.00 : 6752e3: c6 43 20 00 movb $0x0,0x20(%rbx) : : LWLockRelease(bufHdr->content_lock); : UnpinBuffer(bufHdr, true); : : return result | BUF_WRITTEN; : } 0.00 : 6752e7: eb de jmp 6752c7 0.00 : 6752e9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : * as we mark pages dirty in access methods *before* logging changes with : * XLogInsert(): if someone marks the buffer dirty just after our check we : * don't worry because our checkpoint.redo points before log record for : * upcoming changes and so we are not required to write such dirty buffer. : */ : LockBufHdr(bufHdr); 0.00 : 6752f0: ba 4e 07 00 00 mov $0x74e,%edx 0.00 : 6752f5: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 6752fa: e8 41 ad 01 00 callq 690040 0.00 : 6752ff: eb 94 jmp 675295 0.00 : 675301: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : : /* : * Pin it, share-lock it, write it. (FlushBuffer will do nothing if the : * buffer is clean by the time we've locked it.) : */ : PinBuffer_Locked(bufHdr); 0.00 : 675308: 48 89 df mov %rbx,%rdi : FlushBuffer(bufHdr, NULL); : : LWLockRelease(bufHdr->content_lock); : UnpinBuffer(bufHdr, true); : : return result | BUF_WRITTEN; 0.00 : 67530b: 41 83 cc 01 or $0x1,%r12d : : /* : * Pin it, share-lock it, write it. (FlushBuffer will do nothing if the : * buffer is clean by the time we've locked it.) : */ : PinBuffer_Locked(bufHdr); 0.00 : 67530f: e8 bc f8 ff ff callq 674bd0 : LWLockAcquire(bufHdr->content_lock, LW_SHARED); 0.00 : 675314: 48 8b 7b 38 mov 0x38(%rbx),%rdi 0.00 : 675318: be 01 00 00 00 mov $0x1,%esi 0.00 : 67531d: e8 ce a7 01 00 callq 68faf0 : : FlushBuffer(bufHdr, NULL); 0.00 : 675322: 31 f6 xor %esi,%esi 0.00 : 675324: 48 89 df mov %rbx,%rdi 0.00 : 675327: e8 24 fc ff ff callq 674f50 : : LWLockRelease(bufHdr->content_lock); 0.00 : 67532c: 48 8b 7b 38 mov 0x38(%rbx),%rdi 0.00 : 675330: e8 6b a0 01 00 callq 68f3a0 : UnpinBuffer(bufHdr, true); 0.00 : 675335: be 01 00 00 00 mov $0x1,%esi 0.00 : 67533a: 48 89 df mov %rbx,%rdi 0.00 : 67533d: e8 ee f9 ff ff callq 674d30 : : return result | BUF_WRITTEN; : } 0.00 : 675342: eb 83 jmp 6752c7 Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 66.67 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:116 33.33 /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:113 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000005c5910 : : * access method functions. : * ---------------------------------------------------------------- : */ : TupleTableSlot * : ExecSeqScan(SeqScanState *node) : { 0.00 : 5c5910: 55 push %rbp : return ExecScan((ScanState *) node, 0.00 : 5c5911: ba 30 57 5c 00 mov $0x5c5730,%edx 0.00 : 5c5916: be 30 59 5c 00 mov $0x5c5930,%esi : * access method functions. : * ---------------------------------------------------------------- : */ : TupleTableSlot * : ExecSeqScan(SeqScanState *node) : { 0.00 : 5c591b: 48 89 e5 mov %rsp,%rbp : return ExecScan((ScanState *) node, : (ExecScanAccessMtd) SeqNext, : (ExecScanRecheckMtd) SeqRecheck); : } /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:116 66.67 : 5c591e: c9 leaveq : * ---------------------------------------------------------------- : */ : TupleTableSlot * : ExecSeqScan(SeqScanState *node) : { : return ExecScan((ScanState *) node, /home/Computational/mark/src/postgres-andres/src/backend/executor/nodeSeqscan.c:113 33.33 : 5c591f: e9 2c de fe ff jmpq 5b3750 Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko ---------------------------------------------- 33.33 ??:0 33.33 ??:0 16.67 ??:0 16.67 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000001800 : : /** : * ixgbe_update_stats - Update the board statistics counters. : * @adapter: board private structure : **/ : void ixgbe_update_stats(struct ixgbe_adapter *adapter) : { 0.00 : 1800: 41 57 push %r15 0.00 : 1802: 41 56 push %r14 0.00 : 1804: 41 55 push %r13 0.00 : 1806: 41 54 push %r12 0.00 : 1808: 55 push %rbp 0.00 : 1809: 53 push %rbx 0.00 : 180a: 48 89 fb mov %rdi,%rbx 0.00 : 180d: 48 83 ec 28 sub $0x28,%rsp : return oldbit; : } : : static __always_inline int constant_test_bit(unsigned int nr, const volatile unsigned long *addr) : { : return ((1UL << (nr % BITS_PER_LONG)) & 0.00 : 1811: 48 8b 87 10 02 00 00 mov 0x210(%rdi),%rax : #ifdef HAVE_NETDEV_STATS_IN_NETDEV : struct net_device_stats *net_stats = &adapter->netdev->stats; 0.00 : 1818: 4c 8b bf 00 02 00 00 mov 0x200(%rdi),%r15 : u64 bytes = 0, packets = 0, hw_csum_rx_error = 0; : #ifndef IXGBE_NO_LRO : u32 flushed = 0, coal = 0; : #endif : : if (test_bit(__IXGBE_DOWN, &adapter->state) || 0.00 : 181f: a8 04 test $0x4,%al 0.00 : 1821: 0f 85 b9 09 00 00 jne 21e0 0.00 : 1827: 48 8b 87 10 02 00 00 mov 0x210(%rdi),%rax 0.00 : 182e: a8 02 test $0x2,%al 0.00 : 1830: 0f 85 aa 09 00 00 jne 21e0 : test_bit(__IXGBE_RESETTING, &adapter->state)) : return; : : if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { 0.00 : 1836: f6 87 1c 02 00 00 02 testb $0x2,0x21c(%rdi) 0.00 : 183d: 0f 85 ac 09 00 00 jne 21ef 0.00 : 1843: 44 8b 9f 28 02 00 00 mov 0x228(%rdi),%r11d : adapter->rsc_total_count = rsc_count; : adapter->rsc_total_flush = rsc_flush; : } : : #ifndef IXGBE_NO_LRO : for (i = 0; i < adapter->num_q_vectors; i++) { 0.00 : 184a: 8b 83 c0 0b 00 00 mov 0xbc0(%rbx),%eax 0.00 : 1850: 31 f6 xor %esi,%esi 0.00 : 1852: 31 c9 xor %ecx,%ecx 0.00 : 1854: 85 c0 test %eax,%eax 0.00 : 1856: 74 3a je 1892 0.00 : 1858: 83 e8 01 sub $0x1,%eax 0.00 : 185b: 31 f6 xor %esi,%esi 0.00 : 185d: 31 c9 xor %ecx,%ecx 0.00 : 185f: 48 8d 3c c5 08 00 00 lea 0x8(,%rax,8),%rdi 0.00 : 1866: 00 0.00 : 1867: 31 d2 xor %edx,%edx 0.00 : 1869: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : struct ixgbe_q_vector *q_vector = adapter->q_vector[i]; 0.00 : 1870: 48 8b 84 13 50 07 00 mov 0x750(%rbx,%rdx,1),%rax 0.00 : 1877: 00 : if (!q_vector) 0.00 : 1878: 48 85 c0 test %rax,%rax 0.00 : 187b: 74 0c je 1889 : continue; : flushed += q_vector->lrolist.stats.flushed; 0.00 : 187d: 03 b0 b8 02 00 00 add 0x2b8(%rax),%esi : coal += q_vector->lrolist.stats.coal; 0.00 : 1883: 03 88 bc 02 00 00 add 0x2bc(%rax),%ecx 0.00 : 1889: 48 83 c2 08 add $0x8,%rdx : adapter->rsc_total_count = rsc_count; : adapter->rsc_total_flush = rsc_flush; : } : : #ifndef IXGBE_NO_LRO : for (i = 0; i < adapter->num_q_vectors; i++) { 0.00 : 188d: 48 39 fa cmp %rdi,%rdx 0.00 : 1890: 75 de jne 1870 : } : adapter->lro_stats.flushed = flushed; : adapter->lro_stats.coal = coal; : : #endif : for (i = 0; i < adapter->num_rx_queues; i++) { 0.00 : 1892: 45 85 db test %r11d,%r11d : if (!q_vector) : continue; : flushed += q_vector->lrolist.stats.flushed; : coal += q_vector->lrolist.stats.coal; : } : adapter->lro_stats.flushed = flushed; 0.00 : 1895: 89 b3 f8 0b 00 00 mov %esi,0xbf8(%rbx) : adapter->lro_stats.coal = coal; 0.00 : 189b: 89 8b fc 0b 00 00 mov %ecx,0xbfc(%rbx) : : #endif : for (i = 0; i < adapter->num_rx_queues; i++) { 0.00 : 18a1: 0f 84 6b 0f 00 00 je 2812 0.00 : 18a7: 41 8d 43 ff lea -0x1(%r11),%eax 0.00 : 18ab: 45 31 d2 xor %r10d,%r10d 0.00 : 18ae: 31 f6 xor %esi,%esi 0.00 : 18b0: 31 c9 xor %ecx,%ecx 0.00 : 18b2: 45 31 c9 xor %r9d,%r9d 0.00 : 18b5: 45 31 c0 xor %r8d,%r8d 0.00 : 18b8: 4c 8d 1c c5 08 00 00 lea 0x8(,%rax,8),%r11 0.00 : 18bf: 00 0.00 : 18c0: 31 ff xor %edi,%edi 0.00 : 18c2: 31 d2 xor %edx,%edx 0.00 : 18c4: 0f 1f 40 00 nopl 0x0(%rax) : struct ixgbe_ring *rx_ring = adapter->rx_ring[i]; 0.00 : 18c8: 48 8b 84 13 d8 04 00 mov 0x4d8(%rbx,%rdx,1),%rax 0.00 : 18cf: 00 : non_eop_descs += rx_ring->rx_stats.non_eop_descs; : alloc_rx_page_failed += rx_ring->rx_stats.alloc_rx_page_failed; : alloc_rx_buff_failed += rx_ring->rx_stats.alloc_rx_buff_failed; : hw_csum_rx_error += rx_ring->rx_stats.csum_err; : bytes += rx_ring->stats.bytes; : packets += rx_ring->stats.packets; 0.00 : 18d0: 48 83 c2 08 add $0x8,%rdx : adapter->lro_stats.coal = coal; : : #endif : for (i = 0; i < adapter->num_rx_queues; i++) { : struct ixgbe_ring *rx_ring = adapter->rx_ring[i]; : non_eop_descs += rx_ring->rx_stats.non_eop_descs; 0.00 : 18d4: 4c 03 50 78 add 0x78(%rax),%r10 : alloc_rx_page_failed += rx_ring->rx_stats.alloc_rx_page_failed; 0.00 : 18d8: 48 03 b0 80 00 00 00 add 0x80(%rax),%rsi : alloc_rx_buff_failed += rx_ring->rx_stats.alloc_rx_buff_failed; 0.00 : 18df: 48 03 88 88 00 00 00 add 0x88(%rax),%rcx : hw_csum_rx_error += rx_ring->rx_stats.csum_err; 0.00 : 18e6: 48 03 b8 90 00 00 00 add 0x90(%rax),%rdi : bytes += rx_ring->stats.bytes; 0.00 : 18ed: 4c 03 48 60 add 0x60(%rax),%r9 : packets += rx_ring->stats.packets; 0.00 : 18f1: 4c 03 40 58 add 0x58(%rax),%r8 : } : adapter->lro_stats.flushed = flushed; : adapter->lro_stats.coal = coal; : : #endif : for (i = 0; i < adapter->num_rx_queues; i++) { 0.00 : 18f5: 4c 39 da cmp %r11,%rdx 0.00 : 18f8: 75 ce jne 18c8 0.00 : 18fa: 89 f2 mov %esi,%edx 0.00 : 18fc: 89 c8 mov %ecx,%eax : packets += rx_ring->stats.packets; : : } : adapter->non_eop_descs = non_eop_descs; : adapter->alloc_rx_page_failed = alloc_rx_page_failed; : adapter->alloc_rx_buff_failed = alloc_rx_buff_failed; 0.00 : 18fe: 89 83 4c 07 00 00 mov %eax,0x74c(%rbx) : hw_csum_rx_error += rx_ring->rx_stats.csum_err; : bytes += rx_ring->stats.bytes; : packets += rx_ring->stats.packets; : : } : adapter->non_eop_descs = non_eop_descs; 0.00 : 1904: 4c 89 93 40 07 00 00 mov %r10,0x740(%rbx) : adapter->alloc_rx_page_failed = alloc_rx_page_failed; 0.00 : 190b: 89 93 48 07 00 00 mov %edx,0x748(%rbx) : adapter->alloc_rx_buff_failed = alloc_rx_buff_failed; : adapter->hw_csum_rx_error = hw_csum_rx_error; 0.00 : 1911: 48 89 bb 20 07 00 00 mov %rdi,0x720(%rbx) : net_stats->rx_bytes = bytes; 0.00 : 1918: 4d 89 8f d8 00 00 00 mov %r9,0xd8(%r15) : net_stats->rx_packets = packets; 0.00 : 191f: 4d 89 87 c8 00 00 00 mov %r8,0xc8(%r15) : : bytes = 0; : packets = 0; : /* gather some stats to the adapter struct that are per queue */ : for (i = 0; i < adapter->num_tx_queues; i++) { 0.00 : 1926: 8b 83 20 02 00 00 mov 0x220(%rbx),%eax 0.00 : 192c: 85 c0 test %eax,%eax 0.00 : 192e: 0f 84 f2 0e 00 00 je 2826 0.00 : 1934: 83 e8 01 sub $0x1,%eax 0.00 : 1937: 45 31 c0 xor %r8d,%r8d 0.00 : 193a: 31 ff xor %edi,%edi 0.00 : 193c: 4c 8d 0c c5 08 00 00 lea 0x8(,%rax,8),%r9 0.00 : 1943: 00 0.00 : 1944: 31 f6 xor %esi,%esi 0.00 : 1946: 31 c9 xor %ecx,%ecx 0.00 : 1948: 31 d2 xor %edx,%edx 0.00 : 194a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : struct ixgbe_ring *tx_ring = adapter->tx_ring[i]; 0.00 : 1950: 48 8b 84 13 80 02 00 mov 0x280(%rbx,%rdx,1),%rax 0.00 : 1957: 00 : restart_queue += tx_ring->tx_stats.restart_queue; : tx_busy += tx_ring->tx_stats.tx_busy; : bytes += tx_ring->stats.bytes; : packets += tx_ring->stats.packets; 0.00 : 1958: 48 83 c2 08 add $0x8,%rdx : bytes = 0; : packets = 0; : /* gather some stats to the adapter struct that are per queue */ : for (i = 0; i < adapter->num_tx_queues; i++) { : struct ixgbe_ring *tx_ring = adapter->tx_ring[i]; : restart_queue += tx_ring->tx_stats.restart_queue; 0.00 : 195c: 4c 03 40 68 add 0x68(%rax),%r8 : tx_busy += tx_ring->tx_stats.tx_busy; 0.00 : 1960: 48 03 78 70 add 0x70(%rax),%rdi : bytes += tx_ring->stats.bytes; 0.00 : 1964: 48 03 70 60 add 0x60(%rax),%rsi : packets += tx_ring->stats.packets; 0.00 : 1968: 48 03 48 58 add 0x58(%rax),%rcx : net_stats->rx_packets = packets; : : bytes = 0; : packets = 0; : /* gather some stats to the adapter struct that are per queue */ : for (i = 0; i < adapter->num_tx_queues; i++) { 0.00 : 196c: 4c 39 ca cmp %r9,%rdx 0.00 : 196f: 75 df jne 1950 : restart_queue += tx_ring->tx_stats.restart_queue; : tx_busy += tx_ring->tx_stats.tx_busy; : bytes += tx_ring->stats.bytes; : packets += tx_ring->stats.packets; : } : adapter->restart_queue = restart_queue; 0.00 : 1971: 4c 89 83 c0 04 00 00 mov %r8,0x4c0(%rbx) : adapter->tx_busy = tx_busy; 0.00 : 1978: 48 89 bb 08 1b 00 00 mov %rdi,0x1b08(%rbx) : net_stats->tx_bytes = bytes; 0.00 : 197f: 49 89 b7 e0 00 00 00 mov %rsi,0xe0(%r15) : net_stats->tx_packets = packets; 0.00 : 1986: 49 89 8f d0 00 00 00 mov %rcx,0xd0(%r15) : { asm volatile("mov" size " %0,%1": :reg (val), \ : "m" (*(volatile type __force *)addr) barrier); } : : build_mmio_read(readb, "b", unsigned char, "=q", :"memory") : build_mmio_read(readw, "w", unsigned short, "=r", :"memory") : build_mmio_read(readl, "l", unsigned int, "=r", :"memory") 0.00 : 198d: 48 8b 93 80 0e 00 00 mov 0xe80(%rbx),%rdx : : hwstats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS); 0.00 : 1994: 48 8b 83 b0 14 00 00 mov 0x14b0(%rbx),%rax 0.00 : 199b: 48 81 c2 00 40 00 00 add $0x4000,%rdx 0.00 : 19a2: 8b 12 mov (%rdx),%edx 0.00 : 19a4: 89 d2 mov %edx,%edx 0.00 : 19a6: 48 89 df mov %rbx,%rdi 0.00 : 19a9: 48 89 d9 mov %rbx,%rcx 0.00 : 19ac: 48 01 c2 add %rax,%rdx 0.00 : 19af: 45 31 f6 xor %r14d,%r14d 0.00 : 19b2: 45 31 c9 xor %r9d,%r9d 0.00 : 19b5: 48 89 93 b0 14 00 00 mov %rdx,0x14b0(%rbx) 0.00 : 19bc: be a0 3f 00 00 mov $0x3fa0,%esi 0.00 : 19c1: 41 b8 34 60 00 00 mov $0x6034,%r8d 0.00 : 19c7: eb 4a jmp 1a13 0.00 : 19c9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : missed_rx += mpc; : hwstats->mpc[i] += mpc; : total_mpc += hwstats->mpc[i]; : hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); : hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); : switch (hw->mac.type) { 0.00 : 19d0: 72 28 jb 19fa 0.00 : 19d2: 83 f8 03 cmp $0x3,%eax 0.00 : 19d5: 77 23 ja 19fa 0.00 : 19d7: 48 8d 96 a0 01 00 00 lea 0x1a0(%rsi),%rdx : hwstats->pxonrxc[i] += : IXGBE_READ_REG(hw, IXGBE_PXONRXC(i)); : break; : case ixgbe_mac_82599EB: : case ixgbe_mac_X540: : hwstats->pxonrxc[i] += 0.00 : 19de: 48 8b 81 90 15 00 00 mov 0x1590(%rcx),%rax 0.00 : 19e5: 48 03 93 80 0e 00 00 add 0xe80(%rbx),%rdx 0.00 : 19ec: 8b 12 mov (%rdx),%edx 0.00 : 19ee: 89 d2 mov %edx,%edx 0.00 : 19f0: 48 01 c2 add %rax,%rdx 0.00 : 19f3: 48 89 91 90 15 00 00 mov %rdx,0x1590(%rcx) 0.00 : 19fa: 48 83 c6 04 add $0x4,%rsi 0.00 : 19fe: 48 83 c1 08 add $0x8,%rcx 0.00 : 1a02: 49 83 c0 40 add $0x40,%r8 : net_stats->tx_packets = packets; : : hwstats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS); : : /* 8 register reads */ : for (i = 0; i < 8; i++) { 0.00 : 1a06: 48 81 fe c0 3f 00 00 cmp $0x3fc0,%rsi 0.00 : 1a0d: 0f 84 35 08 00 00 je 2248 0.00 : 1a13: 48 89 f0 mov %rsi,%rax 0.00 : 1a16: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1a1d: 8b 00 mov (%rax),%eax : /* for packet buffers not used, the register should read 0 */ : mpc = IXGBE_READ_REG(hw, IXGBE_MPC(i)); : missed_rx += mpc; 0.00 : 1a1f: 41 01 c1 add %eax,%r9d : hwstats->mpc[i] += mpc; 0.00 : 1a22: 89 c0 mov %eax,%eax 0.00 : 1a24: 48 03 81 d8 14 00 00 add 0x14d8(%rcx),%rax : total_mpc += hwstats->mpc[i]; : hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); 0.00 : 1a2b: 48 8b 91 50 15 00 00 mov 0x1550(%rcx),%rdx : /* 8 register reads */ : for (i = 0; i < 8; i++) { : /* for packet buffers not used, the register should read 0 */ : mpc = IXGBE_READ_REG(hw, IXGBE_MPC(i)); : missed_rx += mpc; : hwstats->mpc[i] += mpc; 0.00 : 1a32: 48 89 81 d8 14 00 00 mov %rax,0x14d8(%rcx) : total_mpc += hwstats->mpc[i]; 0.00 : 1a39: 49 01 c6 add %rax,%r14 0.00 : 1a3c: 48 8d 86 60 ff ff ff lea -0xa0(%rsi),%rax 0.00 : 1a43: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1a4a: 8b 00 mov (%rax),%eax : hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); 0.00 : 1a4c: 89 c0 mov %eax,%eax 0.00 : 1a4e: 48 01 d0 add %rdx,%rax : hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); 0.00 : 1a51: 48 8b 91 d0 15 00 00 mov 0x15d0(%rcx),%rdx : /* for packet buffers not used, the register should read 0 */ : mpc = IXGBE_READ_REG(hw, IXGBE_MPC(i)); : missed_rx += mpc; : hwstats->mpc[i] += mpc; : total_mpc += hwstats->mpc[i]; : hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); 0.00 : 1a58: 48 89 81 50 15 00 00 mov %rax,0x1550(%rcx) 0.00 : 1a5f: 48 8d 46 80 lea -0x80(%rsi),%rax 0.00 : 1a63: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1a6a: 8b 00 mov (%rax),%eax : hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); 0.00 : 1a6c: 89 c0 mov %eax,%eax 0.00 : 1a6e: 48 01 d0 add %rdx,%rax 0.00 : 1a71: 48 89 81 d0 15 00 00 mov %rax,0x15d0(%rcx) : switch (hw->mac.type) { 0.00 : 1a78: 8b 83 50 10 00 00 mov 0x1050(%rbx),%eax 0.00 : 1a7e: 83 f8 01 cmp $0x1,%eax 0.00 : 1a81: 0f 85 49 ff ff ff jne 19d0 0.00 : 1a87: 48 8d 46 20 lea 0x20(%rsi),%rax : case ixgbe_mac_82598EB: : hwstats->rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); 0.00 : 1a8b: 48 8b 91 b0 16 00 00 mov 0x16b0(%rcx),%rdx 0.00 : 1a92: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1a99: 8b 00 mov (%rax),%eax 0.00 : 1a9b: 89 c0 mov %eax,%eax 0.00 : 1a9d: 48 01 d0 add %rdx,%rax : hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC(i)); 0.00 : 1aa0: 48 8b 91 08 19 00 00 mov 0x1908(%rcx),%rdx : total_mpc += hwstats->mpc[i]; : hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); : hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); : switch (hw->mac.type) { : case ixgbe_mac_82598EB: : hwstats->rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); 0.00 : 1aa7: 48 89 81 b0 16 00 00 mov %rax,0x16b0(%rcx) 0.00 : 1aae: 4c 89 c0 mov %r8,%rax 0.00 : 1ab1: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1ab8: 8b 00 mov (%rax),%eax : hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC(i)); 0.00 : 1aba: 89 c0 mov %eax,%eax 0.00 : 1abc: 48 01 d0 add %rdx,%rax : hwstats->qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC(i)); 0.00 : 1abf: 48 8b 91 88 18 00 00 mov 0x1888(%rcx),%rdx : hwstats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); : hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); : switch (hw->mac.type) { : case ixgbe_mac_82598EB: : hwstats->rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); : hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC(i)); 0.00 : 1ac6: 48 89 81 08 19 00 00 mov %rax,0x1908(%rcx) 0.00 : 1acd: 49 8d 80 00 b0 ff ff lea -0x5000(%r8),%rax 0.00 : 1ad4: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1adb: 8b 00 mov (%rax),%eax : hwstats->qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC(i)); 0.00 : 1add: 89 c0 mov %eax,%eax 0.00 : 1adf: 48 01 d0 add %rdx,%rax : hwstats->pxonrxc[i] += 0.00 : 1ae2: 48 8b 91 90 15 00 00 mov 0x1590(%rcx),%rdx : hwstats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); : switch (hw->mac.type) { : case ixgbe_mac_82598EB: : hwstats->rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); : hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC(i)); : hwstats->qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC(i)); 0.00 : 1ae9: 48 89 81 88 18 00 00 mov %rax,0x1888(%rcx) 0.00 : 1af0: 48 8d 86 60 8f 00 00 lea 0x8f60(%rsi),%rax 0.00 : 1af7: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1afe: 8b 00 mov (%rax),%eax : hwstats->pxonrxc[i] += 0.00 : 1b00: 89 c0 mov %eax,%eax 0.00 : 1b02: 48 01 d0 add %rdx,%rax 0.00 : 1b05: 48 89 81 90 15 00 00 mov %rax,0x1590(%rcx) : IXGBE_READ_REG(hw, IXGBE_PXONRXC(i)); : break; 0.00 : 1b0c: e9 e9 fe ff ff jmpq 19fa 0.00 : 1b11: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : struct ixgbe_hw *hw = &adapter->hw; : struct ixgbe_hw_stats *hwstats = &adapter->stats; : int i; : u32 data; : : if ((hw->fc.current_mode != ixgbe_fc_full) && 0.00 : 1b18: 8b 83 0c 13 00 00 mov 0x130c(%rbx),%eax 0.00 : 1b1e: 83 f8 03 cmp $0x3,%eax 0.00 : 1b21: 0f 84 1c 0c 00 00 je 2743 0.00 : 1b27: 83 e8 01 sub $0x1,%eax 0.00 : 1b2a: 0f 84 13 0c 00 00 je 2743 : hwstats->gprc -= missed_rx; : : ixgbe_update_xoff_received(adapter); : : /* 82598 hardware only has a 32 bit counter in the high register */ : switch (hw->mac.type) { 0.00 : 1b30: 8b 83 50 10 00 00 mov 0x1050(%rbx),%eax 0.00 : 1b36: 83 f8 02 cmp $0x2,%eax 0.00 : 1b39: 0f 84 7a 09 00 00 je 24b9 0.00 : 1b3f: 83 f8 03 cmp $0x3,%eax 0.00 : 1b42: 0f 84 e9 08 00 00 je 2431 0.00 : 1b48: 83 e8 01 sub $0x1,%eax 0.00 : 1b4b: 0f 85 88 00 00 00 jne 1bd9 0.00 : 1b51: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : case ixgbe_mac_82598EB: : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXC); 0.00 : 1b58: 48 8b 93 38 15 00 00 mov 0x1538(%rbx),%rdx 0.00 : 1b5f: 48 05 60 cf 00 00 add $0xcf60,%rax 0.00 : 1b65: 8b 00 mov (%rax),%eax 0.00 : 1b67: 89 c0 mov %eax,%eax 0.00 : 1b69: 48 01 d0 add %rdx,%rax : hwstats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCH); 0.00 : 1b6c: 48 8b 93 a0 16 00 00 mov 0x16a0(%rbx),%rdx : ixgbe_update_xoff_received(adapter); : : /* 82598 hardware only has a 32 bit counter in the high register */ : switch (hw->mac.type) { : case ixgbe_mac_82598EB: : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXC); 0.00 : 1b73: 48 89 83 38 15 00 00 mov %rax,0x1538(%rbx) 0.00 : 1b7a: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1b81: 48 05 8c 40 00 00 add $0x408c,%rax 0.00 : 1b87: 8b 00 mov (%rax),%eax : hwstats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCH); 0.00 : 1b89: 89 c0 mov %eax,%eax 0.00 : 1b8b: 48 01 d0 add %rdx,%rax : hwstats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); 0.00 : 1b8e: 48 8b 93 a8 16 00 00 mov 0x16a8(%rbx),%rdx : : /* 82598 hardware only has a 32 bit counter in the high register */ : switch (hw->mac.type) { : case ixgbe_mac_82598EB: : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXC); : hwstats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCH); 0.00 : 1b95: 48 89 83 a0 16 00 00 mov %rax,0x16a0(%rbx) 0.00 : 1b9c: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1ba3: 48 05 94 40 00 00 add $0x4094,%rax 0.00 : 1ba9: 8b 00 mov (%rax),%eax : hwstats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); 0.00 : 1bab: 89 c0 mov %eax,%eax 0.00 : 1bad: 48 01 d0 add %rdx,%rax : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORH); 0.00 : 1bb0: 48 8b 93 28 17 00 00 mov 0x1728(%rbx),%rdx : /* 82598 hardware only has a 32 bit counter in the high register */ : switch (hw->mac.type) { : case ixgbe_mac_82598EB: : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXC); : hwstats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCH); : hwstats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); 0.00 : 1bb7: 48 89 83 a8 16 00 00 mov %rax,0x16a8(%rbx) 0.00 : 1bbe: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1bc5: 48 05 c4 40 00 00 add $0x40c4,%rax 0.00 : 1bcb: 8b 00 mov (%rax),%eax : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORH); 0.00 : 1bcd: 89 c0 mov %eax,%eax 0.00 : 1bcf: 48 01 d0 add %rdx,%rax 0.00 : 1bd2: 48 89 83 28 17 00 00 mov %rax,0x1728(%rbx) 0.00 : 1bd9: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1be0: 48 05 78 40 00 00 add $0x4078,%rax 0.00 : 1be6: 8b 00 mov (%rax),%eax : break; : default: : break; : } : bprc = IXGBE_READ_REG(hw, IXGBE_BPRC); : hwstats->bprc += bprc; 0.00 : 1be8: 89 c1 mov %eax,%ecx 0.00 : 1bea: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1bf1: 48 01 8b 88 16 00 00 add %rcx,0x1688(%rbx) : hwstats->mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); 0.00 : 1bf8: 48 8b 93 90 16 00 00 mov 0x1690(%rbx),%rdx 0.00 : 1bff: 48 05 7c 40 00 00 add $0x407c,%rax 0.00 : 1c05: 8b 00 mov (%rax),%eax 0.00 : 1c07: 89 c0 mov %eax,%eax 0.00 : 1c09: 48 01 d0 add %rdx,%rax : if (hw->mac.type == ixgbe_mac_82598EB) 0.00 : 1c0c: 83 bb 50 10 00 00 01 cmpl $0x1,0x1050(%rbx) : default: : break; : } : bprc = IXGBE_READ_REG(hw, IXGBE_BPRC); : hwstats->bprc += bprc; : hwstats->mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); 0.00 : 1c13: 48 89 83 90 16 00 00 mov %rax,0x1690(%rbx) : if (hw->mac.type == ixgbe_mac_82598EB) 0.00 : 1c1a: 0f 84 84 0b 00 00 je 27a4 0.00 : 1c20: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : hwstats->mprc -= bprc; : hwstats->roc += IXGBE_READ_REG(hw, IXGBE_ROC); 0.00 : 1c27: 48 8b 93 00 17 00 00 mov 0x1700(%rbx),%rdx 0.00 : 1c2e: 48 05 ac 40 00 00 add $0x40ac,%rax 0.00 : 1c34: 8b 00 mov (%rax),%eax 0.00 : 1c36: 89 c0 mov %eax,%eax 0.00 : 1c38: 48 01 d0 add %rdx,%rax : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); 0.00 : 1c3b: 48 8b 93 50 16 00 00 mov 0x1650(%rbx),%rdx : bprc = IXGBE_READ_REG(hw, IXGBE_BPRC); : hwstats->bprc += bprc; : hwstats->mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); : if (hw->mac.type == ixgbe_mac_82598EB) : hwstats->mprc -= bprc; : hwstats->roc += IXGBE_READ_REG(hw, IXGBE_ROC); 0.00 : 1c42: 48 89 83 00 17 00 00 mov %rax,0x1700(%rbx) 0.00 : 1c49: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1c50: 48 05 5c 40 00 00 add $0x405c,%rax 0.00 : 1c56: 8b 00 mov (%rax),%eax : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); 0.00 : 1c58: 89 c0 mov %eax,%eax 0.00 : 1c5a: 48 01 d0 add %rdx,%rax : hwstats->prc127 += IXGBE_READ_REG(hw, IXGBE_PRC127); 0.00 : 1c5d: 48 8b 93 58 16 00 00 mov 0x1658(%rbx),%rdx : hwstats->bprc += bprc; : hwstats->mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); : if (hw->mac.type == ixgbe_mac_82598EB) : hwstats->mprc -= bprc; : hwstats->roc += IXGBE_READ_REG(hw, IXGBE_ROC); : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); 0.00 : 1c64: 48 89 83 50 16 00 00 mov %rax,0x1650(%rbx) 0.00 : 1c6b: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1c72: 48 05 60 40 00 00 add $0x4060,%rax 0.00 : 1c78: 8b 00 mov (%rax),%eax : hwstats->prc127 += IXGBE_READ_REG(hw, IXGBE_PRC127); 0.00 : 1c7a: 89 c0 mov %eax,%eax 0.00 : 1c7c: 48 01 d0 add %rdx,%rax : hwstats->prc255 += IXGBE_READ_REG(hw, IXGBE_PRC255); 0.00 : 1c7f: 48 8b 93 60 16 00 00 mov 0x1660(%rbx),%rdx : hwstats->mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); : if (hw->mac.type == ixgbe_mac_82598EB) : hwstats->mprc -= bprc; : hwstats->roc += IXGBE_READ_REG(hw, IXGBE_ROC); : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); : hwstats->prc127 += IXGBE_READ_REG(hw, IXGBE_PRC127); 0.00 : 1c86: 48 89 83 58 16 00 00 mov %rax,0x1658(%rbx) 0.00 : 1c8d: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1c94: 48 05 64 40 00 00 add $0x4064,%rax 0.00 : 1c9a: 8b 00 mov (%rax),%eax : hwstats->prc255 += IXGBE_READ_REG(hw, IXGBE_PRC255); 0.00 : 1c9c: 89 c0 mov %eax,%eax 0.00 : 1c9e: 48 01 d0 add %rdx,%rax : hwstats->prc511 += IXGBE_READ_REG(hw, IXGBE_PRC511); 0.00 : 1ca1: 48 8b 93 68 16 00 00 mov 0x1668(%rbx),%rdx : if (hw->mac.type == ixgbe_mac_82598EB) : hwstats->mprc -= bprc; : hwstats->roc += IXGBE_READ_REG(hw, IXGBE_ROC); : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); : hwstats->prc127 += IXGBE_READ_REG(hw, IXGBE_PRC127); : hwstats->prc255 += IXGBE_READ_REG(hw, IXGBE_PRC255); 0.00 : 1ca8: 48 89 83 60 16 00 00 mov %rax,0x1660(%rbx) 0.00 : 1caf: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1cb6: 48 05 68 40 00 00 add $0x4068,%rax 0.00 : 1cbc: 8b 00 mov (%rax),%eax : hwstats->prc511 += IXGBE_READ_REG(hw, IXGBE_PRC511); 0.00 : 1cbe: 89 c0 mov %eax,%eax 0.00 : 1cc0: 48 01 d0 add %rdx,%rax : hwstats->prc1023 += IXGBE_READ_REG(hw, IXGBE_PRC1023); 0.00 : 1cc3: 48 8b 93 70 16 00 00 mov 0x1670(%rbx),%rdx : hwstats->mprc -= bprc; : hwstats->roc += IXGBE_READ_REG(hw, IXGBE_ROC); : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); : hwstats->prc127 += IXGBE_READ_REG(hw, IXGBE_PRC127); : hwstats->prc255 += IXGBE_READ_REG(hw, IXGBE_PRC255); : hwstats->prc511 += IXGBE_READ_REG(hw, IXGBE_PRC511); 0.00 : 1cca: 48 89 83 68 16 00 00 mov %rax,0x1668(%rbx) 0.00 : 1cd1: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1cd8: 48 05 6c 40 00 00 add $0x406c,%rax 0.00 : 1cde: 8b 00 mov (%rax),%eax : hwstats->prc1023 += IXGBE_READ_REG(hw, IXGBE_PRC1023); 0.00 : 1ce0: 89 c0 mov %eax,%eax 0.00 : 1ce2: 48 01 d0 add %rdx,%rax : hwstats->prc1522 += IXGBE_READ_REG(hw, IXGBE_PRC1522); 0.00 : 1ce5: 48 8b 93 78 16 00 00 mov 0x1678(%rbx),%rdx : hwstats->roc += IXGBE_READ_REG(hw, IXGBE_ROC); : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); : hwstats->prc127 += IXGBE_READ_REG(hw, IXGBE_PRC127); : hwstats->prc255 += IXGBE_READ_REG(hw, IXGBE_PRC255); : hwstats->prc511 += IXGBE_READ_REG(hw, IXGBE_PRC511); : hwstats->prc1023 += IXGBE_READ_REG(hw, IXGBE_PRC1023); 0.00 : 1cec: 48 89 83 70 16 00 00 mov %rax,0x1670(%rbx) 0.00 : 1cf3: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1cfa: 48 05 70 40 00 00 add $0x4070,%rax 0.00 : 1d00: 8b 00 mov (%rax),%eax : hwstats->prc1522 += IXGBE_READ_REG(hw, IXGBE_PRC1522); 0.00 : 1d02: 89 c0 mov %eax,%eax 0.00 : 1d04: 48 01 d0 add %rdx,%rax : hwstats->rlec += IXGBE_READ_REG(hw, IXGBE_RLEC); 0.00 : 1d07: 48 8b 93 28 15 00 00 mov 0x1528(%rbx),%rdx : hwstats->prc64 += IXGBE_READ_REG(hw, IXGBE_PRC64); : hwstats->prc127 += IXGBE_READ_REG(hw, IXGBE_PRC127); : hwstats->prc255 += IXGBE_READ_REG(hw, IXGBE_PRC255); : hwstats->prc511 += IXGBE_READ_REG(hw, IXGBE_PRC511); : hwstats->prc1023 += IXGBE_READ_REG(hw, IXGBE_PRC1023); : hwstats->prc1522 += IXGBE_READ_REG(hw, IXGBE_PRC1522); 0.00 : 1d0e: 48 89 83 78 16 00 00 mov %rax,0x1678(%rbx) 0.00 : 1d15: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1d1c: 48 05 40 40 00 00 add $0x4040,%rax 0.00 : 1d22: 8b 00 mov (%rax),%eax : hwstats->rlec += IXGBE_READ_REG(hw, IXGBE_RLEC); 0.00 : 1d24: 89 c0 mov %eax,%eax 0.00 : 1d26: 48 01 d0 add %rdx,%rax 0.00 : 1d29: 48 89 83 28 15 00 00 mov %rax,0x1528(%rbx) 0.00 : 1d30: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1d37: 48 05 60 3f 00 00 add $0x3f60,%rax 0.00 : 1d3d: 8b 30 mov (%rax),%esi : lxon = IXGBE_READ_REG(hw, IXGBE_LXONTXC); : hwstats->lxontxc += lxon; 0.00 : 1d3f: 89 f0 mov %esi,%eax 0.00 : 1d41: 48 01 83 30 15 00 00 add %rax,0x1530(%rbx) 0.00 : 1d48: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1d4f: 48 05 68 3f 00 00 add $0x3f68,%rax 0.00 : 1d55: 8b 10 mov (%rax),%edx : lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); : hwstats->lxofftxc += lxoff; 0.00 : 1d57: 89 d0 mov %edx,%eax 0.00 : 1d59: 48 01 83 40 15 00 00 add %rax,0x1540(%rbx) 0.00 : 1d60: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : hwstats->gptc += IXGBE_READ_REG(hw, IXGBE_GPTC); 0.00 : 1d67: 48 8b 8b 98 16 00 00 mov 0x1698(%rbx),%rcx 0.00 : 1d6e: 48 05 80 40 00 00 add $0x4080,%rax 0.00 : 1d74: 8b 00 mov (%rax),%eax 0.00 : 1d76: 89 c0 mov %eax,%eax 0.00 : 1d78: 48 01 c8 add %rcx,%rax : hwstats->mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); 0.00 : 1d7b: 48 8b 8b 70 17 00 00 mov 0x1770(%rbx),%rcx : hwstats->rlec += IXGBE_READ_REG(hw, IXGBE_RLEC); : lxon = IXGBE_READ_REG(hw, IXGBE_LXONTXC); : hwstats->lxontxc += lxon; : lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); : hwstats->lxofftxc += lxoff; : hwstats->gptc += IXGBE_READ_REG(hw, IXGBE_GPTC); 0.00 : 1d82: 48 89 83 98 16 00 00 mov %rax,0x1698(%rbx) 0.00 : 1d89: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1d90: 48 05 f0 40 00 00 add $0x40f0,%rax 0.00 : 1d96: 8b 00 mov (%rax),%eax : hwstats->mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); 0.00 : 1d98: 89 c0 mov %eax,%eax : /* : * 82598 errata - tx of flow control packets is included in tx counters : */ : xon_off_tot = lxon + lxoff; 0.00 : 1d9a: 01 f2 add %esi,%edx : lxon = IXGBE_READ_REG(hw, IXGBE_LXONTXC); : hwstats->lxontxc += lxon; : lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); : hwstats->lxofftxc += lxoff; : hwstats->gptc += IXGBE_READ_REG(hw, IXGBE_GPTC); : hwstats->mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); 0.00 : 1d9c: 48 01 c8 add %rcx,%rax : /* : * 82598 errata - tx of flow control packets is included in tx counters : */ : xon_off_tot = lxon + lxoff; : hwstats->gptc -= xon_off_tot; 0.00 : 1d9f: 89 d1 mov %edx,%ecx : hwstats->mptc -= xon_off_tot; : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); 0.00 : 1da1: c1 e2 06 shl $0x6,%edx : lxon = IXGBE_READ_REG(hw, IXGBE_LXONTXC); : hwstats->lxontxc += lxon; : lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); : hwstats->lxofftxc += lxoff; : hwstats->gptc += IXGBE_READ_REG(hw, IXGBE_GPTC); : hwstats->mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); 0.00 : 1da4: 48 89 83 70 17 00 00 mov %rax,0x1770(%rbx) 0.00 : 1dab: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : * 82598 errata - tx of flow control packets is included in tx counters : */ : xon_off_tot = lxon + lxoff; : hwstats->gptc -= xon_off_tot; : hwstats->mptc -= xon_off_tot; : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); 0.00 : 1db2: 89 d2 mov %edx,%edx : hwstats->mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); : /* : * 82598 errata - tx of flow control packets is included in tx counters : */ : xon_off_tot = lxon + lxoff; : hwstats->gptc -= xon_off_tot; 0.00 : 1db4: 48 29 8b 98 16 00 00 sub %rcx,0x1698(%rbx) : hwstats->mptc -= xon_off_tot; : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); 0.00 : 1dbb: 48 29 93 a8 16 00 00 sub %rdx,0x16a8(%rbx) : /* : * 82598 errata - tx of flow control packets is included in tx counters : */ : xon_off_tot = lxon + lxoff; : hwstats->gptc -= xon_off_tot; : hwstats->mptc -= xon_off_tot; 0.00 : 1dc2: 48 29 8b 70 17 00 00 sub %rcx,0x1770(%rbx) : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); : hwstats->ruc += IXGBE_READ_REG(hw, IXGBE_RUC); 0.00 : 1dc9: 48 8b 93 f0 16 00 00 mov 0x16f0(%rbx),%rdx 0.00 : 1dd0: 48 05 a4 40 00 00 add $0x40a4,%rax 0.00 : 1dd6: 8b 00 mov (%rax),%eax 0.00 : 1dd8: 89 c0 mov %eax,%eax 0.00 : 1dda: 48 01 d0 add %rdx,%rax : hwstats->rfc += IXGBE_READ_REG(hw, IXGBE_RFC); 0.00 : 1ddd: 48 8b 93 f8 16 00 00 mov 0x16f8(%rbx),%rdx : */ : xon_off_tot = lxon + lxoff; : hwstats->gptc -= xon_off_tot; : hwstats->mptc -= xon_off_tot; : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); : hwstats->ruc += IXGBE_READ_REG(hw, IXGBE_RUC); 0.00 : 1de4: 48 89 83 f0 16 00 00 mov %rax,0x16f0(%rbx) 0.00 : 1deb: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1df2: 48 05 a8 40 00 00 add $0x40a8,%rax 0.00 : 1df8: 8b 00 mov (%rax),%eax : hwstats->rfc += IXGBE_READ_REG(hw, IXGBE_RFC); 0.00 : 1dfa: 89 c0 mov %eax,%eax 0.00 : 1dfc: 48 01 d0 add %rdx,%rax : hwstats->rjc += IXGBE_READ_REG(hw, IXGBE_RJC); 0.00 : 1dff: 48 8b 93 08 17 00 00 mov 0x1708(%rbx),%rdx : xon_off_tot = lxon + lxoff; : hwstats->gptc -= xon_off_tot; : hwstats->mptc -= xon_off_tot; : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); : hwstats->ruc += IXGBE_READ_REG(hw, IXGBE_RUC); : hwstats->rfc += IXGBE_READ_REG(hw, IXGBE_RFC); 0.00 : 1e06: 48 89 83 f8 16 00 00 mov %rax,0x16f8(%rbx) 0.00 : 1e0d: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1e14: 48 05 b0 40 00 00 add $0x40b0,%rax 0.00 : 1e1a: 8b 00 mov (%rax),%eax : hwstats->rjc += IXGBE_READ_REG(hw, IXGBE_RJC); 0.00 : 1e1c: 89 c0 mov %eax,%eax 0.00 : 1e1e: 48 01 d0 add %rdx,%rax : hwstats->tpr += IXGBE_READ_REG(hw, IXGBE_TPR); 0.00 : 1e21: 48 8b 93 30 17 00 00 mov 0x1730(%rbx),%rdx : hwstats->gptc -= xon_off_tot; : hwstats->mptc -= xon_off_tot; : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); : hwstats->ruc += IXGBE_READ_REG(hw, IXGBE_RUC); : hwstats->rfc += IXGBE_READ_REG(hw, IXGBE_RFC); : hwstats->rjc += IXGBE_READ_REG(hw, IXGBE_RJC); 0.00 : 1e28: 48 89 83 08 17 00 00 mov %rax,0x1708(%rbx) 0.00 : 1e2f: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1e36: 48 05 d0 40 00 00 add $0x40d0,%rax 0.00 : 1e3c: 8b 00 mov (%rax),%eax : hwstats->tpr += IXGBE_READ_REG(hw, IXGBE_TPR); 0.00 : 1e3e: 89 c0 mov %eax,%eax 0.00 : 1e40: 48 01 d0 add %rdx,%rax : hwstats->ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); 0.00 : 1e43: 48 8b 93 40 17 00 00 mov 0x1740(%rbx),%rdx : hwstats->mptc -= xon_off_tot; : hwstats->gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); : hwstats->ruc += IXGBE_READ_REG(hw, IXGBE_RUC); : hwstats->rfc += IXGBE_READ_REG(hw, IXGBE_RFC); : hwstats->rjc += IXGBE_READ_REG(hw, IXGBE_RJC); : hwstats->tpr += IXGBE_READ_REG(hw, IXGBE_TPR); 0.00 : 1e4a: 48 89 83 30 17 00 00 mov %rax,0x1730(%rbx) 0.00 : 1e51: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1e58: 48 05 d8 40 00 00 add $0x40d8,%rax 0.00 : 1e5e: 8b 00 mov (%rax),%eax : hwstats->ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); : hwstats->ptc64 -= xon_off_tot; 0.00 : 1e60: 89 c0 mov %eax,%eax 0.00 : 1e62: 48 01 d0 add %rdx,%rax : hwstats->ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); 0.00 : 1e65: 48 8b 93 48 17 00 00 mov 0x1748(%rbx),%rdx : hwstats->ruc += IXGBE_READ_REG(hw, IXGBE_RUC); : hwstats->rfc += IXGBE_READ_REG(hw, IXGBE_RFC); : hwstats->rjc += IXGBE_READ_REG(hw, IXGBE_RJC); : hwstats->tpr += IXGBE_READ_REG(hw, IXGBE_TPR); : hwstats->ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); : hwstats->ptc64 -= xon_off_tot; 0.00 : 1e6c: 48 29 c8 sub %rcx,%rax 0.00 : 1e6f: 48 89 83 40 17 00 00 mov %rax,0x1740(%rbx) 0.00 : 1e76: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1e7d: 48 05 dc 40 00 00 add $0x40dc,%rax 0.00 : 1e83: 8b 00 mov (%rax),%eax : hwstats->ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); 0.00 : 1e85: 89 c0 mov %eax,%eax 0.00 : 1e87: 48 01 d0 add %rdx,%rax : hwstats->ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); 0.00 : 1e8a: 48 8b 93 50 17 00 00 mov 0x1750(%rbx),%rdx : hwstats->rfc += IXGBE_READ_REG(hw, IXGBE_RFC); : hwstats->rjc += IXGBE_READ_REG(hw, IXGBE_RJC); : hwstats->tpr += IXGBE_READ_REG(hw, IXGBE_TPR); : hwstats->ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); : hwstats->ptc64 -= xon_off_tot; : hwstats->ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); 0.00 : 1e91: 48 89 83 48 17 00 00 mov %rax,0x1748(%rbx) 0.00 : 1e98: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1e9f: 48 05 e0 40 00 00 add $0x40e0,%rax 0.00 : 1ea5: 8b 00 mov (%rax),%eax : hwstats->ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); 0.00 : 1ea7: 89 c0 mov %eax,%eax 0.00 : 1ea9: 48 01 d0 add %rdx,%rax : hwstats->ptc511 += IXGBE_READ_REG(hw, IXGBE_PTC511); 0.00 : 1eac: 48 8b 93 58 17 00 00 mov 0x1758(%rbx),%rdx : hwstats->rjc += IXGBE_READ_REG(hw, IXGBE_RJC); : hwstats->tpr += IXGBE_READ_REG(hw, IXGBE_TPR); : hwstats->ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); : hwstats->ptc64 -= xon_off_tot; : hwstats->ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); : hwstats->ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); 0.00 : 1eb3: 48 89 83 50 17 00 00 mov %rax,0x1750(%rbx) 0.00 : 1eba: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1ec1: 48 05 e4 40 00 00 add $0x40e4,%rax 0.00 : 1ec7: 8b 00 mov (%rax),%eax : hwstats->ptc511 += IXGBE_READ_REG(hw, IXGBE_PTC511); 0.00 : 1ec9: 89 c0 mov %eax,%eax 0.00 : 1ecb: 48 01 d0 add %rdx,%rax : hwstats->ptc1023 += IXGBE_READ_REG(hw, IXGBE_PTC1023); 0.00 : 1ece: 48 8b 93 60 17 00 00 mov 0x1760(%rbx),%rdx : hwstats->tpr += IXGBE_READ_REG(hw, IXGBE_TPR); : hwstats->ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); : hwstats->ptc64 -= xon_off_tot; : hwstats->ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); : hwstats->ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); : hwstats->ptc511 += IXGBE_READ_REG(hw, IXGBE_PTC511); 0.00 : 1ed5: 48 89 83 58 17 00 00 mov %rax,0x1758(%rbx) 0.00 : 1edc: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1ee3: 48 05 e8 40 00 00 add $0x40e8,%rax 0.00 : 1ee9: 8b 00 mov (%rax),%eax : hwstats->ptc1023 += IXGBE_READ_REG(hw, IXGBE_PTC1023); 0.00 : 1eeb: 89 c0 mov %eax,%eax 0.00 : 1eed: 48 01 d0 add %rdx,%rax : hwstats->ptc1522 += IXGBE_READ_REG(hw, IXGBE_PTC1522); 0.00 : 1ef0: 48 8b 93 68 17 00 00 mov 0x1768(%rbx),%rdx : hwstats->ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); : hwstats->ptc64 -= xon_off_tot; : hwstats->ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); : hwstats->ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); : hwstats->ptc511 += IXGBE_READ_REG(hw, IXGBE_PTC511); : hwstats->ptc1023 += IXGBE_READ_REG(hw, IXGBE_PTC1023); 0.00 : 1ef7: 48 89 83 60 17 00 00 mov %rax,0x1760(%rbx) 0.00 : 1efe: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1f05: 48 05 ec 40 00 00 add $0x40ec,%rax 0.00 : 1f0b: 8b 00 mov (%rax),%eax : hwstats->ptc1522 += IXGBE_READ_REG(hw, IXGBE_PTC1522); 0.00 : 1f0d: 89 c0 mov %eax,%eax 0.00 : 1f0f: 48 01 d0 add %rdx,%rax : hwstats->bptc += IXGBE_READ_REG(hw, IXGBE_BPTC); 0.00 : 1f12: 48 8b 93 78 17 00 00 mov 0x1778(%rbx),%rdx : hwstats->ptc64 -= xon_off_tot; : hwstats->ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); : hwstats->ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); : hwstats->ptc511 += IXGBE_READ_REG(hw, IXGBE_PTC511); : hwstats->ptc1023 += IXGBE_READ_REG(hw, IXGBE_PTC1023); : hwstats->ptc1522 += IXGBE_READ_REG(hw, IXGBE_PTC1522); 0.00 : 1f19: 48 89 83 68 17 00 00 mov %rax,0x1768(%rbx) 0.00 : 1f20: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 1f27: 48 05 f4 40 00 00 add $0x40f4,%rax 0.00 : 1f2d: 8b 00 mov (%rax),%eax : hwstats->bptc += IXGBE_READ_REG(hw, IXGBE_BPTC); 0.00 : 1f2f: 89 c0 mov %eax,%eax 0.00 : 1f31: 48 01 d0 add %rdx,%rax 0.00 : 1f34: 48 89 83 78 17 00 00 mov %rax,0x1778(%rbx) : /* Fill out the OS statistics structure */ : net_stats->multicast = hwstats->mprc; 0.00 : 1f3b: 48 8b 83 90 16 00 00 mov 0x1690(%rbx),%rax 0.00 : 1f42: 49 89 87 08 01 00 00 mov %rax,0x108(%r15) : : /* Rx Errors */ : net_stats->rx_errors = hwstats->crcerrs + 0.00 : 1f49: 48 8b 83 28 15 00 00 mov 0x1528(%rbx),%rax 0.00 : 1f50: 48 03 83 b0 14 00 00 add 0x14b0(%rbx),%rax : hwstats->rlec; : net_stats->rx_dropped = 0; 0.00 : 1f57: 49 c7 87 f8 00 00 00 movq $0x0,0xf8(%r15) 0.00 : 1f5e: 00 00 00 00 : hwstats->bptc += IXGBE_READ_REG(hw, IXGBE_BPTC); : /* Fill out the OS statistics structure */ : net_stats->multicast = hwstats->mprc; : : /* Rx Errors */ : net_stats->rx_errors = hwstats->crcerrs + 0.00 : 1f62: 49 89 87 e8 00 00 00 mov %rax,0xe8(%r15) : hwstats->rlec; : net_stats->rx_dropped = 0; : net_stats->rx_length_errors = hwstats->rlec; 0.00 : 1f69: 48 8b 83 28 15 00 00 mov 0x1528(%rbx),%rax 0.00 : 1f70: 49 89 87 18 01 00 00 mov %rax,0x118(%r15) : net_stats->rx_crc_errors = hwstats->crcerrs; 0.00 : 1f77: 48 8b 83 b0 14 00 00 mov 0x14b0(%rbx),%rax : net_stats->rx_missed_errors = total_mpc; 0.00 : 1f7e: 4d 89 b7 40 01 00 00 mov %r14,0x140(%r15) : /* Rx Errors */ : net_stats->rx_errors = hwstats->crcerrs + : hwstats->rlec; : net_stats->rx_dropped = 0; : net_stats->rx_length_errors = hwstats->rlec; : net_stats->rx_crc_errors = hwstats->crcerrs; 0.00 : 1f85: 49 89 87 28 01 00 00 mov %rax,0x128(%r15) 0.00 : 1f8c: 48 8b 83 10 02 00 00 mov 0x210(%rbx),%rax : /* : * VF Stats Collection - skip while resetting because these : * are not clear on read and otherwise you'll sometimes get : * crazy values. : */ : if (!test_bit(__IXGBE_RESETTING, &adapter->state)) { 0.00 : 1f93: a8 02 test $0x2,%al 0.00 : 1f95: 0f 85 45 02 00 00 jne 21e0 : for (i = 0; i < adapter->num_vfs; i++) { 0.00 : 1f9b: 8b 83 58 7c 00 00 mov 0x7c58(%rbx),%eax 0.00 : 1fa1: 85 c0 test %eax,%eax 0.00 : 1fa3: 0f 84 37 02 00 00 je 21e0 0.00 : 1fa9: 45 31 c9 xor %r9d,%r9d 0.00 : 1fac: bf 1c 10 00 00 mov $0x101c,%edi 0.00 : 1fb1: 41 b8 00 84 00 00 mov $0x8400,%r8d 0.00 : 1fb7: 41 ba 00 83 00 00 mov $0x8300,%r10d : UPDATE_VF_COUNTER_32bit(IXGBE_PVFGPRC(i), \ 0.00 : 1fbd: 48 bd 00 00 00 00 01 movabs $0x100000000,%rbp 0.00 : 1fc4: 00 00 00 0.00 : 1fc7: 49 bb 00 00 00 00 ff movabs $0xffffffff00000000,%r11 0.00 : 1fce: ff ff ff : adapter->vfinfo[i].last_vfstats.gprc, \ : adapter->vfinfo[i].vfstats.gprc); : UPDATE_VF_COUNTER_32bit(IXGBE_PVFGPTC(i), \ : adapter->vfinfo[i].last_vfstats.gptc, \ : adapter->vfinfo[i].vfstats.gptc); : UPDATE_VF_COUNTER_36bit(IXGBE_PVFGORC_LSB(i), \ 0.00 : 1fd1: 49 bd 00 00 00 00 10 movabs $0x1000000000,%r13 0.00 : 1fd8: 00 00 00 0.00 : 1fdb: 49 bc 00 00 00 00 f0 movabs $0xfffffff000000000,%r12 0.00 : 1fe2: ff ff ff 0.00 : 1fe5: 0f 1f 00 nopl (%rax) 0.00 : 1fe8: 89 f8 mov %edi,%eax 0.00 : 1fea: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 1ff1: 8b 00 mov (%rax),%eax : * are not clear on read and otherwise you'll sometimes get : * crazy values. : */ : if (!test_bit(__IXGBE_RESETTING, &adapter->state)) { : for (i = 0; i < adapter->num_vfs; i++) { : UPDATE_VF_COUNTER_32bit(IXGBE_PVFGPRC(i), \ 0.00 : 1ff3: 89 c2 mov %eax,%edx 0.00 : 1ff5: 44 89 c8 mov %r9d,%eax 0.00 : 1ff8: 48 8d 04 40 lea (%rax,%rax,2),%rax 0.00 : 1ffc: 48 8d 04 c0 lea (%rax,%rax,8),%rax 0.00 : 2000: 48 8d 0c c5 00 00 00 lea 0x0(,%rax,8),%rcx 0.00 : 2007: 00 0.00 : 2008: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 200f: 48 01 c8 add %rcx,%rax 0.00 : 2012: 48 3b 50 78 cmp 0x78(%rax),%rdx 0.00 : 2016: 73 0e jae 2026 0.00 : 2018: 48 01 68 50 add %rbp,0x50(%rax) 0.00 : 201c: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2023: 48 01 c8 add %rcx,%rax 0.00 : 2026: 48 89 50 78 mov %rdx,0x78(%rax) 0.00 : 202a: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2031: 48 01 c8 add %rcx,%rax 0.00 : 2034: 4c 21 58 50 and %r11,0x50(%rax) 0.00 : 2038: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 203f: 48 01 c8 add %rcx,%rax 0.00 : 2042: 48 09 50 50 or %rdx,0x50(%rax) 0.00 : 2046: 44 89 d0 mov %r10d,%eax 0.00 : 2049: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 2050: 8b 00 mov (%rax),%eax : adapter->vfinfo[i].last_vfstats.gprc, \ : adapter->vfinfo[i].vfstats.gprc); : UPDATE_VF_COUNTER_32bit(IXGBE_PVFGPTC(i), \ 0.00 : 2052: 89 c2 mov %eax,%edx 0.00 : 2054: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 205b: 48 01 c8 add %rcx,%rax 0.00 : 205e: 48 3b 90 88 00 00 00 cmp 0x88(%rax),%rdx 0.00 : 2065: 73 0e jae 2075 0.00 : 2067: 48 01 68 60 add %rbp,0x60(%rax) 0.00 : 206b: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2072: 48 01 c8 add %rcx,%rax 0.00 : 2075: 48 89 90 88 00 00 00 mov %rdx,0x88(%rax) 0.00 : 207c: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2083: 48 01 c8 add %rcx,%rax 0.00 : 2086: 4c 21 58 60 and %r11,0x60(%rax) 0.00 : 208a: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2091: 48 01 c8 add %rcx,%rax 0.00 : 2094: 48 09 50 60 or %rdx,0x60(%rax) 0.00 : 2098: 8d 47 04 lea 0x4(%rdi),%eax 0.00 : 209b: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 20a2: 8b 10 mov (%rax),%edx 0.00 : 20a4: 8d 87 04 c0 00 00 lea 0xc004(%rdi),%eax 0.00 : 20aa: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 20b1: 8b 00 mov (%rax),%eax : adapter->vfinfo[i].last_vfstats.gptc, \ : adapter->vfinfo[i].vfstats.gptc); : UPDATE_VF_COUNTER_36bit(IXGBE_PVFGORC_LSB(i), \ 0.00 : 20b3: 48 89 c6 mov %rax,%rsi 0.00 : 20b6: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 20bd: 89 d2 mov %edx,%edx 0.00 : 20bf: 48 c1 e6 20 shl $0x20,%rsi 0.00 : 20c3: 48 09 d6 or %rdx,%rsi 0.00 : 20c6: 48 01 c8 add %rcx,%rax 0.00 : 20c9: 48 3b b0 80 00 00 00 cmp 0x80(%rax),%rsi 0.00 : 20d0: 73 0e jae 20e0 0.00 : 20d2: 4c 01 68 58 add %r13,0x58(%rax) 0.00 : 20d6: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 20dd: 48 01 c8 add %rcx,%rax 0.00 : 20e0: 48 89 b0 80 00 00 00 mov %rsi,0x80(%rax) 0.00 : 20e7: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 20ee: 48 01 c8 add %rcx,%rax 0.00 : 20f1: 4c 21 60 58 and %r12,0x58(%rax) 0.00 : 20f5: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 20fc: 48 01 c8 add %rcx,%rax 0.00 : 20ff: 48 09 70 58 or %rsi,0x58(%rax) 0.00 : 2103: 44 89 c0 mov %r8d,%eax 0.00 : 2106: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 210d: 8b 10 mov (%rax),%edx 0.00 : 210f: 41 8d 40 04 lea 0x4(%r8),%eax 0.00 : 2113: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 211a: 8b 00 mov (%rax),%eax : IXGBE_PVFGORC_MSB(i), \ : adapter->vfinfo[i].last_vfstats.gorc, \ : adapter->vfinfo[i].vfstats.gorc); : UPDATE_VF_COUNTER_36bit(IXGBE_PVFGOTC_LSB(i), \ 0.00 : 211c: 48 89 c6 mov %rax,%rsi 0.00 : 211f: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2126: 89 d2 mov %edx,%edx 0.00 : 2128: 48 c1 e6 20 shl $0x20,%rsi 0.00 : 212c: 48 09 d6 or %rdx,%rsi 0.00 : 212f: 48 01 c8 add %rcx,%rax 0.00 : 2132: 48 3b b0 90 00 00 00 cmp 0x90(%rax),%rsi 0.00 : 2139: 73 0e jae 2149 0.00 : 213b: 4c 01 68 68 add %r13,0x68(%rax) 0.00 : 213f: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2146: 48 01 c8 add %rcx,%rax 0.00 : 2149: 48 89 b0 90 00 00 00 mov %rsi,0x90(%rax) 0.00 : 2150: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2157: 48 01 c8 add %rcx,%rax 0.00 : 215a: 4c 21 60 68 and %r12,0x68(%rax) 0.00 : 215e: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2165: 48 01 c8 add %rcx,%rax 0.00 : 2168: 48 09 70 68 or %rsi,0x68(%rax) 0.00 : 216c: 8d 87 00 c0 00 00 lea 0xc000(%rdi),%eax 0.00 : 2172: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 2179: 8b 00 mov (%rax),%eax : IXGBE_PVFGOTC_MSB(i), \ : adapter->vfinfo[i].last_vfstats.gotc, \ : adapter->vfinfo[i].vfstats.gotc); : UPDATE_VF_COUNTER_32bit(IXGBE_PVFMPRC(i), \ 0.00 : 217b: 89 c2 mov %eax,%edx 0.00 : 217d: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 2184: 48 01 c8 add %rcx,%rax 0.00 : 2187: 48 3b 90 98 00 00 00 cmp 0x98(%rax),%rdx 0.00 : 218e: 73 0e jae 219e 0.00 : 2190: 48 01 68 70 add %rbp,0x70(%rax) 0.00 : 2194: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax 0.00 : 219b: 48 01 c8 add %rcx,%rax 0.00 : 219e: 48 89 90 98 00 00 00 mov %rdx,0x98(%rax) 0.00 : 21a5: 48 8b 83 60 7c 00 00 mov 0x7c60(%rbx),%rax : * VF Stats Collection - skip while resetting because these : * are not clear on read and otherwise you'll sometimes get : * crazy values. : */ : if (!test_bit(__IXGBE_RESETTING, &adapter->state)) { : for (i = 0; i < adapter->num_vfs; i++) { 0.00 : 21ac: 41 83 c1 01 add $0x1,%r9d 0.00 : 21b0: 83 c7 40 add $0x40,%edi 0.00 : 21b3: 41 83 c0 08 add $0x8,%r8d 0.00 : 21b7: 41 83 c2 04 add $0x4,%r10d : adapter->vfinfo[i].vfstats.gorc); : UPDATE_VF_COUNTER_36bit(IXGBE_PVFGOTC_LSB(i), \ : IXGBE_PVFGOTC_MSB(i), \ : adapter->vfinfo[i].last_vfstats.gotc, \ : adapter->vfinfo[i].vfstats.gotc); : UPDATE_VF_COUNTER_32bit(IXGBE_PVFMPRC(i), \ 0.00 : 21bb: 48 01 c8 add %rcx,%rax 0.00 : 21be: 4c 21 58 70 and %r11,0x70(%rax) 0.00 : 21c2: 48 89 c8 mov %rcx,%rax 0.00 : 21c5: 48 03 83 60 7c 00 00 add 0x7c60(%rbx),%rax 0.00 : 21cc: 48 09 50 70 or %rdx,0x70(%rax) : * VF Stats Collection - skip while resetting because these : * are not clear on read and otherwise you'll sometimes get : * crazy values. : */ : if (!test_bit(__IXGBE_RESETTING, &adapter->state)) { : for (i = 0; i < adapter->num_vfs; i++) { 0.00 : 21d0: 44 39 8b 58 7c 00 00 cmp %r9d,0x7c58(%rbx) 0.00 : 21d7: 0f 87 0b fe ff ff ja 1fe8 0.00 : 21dd: 0f 1f 00 nopl (%rax) : UPDATE_VF_COUNTER_32bit(IXGBE_PVFMPRC(i), \ : adapter->vfinfo[i].last_vfstats.mprc, \ : adapter->vfinfo[i].vfstats.mprc); : } : } : } 0.00 : 21e0: 48 83 c4 28 add $0x28,%rsp 0.00 : 21e4: 5b pop %rbx 0.00 : 21e5: 5d pop %rbp 0.00 : 21e6: 41 5c pop %r12 0.00 : 21e8: 41 5d pop %r13 0.00 : 21ea: 41 5e pop %r14 0.00 : 21ec: 41 5f pop %r15 0.00 : 21ee: c3 retq : return; : : if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { : u64 rsc_count = 0; : u64 rsc_flush = 0; : for (i = 0; i < adapter->num_rx_queues; i++) { 0.00 : 21ef: 44 8b 9f 28 02 00 00 mov 0x228(%rdi),%r11d 0.00 : 21f6: 31 f6 xor %esi,%esi 0.00 : 21f8: 31 c9 xor %ecx,%ecx 0.00 : 21fa: 45 85 db test %r11d,%r11d 0.00 : 21fd: 74 32 je 2231 0.00 : 21ff: 41 8d 43 ff lea -0x1(%r11),%eax 0.00 : 2203: 31 f6 xor %esi,%esi 0.00 : 2205: 31 c9 xor %ecx,%ecx 0.00 : 2207: 31 d2 xor %edx,%edx 0.00 : 2209: 48 8d 3c c5 08 00 00 lea 0x8(,%rax,8),%rdi 0.00 : 2210: 00 0.00 : 2211: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : rsc_count += adapter->rx_ring[i]->rx_stats.rsc_count; 0.00 : 2218: 48 8b 84 13 d8 04 00 mov 0x4d8(%rbx,%rdx,1),%rax 0.00 : 221f: 00 : rsc_flush += adapter->rx_ring[i]->rx_stats.rsc_flush; 0.00 : 2220: 48 83 c2 08 add $0x8,%rdx : : if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { : u64 rsc_count = 0; : u64 rsc_flush = 0; : for (i = 0; i < adapter->num_rx_queues; i++) { : rsc_count += adapter->rx_ring[i]->rx_stats.rsc_count; 0.00 : 2224: 48 03 70 68 add 0x68(%rax),%rsi : rsc_flush += adapter->rx_ring[i]->rx_stats.rsc_flush; 0.00 : 2228: 48 03 48 70 add 0x70(%rax),%rcx : return; : : if (adapter->flags2 & IXGBE_FLAG2_RSC_ENABLED) { : u64 rsc_count = 0; : u64 rsc_flush = 0; : for (i = 0; i < adapter->num_rx_queues; i++) { 0.00 : 222c: 48 39 fa cmp %rdi,%rdx 0.00 : 222f: 75 e7 jne 2218 : rsc_count += adapter->rx_ring[i]->rx_stats.rsc_count; : rsc_flush += adapter->rx_ring[i]->rx_stats.rsc_flush; : } : adapter->rsc_total_count = rsc_count; 0.00 : 2231: 48 89 b3 30 07 00 00 mov %rsi,0x730(%rbx) : adapter->rsc_total_flush = rsc_flush; 0.00 : 2238: 48 89 8b 38 07 00 00 mov %rcx,0x738(%rbx) 0.00 : 223f: e9 06 f6 ff ff jmpq 184a 0.00 : 2244: 0f 1f 40 00 nopl 0x0(%rax) : net_stats->tx_packets = packets; : : hwstats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS); : : /* 8 register reads */ : for (i = 0; i < 8; i++) { 0.00 : 2248: 66 be 30 60 mov $0x6030,%si 0.00 : 224c: b9 00 87 00 00 mov $0x8700,%ecx 0.00 : 2251: eb 1a jmp 226d 0.00 : 2253: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 2258: 48 83 c6 40 add $0x40,%rsi 0.00 : 225c: 48 83 c1 08 add $0x8,%rcx : break; : } : } : : /*16 register reads */ : for (i = 0; i < 16; i++) { 0.00 : 2260: 48 81 fe 30 64 00 00 cmp $0x6430,%rsi 0.00 : 2267: 0f 84 c3 00 00 00 je 2330 0.00 : 226d: 48 89 f0 mov %rsi,%rax : hwstats->qptc[i] += IXGBE_READ_REG(hw, IXGBE_QPTC(i)); 0.00 : 2270: 48 8b 94 0b 08 91 ff mov -0x6ef8(%rbx,%rcx,1),%rdx 0.00 : 2277: ff 0.00 : 2278: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 227f: 8b 00 mov (%rax),%eax 0.00 : 2281: 89 c0 mov %eax,%eax 0.00 : 2283: 48 01 d0 add %rdx,%rax : hwstats->qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i)); 0.00 : 2286: 48 8b 94 0b 88 90 ff mov -0x6f78(%rbx,%rcx,1),%rdx 0.00 : 228d: ff : } : } : : /*16 register reads */ : for (i = 0; i < 16; i++) { : hwstats->qptc[i] += IXGBE_READ_REG(hw, IXGBE_QPTC(i)); 0.00 : 228e: 48 89 84 0b 08 91 ff mov %rax,-0x6ef8(%rbx,%rcx,1) 0.00 : 2295: ff 0.00 : 2296: 48 8d 86 00 b0 ff ff lea -0x5000(%rsi),%rax 0.00 : 229d: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 22a4: 8b 00 mov (%rax),%eax : hwstats->qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i)); 0.00 : 22a6: 89 c0 mov %eax,%eax 0.00 : 22a8: 48 01 d0 add %rdx,%rax 0.00 : 22ab: 48 89 84 0b 88 90 ff mov %rax,-0x6f78(%rbx,%rcx,1) 0.00 : 22b2: ff : if ((hw->mac.type == ixgbe_mac_82599EB) || 0.00 : 22b3: 8b 83 50 10 00 00 mov 0x1050(%rbx),%eax 0.00 : 22b9: 83 e8 02 sub $0x2,%eax 0.00 : 22bc: 83 f8 01 cmp $0x1,%eax 0.00 : 22bf: 77 97 ja 2258 0.00 : 22c1: 48 89 c8 mov %rcx,%rax : (hw->mac.type == ixgbe_mac_X540)) { : hwstats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC_L(i)); 0.00 : 22c4: 48 8b 94 0b 08 92 ff mov -0x6df8(%rbx,%rcx,1),%rdx 0.00 : 22cb: ff 0.00 : 22cc: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 22d3: 8b 00 mov (%rax),%eax 0.00 : 22d5: 89 c0 mov %eax,%eax 0.00 : 22d7: 48 01 d0 add %rdx,%rax 0.00 : 22da: 48 89 84 0b 08 92 ff mov %rax,-0x6df8(%rbx,%rcx,1) 0.00 : 22e1: ff 0.00 : 22e2: 48 8d 41 04 lea 0x4(%rcx),%rax 0.00 : 22e6: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 22ed: 8b 00 mov (%rax),%eax 0.00 : 22ef: 48 8d 86 04 b0 ff ff lea -0x4ffc(%rsi),%rax : IXGBE_READ_REG(hw, IXGBE_QBTC_H(i)); /* to clear */ : hwstats->qbrc[i] += IXGBE_READ_REG(hw, IXGBE_QBRC_L(i)); 0.00 : 22f6: 48 8b 94 0b 88 91 ff mov -0x6e78(%rbx,%rcx,1),%rdx 0.00 : 22fd: ff 0.00 : 22fe: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 2305: 8b 00 mov (%rax),%eax ??:0 33.33 : 2307: 89 c0 mov %eax,%eax 0.00 : 2309: 48 01 d0 add %rdx,%rax 0.00 : 230c: 48 89 84 0b 88 91 ff mov %rax,-0x6e78(%rbx,%rcx,1) 0.00 : 2313: ff 0.00 : 2314: 48 8d 86 08 b0 ff ff lea -0x4ff8(%rsi),%rax 0.00 : 231b: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 2322: 8b 00 mov (%rax),%eax 16.67 : 2324: e9 2f ff ff ff jmpq 2258 0.00 : 2329: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 2330: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : IXGBE_READ_REG(hw, IXGBE_QBRC_H(i)); /* to clear */ : } : } : : hwstats->gprc += IXGBE_READ_REG(hw, IXGBE_GPRC); 0.00 : 2337: 48 8b 8b 80 16 00 00 mov 0x1680(%rbx),%rcx 0.00 : 233e: 48 05 74 40 00 00 add $0x4074,%rax 0.00 : 2344: 8b 00 mov (%rax),%eax : /* work around hardware counting issue */ : hwstats->gprc -= missed_rx; 0.00 : 2346: 44 89 ca mov %r9d,%edx 0.00 : 2349: 89 c0 mov %eax,%eax 0.00 : 234b: 48 29 d1 sub %rdx,%rcx : { : struct ixgbe_hw *hw = &adapter->hw; : struct ixgbe_hw_stats *hwstats = &adapter->stats; : u32 xoff[8] = {0}; : int i; : bool pfc_en = adapter->dcb_cfg.pfc_mode_enable; 0.00 : 234e: 0f b6 93 7a 0a 00 00 movzbl 0xa7a(%rbx),%edx : } : } : : hwstats->gprc += IXGBE_READ_REG(hw, IXGBE_GPRC); : /* work around hardware counting issue */ : hwstats->gprc -= missed_rx; 0.00 : 2355: 48 01 c1 add %rax,%rcx : u32 xoff[8] = {0}; : int i; : bool pfc_en = adapter->dcb_cfg.pfc_mode_enable; : : #ifdef HAVE_DCBNL_IEEE : if (adapter->ixgbe_ieee_pfc) 0.00 : 2358: 48 8b 83 50 09 00 00 mov 0x950(%rbx),%rax : } : } : : hwstats->gprc += IXGBE_READ_REG(hw, IXGBE_GPRC); : /* work around hardware counting issue */ : hwstats->gprc -= missed_rx; 0.00 : 235f: 48 89 8b 80 16 00 00 mov %rcx,0x1680(%rbx) : u32 xoff[8] = {0}; : int i; : bool pfc_en = adapter->dcb_cfg.pfc_mode_enable; : : #ifdef HAVE_DCBNL_IEEE : if (adapter->ixgbe_ieee_pfc) 0.00 : 2366: 48 85 c0 test %rax,%rax 0.00 : 2369: 74 12 je 237d : pfc_en |= !!(adapter->ixgbe_ieee_pfc->pfc_en); 0.00 : 236b: 80 78 01 00 cmpb $0x0,0x1(%rax) 0.00 : 236f: 0f b6 d2 movzbl %dl,%edx 0.00 : 2372: 0f 95 c0 setne %al 0.00 : 2375: 0f b6 c0 movzbl %al,%eax 0.00 : 2378: 09 d0 or %edx,%eax 0.00 : 237a: 0f 95 c2 setne %dl : : #endif : if (!(adapter->flags & IXGBE_FLAG_DCB_ENABLED) || !pfc_en) { 0.00 : 237d: f6 83 19 02 00 00 04 testb $0x4,0x219(%rbx) 0.00 : 2384: 0f 84 8e f7 ff ff je 1b18 0.00 : 238a: 84 d2 test %dl,%dl 0.00 : 238c: 0f 84 86 f7 ff ff je 1b18 : : static void ixgbe_update_xoff_received(struct ixgbe_adapter *adapter) : { : struct ixgbe_hw *hw = &adapter->hw; : struct ixgbe_hw_stats *hwstats = &adapter->stats; : u32 xoff[8] = {0}; 0.00 : 2392: 48 c7 04 24 00 00 00 movq $0x0,(%rsp) 0.00 : 2399: 00 0.00 : 239a: 48 c7 44 24 08 00 00 movq $0x0,0x8(%rsp) 0.00 : 23a1: 00 00 0.00 : 23a3: 31 c9 xor %ecx,%ecx 0.00 : 23a5: 48 c7 44 24 10 00 00 movq $0x0,0x10(%rsp) 0.00 : 23ac: 00 00 0.00 : 23ae: 48 c7 44 24 18 00 00 movq $0x0,0x18(%rsp) 0.00 : 23b5: 00 00 0.00 : 23b7: ba 20 cf 00 00 mov $0xcf20,%edx 0.00 : 23bc: 48 89 e6 mov %rsp,%rsi 0.00 : 23bf: eb 52 jmp 2413 0.00 : 23c1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 23c8: 48 8d 82 40 72 ff ff lea -0x8dc0(%rdx),%rax 0.00 : 23cf: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 23d6: 8b 00 mov (%rax),%eax : switch (hw->mac.type) { : case ixgbe_mac_82598EB: : xoff[i] = IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i)); : break; : default: : xoff[i] = IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i)); 0.00 : 23d8: 89 84 16 e0 30 ff ff mov %eax,-0xcf20(%rsi,%rdx,1) : } : hwstats->pxoffrxc[i] += xoff[i]; 0.00 : 23df: 8b 84 16 e0 30 ff ff mov -0xcf20(%rsi,%rdx,1),%eax : ixgbe_update_xoff_rx_lfc(adapter); : return; : } : : /* update stats for each tc, only valid with PFC enabled */ : for (i = 0; i < MAX_TX_PACKET_BUFFERS; i++) { 0.00 : 23e6: 83 c1 01 add $0x1,%ecx : xoff[i] = IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i)); : break; : default: : xoff[i] = IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i)); : } : hwstats->pxoffrxc[i] += xoff[i]; 0.00 : 23e9: 48 01 84 53 d0 77 fe add %rax,-0x18830(%rbx,%rdx,2) 0.00 : 23f0: ff : ixgbe_update_xoff_rx_lfc(adapter); : return; : } : : /* update stats for each tc, only valid with PFC enabled */ : for (i = 0; i < MAX_TX_PACKET_BUFFERS; i++) { 0.00 : 23f1: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 23f7: 25 00 04 00 00 and $0x400,%eax 0.00 : 23fc: 83 f8 01 cmp $0x1,%eax 0.00 : 23ff: 19 c0 sbb %eax,%eax 0.00 : 2401: 48 83 c2 04 add $0x4,%rdx 0.00 : 2405: 83 e0 f9 and $0xfffffff9,%eax 0.00 : 2408: 83 c0 08 add $0x8,%eax 0.00 : 240b: 39 c8 cmp %ecx,%eax 0.00 : 240d: 0f 8e a0 03 00 00 jle 27b3 : switch (hw->mac.type) { 0.00 : 2413: 83 bb 50 10 00 00 01 cmpl $0x1,0x1050(%rbx) 0.00 : 241a: 75 ac jne 23c8 0.00 : 241c: 48 89 d0 mov %rdx,%rax 0.00 : 241f: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 2426: 8b 00 mov (%rax),%eax : case ixgbe_mac_82598EB: : xoff[i] = IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i)); 0.00 : 2428: 89 84 16 e0 30 ff ff mov %eax,-0xcf20(%rsi,%rdx,1) 0.00 : 242f: eb ae jmp 23df 0.00 : 2431: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : hwstats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORH); : break; : case ixgbe_mac_X540: : /* OS2BMC stats are X540 only*/ : hwstats->o2bgptc += IXGBE_READ_REG(hw, IXGBE_O2BGPTC); 0.00 : 2438: 48 8b 93 e0 1a 00 00 mov 0x1ae0(%rbx),%rdx 0.00 : 243f: 48 05 c4 41 00 00 add $0x41c4,%rax 0.00 : 2445: 8b 00 mov (%rax),%eax 0.00 : 2447: 89 c0 mov %eax,%eax 0.00 : 2449: 48 01 d0 add %rdx,%rax : hwstats->o2bspc += IXGBE_READ_REG(hw, IXGBE_O2BSPC); 0.00 : 244c: 48 8b 93 e8 1a 00 00 mov 0x1ae8(%rbx),%rdx : hwstats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORH); : break; : case ixgbe_mac_X540: : /* OS2BMC stats are X540 only*/ : hwstats->o2bgptc += IXGBE_READ_REG(hw, IXGBE_O2BGPTC); 0.00 : 2453: 48 89 83 e0 1a 00 00 mov %rax,0x1ae0(%rbx) 0.00 : 245a: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2461: 48 05 b0 87 00 00 add $0x87b0,%rax 0.00 : 2467: 8b 00 mov (%rax),%eax : hwstats->o2bspc += IXGBE_READ_REG(hw, IXGBE_O2BSPC); 0.00 : 2469: 89 c0 mov %eax,%eax 0.00 : 246b: 48 01 d0 add %rdx,%rax : hwstats->b2ospc += IXGBE_READ_REG(hw, IXGBE_B2OSPC); 0.00 : 246e: 48 8b 93 d0 1a 00 00 mov 0x1ad0(%rbx),%rdx : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORH); : break; : case ixgbe_mac_X540: : /* OS2BMC stats are X540 only*/ : hwstats->o2bgptc += IXGBE_READ_REG(hw, IXGBE_O2BGPTC); : hwstats->o2bspc += IXGBE_READ_REG(hw, IXGBE_O2BSPC); 0.00 : 2475: 48 89 83 e8 1a 00 00 mov %rax,0x1ae8(%rbx) 0.00 : 247c: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2483: 48 05 c0 41 00 00 add $0x41c0,%rax 0.00 : 2489: 8b 00 mov (%rax),%eax : hwstats->b2ospc += IXGBE_READ_REG(hw, IXGBE_B2OSPC); 0.00 : 248b: 89 c0 mov %eax,%eax 0.00 : 248d: 48 01 d0 add %rdx,%rax : hwstats->b2ogprc += IXGBE_READ_REG(hw, IXGBE_B2OGPRC); 0.00 : 2490: 48 8b 93 d8 1a 00 00 mov 0x1ad8(%rbx),%rdx : break; : case ixgbe_mac_X540: : /* OS2BMC stats are X540 only*/ : hwstats->o2bgptc += IXGBE_READ_REG(hw, IXGBE_O2BGPTC); : hwstats->o2bspc += IXGBE_READ_REG(hw, IXGBE_O2BSPC); : hwstats->b2ospc += IXGBE_READ_REG(hw, IXGBE_B2OSPC); 0.00 : 2497: 48 89 83 d0 1a 00 00 mov %rax,0x1ad0(%rbx) 0.00 : 249e: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 24a5: 48 05 90 2f 00 00 add $0x2f90,%rax 0.00 : 24ab: 8b 00 mov (%rax),%eax : hwstats->b2ogprc += IXGBE_READ_REG(hw, IXGBE_B2OGPRC); 0.00 : 24ad: 89 c0 mov %eax,%eax 0.00 : 24af: 48 01 d0 add %rdx,%rax 0.00 : 24b2: 48 89 83 d8 1a 00 00 mov %rax,0x1ad8(%rbx) 0.00 : 24b9: b9 30 14 00 00 mov $0x1430,%ecx 0.00 : 24be: 66 90 xchg %ax,%ax 0.00 : 24c0: 48 89 c8 mov %rcx,%rax : case ixgbe_mac_82599EB: : for (i = 0; i < 16; i++) : adapter->hw_rx_no_dma_resources += 0.00 : 24c3: 48 8b 93 28 07 00 00 mov 0x728(%rbx),%rdx 0.00 : 24ca: 48 03 83 80 0e 00 00 add 0xe80(%rbx),%rax 0.00 : 24d1: 8b 00 mov (%rax),%eax 33.33 : 24d3: 89 c0 mov %eax,%eax 0.00 : 24d5: 48 83 c1 40 add $0x40,%rcx 0.00 : 24d9: 48 01 d0 add %rdx,%rax : hwstats->o2bgptc += IXGBE_READ_REG(hw, IXGBE_O2BGPTC); : hwstats->o2bspc += IXGBE_READ_REG(hw, IXGBE_O2BSPC); : hwstats->b2ospc += IXGBE_READ_REG(hw, IXGBE_B2OSPC); : hwstats->b2ogprc += IXGBE_READ_REG(hw, IXGBE_B2OGPRC); : case ixgbe_mac_82599EB: : for (i = 0; i < 16; i++) 0.00 : 24dc: 48 81 f9 30 18 00 00 cmp $0x1830,%rcx : adapter->hw_rx_no_dma_resources += 0.00 : 24e3: 48 89 83 28 07 00 00 mov %rax,0x728(%rbx) : hwstats->o2bgptc += IXGBE_READ_REG(hw, IXGBE_O2BGPTC); : hwstats->o2bspc += IXGBE_READ_REG(hw, IXGBE_O2BSPC); : hwstats->b2ospc += IXGBE_READ_REG(hw, IXGBE_B2OSPC); : hwstats->b2ogprc += IXGBE_READ_REG(hw, IXGBE_B2OGPRC); : case ixgbe_mac_82599EB: : for (i = 0; i < 16; i++) 0.00 : 24ea: 75 d4 jne 24c0 0.00 : 24ec: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : adapter->hw_rx_no_dma_resources += : IXGBE_READ_REG(hw, IXGBE_QPRDC(i)); : hwstats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCL); 0.00 : 24f3: 48 8b 93 a0 16 00 00 mov 0x16a0(%rbx),%rdx 0.00 : 24fa: 48 05 88 40 00 00 add $0x4088,%rax 0.00 : 2500: 8b 00 mov (%rax),%eax 0.00 : 2502: 89 c0 mov %eax,%eax 0.00 : 2504: 48 01 d0 add %rdx,%rax 0.00 : 2507: 48 89 83 a0 16 00 00 mov %rax,0x16a0(%rbx) 0.00 : 250e: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2515: 48 05 8c 40 00 00 add $0x408c,%rax 0.00 : 251b: 8b 00 mov (%rax),%eax 0.00 : 251d: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : IXGBE_READ_REG(hw, IXGBE_GORCH); /* to clear */ : hwstats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCL); 0.00 : 2524: 48 8b 93 a8 16 00 00 mov 0x16a8(%rbx),%rdx 0.00 : 252b: 48 05 90 40 00 00 add $0x4090,%rax 0.00 : 2531: 8b 00 mov (%rax),%eax 16.67 : 2533: 89 c0 mov %eax,%eax 0.00 : 2535: 48 01 d0 add %rdx,%rax 0.00 : 2538: 48 89 83 a8 16 00 00 mov %rax,0x16a8(%rbx) 0.00 : 253f: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2546: 48 05 94 40 00 00 add $0x4094,%rax 0.00 : 254c: 8b 00 mov (%rax),%eax 0.00 : 254e: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : IXGBE_READ_REG(hw, IXGBE_GOTCH); /* to clear */ : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORL); 0.00 : 2555: 48 8b 93 28 17 00 00 mov 0x1728(%rbx),%rdx 0.00 : 255c: 48 05 c0 40 00 00 add $0x40c0,%rax 0.00 : 2562: 8b 00 mov (%rax),%eax 0.00 : 2564: 89 c0 mov %eax,%eax 0.00 : 2566: 48 01 d0 add %rdx,%rax 0.00 : 2569: 48 89 83 28 17 00 00 mov %rax,0x1728(%rbx) 0.00 : 2570: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2577: 48 05 c4 40 00 00 add $0x40c4,%rax 0.00 : 257d: 8b 00 mov (%rax),%eax 0.00 : 257f: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax : IXGBE_READ_REG(hw, IXGBE_TORH); /* to clear */ : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXCNT); 0.00 : 2586: 48 8b 93 38 15 00 00 mov 0x1538(%rbx),%rdx 0.00 : 258d: 48 05 a4 41 00 00 add $0x41a4,%rax 0.00 : 2593: 8b 00 mov (%rax),%eax 0.00 : 2595: 89 c0 mov %eax,%eax 0.00 : 2597: 48 01 d0 add %rdx,%rax : #ifdef HAVE_TX_MQ : hwstats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH); 0.00 : 259a: 48 8b 93 68 1a 00 00 mov 0x1a68(%rbx),%rdx : IXGBE_READ_REG(hw, IXGBE_GORCH); /* to clear */ : hwstats->gotc += IXGBE_READ_REG(hw, IXGBE_GOTCL); : IXGBE_READ_REG(hw, IXGBE_GOTCH); /* to clear */ : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORL); : IXGBE_READ_REG(hw, IXGBE_TORH); /* to clear */ : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXCNT); 0.00 : 25a1: 48 89 83 38 15 00 00 mov %rax,0x1538(%rbx) 0.00 : 25a8: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 25af: 48 05 58 ee 00 00 add $0xee58,%rax 0.00 : 25b5: 8b 00 mov (%rax),%eax : #ifdef HAVE_TX_MQ : hwstats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH); 0.00 : 25b7: 89 c0 mov %eax,%eax 0.00 : 25b9: 48 01 d0 add %rdx,%rax : hwstats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS); 0.00 : 25bc: 48 8b 93 70 1a 00 00 mov 0x1a70(%rbx),%rdx : IXGBE_READ_REG(hw, IXGBE_GOTCH); /* to clear */ : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORL); : IXGBE_READ_REG(hw, IXGBE_TORH); /* to clear */ : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXCNT); : #ifdef HAVE_TX_MQ : hwstats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH); 0.00 : 25c3: 48 89 83 68 1a 00 00 mov %rax,0x1a68(%rbx) 0.00 : 25ca: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 25d1: 48 05 5c ee 00 00 add $0xee5c,%rax 0.00 : 25d7: 8b 00 mov (%rax),%eax : hwstats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS); 0.00 : 25d9: 89 c0 mov %eax,%eax 0.00 : 25db: 48 01 d0 add %rdx,%rax : #endif /* HAVE_TX_MQ */ : #ifdef IXGBE_FCOE : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); 0.00 : 25de: 48 8b 93 78 1a 00 00 mov 0x1a78(%rbx),%rdx : hwstats->tor += IXGBE_READ_REG(hw, IXGBE_TORL); : IXGBE_READ_REG(hw, IXGBE_TORH); /* to clear */ : hwstats->lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXCNT); : #ifdef HAVE_TX_MQ : hwstats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH); : hwstats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS); 0.00 : 25e5: 48 89 83 70 1a 00 00 mov %rax,0x1a70(%rbx) 0.00 : 25ec: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 25f3: 48 05 18 51 00 00 add $0x5118,%rax 0.00 : 25f9: 8b 00 mov (%rax),%eax : #endif /* HAVE_TX_MQ */ : #ifdef IXGBE_FCOE : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); 0.00 : 25fb: 89 c0 mov %eax,%eax 0.00 : 25fd: 48 01 d0 add %rdx,%rax : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); 0.00 : 2600: 48 8b 93 80 1a 00 00 mov 0x1a80(%rbx),%rdx : #ifdef HAVE_TX_MQ : hwstats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH); : hwstats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS); : #endif /* HAVE_TX_MQ */ : #ifdef IXGBE_FCOE : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); 0.00 : 2607: 48 89 83 78 1a 00 00 mov %rax,0x1a78(%rbx) 0.00 : 260e: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2615: 48 05 24 24 00 00 add $0x2424,%rax 0.00 : 261b: 8b 00 mov (%rax),%eax : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); 0.00 : 261d: 89 c0 mov %eax,%eax 0.00 : 261f: 48 01 d0 add %rdx,%rax : hwstats->fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC); 0.00 : 2622: 48 8b 93 88 1a 00 00 mov 0x1a88(%rbx),%rdx : hwstats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH); : hwstats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS); : #endif /* HAVE_TX_MQ */ : #ifdef IXGBE_FCOE : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); 0.00 : 2629: 48 89 83 80 1a 00 00 mov %rax,0x1a80(%rbx) 0.00 : 2630: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2637: 48 05 1c 24 00 00 add $0x241c,%rax 0.00 : 263d: 8b 00 mov (%rax),%eax : hwstats->fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC); 0.00 : 263f: 89 c0 mov %eax,%eax 0.00 : 2641: 48 01 d0 add %rdx,%rax : hwstats->fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC); 0.00 : 2644: 48 8b 93 90 1a 00 00 mov 0x1a90(%rbx),%rdx : hwstats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS); : #endif /* HAVE_TX_MQ */ : #ifdef IXGBE_FCOE : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); : hwstats->fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC); 0.00 : 264b: 48 89 83 88 1a 00 00 mov %rax,0x1a88(%rbx) 0.00 : 2652: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2659: 48 05 28 24 00 00 add $0x2428,%rax 0.00 : 265f: 8b 00 mov (%rax),%eax : hwstats->fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC); 0.00 : 2661: 89 c0 mov %eax,%eax 0.00 : 2663: 48 01 d0 add %rdx,%rax : hwstats->fcoeptc += IXGBE_READ_REG(hw, IXGBE_FCOEPTC); 0.00 : 2666: 48 8b 93 98 1a 00 00 mov 0x1a98(%rbx),%rdx : #endif /* HAVE_TX_MQ */ : #ifdef IXGBE_FCOE : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); : hwstats->fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC); : hwstats->fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC); 0.00 : 266d: 48 89 83 90 1a 00 00 mov %rax,0x1a90(%rbx) 0.00 : 2674: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 267b: 48 05 84 87 00 00 add $0x8784,%rax 0.00 : 2681: 8b 00 mov (%rax),%eax : hwstats->fcoeptc += IXGBE_READ_REG(hw, IXGBE_FCOEPTC); 0.00 : 2683: 89 c0 mov %eax,%eax 0.00 : 2685: 48 01 d0 add %rdx,%rax : hwstats->fcoedwrc += IXGBE_READ_REG(hw, IXGBE_FCOEDWRC); 0.00 : 2688: 48 8b 93 a0 1a 00 00 mov 0x1aa0(%rbx),%rdx : #ifdef IXGBE_FCOE : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); : hwstats->fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC); : hwstats->fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC); : hwstats->fcoeptc += IXGBE_READ_REG(hw, IXGBE_FCOEPTC); 0.00 : 268f: 48 89 83 98 1a 00 00 mov %rax,0x1a98(%rbx) 0.00 : 2696: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 269d: 48 05 2c 24 00 00 add $0x242c,%rax 0.00 : 26a3: 8b 00 mov (%rax),%eax : hwstats->fcoedwrc += IXGBE_READ_REG(hw, IXGBE_FCOEDWRC); 0.00 : 26a5: 89 c0 mov %eax,%eax 0.00 : 26a7: 48 01 d0 add %rdx,%rax : hwstats->fcoedwtc += IXGBE_READ_REG(hw, IXGBE_FCOEDWTC); 0.00 : 26aa: 48 8b 93 a8 1a 00 00 mov 0x1aa8(%rbx),%rdx : hwstats->fccrc += IXGBE_READ_REG(hw, IXGBE_FCCRC); : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); : hwstats->fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC); : hwstats->fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC); : hwstats->fcoeptc += IXGBE_READ_REG(hw, IXGBE_FCOEPTC); : hwstats->fcoedwrc += IXGBE_READ_REG(hw, IXGBE_FCOEDWRC); 0.00 : 26b1: 48 89 83 a0 1a 00 00 mov %rax,0x1aa0(%rbx) 0.00 : 26b8: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 26bf: 48 05 88 87 00 00 add $0x8788,%rax 0.00 : 26c5: 8b 00 mov (%rax),%eax : hwstats->fcoedwtc += IXGBE_READ_REG(hw, IXGBE_FCOEDWTC); 0.00 : 26c7: 89 c0 mov %eax,%eax 0.00 : 26c9: 48 01 d0 add %rdx,%rax : /* Add up per cpu counters for total ddp alloc fail */ : if (adapter->fcoe.ddp_pool) { 0.00 : 26cc: 48 83 bb e8 1b 00 00 cmpq $0x0,0x1be8(%rbx) 0.00 : 26d3: 00 : hwstats->fclast += IXGBE_READ_REG(hw, IXGBE_FCLAST); : hwstats->fcoerpdc += IXGBE_READ_REG(hw, IXGBE_FCOERPDC); : hwstats->fcoeprc += IXGBE_READ_REG(hw, IXGBE_FCOEPRC); : hwstats->fcoeptc += IXGBE_READ_REG(hw, IXGBE_FCOEPTC); : hwstats->fcoedwrc += IXGBE_READ_REG(hw, IXGBE_FCOEDWRC); : hwstats->fcoedwtc += IXGBE_READ_REG(hw, IXGBE_FCOEDWTC); 0.00 : 26d4: 48 89 83 a8 1a 00 00 mov %rax,0x1aa8(%rbx) : /* Add up per cpu counters for total ddp alloc fail */ : if (adapter->fcoe.ddp_pool) { 0.00 : 26db: 0f 84 f8 f4 ff ff je 1bd9 : static inline unsigned int cpumask_next(int n, const struct cpumask *srcp) : { : /* -1 is a legal arg here. */ : if (n != -1) : cpumask_check(n); : return find_next_bit(cpumask_bits(srcp), nr_cpumask_bits, n+1); 0.00 : 26e1: 4c 8b 2d 00 00 00 00 mov 0x0(%rip),%r13 # 26e8 0.00 : 26e8: b9 ff ff ff ff mov $0xffffffff,%ecx 0.00 : 26ed: 45 31 e4 xor %r12d,%r12d 0.00 : 26f0: 31 ed xor %ebp,%ebp 0.00 : 26f2: eb 1d jmp 2711 0.00 : 26f4: 0f 1f 40 00 nopl 0x0(%rax) : struct ixgbe_fcoe *fcoe = &adapter->fcoe; : struct ixgbe_fcoe_ddp_pool *ddp_pool; : unsigned int cpu; : u64 noddp = 0, noddp_ext_buff = 0; : for_each_possible_cpu(cpu) { : ddp_pool = per_cpu_ptr(fcoe->ddp_pool, cpu); 0.00 : 26f8: 89 ca mov %ecx,%edx 0.00 : 26fa: 48 8b 83 e8 1b 00 00 mov 0x1be8(%rbx),%rax 0.00 : 2701: 48 03 04 d5 00 00 00 add 0x0(,%rdx,8),%rax 0.00 : 2708: 00 : noddp += ddp_pool->noddp; 0.00 : 2709: 4c 03 60 08 add 0x8(%rax),%r12 : noddp_ext_buff += ddp_pool->noddp_ext_buff; 0.00 : 270d: 48 03 68 10 add 0x10(%rax),%rbp 0.00 : 2711: 48 63 35 00 00 00 00 movslq 0x0(%rip),%rsi # 2718 0.00 : 2718: 8d 51 01 lea 0x1(%rcx),%edx 0.00 : 271b: 4c 89 ef mov %r13,%rdi 0.00 : 271e: 48 63 d2 movslq %edx,%rdx 0.00 : 2721: e8 00 00 00 00 callq 2726 : if (adapter->fcoe.ddp_pool) { : struct ixgbe_fcoe *fcoe = &adapter->fcoe; : struct ixgbe_fcoe_ddp_pool *ddp_pool; : unsigned int cpu; : u64 noddp = 0, noddp_ext_buff = 0; : for_each_possible_cpu(cpu) { 0.00 : 2726: 39 05 00 00 00 00 cmp %eax,0x0(%rip) # 272c 0.00 : 272c: 89 c1 mov %eax,%ecx 0.00 : 272e: 77 c8 ja 26f8 : ddp_pool = per_cpu_ptr(fcoe->ddp_pool, cpu); : noddp += ddp_pool->noddp; : noddp_ext_buff += ddp_pool->noddp_ext_buff; : } : hwstats->fcoe_noddp = noddp; 0.00 : 2730: 4c 89 a3 b0 1a 00 00 mov %r12,0x1ab0(%rbx) : hwstats->fcoe_noddp_ext_buff = noddp_ext_buff; 0.00 : 2737: 48 89 ab b8 1a 00 00 mov %rbp,0x1ab8(%rbx) 0.00 : 273e: e9 96 f4 ff ff jmpq 1bd9 : : if ((hw->fc.current_mode != ixgbe_fc_full) && : (hw->fc.current_mode != ixgbe_fc_rx_pause)) : return; : : switch (hw->mac.type) { 0.00 : 2743: 83 bb 50 10 00 00 01 cmpl $0x1,0x1050(%rbx) 0.00 : 274a: 0f 84 ae 00 00 00 je 27fe 0.00 : 2750: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2757: 48 05 a8 41 00 00 add $0x41a8,%rax 0.00 : 275d: 8b 10 mov (%rax),%edx : data = IXGBE_READ_REG(hw, IXGBE_LXOFFRXC); : break; : default: : data = IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT); : } : hwstats->lxoffrxc += data; 0.00 : 275f: 89 d0 mov %edx,%eax 0.00 : 2761: 48 01 83 48 15 00 00 add %rax,0x1548(%rbx) : : /* refill credits (no tx hang) if we received xoff */ : if (!data) 0.00 : 2768: 85 d2 test %edx,%edx 0.00 : 276a: 0f 84 c0 f3 ff ff je 1b30 : return; : : for (i = 0; i < adapter->num_tx_queues; i++) 0.00 : 2770: 8b 93 20 02 00 00 mov 0x220(%rbx),%edx 0.00 : 2776: 85 d2 test %edx,%edx 0.00 : 2778: 0f 8e b2 f3 ff ff jle 1b30 0.00 : 277e: 31 c9 xor %ecx,%ecx : */ : static __always_inline void : clear_bit(int nr, volatile unsigned long *addr) : { : if (IS_IMMEDIATE(nr)) { : asm volatile(LOCK_PREFIX "andb %1,%0" 0.00 : 2780: 48 8b 97 80 02 00 00 mov 0x280(%rdi),%rdx 0.00 : 2787: 48 8d 42 30 lea 0x30(%rdx),%rax 0.00 : 278b: f0 80 62 30 fb lock andb $0xfb,0x30(%rdx) 0.00 : 2790: 83 c1 01 add $0x1,%ecx 0.00 : 2793: 48 83 c7 08 add $0x8,%rdi 0.00 : 2797: 3b 8b 20 02 00 00 cmp 0x220(%rbx),%ecx 0.00 : 279d: 7c e1 jl 2780 0.00 : 279f: e9 8c f3 ff ff jmpq 1b30 : } : bprc = IXGBE_READ_REG(hw, IXGBE_BPRC); : hwstats->bprc += bprc; : hwstats->mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); : if (hw->mac.type == ixgbe_mac_82598EB) : hwstats->mprc -= bprc; 0.00 : 27a4: 48 29 c8 sub %rcx,%rax 0.00 : 27a7: 48 89 83 90 16 00 00 mov %rax,0x1690(%rbx) 0.00 : 27ae: e9 6d f4 ff ff jmpq 1c20 : } : hwstats->pxoffrxc[i] += xoff[i]; : } : : /* disarm tx queues that have received xoff frames */ : for (i = 0; i < adapter->num_tx_queues; i++) { 0.00 : 27b3: 8b 83 20 02 00 00 mov 0x220(%rbx),%eax 0.00 : 27b9: 85 c0 test %eax,%eax 0.00 : 27bb: 0f 8e 6f f3 ff ff jle 1b30 0.00 : 27c1: 31 c9 xor %ecx,%ecx 0.00 : 27c3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : struct ixgbe_ring *tx_ring = adapter->tx_ring[i]; 0.00 : 27c8: 48 8b 97 80 02 00 00 mov 0x280(%rdi),%rdx : u8 tc = tx_ring->dcb_tc; 0.00 : 27cf: 0f b6 42 56 movzbl 0x56(%rdx),%eax : : if ((tc <= 7) && (xoff[tc])) 0.00 : 27d3: 3c 07 cmp $0x7,%al 0.00 : 27d5: 77 13 ja 27ea 0.00 : 27d7: 0f b6 c0 movzbl %al,%eax 0.00 : 27da: 8b 04 84 mov (%rsp,%rax,4),%eax 0.00 : 27dd: 85 c0 test %eax,%eax 0.00 : 27df: 74 09 je 27ea 0.00 : 27e1: 48 8d 42 30 lea 0x30(%rdx),%rax 0.00 : 27e5: f0 80 62 30 fb lock andb $0xfb,0x30(%rdx) : } : hwstats->pxoffrxc[i] += xoff[i]; : } : : /* disarm tx queues that have received xoff frames */ : for (i = 0; i < adapter->num_tx_queues; i++) { 0.00 : 27ea: 83 c1 01 add $0x1,%ecx 0.00 : 27ed: 48 83 c7 08 add $0x8,%rdi 0.00 : 27f1: 3b 8b 20 02 00 00 cmp 0x220(%rbx),%ecx 0.00 : 27f7: 7c cf jl 27c8 0.00 : 27f9: e9 32 f3 ff ff jmpq 1b30 0.00 : 27fe: 48 8b 83 80 0e 00 00 mov 0xe80(%rbx),%rax 0.00 : 2805: 48 05 68 cf 00 00 add $0xcf68,%rax 0.00 : 280b: 8b 10 mov (%rax),%edx 0.00 : 280d: e9 4d ff ff ff jmpq 275f : } : adapter->lro_stats.flushed = flushed; : adapter->lro_stats.coal = coal; : : #endif : for (i = 0; i < adapter->num_rx_queues; i++) { 0.00 : 2812: 45 31 d2 xor %r10d,%r10d 0.00 : 2815: 45 31 c9 xor %r9d,%r9d 0.00 : 2818: 45 31 c0 xor %r8d,%r8d 0.00 : 281b: 31 ff xor %edi,%edi 0.00 : 281d: 31 d2 xor %edx,%edx 0.00 : 281f: 31 c0 xor %eax,%eax 0.00 : 2821: e9 d8 f0 ff ff jmpq 18fe : net_stats->rx_packets = packets; : : bytes = 0; : packets = 0; : /* gather some stats to the adapter struct that are per queue */ : for (i = 0; i < adapter->num_tx_queues; i++) { 0.00 : 2826: 45 31 c0 xor %r8d,%r8d 0.00 : 2829: 31 ff xor %edi,%edi 0.00 : 282b: 31 f6 xor %esi,%esi 0.00 : 282d: 31 c9 xor %ecx,%ecx 0.00 : 282f: e9 3d f1 ff ff jmpq 1971 : : Disassembly of section .devinit.text: : : 0000000000001800 : : struct ixgbe_option opt = { : .type = enable_option, : .name = "Enabled/Disable FCoE offload", : .err = "defaulting to Enabled", : .def = OPTION_ENABLED : }; 0.00 : 1800: 48 c7 44 24 70 00 00 movq $0x0,0x70(%rsp) 0.00 : 1807: 00 00 0.00 : 1809: c7 44 24 78 01 00 00 movl $0x1,0x78(%rsp) 0.00 : 1810: 00 : #ifdef module_param_array : if (num_FCoE > bd) { 0.00 : 1811: 0f 82 f7 05 00 00 jb 1e0e : if (fcoe) : *aflags |= IXGBE_FLAG_FCOE_CAPABLE; : #ifdef module_param_array : } else { : if (opt.def == OPTION_ENABLED) : *aflags |= IXGBE_FLAG_FCOE_CAPABLE; 0.00 : 1817: 81 8b 18 02 00 00 00 orl $0x20000,0x218(%rbx) 0.00 : 181e: 00 02 00 : } : #endif : DPRINTK(PROBE, INFO, "FCoE Offload feature %sabled\n", 0.00 : 1821: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 1828: 0f 85 a6 05 00 00 jne 1dd4 : struct ixgbe_option opt = { : .type = enable_option, : .name = "LRO - Large Receive Offload", : .err = "defaulting to Enabled", : .def = OPTION_ENABLED : }; 0.00 : 182e: 48 8d 54 24 30 lea 0x30(%rsp),%rdx 0.00 : 1833: 31 c0 xor %eax,%eax 0.00 : 1835: b9 06 00 00 00 mov $0x6,%ecx : if (!(adapter->flags2 & IXGBE_FLAG2_RSC_CAPABLE)) : opt.def = OPTION_DISABLED; : : #endif : #ifdef module_param_array : if (num_LRO > bd) { 0.00 : 183a: 44 3b 25 00 00 00 00 cmp 0x0(%rip),%r12d # 1841 : struct ixgbe_option opt = { : .type = enable_option, : .name = "LRO - Large Receive Offload", : .err = "defaulting to Enabled", : .def = OPTION_ENABLED : }; 0.00 : 1841: 48 89 d7 mov %rdx,%rdi 0.00 : 1844: f3 48 ab rep stos %rax,%es:(%rdi) 0.00 : 1847: 48 c7 44 24 38 00 00 movq $0x0,0x38(%rsp) 0.00 : 184e: 00 00 0.00 : 1850: 48 c7 44 24 40 00 00 movq $0x0,0x40(%rsp) 0.00 : 1857: 00 00 0.00 : 1859: c7 44 24 48 01 00 00 movl $0x1,0x48(%rsp) 0.00 : 1860: 00 : struct net_device *netdev = adapter->netdev; 0.00 : 1861: 48 8b ab 00 02 00 00 mov 0x200(%rbx),%rbp : if (!(adapter->flags2 & IXGBE_FLAG2_RSC_CAPABLE)) : opt.def = OPTION_DISABLED; : : #endif : #ifdef module_param_array : if (num_LRO > bd) { 0.00 : 1868: 0f 82 e0 00 00 00 jb 194e : netdev->features |= NETIF_F_LRO; : else : netdev->features &= ~NETIF_F_LRO; : #ifdef module_param_array : } else if (opt.def == OPTION_ENABLED) { : netdev->features |= NETIF_F_LRO; 0.00 : 186e: 81 8d b0 00 00 00 00 orl $0x8000,0xb0(%rbp) 0.00 : 1875: 80 00 00 : struct ixgbe_option opt = { : .type = enable_option, : .name = "allow_unsupported_sfp", : .err = "defaulting to Disabled", : .def = OPTION_DISABLED : }; 0.00 : 1878: 31 c0 xor %eax,%eax : #ifdef module_param_array : if (num_allow_unsupported_sfp > bd) { 0.00 : 187a: 44 3b 25 00 00 00 00 cmp 0x0(%rip),%r12d # 1881 : struct ixgbe_option opt = { : .type = enable_option, : .name = "allow_unsupported_sfp", : .err = "defaulting to Disabled", : .def = OPTION_DISABLED : }; 0.00 : 1881: b9 06 00 00 00 mov $0x6,%ecx 0.00 : 1886: 48 89 e7 mov %rsp,%rdi 0.00 : 1889: f3 48 ab rep stos %rax,%es:(%rdi) 0.00 : 188c: 48 c7 44 24 08 00 00 movq $0x0,0x8(%rsp) 0.00 : 1893: 00 00 0.00 : 1895: 48 c7 44 24 10 00 00 movq $0x0,0x10(%rsp) 0.00 : 189c: 00 00 : #ifdef module_param_array : if (num_allow_unsupported_sfp > bd) { 0.00 : 189e: 72 7a jb 191a : } else { : adapter->hw.allow_unsupported_sfp = false; : } : #ifdef module_param_array : } else if (opt.def == OPTION_ENABLED) { : adapter->hw.allow_unsupported_sfp = true; 0.00 : 18a0: 83 7c 24 18 01 cmpl $0x1,0x18(%rsp) 0.00 : 18a5: 0f 94 83 a1 14 00 00 sete 0x14a1(%rbx) : } else { : adapter->hw.allow_unsupported_sfp = false; : } : #endif : } : } 0.00 : 18ac: 48 81 c4 a8 00 00 00 add $0xa8,%rsp 0.00 : 18b3: 5b pop %rbx 0.00 : 18b4: 5d pop %rbp 0.00 : 18b5: 41 5c pop %r12 0.00 : 18b7: 41 5d pop %r13 0.00 : 18b9: c3 retq : adapter->atr_sample_rate = IXGBE_ATR_SAMPLE_RATE_OFF; : } else if (num_AtrSampleRate > bd) { : adapter->atr_sample_rate = AtrSampleRate[bd]; : : if (adapter->atr_sample_rate) { : ixgbe_validate_option(&adapter->atr_sample_rate, 0.00 : 18ba: 48 8d bb dc 1b 00 00 lea 0x1bdc(%rbx),%rdi 0.00 : 18c1: 48 c7 c6 00 00 00 00 mov $0x0,%rsi 0.00 : 18c8: e8 23 fa ff ff callq 12f0 : &opt); : DPRINTK(PROBE, INFO, "%s %d\n", atr_string, 0.00 : 18cd: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 18d4: 0f 84 ec fe ff ff je 17c6 0.00 : 18da: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 18e1: 44 8b 83 dc 1b 00 00 mov 0x1bdc(%rbx),%r8d 0.00 : 18e8: 48 c7 c1 00 00 00 00 mov $0x0,%rcx 0.00 : 18ef: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 18f6: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 18fd: 31 c0 xor %eax,%eax 0.00 : 18ff: e8 00 00 00 00 callq 1904 0.00 : 1904: e9 bd fe ff ff jmpq 17c6 : adapter->atr_sample_rate); : } : } else { : adapter->atr_sample_rate = opt.def; 0.00 : 1909: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 190f 0.00 : 190f: 89 83 dc 1b 00 00 mov %eax,0x1bdc(%rbx) 0.00 : 1915: e9 ac fe ff ff jmpq 17c6 : }; : #ifdef module_param_array : if (num_allow_unsupported_sfp > bd) { : #endif : unsigned int enable_unsupported_sfp = : allow_unsupported_sfp[bd]; 0.00 : 191a: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1921: 00 : ixgbe_validate_option(&enable_unsupported_sfp, &opt); 0.00 : 1922: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1929: 00 0.00 : 192a: 48 89 e6 mov %rsp,%rsi : }; : #ifdef module_param_array : if (num_allow_unsupported_sfp > bd) { : #endif : unsigned int enable_unsupported_sfp = : allow_unsupported_sfp[bd]; 0.00 : 192d: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : ixgbe_validate_option(&enable_unsupported_sfp, &opt); 0.00 : 1934: e8 b7 f9 ff ff callq 12f0 : if (enable_unsupported_sfp) { : adapter->hw.allow_unsupported_sfp = true; 0.00 : 1939: 8b 84 24 9c 00 00 00 mov 0x9c(%rsp),%eax 0.00 : 1940: 85 c0 test %eax,%eax 0.00 : 1942: 0f 95 83 a1 14 00 00 setne 0x14a1(%rbx) 0.00 : 1949: e9 5e ff ff ff jmpq 18ac : : #endif : #ifdef module_param_array : if (num_LRO > bd) { : #endif : unsigned int lro = LRO[bd]; 0.00 : 194e: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1955: 00 : ixgbe_validate_option(&lro, &opt); 0.00 : 1956: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 195d: 00 0.00 : 195e: 48 89 d6 mov %rdx,%rsi : : #endif : #ifdef module_param_array : if (num_LRO > bd) { : #endif : unsigned int lro = LRO[bd]; 0.00 : 1961: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : ixgbe_validate_option(&lro, &opt); 0.00 : 1968: e8 83 f9 ff ff callq 12f0 : if (lro) 0.00 : 196d: 8b 94 24 9c 00 00 00 mov 0x9c(%rsp),%edx 0.00 : 1974: 85 d2 test %edx,%edx 0.00 : 1976: 0f 85 f2 fe ff ff jne 186e : netdev->features |= NETIF_F_LRO; : else : netdev->features &= ~NETIF_F_LRO; 0.00 : 197c: 81 a5 b0 00 00 00 ff andl $0xffff7fff,0xb0(%rbp) 0.00 : 1983: 7f ff ff 0.00 : 1986: e9 ed fe ff ff jmpq 1878 : }; : static const char atr_string[] = : "ATR Tx Packet sample rate set to"; : : if (adapter->hw.mac.type == ixgbe_mac_82598EB) { : adapter->atr_sample_rate = IXGBE_ATR_SAMPLE_RATE_OFF; 0.00 : 198b: c7 83 dc 1b 00 00 00 movl $0x0,0x1bdc(%rbx) 0.00 : 1992: 00 00 00 0.00 : 1995: e9 2c fe ff ff jmpq 17c6 : char pstring[10]; : : if (adapter->hw.mac.type == ixgbe_mac_82598EB) { : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_NONE; : } else if (num_FdirPballoc > bd) { : fdir_pballoc_mode = FdirPballoc[bd]; 0.00 : 199a: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 19a1: 00 : ixgbe_validate_option(&fdir_pballoc_mode, &opt); 0.00 : 19a2: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 19a9: 00 0.00 : 19aa: 48 c7 c6 00 00 00 00 mov $0x0,%rsi : char pstring[10]; : : if (adapter->hw.mac.type == ixgbe_mac_82598EB) { : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_NONE; : } else if (num_FdirPballoc > bd) { : fdir_pballoc_mode = FdirPballoc[bd]; 0.00 : 19b1: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : ixgbe_validate_option(&fdir_pballoc_mode, &opt); 0.00 : 19b8: e8 33 f9 ff ff callq 12f0 : switch (fdir_pballoc_mode) { 0.00 : 19bd: 8b 84 24 9c 00 00 00 mov 0x9c(%rsp),%eax 0.00 : 19c4: 83 f8 02 cmp $0x2,%eax 0.00 : 19c7: 0f 84 bf 00 00 00 je 1a8c 0.00 : 19cd: 83 f8 03 cmp $0x3,%eax 0.00 : 19d0: 0f 84 8a 00 00 00 je 1a60 : sprintf(pstring, "128kB"); : break; : case IXGBE_FDIR_PBALLOC_64K: : default: : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_64K; : sprintf(pstring, "64kB"); 0.00 : 19d6: 48 8d 8c 24 90 00 00 lea 0x90(%rsp),%rcx 0.00 : 19dd: 00 : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_128K; : sprintf(pstring, "128kB"); : break; : case IXGBE_FDIR_PBALLOC_64K: : default: : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_64K; 0.00 : 19de: c7 83 d8 1b 00 00 01 movl $0x1,0x1bd8(%rbx) 0.00 : 19e5: 00 00 00 : sprintf(pstring, "64kB"); 0.00 : 19e8: c7 84 24 90 00 00 00 movl $0x426b3436,0x90(%rsp) 0.00 : 19ef: 36 34 6b 42 0.00 : 19f3: c6 84 24 94 00 00 00 movb $0x0,0x94(%rsp) 0.00 : 19fa: 00 : break; : } : DPRINTK(PROBE, INFO, "Flow Director will be allocated " 0.00 : 19fb: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 1a02: 0f 84 8e fd ff ff je 1796 0.00 : 1a08: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1a0f: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1a16: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1a1d: 31 c0 xor %eax,%eax 0.00 : 1a1f: e8 00 00 00 00 callq 1a24 0.00 : 1a24: e9 6d fd ff ff jmpq 1796 : .max = IXGBE_FDIR_PBALLOC_256K} } : }; : char pstring[10]; : : if (adapter->hw.mac.type == ixgbe_mac_82598EB) { : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_NONE; 0.00 : 1a29: c7 83 d8 1b 00 00 00 movl $0x0,0x1bd8(%rbx) 0.00 : 1a30: 00 00 00 0.00 : 1a33: e9 5e fd ff ff jmpq 1796 : adapter->lli_vlan_pri = LLIVLANP[bd]; : if (adapter->lli_vlan_pri) { : ixgbe_validate_option(&adapter->lli_vlan_pri, : &opt); : } else { : DPRINTK(PROBE, INFO, "%s turned off\n", 0.00 : 1a38: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1a3f: 48 8b 0d 00 00 00 00 mov 0x0(%rip),%rcx # 1a46 0.00 : 1a46: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1a4d: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1a54: 31 c0 xor %eax,%eax 0.00 : 1a56: e8 00 00 00 00 callq 1a5b 0.00 : 1a5b: e9 10 fd ff ff jmpq 1770 : } else if (num_FdirPballoc > bd) { : fdir_pballoc_mode = FdirPballoc[bd]; : ixgbe_validate_option(&fdir_pballoc_mode, &opt); : switch (fdir_pballoc_mode) { : case IXGBE_FDIR_PBALLOC_256K: : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_256K; 0.00 : 1a60: c7 83 d8 1b 00 00 03 movl $0x3,0x1bd8(%rbx) 0.00 : 1a67: 00 00 00 : sprintf(pstring, "256kB"); 0.00 : 1a6a: 48 8d 8c 24 90 00 00 lea 0x90(%rsp),%rcx 0.00 : 1a71: 00 0.00 : 1a72: c7 84 24 90 00 00 00 movl $0x6b363532,0x90(%rsp) 0.00 : 1a79: 32 35 36 6b 0.00 : 1a7d: 66 c7 84 24 94 00 00 movw $0x42,0x94(%rsp) 0.00 : 1a84: 00 42 00 : break; 0.00 : 1a87: e9 6f ff ff ff jmpq 19fb : case IXGBE_FDIR_PBALLOC_128K: : adapter->fdir_pballoc = IXGBE_FDIR_PBALLOC_128K; 0.00 : 1a8c: c7 83 d8 1b 00 00 02 movl $0x2,0x1bd8(%rbx) 0.00 : 1a93: 00 00 00 : sprintf(pstring, "128kB"); 0.00 : 1a96: 48 8d 8c 24 90 00 00 lea 0x90(%rsp),%rcx 0.00 : 1a9d: 00 0.00 : 1a9e: c7 84 24 90 00 00 00 movl $0x6b383231,0x90(%rsp) 0.00 : 1aa5: 31 32 38 6b 0.00 : 1aa9: 66 c7 84 24 94 00 00 movw $0x42,0x94(%rsp) 0.00 : 1ab0: 00 42 00 : break; 0.00 : 1ab3: e9 43 ff ff ff jmpq 19fb : #ifdef module_param_array : if (num_LLIVLANP > bd) { : #endif : adapter->lli_vlan_pri = LLIVLANP[bd]; : if (adapter->lli_vlan_pri) { : ixgbe_validate_option(&adapter->lli_vlan_pri, 0.00 : 1ab8: 48 8d bb fc 1a 00 00 lea 0x1afc(%rbx),%rdi 0.00 : 1abf: 48 c7 c6 00 00 00 00 mov $0x0,%rsi 0.00 : 1ac6: e8 25 f8 ff ff callq 12f0 0.00 : 1acb: e9 a0 fc ff ff jmpq 1770 : DPRINTK(PROBE, INFO, "%s turned off\n", : opt.name); : } : #ifdef module_param_array : } else { : adapter->lli_vlan_pri = opt.def; 0.00 : 1ad0: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 1ad6 0.00 : 1ad6: 89 83 fc 1a 00 00 mov %eax,0x1afc(%rbx) 0.00 : 1adc: e9 8f fc ff ff jmpq 1770 : adapter->lli_etype = LLIEType[bd]; : if (adapter->lli_etype) { : ixgbe_validate_option(&adapter->lli_etype, : &opt); : } else { : DPRINTK(PROBE, INFO, "%s turned off\n", 0.00 : 1ae1: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1ae8: 48 8b 0d 00 00 00 00 mov 0x0(%rip),%rcx # 1aef 0.00 : 1aef: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1af6: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1afd: 31 c0 xor %eax,%eax 0.00 : 1aff: e8 00 00 00 00 callq 1b04 0.00 : 1b04: e9 37 fc ff ff jmpq 1740 : #ifdef module_param_array : if (num_LLIEType > bd) { : #endif : adapter->lli_etype = LLIEType[bd]; : if (adapter->lli_etype) { : ixgbe_validate_option(&adapter->lli_etype, 0.00 : 1b09: 48 8d bb f8 1a 00 00 lea 0x1af8(%rbx),%rdi 0.00 : 1b10: 48 c7 c6 00 00 00 00 mov $0x0,%rsi 0.00 : 1b17: e8 d4 f7 ff ff callq 12f0 0.00 : 1b1c: e9 1f fc ff ff jmpq 1740 : DPRINTK(PROBE, INFO, "%s turned off\n", : opt.name); : } : #ifdef module_param_array : } else { : adapter->lli_etype = opt.def; 0.00 : 1b21: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 1b27 0.00 : 1b27: 89 83 f8 1a 00 00 mov %eax,0x1af8(%rbx) 0.00 : 1b2d: e9 0e fc ff ff jmpq 1740 : }; : : #ifdef module_param_array : if (num_LLIPush > bd) { : #endif : unsigned int lli_push = LLIPush[bd]; 0.00 : 1b32: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1b39: 00 : ixgbe_validate_option(&lli_push, &opt); 0.00 : 1b3a: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1b41: 00 0.00 : 1b42: 48 c7 c6 00 00 00 00 mov $0x0,%rsi : }; : : #ifdef module_param_array : if (num_LLIPush > bd) { : #endif : unsigned int lli_push = LLIPush[bd]; 0.00 : 1b49: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : ixgbe_validate_option(&lli_push, &opt); 0.00 : 1b50: e8 9b f7 ff ff callq 12f0 : if (lli_push) 0.00 : 1b55: 8b b4 24 9c 00 00 00 mov 0x9c(%rsp),%esi 0.00 : 1b5c: 85 f6 test %esi,%esi 0.00 : 1b5e: 0f 84 a5 fb ff ff je 1709 : else : *aflags &= ~IXGBE_FLAG_LLI_PUSH; : #ifdef module_param_array : } else { : if (opt.def == OPTION_ENABLED) : *aflags |= IXGBE_FLAG_LLI_PUSH; 0.00 : 1b64: 83 8b 18 02 00 00 10 orl $0x10,0x218(%rbx) 0.00 : 1b6b: e9 a0 fb ff ff jmpq 1710 : #endif : adapter->lli_size = LLISize[bd]; : if (adapter->lli_size) { : ixgbe_validate_option(&adapter->lli_size, &opt); : } else { : DPRINTK(PROBE, INFO, "%s turned off\n", 0.00 : 1b70: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1b77: 48 8b 0d 00 00 00 00 mov 0x0(%rip),%rcx # 1b7e 0.00 : 1b7e: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1b85: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1b8c: 31 c0 xor %eax,%eax 0.00 : 1b8e: e8 00 00 00 00 callq 1b93 0.00 : 1b93: e9 57 fb ff ff jmpq 16ef : #ifdef module_param_array : if (num_LLISize > bd) { : #endif : adapter->lli_size = LLISize[bd]; : if (adapter->lli_size) { : ixgbe_validate_option(&adapter->lli_size, &opt); 0.00 : 1b98: 48 8d bb f4 1a 00 00 lea 0x1af4(%rbx),%rdi 0.00 : 1b9f: 48 c7 c6 00 00 00 00 mov $0x0,%rsi 0.00 : 1ba6: e8 45 f7 ff ff callq 12f0 0.00 : 1bab: e9 3f fb ff ff jmpq 16ef : DPRINTK(PROBE, INFO, "%s turned off\n", : opt.name); : } : #ifdef module_param_array : } else { : adapter->lli_size = opt.def; 0.00 : 1bb0: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 1bb6 0.00 : 1bb6: 89 83 f4 1a 00 00 mov %eax,0x1af4(%rbx) 0.00 : 1bbc: e9 2e fb ff ff jmpq 16ef : #endif : adapter->lli_port = LLIPort[bd]; : if (adapter->lli_port) { : ixgbe_validate_option(&adapter->lli_port, &opt); : } else { : DPRINTK(PROBE, INFO, "%s turned off\n", 0.00 : 1bc1: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1bc8: 48 8b 0d 00 00 00 00 mov 0x0(%rip),%rcx # 1bcf 0.00 : 1bcf: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1bd6: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1bdd: 31 c0 xor %eax,%eax 0.00 : 1bdf: e8 00 00 00 00 callq 1be4 0.00 : 1be4: e9 d6 fa ff ff jmpq 16bf : #ifdef module_param_array : if (num_LLIPort > bd) { : #endif : adapter->lli_port = LLIPort[bd]; : if (adapter->lli_port) { : ixgbe_validate_option(&adapter->lli_port, &opt); 0.00 : 1be9: 48 8d bb f0 1a 00 00 lea 0x1af0(%rbx),%rdi 0.00 : 1bf0: 48 c7 c6 00 00 00 00 mov $0x0,%rsi 0.00 : 1bf7: e8 f4 f6 ff ff callq 12f0 0.00 : 1bfc: e9 be fa ff ff jmpq 16bf : DPRINTK(PROBE, INFO, "%s turned off\n", : opt.name); : } : #ifdef module_param_array : } else { : adapter->lli_port = opt.def; 0.00 : 1c01: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 1c07 0.00 : 1c07: 89 83 f0 1a 00 00 mov %eax,0x1af0(%rbx) 0.00 : 1c0d: e9 ad fa ff ff jmpq 16bf : if (num_InterruptThrottleRate > bd) { : #endif : u32 itr = InterruptThrottleRate[bd]; : switch (itr) { : case 0: : DPRINTK(PROBE, INFO, "%s turned off\n", 0.00 : 1c12: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1c19: 48 8b 0d 00 00 00 00 mov 0x0(%rip),%rcx # 1c20 0.00 : 1c20: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1c27: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1c2e: 31 c0 xor %eax,%eax 0.00 : 1c30: e8 00 00 00 00 callq 1c35 0.00 : 1c35: e9 3e fa ff ff jmpq 1678 : : #ifdef module_param_array : if (num_InterruptThrottleRate > bd) { : #endif : u32 itr = InterruptThrottleRate[bd]; : switch (itr) { 0.00 : 1c3a: 83 e8 01 sub $0x1,%eax 0.00 : 1c3d: 74 50 je 1c8f : DPRINTK(PROBE, INFO, "dynamic interrupt " : "throttling enabled\n"); : adapter->rx_itr_setting = 1; : break; : default: : ixgbe_validate_option(&itr, &opt); 0.00 : 1c3f: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1c46: 00 0.00 : 1c47: 48 c7 c6 00 00 00 00 mov $0x0,%rsi 0.00 : 1c4e: e8 9d f6 ff ff callq 12f0 : /* the first bit is used as control */ : adapter->rx_itr_setting = (1000000/itr) << 2; 0.00 : 1c53: b8 40 42 0f 00 mov $0xf4240,%eax 0.00 : 1c58: 31 d2 xor %edx,%edx 0.00 : 1c5a: f7 b4 24 9c 00 00 00 divl 0x9c(%rsp) 0.00 : 1c61: c1 e0 02 shl $0x2,%eax 0.00 : 1c64: 66 89 83 2c 02 00 00 mov %ax,0x22c(%rbx) 0.00 : 1c6b: e9 11 fa ff ff jmpq 1681 : break; : } : adapter->tx_itr_setting = adapter->rx_itr_setting; : #ifdef module_param_array : } else { : adapter->rx_itr_setting = opt.def; 0.00 : 1c70: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 1c76 0.00 : 1c76: 66 89 83 2c 02 00 00 mov %ax,0x22c(%rbx) : adapter->tx_itr_setting = opt.def; 0.00 : 1c7d: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 1c83 0.00 : 1c83: 66 89 83 24 02 00 00 mov %ax,0x224(%rbx) 0.00 : 1c8a: e9 00 fa ff ff jmpq 168f : DPRINTK(PROBE, INFO, "%s turned off\n", : opt.name); : adapter->rx_itr_setting = 0; : break; : case 1: : DPRINTK(PROBE, INFO, "dynamic interrupt " 0.00 : 1c8f: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 1c96: 0f 85 a5 01 00 00 jne 1e41 : "throttling enabled\n"); : adapter->rx_itr_setting = 1; 0.00 : 1c9c: 66 c7 83 2c 02 00 00 movw $0x1,0x22c(%rbx) 0.00 : 1ca3: 01 00 : break; 0.00 : 1ca5: e9 d7 f9 ff ff jmpq 1681 : }; : : #ifdef module_param_array : if (num_L2LBen > bd) { : #endif : unsigned int l2LBen = L2LBen[bd]; 0.00 : 1caa: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1cb1: 00 : ixgbe_validate_option(&l2LBen, &opt); 0.00 : 1cb2: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1cb9: 00 0.00 : 1cba: 48 c7 c6 00 00 00 00 mov $0x0,%rsi : }; : : #ifdef module_param_array : if (num_L2LBen > bd) { : #endif : unsigned int l2LBen = L2LBen[bd]; 0.00 : 1cc1: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : ixgbe_validate_option(&l2LBen, &opt); 0.00 : 1cc8: e8 23 f6 ff ff callq 12f0 : if (l2LBen) 0.00 : 1ccd: 8b bc 24 9c 00 00 00 mov 0x9c(%rsp),%edi 0.00 : 1cd4: 85 ff test %edi,%edi 0.00 : 1cd6: 0f 84 6b f9 ff ff je 1647 : adapter->flags |= : IXGBE_FLAG_SRIOV_L2LOOPBACK_ENABLE; : #ifdef module_param_array : } else { : if (opt.def == OPTION_ENABLED) : adapter->flags |= 0.00 : 1cdc: 81 8b 18 02 00 00 00 orl $0x800000,0x218(%rbx) 0.00 : 1ce3: 00 80 00 0.00 : 1ce6: e9 5c f9 ff ff jmpq 1647 : } else { : if (opt.def == OPTION_DISABLED) { : adapter->num_vfs = 0; : *aflags &= ~IXGBE_FLAG_SRIOV_ENABLED; : } else { : adapter->num_vfs = opt.def; 0.00 : 1ceb: 89 83 58 7c 00 00 mov %eax,0x7c58(%rbx) : *aflags |= IXGBE_FLAG_SRIOV_ENABLED; 0.00 : 1cf1: 81 8b 18 02 00 00 00 orl $0x100000,0x218(%rbx) 0.00 : 1cf8: 00 10 00 0.00 : 1cfb: e9 f3 f8 ff ff jmpq 15f3 : }; : : #ifdef module_param_array : if (num_max_vfs > bd) { : #endif : unsigned int vfs = max_vfs[bd]; 0.00 : 1d00: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1d07: 00 : if (ixgbe_validate_option(&vfs, &opt)) { 0.00 : 1d08: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1d0f: 00 0.00 : 1d10: 48 c7 c6 00 00 00 00 mov $0x0,%rsi : }; : : #ifdef module_param_array : if (num_max_vfs > bd) { : #endif : unsigned int vfs = max_vfs[bd]; 0.00 : 1d17: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : if (ixgbe_validate_option(&vfs, &opt)) { 0.00 : 1d1e: e8 cd f5 ff ff callq 12f0 0.00 : 1d23: 85 c0 test %eax,%eax 0.00 : 1d25: 74 14 je 1d3b : vfs = 0; : DPRINTK(PROBE, INFO, 0.00 : 1d27: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) : #ifdef module_param_array : if (num_max_vfs > bd) { : #endif : unsigned int vfs = max_vfs[bd]; : if (ixgbe_validate_option(&vfs, &opt)) { : vfs = 0; 0.00 : 1d2e: c7 84 24 9c 00 00 00 movl $0x0,0x9c(%rsp) 0.00 : 1d35: 00 00 00 00 : DPRINTK(PROBE, INFO, 0.00 : 1d39: 75 17 jne 1d52 : "max_vfs out of range " : "Disabling SR-IOV.\n"); : } : : adapter->num_vfs = vfs; 0.00 : 1d3b: 8b 84 24 9c 00 00 00 mov 0x9c(%rsp),%eax : : if (vfs) 0.00 : 1d42: 85 c0 test %eax,%eax : DPRINTK(PROBE, INFO, : "max_vfs out of range " : "Disabling SR-IOV.\n"); : } : : adapter->num_vfs = vfs; 0.00 : 1d44: 89 83 58 7c 00 00 mov %eax,0x7c58(%rbx) : : if (vfs) 0.00 : 1d4a: 0f 84 99 f8 ff ff je 15e9 0.00 : 1d50: eb 9f jmp 1cf1 : if (num_max_vfs > bd) { : #endif : unsigned int vfs = max_vfs[bd]; : if (ixgbe_validate_option(&vfs, &opt)) { : vfs = 0; : DPRINTK(PROBE, INFO, 0.00 : 1d52: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1d59: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1d60: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1d67: 31 c0 xor %eax,%eax 0.00 : 1d69: e8 00 00 00 00 callq 1d6e 0.00 : 1d6e: eb cb jmp 1d3b : #endif : : /* Check Interoperability */ : if (*aflags & IXGBE_FLAG_SRIOV_ENABLED) { : if (!(*aflags & IXGBE_FLAG_SRIOV_CAPABLE)) { : DPRINTK(PROBE, INFO, 0.00 : 1d70: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1d77: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1d7e: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1d85: 31 c0 xor %eax,%eax 0.00 : 1d87: e8 00 00 00 00 callq 1d8c 0.00 : 1d8c: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 1d92: e9 81 f8 ff ff jmpq 1618 : "IOV is not supported on this " : "hardware. Disabling IOV.\n"); : *aflags &= ~IXGBE_FLAG_SRIOV_ENABLED; : adapter->num_vfs = 0; : } else if (!(*aflags & IXGBE_FLAG_MQ_CAPABLE)) { 0.00 : 1d97: f6 c4 02 test $0x2,%ah 0.00 : 1d9a: 0f 85 8d f8 ff ff jne 162d : DPRINTK(PROBE, INFO, 0.00 : 1da0: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 1da7: 0f 84 6b f8 ff ff je 1618 0.00 : 1dad: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1db4: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1dbb: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1dc2: 31 c0 xor %eax,%eax 0.00 : 1dc4: e8 00 00 00 00 callq 1dc9 0.00 : 1dc9: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 1dcf: e9 44 f8 ff ff jmpq 1618 : } else { : if (opt.def == OPTION_ENABLED) : *aflags |= IXGBE_FLAG_FCOE_CAPABLE; : } : #endif : DPRINTK(PROBE, INFO, "FCoE Offload feature %sabled\n", 0.00 : 1dd4: f6 83 1a 02 00 00 02 testb $0x2,0x21a(%rbx) 0.00 : 1ddb: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1de2: 48 c7 c0 00 00 00 00 mov $0x0,%rax 0.00 : 1de9: 48 c7 c1 00 00 00 00 mov $0x0,%rcx 0.00 : 1df0: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1df7: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1dfe: 48 0f 45 c8 cmovne %rax,%rcx 0.00 : 1e02: 31 c0 xor %eax,%eax 0.00 : 1e04: e8 00 00 00 00 callq 1e09 0.00 : 1e09: e9 20 fa ff ff jmpq 182e : .def = OPTION_ENABLED : }; : #ifdef module_param_array : if (num_FCoE > bd) { : #endif : unsigned int fcoe = FCoE[bd]; 0.00 : 1e0e: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1e15: 00 : : ixgbe_validate_option(&fcoe, &opt); 0.00 : 1e16: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1e1d: 00 0.00 : 1e1e: 48 89 d6 mov %rdx,%rsi : .def = OPTION_ENABLED : }; : #ifdef module_param_array : if (num_FCoE > bd) { : #endif : unsigned int fcoe = FCoE[bd]; 0.00 : 1e21: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : : ixgbe_validate_option(&fcoe, &opt); 0.00 : 1e28: e8 c3 f4 ff ff callq 12f0 : if (fcoe) 0.00 : 1e2d: 8b 8c 24 9c 00 00 00 mov 0x9c(%rsp),%ecx 0.00 : 1e34: 85 c9 test %ecx,%ecx 0.00 : 1e36: 0f 84 e5 f9 ff ff je 1821 0.00 : 1e3c: e9 d6 f9 ff ff jmpq 1817 : DPRINTK(PROBE, INFO, "%s turned off\n", : opt.name); : adapter->rx_itr_setting = 0; : break; : case 1: : DPRINTK(PROBE, INFO, "dynamic interrupt " 0.00 : 1e41: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1e48: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1e4f: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1e56: 31 c0 xor %eax,%eax 0.00 : 1e58: e8 00 00 00 00 callq 1e5d 0.00 : 1e5d: e9 3a fe ff ff jmpq 1c9c : #ifdef module_param_array : } else { : if (opt.def == OPTION_DISABLED) : *aflags &= ~IXGBE_FLAG_VMDQ_ENABLED; : else : *aflags |= IXGBE_FLAG_VMDQ_ENABLED; 0.00 : 1e62: 81 8b 18 02 00 00 00 orl $0x800,0x218(%rbx) 0.00 : 1e69: 08 00 00 0.00 : 1e6c: e9 17 f7 ff ff jmpq 1588 : } : : #ifdef module_param_array : if (num_VMDQ > bd) { : #endif : unsigned int vmdq = VMDQ[bd]; 0.00 : 1e71: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1e78: 00 : : ixgbe_validate_option(&vmdq, &opt); 0.00 : 1e79: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1e80: 00 0.00 : 1e81: 48 c7 c6 00 00 00 00 mov $0x0,%rsi : } : : #ifdef module_param_array : if (num_VMDQ > bd) { : #endif : unsigned int vmdq = VMDQ[bd]; 0.00 : 1e88: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : : ixgbe_validate_option(&vmdq, &opt); 0.00 : 1e8f: e8 5c f4 ff ff callq 12f0 : : /* zero or one both mean disabled from our driver's : * perspective */ : if (vmdq > 1) 0.00 : 1e94: 83 bc 24 9c 00 00 00 cmpl $0x1,0x9c(%rsp) 0.00 : 1e9b: 01 0.00 : 1e9c: 76 6e jbe 1f0c : *aflags |= IXGBE_FLAG_VMDQ_ENABLED; 0.00 : 1e9e: 81 8b 18 02 00 00 00 orl $0x800,0x218(%rbx) 0.00 : 1ea5: 08 00 00 : else : *aflags &= ~IXGBE_FLAG_VMDQ_ENABLED; : : feature[RING_F_VMDQ].limit = vmdq; 0.00 : 1ea8: 8b 84 24 9c 00 00 00 mov 0x9c(%rsp),%eax 0.00 : 1eaf: 66 89 83 d0 0b 00 00 mov %ax,0xbd0(%rbx) 0.00 : 1eb6: e9 da f6 ff ff jmpq 1595 : feature[RING_F_FDIR].limit = rss; : : feature[RING_F_RSS].limit = rss; : #ifdef module_param_array : } else if (opt.def == 0) { : rss = min_t(int, IXGBE_MAX_RSS_INDICES, 0.00 : 1ebb: 48 8b 3d 00 00 00 00 mov 0x0(%rip),%rdi # 1ec2 0.00 : 1ec2: e8 00 00 00 00 callq 1ec7 0.00 : 1ec7: ba 10 00 00 00 mov $0x10,%edx 0.00 : 1ecc: 83 f8 10 cmp $0x10,%eax 0.00 : 1ecf: 0f 4e d0 cmovle %eax,%edx 0.00 : 1ed2: 89 94 24 9c 00 00 00 mov %edx,0x9c(%rsp) : num_online_cpus()); : feature[RING_F_RSS].limit = rss; 0.00 : 1ed9: 66 89 93 d8 0b 00 00 mov %dx,0xbd8(%rbx) 0.00 : 1ee0: e9 3a f6 ff ff jmpq 151f : } : #endif : /* Check Interoperability */ : if (*aflags & IXGBE_FLAG_VMDQ_ENABLED) { : if (!(*aflags & IXGBE_FLAG_MQ_CAPABLE)) { : DPRINTK(PROBE, INFO, 0.00 : 1ee5: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1eec: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 1ef3: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 1efa: 31 c0 xor %eax,%eax 0.00 : 1efc: e8 00 00 00 00 callq 1f01 0.00 : 1f01: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 1f07: e9 a6 f6 ff ff jmpq 15b2 : /* zero or one both mean disabled from our driver's : * perspective */ : if (vmdq > 1) : *aflags |= IXGBE_FLAG_VMDQ_ENABLED; : else : *aflags &= ~IXGBE_FLAG_VMDQ_ENABLED; 0.00 : 1f0c: 81 a3 18 02 00 00 ff andl $0xfffff7ff,0x218(%rbx) 0.00 : 1f13: f7 ff ff 0.00 : 1f16: eb 90 jmp 1ea8 : unsigned int rss = RSS[bd]; : : #ifdef module_param_array : if (num_RSS > bd) { : #endif : ixgbe_validate_option(&rss, &opt); 0.00 : 1f18: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1f1f: 00 0.00 : 1f20: 48 c7 c6 00 00 00 00 mov $0x0,%rsi 0.00 : 1f27: e8 c4 f3 ff ff callq 12f0 : /* base it off num_online_cpus() with hardware limit */ : if (!rss) 0.00 : 1f2c: 8b 84 24 9c 00 00 00 mov 0x9c(%rsp),%eax 0.00 : 1f33: 85 c0 test %eax,%eax 0.00 : 1f35: 74 22 je 1f59 : rss = min_t(int, IXGBE_MAX_RSS_INDICES, : num_online_cpus()); : else : feature[RING_F_FDIR].limit = rss; 0.00 : 1f37: 66 89 83 e0 0b 00 00 mov %ax,0xbe0(%rbx) : : feature[RING_F_RSS].limit = rss; 0.00 : 1f3e: 66 89 83 d8 0b 00 00 mov %ax,0xbd8(%rbx) 0.00 : 1f45: e9 d5 f5 ff ff jmpq 151f : if (opt.def == OPTION_DISABLED) : *aflags &= ~IXGBE_FLAG_DCA_CAPABLE; : } : #endif : if (dca == IXGBE_MAX_DCA) : adapter->flags |= IXGBE_FLAG_DCA_ENABLED_DATA; 0.00 : 1f4a: 81 8b 18 02 00 00 00 orl $0x100,0x218(%rbx) 0.00 : 1f51: 01 00 00 0.00 : 1f54: e9 9a f5 ff ff jmpq 14f3 : if (num_RSS > bd) { : #endif : ixgbe_validate_option(&rss, &opt); : /* base it off num_online_cpus() with hardware limit */ : if (!rss) : rss = min_t(int, IXGBE_MAX_RSS_INDICES, 0.00 : 1f59: 48 8b 3d 00 00 00 00 mov 0x0(%rip),%rdi # 1f60 0.00 : 1f60: e8 00 00 00 00 callq 1f65 0.00 : 1f65: ba 10 00 00 00 mov $0x10,%edx 0.00 : 1f6a: 83 f8 10 cmp $0x10,%eax 0.00 : 1f6d: 0f 4e d0 cmovle %eax,%edx 0.00 : 1f70: 89 94 24 9c 00 00 00 mov %edx,0x9c(%rsp) 0.00 : 1f77: 89 d0 mov %edx,%eax 0.00 : 1f79: eb c3 jmp 1f3e : unsigned int dca = opt.def; : : #ifdef module_param_array : if (num_DCA > bd) { : #endif : dca = DCA[bd]; 0.00 : 1f7b: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 1f82: 00 : ixgbe_validate_option(&dca, &opt); 0.00 : 1f83: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 1f8a: 00 0.00 : 1f8b: 48 c7 c6 00 00 00 00 mov $0x0,%rsi : unsigned int dca = opt.def; : : #ifdef module_param_array : if (num_DCA > bd) { : #endif : dca = DCA[bd]; 0.00 : 1f92: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : ixgbe_validate_option(&dca, &opt); 0.00 : 1f99: e8 52 f3 ff ff callq 12f0 : if (!dca) 0.00 : 1f9e: 44 8b 9c 24 9c 00 00 mov 0x9c(%rsp),%r11d 0.00 : 1fa5: 00 0.00 : 1fa6: 45 85 db test %r11d,%r11d 0.00 : 1fa9: 75 0a jne 1fb5 : *aflags &= ~IXGBE_FLAG_DCA_CAPABLE; 0.00 : 1fab: 81 a3 18 02 00 00 7f andl $0xffffff7f,0x218(%rbx) 0.00 : 1fb2: ff ff ff : : /* Check Interoperability */ : if (!(*aflags & IXGBE_FLAG_DCA_CAPABLE)) { 0.00 : 1fb5: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 1fbb: 84 c0 test %al,%al 0.00 : 1fbd: 78 12 js 1fd1 : DPRINTK(PROBE, INFO, "DCA is disabled\n"); 0.00 : 1fbf: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 1fc6: 75 50 jne 2018 : *aflags &= ~IXGBE_FLAG_DCA_ENABLED; 0.00 : 1fc8: 83 e0 bf and $0xffffffbf,%eax 0.00 : 1fcb: 89 83 18 02 00 00 mov %eax,0x218(%rbx) : } : : if (dca == IXGBE_MAX_DCA) { 0.00 : 1fd1: 83 bc 24 9c 00 00 00 cmpl $0x2,0x9c(%rsp) 0.00 : 1fd8: 02 0.00 : 1fd9: 0f 85 14 f5 ff ff jne 14f3 : DPRINTK(PROBE, INFO, 0.00 : 1fdf: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 1fe6: 75 54 jne 203c : "DCA enabled for rx data\n"); : adapter->flags |= IXGBE_FLAG_DCA_ENABLED_DATA; 0.00 : 1fe8: 81 8b 18 02 00 00 00 orl $0x100,0x218(%rbx) 0.00 : 1fef: 01 00 00 0.00 : 1ff2: e9 ee f4 ff ff jmpq 14e5 : } : #endif : /* Check Interoperability */ : if (rss > 1) { : if (!(*aflags & IXGBE_FLAG_MQ_CAPABLE)) { : DPRINTK(PROBE, INFO, 0.00 : 1ff7: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 1ffe: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 2005: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 200c: 31 c0 xor %eax,%eax 0.00 : 200e: e8 00 00 00 00 callq 2013 0.00 : 2013: e9 27 f5 ff ff jmpq 153f : if (!dca) : *aflags &= ~IXGBE_FLAG_DCA_CAPABLE; : : /* Check Interoperability */ : if (!(*aflags & IXGBE_FLAG_DCA_CAPABLE)) { : DPRINTK(PROBE, INFO, "DCA is disabled\n"); 0.00 : 2018: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 201f: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 2026: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 202d: 31 c0 xor %eax,%eax 0.00 : 202f: e8 00 00 00 00 callq 2034 0.00 : 2034: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 203a: eb 8c jmp 1fc8 : *aflags &= ~IXGBE_FLAG_DCA_ENABLED; : } : : if (dca == IXGBE_MAX_DCA) { : DPRINTK(PROBE, INFO, 0.00 : 203c: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 2043: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 204a: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 2051: 31 c0 xor %eax,%eax 0.00 : 2053: e8 00 00 00 00 callq 2058 0.00 : 2058: eb 8e jmp 1fe8 : } : #endif : /* Check Interoperability */ : if ((*aflags & IXGBE_FLAG_MQ_CAPABLE) && : !(*aflags & IXGBE_FLAG_MSIX_CAPABLE)) { : DPRINTK(PROBE, INFO, 0.00 : 205a: f6 83 a8 14 00 00 02 testb $0x2,0x14a8(%rbx) 0.00 : 2061: 75 4f jne 20b2 : "Multiple queues are not supported while MSI-X " : "is disabled. Disabling Multiple Queues.\n"); : *aflags &= ~IXGBE_FLAG_MQ_CAPABLE; 0.00 : 2063: 80 e6 fd and $0xfd,%dh 0.00 : 2066: 89 93 18 02 00 00 mov %edx,0x218(%rbx) 0.00 : 206c: e9 44 f4 ff ff jmpq 14b5 : }; : : #ifdef module_param_array : if (num_MQ > bd) { : #endif : unsigned int mq = MQ[bd]; 0.00 : 2071: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 2078: 00 : ixgbe_validate_option(&mq, &opt); 0.00 : 2079: 48 8d bc 24 9c 00 00 lea 0x9c(%rsp),%rdi 0.00 : 2080: 00 0.00 : 2081: 48 c7 c6 00 00 00 00 mov $0x0,%rsi : }; : : #ifdef module_param_array : if (num_MQ > bd) { : #endif : unsigned int mq = MQ[bd]; 0.00 : 2088: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) : ixgbe_validate_option(&mq, &opt); 0.00 : 208f: e8 5c f2 ff ff callq 12f0 : if (mq) 0.00 : 2094: 8b ac 24 9c 00 00 00 mov 0x9c(%rsp),%ebp 0.00 : 209b: 85 ed test %ebp,%ebp 0.00 : 209d: 0f 84 f0 f3 ff ff je 1493 : else : *aflags &= ~IXGBE_FLAG_MQ_CAPABLE; : #ifdef module_param_array : } else { : if (opt.def == OPTION_ENABLED) : *aflags |= IXGBE_FLAG_MQ_CAPABLE; 0.00 : 20a3: 81 8b 18 02 00 00 00 orl $0x200,0x218(%rbx) 0.00 : 20aa: 02 00 00 0.00 : 20ad: e9 eb f3 ff ff jmpq 149d : } : #endif : /* Check Interoperability */ : if ((*aflags & IXGBE_FLAG_MQ_CAPABLE) && : !(*aflags & IXGBE_FLAG_MSIX_CAPABLE)) { : DPRINTK(PROBE, INFO, 0.00 : 20b2: 48 8b b3 00 02 00 00 mov 0x200(%rbx),%rsi 0.00 : 20b9: 48 c7 c2 00 00 00 00 mov $0x0,%rdx 0.00 : 20c0: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 20c7: 31 c0 xor %eax,%eax 0.00 : 20c9: e8 00 00 00 00 callq 20ce 0.00 : 20ce: 8b 93 18 02 00 00 mov 0x218(%rbx),%edx 0.00 : 20d4: eb 8d jmp 2063 : if (int_mode == OPTION_UNSET) : int_mode = InterruptType[bd]; : ixgbe_validate_option(&int_mode, &opt); : switch (int_mode) { : case IXGBE_INT_MSIX: : if (!(*aflags & IXGBE_FLAG_MSIX_CAPABLE)) 0.00 : 20d6: f6 83 18 02 00 00 04 testb $0x4,0x218(%rbx) 0.00 : 20dd: 0f 85 96 f3 ff ff jne 1479 : printk(KERN_INFO 0.00 : 20e3: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 20ea: 31 c0 xor %eax,%eax 0.00 : 20ec: e8 00 00 00 00 callq 20f1 0.00 : 20f1: e9 83 f3 ff ff jmpq 1479 : "Ignoring MSI-X setting; " : "support unavailable\n"); : break; : case IXGBE_INT_MSI: : if (!(*aflags & IXGBE_FLAG_MSI_CAPABLE)) { 0.00 : 20f6: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 20fc: a8 01 test $0x1,%al 0.00 : 20fe: 74 22 je 2122 : printk(KERN_INFO : "Ignoring MSI setting; " : "support unavailable\n"); : } else { : *aflags &= ~IXGBE_FLAG_MSIX_CAPABLE; 0.00 : 2100: 83 e0 fb and $0xfffffffb,%eax 0.00 : 2103: 89 83 18 02 00 00 mov %eax,0x218(%rbx) 0.00 : 2109: e9 6b f3 ff ff jmpq 1479 : #ifdef module_param_array : if (num_IntMode > bd || num_InterruptType > bd) { : #endif : int_mode = IntMode[bd]; : if (int_mode == OPTION_UNSET) : int_mode = InterruptType[bd]; 0.00 : 210e: 42 8b 04 ad 00 00 00 mov 0x0(,%r13,4),%eax 0.00 : 2115: 00 0.00 : 2116: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) 0.00 : 211d: e9 23 f3 ff ff jmpq 1445 : "Ignoring MSI-X setting; " : "support unavailable\n"); : break; : case IXGBE_INT_MSI: : if (!(*aflags & IXGBE_FLAG_MSI_CAPABLE)) { : printk(KERN_INFO 0.00 : 2122: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 2129: 31 c0 xor %eax,%eax 0.00 : 212b: e8 00 00 00 00 callq 2130 0.00 : 2130: e9 44 f3 ff ff jmpq 1479 : int bd = adapter->bd_number; : u32 *aflags = &adapter->flags; : struct ixgbe_ring_feature *feature = adapter->ring_feature; : : if (bd >= IXGBE_MAX_NIC) { : printk(KERN_NOTICE 0.00 : 2135: 44 89 e6 mov %r12d,%esi 0.00 : 2138: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 213f: 31 c0 xor %eax,%eax 0.00 : 2141: e8 00 00 00 00 callq 2146 : "Warning: no configuration for board #%d\n", bd); : printk(KERN_NOTICE "Using defaults for all values\n"); 0.00 : 2146: 48 c7 c7 00 00 00 00 mov $0x0,%rdi 0.00 : 214d: 31 c0 xor %eax,%eax 0.00 : 214f: e8 00 00 00 00 callq 2154 0.00 : 2154: e9 bb f2 ff ff jmpq 1414 : break; : } : #ifdef module_param_array : } else { : /* default settings */ : if (opt.def == IXGBE_INT_MSIX && 0.00 : 2159: 8b 15 00 00 00 00 mov 0x0(%rip),%edx # 215f 0.00 : 215f: 83 fa 02 cmp $0x2,%edx 0.00 : 2162: 74 1c je 2180 : *aflags & IXGBE_FLAG_MSIX_CAPABLE) { : *aflags |= IXGBE_FLAG_MSIX_CAPABLE; : *aflags |= IXGBE_FLAG_MSI_CAPABLE; : } else if (opt.def == IXGBE_INT_MSI && 0.00 : 2164: 83 ea 01 sub $0x1,%edx : break; : } : #ifdef module_param_array : } else { : /* default settings */ : if (opt.def == IXGBE_INT_MSIX && 0.00 : 2167: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax : *aflags & IXGBE_FLAG_MSIX_CAPABLE) { : *aflags |= IXGBE_FLAG_MSIX_CAPABLE; : *aflags |= IXGBE_FLAG_MSI_CAPABLE; : } else if (opt.def == IXGBE_INT_MSI && 0.00 : 216d: 74 2c je 219b : *aflags & IXGBE_FLAG_MSI_CAPABLE) { : *aflags &= ~IXGBE_FLAG_MSIX_CAPABLE; : *aflags |= IXGBE_FLAG_MSI_CAPABLE; : } else { : *aflags &= ~IXGBE_FLAG_MSIX_CAPABLE; : *aflags &= ~IXGBE_FLAG_MSI_CAPABLE; 0.00 : 216f: 83 e0 fa and $0xfffffffa,%eax 0.00 : 2172: 4d 63 ec movslq %r12d,%r13 0.00 : 2175: 89 83 18 02 00 00 mov %eax,0x218(%rbx) 0.00 : 217b: e9 f9 f2 ff ff jmpq 1479 : break; : } : #ifdef module_param_array : } else { : /* default settings */ : if (opt.def == IXGBE_INT_MSIX && 0.00 : 2180: 8b 83 18 02 00 00 mov 0x218(%rbx),%eax 0.00 : 2186: a8 04 test $0x4,%al 0.00 : 2188: 74 e5 je 216f : *aflags & IXGBE_FLAG_MSIX_CAPABLE) { : *aflags |= IXGBE_FLAG_MSIX_CAPABLE; : *aflags |= IXGBE_FLAG_MSI_CAPABLE; 0.00 : 218a: 83 c8 05 or $0x5,%eax 0.00 : 218d: 4d 63 ec movslq %r12d,%r13 0.00 : 2190: 89 83 18 02 00 00 mov %eax,0x218(%rbx) : break; : } : #ifdef module_param_array : } else { : /* default settings */ : if (opt.def == IXGBE_INT_MSIX && 0.00 : 2196: e9 de f2 ff ff jmpq 1479 : *aflags & IXGBE_FLAG_MSIX_CAPABLE) { : *aflags |= IXGBE_FLAG_MSIX_CAPABLE; : *aflags |= IXGBE_FLAG_MSI_CAPABLE; : } else if (opt.def == IXGBE_INT_MSI && 0.00 : 219b: a8 01 test $0x1,%al 0.00 : 219d: 74 d0 je 216f : *aflags & IXGBE_FLAG_MSI_CAPABLE) { : *aflags &= ~IXGBE_FLAG_MSIX_CAPABLE; : *aflags |= IXGBE_FLAG_MSI_CAPABLE; 0.00 : 219f: 83 e0 fb and $0xfffffffb,%eax 0.00 : 21a2: 4d 63 ec movslq %r12d,%r13 0.00 : 21a5: 83 c8 01 or $0x1,%eax 0.00 : 21a8: 89 83 18 02 00 00 mov %eax,0x218(%rbx) : /* default settings */ : if (opt.def == IXGBE_INT_MSIX && : *aflags & IXGBE_FLAG_MSIX_CAPABLE) { : *aflags |= IXGBE_FLAG_MSIX_CAPABLE; : *aflags |= IXGBE_FLAG_MSI_CAPABLE; : } else if (opt.def == IXGBE_INT_MSI && 100.00 : 21ae: e9 c6 f2 ff ff jmpq 1479 Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/drivers/net/ethernet/intel/igb/igb.ko ---------------------------------------------- 20.00 ??:0 20.00 ??:0 20.00 ??:0 20.00 ??:0 20.00 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/drivers/net/ethernet/intel/igb/igb.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000000700 : 0.00 : 700: 53 push %rbx 0.00 : 731: 48 89 fb 48 83 mov $0x2b8,%edi 0.00 : 736: ec 10 66 xor %r10d,%r10d 0.00 : 739: 83 bf f8 xor %r9d,%r9d 0.00 : 73c: 03 00 test %edi,%edi 0.00 : 73e: 00 00 jle 78c 0.00 : 740: 48 8b 87 mov %rbx,%r8 0.00 : 743: a0 04 xor %edi,%edi 0.00 : 745: 00 00 74 xor %r10d,%r10d 0.00 : 748: 09 83 b8 xor %r9d,%r9d 0.00 : 74b: 88 00 00 00 01 mov $0xc030,%ecx 0.00 : 750: 74 0e 48 mov %rcx,%rax 0.00 : 753: 83 c4 10 5b c3 0f 1f add 0x570(%rbx),%rax 0.00 : 75a: 84 00 mov (%rax),%eax ??:0 20.00 : 75c: 00 00 test %eax,%eax 0.00 : 75e: 00 00 8b bf b8 02 00 mov 0x2c0(%r8),%rdx 0.00 : 765: 00 45 je 771 0.00 : 767: 31 d2 mov %eax,%eax 0.00 : 769: 45 31 c9 85 add %rax,0x68(%rdx) 0.00 : 76d: ff 7e 4c 49 add %rax,0x70(%rsi) 0.00 : 771: 89 d8 31 ff add 0x60(%rdx),%r10 0.00 : 775: 45 31 d2 45 add 0x58(%rdx),%r9 0.00 : 779: 31 c9 b9 add $0x1,%edi 0.00 : 77c: 30 c0 00 00 add $0x40,%rcx 0.00 : 780: 48 89 c8 48 add $0x8,%r8 0.00 : 784: 03 83 70 05 00 00 cmp %edi,0x2b8(%rbx) 0.00 : 78a: 8b 00 jg 750 0.00 : 78c: 85 c0 49 8b mov %r10,0x10(%rsi) 0.00 : 790: 90 c0 02 mov %r9,(%rsi) 0.00 : 793: 00 00 xor %edi,%edi 0.00 : 795: 74 0a 89 c0 48 01 42 mov 0x234(%rbx),%r8d 0.00 : 79c: 68 48 xor %ecx,%ecx 0.00 : 79e: 01 46 70 test %r8d,%r8d 0.00 : 7a1: 4c 03 jle 7c9 0.00 : 7a3: 52 60 xor %edi,%edi 0.00 : 7a5: 4c 03 xor %ecx,%ecx 0.00 : 7a7: 4a 58 xor %edx,%edx 0.00 : 7a9: 83 c7 01 48 83 c1 40 nopl 0x0(%rax) 0.00 : 7b0: 49 83 c0 08 39 bb b8 mov 0x238(%rbx,%rdx,8),%rax 0.00 : 7b7: 02 0.00 : 7b8: 00 00 7f c4 add $0x1,%rdx 0.00 : 7bc: 4c 89 56 10 add 0x58(%rax),%rdi 0.00 : 7c0: 4c 89 0e 31 add 0x50(%rax),%rcx 0.00 : 7c4: ff 44 8b cmp %edx,%r8d 0.00 : 7c7: 83 34 jg 7b0 0.00 : 7c9: 02 00 00 31 mov %rdi,0x18(%rsi) 0.00 : 7cd: c9 45 85 c0 mov %rcx,0x8(%rsi) 0.00 : 7d1: 7e 26 31 ff 31 c9 31 mov 0x570(%rbx),%rax 0.00 : 7d8: d2 0f 1f 80 00 00 00 mov 0x9c8(%rbx),%rdx 0.00 : 7df: 00 48 8b 84 d3 38 add $0x4000,%rax 0.00 : 7e5: 02 00 mov (%rax),%eax 0.00 : 7e7: 00 48 mov %eax,%eax 0.00 : 7e9: 83 c2 01 add %rdx,%rax 0.00 : 7ec: 48 03 78 58 48 03 48 mov 0xa98(%rbx),%rdx 0.00 : 7f3: 50 41 39 d0 7f e7 48 mov %rax,0x9c8(%rbx) 0.00 : 7fa: 89 7e 18 48 89 4e 08 mov 0x570(%rbx),%rax 0.00 : 801: 48 8b 83 70 05 00 add $0x4074,%rax 0.00 : 807: 00 48 mov (%rax),%eax 0.00 : 809: 8b 93 mov %eax,%eax 0.00 : 80b: c8 09 00 add %rdx,%rax 0.00 : 80e: 00 48 05 00 40 00 00 mov 0xab8(%rbx),%rdx 0.00 : 815: 8b 00 89 c0 48 01 d0 mov %rax,0xa98(%rbx) 0.00 : 81c: 48 8b 93 98 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 823: 48 89 83 c8 09 00 add $0x4088,%rax 0.00 : 829: 00 48 mov (%rax),%eax 0.00 : 82b: 8b 83 mov %eax,%eax 0.00 : 82d: 70 05 00 add %rdx,%rax 0.00 : 830: 00 48 05 74 40 00 00 mov %rax,0xab8(%rbx) 0.00 : 837: 8b 00 89 c0 48 01 d0 mov 0x570(%rbx),%rax 0.00 : 83e: 48 8b 93 b8 0a 00 add $0x408c,%rax 0.00 : 844: 00 48 mov (%rax),%eax 0.00 : 846: 89 83 98 0a 00 00 48 mov 0x570(%rbx),%rax 0.00 : 84d: 8b 83 70 05 00 00 48 mov 0xaa0(%rbx),%rdx 0.00 : 854: 05 88 40 00 00 8b add $0x4078,%rax 0.00 : 85a: 00 89 mov (%rax),%eax 0.00 : 85c: c0 48 mov %eax,%eax 0.00 : 85e: 01 d0 48 add %rdx,%rax 0.00 : 861: 89 83 b8 0a 00 00 48 mov 0xaa8(%rbx),%rdx 0.00 : 868: 8b 83 70 05 00 00 48 mov %rax,0xaa0(%rbx) 0.00 : 86f: 05 8c 40 00 00 8b 00 mov 0x570(%rbx),%rax 0.00 : 876: 48 8b 83 70 05 00 add $0x407c,%rax 0.00 : 87c: 00 48 mov (%rax),%eax 0.00 : 87e: 8b 93 mov %eax,%eax 0.00 : 880: a0 0a 00 add %rdx,%rax 0.00 : 883: 00 48 05 78 40 00 00 mov 0xae0(%rbx),%rdx 0.00 : 88a: 8b 00 89 c0 48 01 d0 mov %rax,0xaa8(%rbx) 0.00 : 891: 48 8b 93 a8 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 898: 48 89 83 a0 0a 00 add $0x40ac,%rax 0.00 : 89e: 00 48 mov (%rax),%eax 0.00 : 8a0: 8b 83 mov %eax,%eax 0.00 : 8a2: 70 05 00 add %rdx,%rax 0.00 : 8a5: 00 48 05 7c 40 00 00 mov 0xa68(%rbx),%rdx 0.00 : 8ac: 8b 00 89 c0 48 01 d0 mov %rax,0xae0(%rbx) 0.00 : 8b3: 48 8b 93 e0 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 8ba: 48 89 83 a8 0a 00 add $0x405c,%rax 0.00 : 8c0: 00 48 mov (%rax),%eax 0.00 : 8c2: 8b 83 mov %eax,%eax 0.00 : 8c4: 70 05 00 add %rdx,%rax 0.00 : 8c7: 00 48 05 ac 40 00 00 mov 0xa70(%rbx),%rdx 0.00 : 8ce: 8b 00 89 c0 48 01 d0 mov %rax,0xa68(%rbx) 0.00 : 8d5: 48 8b 93 68 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 8dc: 48 89 83 e0 0a 00 add $0x4060,%rax 0.00 : 8e2: 00 48 mov (%rax),%eax 0.00 : 8e4: 8b 83 mov %eax,%eax 0.00 : 8e6: 70 05 00 add %rdx,%rax 0.00 : 8e9: 00 48 05 5c 40 00 00 mov 0xa78(%rbx),%rdx 0.00 : 8f0: 8b 00 89 c0 48 01 d0 mov %rax,0xa70(%rbx) 0.00 : 8f7: 48 8b 93 70 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 8fe: 48 89 83 68 0a 00 add $0x4064,%rax 0.00 : 904: 00 48 mov (%rax),%eax 0.00 : 906: 8b 83 mov %eax,%eax 0.00 : 908: 70 05 00 add %rdx,%rax 0.00 : 90b: 00 48 05 60 40 00 00 mov 0xa80(%rbx),%rdx 0.00 : 912: 8b 00 89 c0 48 01 d0 mov %rax,0xa78(%rbx) 0.00 : 919: 48 8b 93 78 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 920: 48 89 83 70 0a 00 add $0x4068,%rax 0.00 : 926: 00 48 mov (%rax),%eax 0.00 : 928: 8b 83 mov %eax,%eax 0.00 : 92a: 70 05 00 add %rdx,%rax 0.00 : 92d: 00 48 05 64 40 00 00 mov 0xa88(%rbx),%rdx 0.00 : 934: 8b 00 89 c0 48 01 d0 mov %rax,0xa80(%rbx) 0.00 : 93b: 48 8b 93 80 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 942: 48 89 83 78 0a 00 add $0x406c,%rax 0.00 : 948: 00 48 mov (%rax),%eax 0.00 : 94a: 8b 83 mov %eax,%eax 0.00 : 94c: 70 05 00 add %rdx,%rax 0.00 : 94f: 00 48 05 68 40 00 00 mov 0xa90(%rbx),%rdx 0.00 : 956: 8b 00 89 c0 48 01 d0 mov %rax,0xa88(%rbx) 0.00 : 95d: 48 8b 93 88 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 964: 48 89 83 80 0a 00 add $0x4070,%rax 0.00 : 96a: 00 48 mov (%rax),%eax 0.00 : 96c: 8b 83 mov %eax,%eax 0.00 : 96e: 70 05 00 add %rdx,%rax 0.00 : 971: 00 48 05 6c 40 00 00 mov 0x9d8(%rbx),%rdx 0.00 : 978: 8b 00 89 c0 48 01 d0 mov %rax,0xa90(%rbx) 0.00 : 97f: 48 8b 93 90 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 986: 48 89 83 88 0a 00 add $0x4008,%rax 0.00 : 98c: 00 48 mov (%rax),%eax 0.00 : 98e: 8b 83 mov %eax,%eax 0.00 : 990: 70 05 00 add %rdx,%rax 0.00 : 993: 00 48 05 70 40 00 00 mov 0xa28(%rbx),%rdx 0.00 : 99a: 8b 00 89 c0 48 01 d0 mov %rax,0x9d8(%rbx) 0.00 : 9a1: 48 8b 93 d8 09 00 00 mov 0x570(%rbx),%rax 0.00 : 9a8: 48 89 83 90 0a 00 add $0x4038,%rax 0.00 : 9ae: 00 48 mov (%rax),%eax 0.00 : 9b0: 8b 83 mov %eax,%eax 0.00 : 9b2: 70 05 00 add %rdx,%rax 0.00 : 9b5: 00 48 05 08 40 00 00 mov %rax,0xa28(%rbx) 0.00 : 9bc: 8b 00 89 c0 48 01 d0 mov 0x570(%rbx),%rax 0.00 : 9c3: 48 8b 93 28 0a 00 add $0x4010,%rax 0.00 : 9c9: 00 48 mov (%rax),%eax 0.00 : 9cb: 89 83 mov %eax,%eax 0.00 : 9cd: d8 09 00 00 48 8b 83 add %rax,0x9e8(%rbx) 0.00 : 9d4: 70 05 00 00 add %rax,0x70(%rsi) 0.00 : 9d8: 48 05 38 40 00 00 8b mov 0x570(%rbx),%rax 0.00 : 9df: 00 89 c0 48 01 d0 48 mov 0x9f0(%rbx),%rdx 0.00 : 9e6: 89 83 28 0a 00 00 add $0x4014,%rax 0.00 : 9ec: 48 8b mov (%rax),%eax 0.00 : 9ee: 83 70 mov %eax,%eax 0.00 : 9f0: 05 00 00 add %rdx,%rax 0.00 : 9f3: 48 05 10 40 00 00 8b mov 0x9f8(%rbx),%rdx 0.00 : 9fa: 00 89 c0 48 01 83 e8 mov %rax,0x9f0(%rbx) 0.00 : a01: 09 00 00 48 01 46 70 mov 0x570(%rbx),%rax 0.00 : a08: 48 8b 83 70 05 00 add $0x4018,%rax 0.00 : a0e: 00 48 mov (%rax),%eax 0.00 : a10: 8b 93 mov %eax,%eax 0.00 : a12: f0 09 00 add %rdx,%rax 0.00 : a15: 00 48 05 14 40 00 00 mov 0xa00(%rbx),%rdx 0.00 : a1c: 8b 00 89 c0 48 01 d0 mov %rax,0x9f8(%rbx) 0.00 : a23: 48 8b 93 f8 09 00 00 mov 0x570(%rbx),%rax 0.00 : a2a: 48 89 83 f0 09 00 add $0x401c,%rax 0.00 : a30: 00 48 mov (%rax),%eax 0.00 : a32: 8b 83 mov %eax,%eax 0.00 : a34: 70 05 00 add %rdx,%rax 0.00 : a37: 00 48 05 18 40 00 00 mov 0xa08(%rbx),%rdx 0.00 : a3e: 8b 00 89 c0 48 01 d0 mov %rax,0xa00(%rbx) 0.00 : a45: 48 8b 93 00 0a 00 00 mov 0x570(%rbx),%rax 0.00 : a4c: 48 89 83 f8 09 00 add $0x4020,%rax 0.00 : a52: 00 48 mov (%rax),%eax 0.00 : a54: 8b 83 mov %eax,%eax 0.00 : a56: 70 05 00 add %rdx,%rax 0.00 : a59: 00 48 05 1c 40 00 00 mov 0xa18(%rbx),%rdx 0.00 : a60: 8b 00 89 c0 48 01 d0 mov %rax,0xa08(%rbx) 0.00 : a67: 48 8b 93 08 0a 00 00 mov 0x570(%rbx),%rax 0.00 : a6e: 48 89 83 00 0a 00 add $0x4030,%rax 0.00 : a74: 00 48 mov (%rax),%eax 0.00 : a76: 8b 83 mov %eax,%eax 0.00 : a78: 70 05 00 add %rdx,%rax 0.00 : a7b: 00 48 05 20 40 00 00 mov 0xa38(%rbx),%rdx 0.00 : a82: 8b 00 89 c0 48 01 d0 mov %rax,0xa18(%rbx) 0.00 : a89: 48 8b 93 18 0a 00 00 mov 0x570(%rbx),%rax 0.00 : a90: 48 89 83 08 0a 00 add $0x4040,%rax 0.00 : a96: 00 48 mov (%rax),%eax 0.00 : a98: 8b 83 mov %eax,%eax 0.00 : a9a: 70 05 00 add %rdx,%rax 0.00 : a9d: 00 48 05 30 40 00 00 mov 0xa40(%rbx),%rdx 0.00 : aa4: 8b 00 89 c0 48 01 d0 mov %rax,0xa38(%rbx) 0.00 : aab: 48 8b 93 38 0a 00 00 mov 0x570(%rbx),%rax 0.00 : ab2: 48 89 83 18 0a 00 add $0x4048,%rax 0.00 : ab8: 00 48 mov (%rax),%eax 20.00 : aba: 8b 83 mov %eax,%eax 0.00 : abc: 70 05 00 add %rdx,%rax 0.00 : abf: 00 48 05 40 40 00 00 mov 0xa48(%rbx),%rdx 0.00 : ac6: 8b 00 89 c0 48 01 d0 mov %rax,0xa40(%rbx) 0.00 : acd: 48 8b 93 40 0a 00 00 mov 0x570(%rbx),%rax 0.00 : ad4: 48 89 83 38 0a 00 add $0x404c,%rax 0.00 : ada: 00 48 mov (%rax),%eax 0.00 : adc: 8b 83 mov %eax,%eax 0.00 : ade: 70 05 00 add %rdx,%rax 0.00 : ae1: 00 48 05 48 40 00 00 mov 0xa50(%rbx),%rdx 0.00 : ae8: 8b 00 89 c0 48 01 d0 mov %rax,0xa48(%rbx) 0.00 : aef: 48 8b 93 48 0a 00 00 mov 0x570(%rbx),%rax 0.00 : af6: 48 89 83 40 0a 00 add $0x4050,%rax 0.00 : afc: 00 48 mov (%rax),%eax 0.00 : afe: 8b 83 mov %eax,%eax 0.00 : b00: 70 05 00 add %rdx,%rax 0.00 : b03: 00 48 05 4c 40 00 00 mov 0xa58(%rbx),%rdx 0.00 : b0a: 8b 00 89 c0 48 01 d0 mov %rax,0xa50(%rbx) 0.00 : b11: 48 8b 93 50 0a 00 00 mov 0x570(%rbx),%rax 0.00 : b18: 48 89 83 48 0a 00 add $0x4054,%rax 0.00 : b1e: 00 48 mov (%rax),%eax 0.00 : b20: 8b 83 mov %eax,%eax 0.00 : b22: 70 05 00 add %rdx,%rax 0.00 : b25: 00 48 05 50 40 00 00 mov 0xa60(%rbx),%rdx 0.00 : b2c: 8b 00 89 c0 48 01 d0 mov %rax,0xa58(%rbx) 0.00 : b33: 48 8b 93 58 0a 00 00 mov 0x570(%rbx),%rax 0.00 : b3a: 48 89 83 50 0a 00 add $0x4058,%rax 0.00 : b40: 00 48 mov (%rax),%eax 0.00 : b42: 8b 83 mov %eax,%eax 0.00 : b44: 70 05 00 add %rdx,%rax 0.00 : b47: 00 48 05 54 40 00 00 mov 0xab0(%rbx),%rdx 0.00 : b4e: 8b 00 89 c0 48 01 d0 mov %rax,0xa60(%rbx) 0.00 : b55: 48 8b 93 60 0a 00 00 mov 0x570(%rbx),%rax 0.00 : b5c: 48 89 83 58 0a 00 add $0x4080,%rax 0.00 : b62: 00 48 mov (%rax),%eax 0.00 : b64: 8b 83 mov %eax,%eax 0.00 : b66: 70 05 00 add %rdx,%rax 0.00 : b69: 00 48 05 58 40 00 00 mov 0xac0(%rbx),%rdx 0.00 : b70: 8b 00 89 c0 48 01 d0 mov %rax,0xab0(%rbx) 0.00 : b77: 48 8b 93 b0 0a 00 00 mov 0x570(%rbx),%rax 0.00 : b7e: 48 89 83 60 0a 00 add $0x4090,%rax 0.00 : b84: 00 48 mov (%rax),%eax 0.00 : b86: 8b 83 mov %eax,%eax 0.00 : b88: 70 05 00 add %rdx,%rax 0.00 : b8b: 00 48 05 80 40 00 00 mov %rax,0xac0(%rbx) 0.00 : b92: 8b 00 89 c0 48 01 d0 mov 0x570(%rbx),%rax 0.00 : b99: 48 8b 93 c0 0a 00 add $0x4094,%rax 0.00 : b9f: 00 48 mov (%rax),%eax 0.00 : ba1: 89 83 b0 0a 00 00 48 mov 0x570(%rbx),%rax 0.00 : ba8: 8b 83 70 05 00 00 48 mov 0xac8(%rbx),%rdx 0.00 : baf: 05 90 40 00 00 8b add $0x40a0,%rax 0.00 : bb5: 00 89 mov (%rax),%eax 0.00 : bb7: c0 48 mov %eax,%eax 0.00 : bb9: 01 d0 48 add %rdx,%rax 0.00 : bbc: 89 83 c0 0a 00 00 48 mov 0xad0(%rbx),%rdx 0.00 : bc3: 8b 83 70 05 00 00 48 mov %rax,0xac8(%rbx) 0.00 : bca: 05 94 40 00 00 8b 00 mov 0x570(%rbx),%rax 0.00 : bd1: 48 8b 83 70 05 00 add $0x40a4,%rax 0.00 : bd7: 00 48 mov (%rax),%eax 0.00 : bd9: 8b 93 mov %eax,%eax 0.00 : bdb: c8 0a 00 add %rdx,%rax 0.00 : bde: 00 48 05 a0 40 00 00 mov 0xad8(%rbx),%rdx 0.00 : be5: 8b 00 89 c0 48 01 d0 mov %rax,0xad0(%rbx) 0.00 : bec: 48 8b 93 d0 0a 00 00 mov 0x570(%rbx),%rax 0.00 : bf3: 48 89 83 c8 0a 00 add $0x40a8,%rax 0.00 : bf9: 00 48 mov (%rax),%eax 0.00 : bfb: 8b 83 mov %eax,%eax 0.00 : bfd: 70 05 00 add %rdx,%rax 0.00 : c00: 00 48 05 a4 40 00 00 mov 0xae8(%rbx),%rdx 0.00 : c07: 8b 00 89 c0 48 01 d0 mov %rax,0xad8(%rbx) 0.00 : c0e: 48 8b 93 d8 0a 00 00 mov 0x570(%rbx),%rax 0.00 : c15: 48 89 83 d0 0a 00 add $0x40b0,%rax 0.00 : c1b: 00 48 mov (%rax),%eax 0.00 : c1d: 8b 83 mov %eax,%eax 0.00 : c1f: 70 05 00 add %rdx,%rax 0.00 : c22: 00 48 05 a8 40 00 00 mov 0xb08(%rbx),%rdx 0.00 : c29: 8b 00 89 c0 48 01 d0 mov %rax,0xae8(%rbx) 0.00 : c30: 48 8b 93 e8 0a 00 00 mov 0x570(%rbx),%rax 0.00 : c37: 48 89 83 d8 0a 00 add $0x40c4,%rax 0.00 : c3d: 00 48 mov (%rax),%eax 0.00 : c3f: 8b 83 mov %eax,%eax 0.00 : c41: 70 05 00 add %rdx,%rax 0.00 : c44: 00 48 05 b0 40 00 00 mov 0xb10(%rbx),%rdx 0.00 : c4b: 8b 00 89 c0 48 01 d0 mov %rax,0xb08(%rbx) 0.00 : c52: 48 8b 93 08 0b 00 00 mov 0x570(%rbx),%rax 0.00 : c59: 48 89 83 e8 0a 00 add $0x40cc,%rax 0.00 : c5f: 00 48 mov (%rax),%eax 0.00 : c61: 8b 83 mov %eax,%eax 0.00 : c63: 70 05 00 add %rdx,%rax 0.00 : c66: 00 48 05 c4 40 00 00 mov 0xb18(%rbx),%rdx 0.00 : c6d: 8b 00 89 c0 48 01 d0 mov %rax,0xb10(%rbx) 0.00 : c74: 48 8b 93 10 0b 00 00 mov 0x570(%rbx),%rax 0.00 : c7b: 48 89 83 08 0b 00 add $0x40d0,%rax 0.00 : c81: 00 48 mov (%rax),%eax 0.00 : c83: 8b 83 mov %eax,%eax 0.00 : c85: 70 05 00 add %rdx,%rax 0.00 : c88: 00 48 05 cc 40 00 00 mov 0xb28(%rbx),%rdx 0.00 : c8f: 8b 00 89 c0 48 01 d0 mov %rax,0xb18(%rbx) 0.00 : c96: 48 8b 93 18 0b 00 00 mov 0x570(%rbx),%rax 0.00 : c9d: 48 89 83 10 0b 00 add $0x40d8,%rax 0.00 : ca3: 00 48 mov (%rax),%eax 0.00 : ca5: 8b 83 mov %eax,%eax 0.00 : ca7: 70 05 00 add %rdx,%rax 0.00 : caa: 00 48 05 d0 40 00 00 mov 0xb30(%rbx),%rdx 0.00 : cb1: 8b 00 89 c0 48 01 d0 mov %rax,0xb28(%rbx) 0.00 : cb8: 48 8b 93 28 0b 00 00 mov 0x570(%rbx),%rax 0.00 : cbf: 48 89 83 18 0b 00 add $0x40dc,%rax 0.00 : cc5: 00 48 mov (%rax),%eax 20.00 : cc7: 8b 83 mov %eax,%eax 0.00 : cc9: 70 05 00 add %rdx,%rax 0.00 : ccc: 00 48 05 d8 40 00 00 mov 0xb38(%rbx),%rdx 0.00 : cd3: 8b 00 89 c0 48 01 d0 mov %rax,0xb30(%rbx) 0.00 : cda: 48 8b 93 30 0b 00 00 mov 0x570(%rbx),%rax 0.00 : ce1: 48 89 83 28 0b 00 add $0x40e0,%rax 0.00 : ce7: 00 48 mov (%rax),%eax 0.00 : ce9: 8b 83 mov %eax,%eax 0.00 : ceb: 70 05 00 add %rdx,%rax 0.00 : cee: 00 48 05 dc 40 00 00 mov 0xb40(%rbx),%rdx 0.00 : cf5: 8b 00 89 c0 48 01 d0 mov %rax,0xb38(%rbx) 0.00 : cfc: 48 8b 93 38 0b 00 00 mov 0x570(%rbx),%rax 0.00 : d03: 48 89 83 30 0b 00 add $0x40e4,%rax 0.00 : d09: 00 48 mov (%rax),%eax 0.00 : d0b: 8b 83 mov %eax,%eax 0.00 : d0d: 70 05 00 add %rdx,%rax 0.00 : d10: 00 48 05 e0 40 00 00 mov 0xb48(%rbx),%rdx 0.00 : d17: 8b 00 89 c0 48 01 d0 mov %rax,0xb40(%rbx) 0.00 : d1e: 48 8b 93 40 0b 00 00 mov 0x570(%rbx),%rax 0.00 : d25: 48 89 83 38 0b 00 add $0x40e8,%rax 0.00 : d2b: 00 48 mov (%rax),%eax 0.00 : d2d: 8b 83 mov %eax,%eax 0.00 : d2f: 70 05 00 add %rdx,%rax 0.00 : d32: 00 48 05 e4 40 00 00 mov 0xb50(%rbx),%rdx 0.00 : d39: 8b 00 89 c0 48 01 d0 mov %rax,0xb48(%rbx) 0.00 : d40: 48 8b 93 48 0b 00 00 mov 0x570(%rbx),%rax 0.00 : d47: 48 89 83 40 0b 00 add $0x40ec,%rax 0.00 : d4d: 00 48 mov (%rax),%eax 0.00 : d4f: 8b 83 mov %eax,%eax 0.00 : d51: 70 05 00 add %rdx,%rax 0.00 : d54: 00 48 05 e8 40 00 00 mov 0xb58(%rbx),%rdx 0.00 : d5b: 8b 00 89 c0 48 01 d0 mov %rax,0xb50(%rbx) 0.00 : d62: 48 8b 93 50 0b 00 00 mov 0x570(%rbx),%rax 0.00 : d69: 48 89 83 48 0b 00 add $0x40f0,%rax 0.00 : d6f: 00 48 mov (%rax),%eax 0.00 : d71: 8b 83 mov %eax,%eax 0.00 : d73: 70 05 00 add %rdx,%rax 0.00 : d76: 00 48 05 ec 40 00 00 mov 0xb60(%rbx),%rdx 0.00 : d7d: 8b 00 89 c0 48 01 d0 mov %rax,0xb58(%rbx) 0.00 : d84: 48 8b 93 58 0b 00 00 mov 0x570(%rbx),%rax 0.00 : d8b: 48 89 83 50 0b 00 add $0x40f4,%rax 0.00 : d91: 00 48 mov (%rax),%eax 0.00 : d93: 8b 83 mov %eax,%eax 0.00 : d95: 70 05 00 add %rdx,%rax 0.00 : d98: 00 48 05 f0 40 00 00 mov 0xb20(%rbx),%rdx 0.00 : d9f: 8b 00 89 c0 48 01 d0 mov %rax,0xb60(%rbx) 0.00 : da6: 48 8b 93 60 0b 00 00 mov 0x570(%rbx),%rax 0.00 : dad: 48 89 83 58 0b 00 add $0x40d4,%rax 0.00 : db3: 00 48 mov (%rax),%eax 0.00 : db5: 8b 83 mov %eax,%eax 0.00 : db7: 70 05 00 add %rdx,%rax 0.00 : dba: 00 48 05 f4 40 00 00 mov 0xa10(%rbx),%rdx 0.00 : dc1: 8b 00 89 c0 48 01 d0 mov %rax,0xb20(%rbx) 0.00 : dc8: 48 8b 93 20 0b 00 00 mov 0x570(%rbx),%rax 0.00 : dcf: 48 89 83 60 0b 00 add $0x4028,%rax 0.00 : dd5: 00 48 mov (%rax),%eax 0.00 : dd7: 8b 83 mov %eax,%eax 0.00 : dd9: 70 05 00 add %rdx,%rax 0.00 : ddc: 00 48 05 d4 40 00 00 mov 0x9d0(%rbx),%rdx 0.00 : de3: 8b 00 89 c0 48 01 d0 mov %rax,0xa10(%rbx) 0.00 : dea: 48 8b 93 10 0a 00 00 mov 0x570(%rbx),%rax 0.00 : df1: 48 89 83 20 0b 00 add $0x4004,%rax 0.00 : df7: 00 48 mov (%rax),%eax 0.00 : df9: 8b 83 mov %eax,%eax 0.00 : dfb: 70 05 00 add %rdx,%rax 0.00 : dfe: 00 48 05 28 40 00 00 mov %rax,0x9d0(%rbx) 0.00 : e05: 8b 00 89 c0 48 01 d0 mov 0x570(%rbx),%rax 0.00 : e0c: 48 8b 93 d0 add $0x18,%rax 0.00 : e10: 09 00 mov (%rax),%eax 0.00 : e12: 00 48 89 83 10 test $0xc00000,%eax 0.00 : e17: 0a 00 jne e6c 0.00 : e19: 00 48 8b 83 70 05 00 mov 0x570(%rbx),%rax 0.00 : e20: 00 48 05 04 40 00 00 mov 0x9e0(%rbx),%rdx 0.00 : e27: 8b 00 89 c0 48 01 add $0x400c,%rax 0.00 : e2d: d0 48 mov (%rax),%eax 0.00 : e2f: 89 83 mov %eax,%eax 0.00 : e31: d0 09 00 add %rdx,%rax 0.00 : e34: 00 48 8b 83 70 05 00 mov %rax,0x9e0(%rbx) 0.00 : e3b: 00 48 83 c0 18 8b mov 0x5e4(%rbx),%eax 0.00 : e41: 00 a9 00 sub $0x5,%eax 0.00 : e44: 00 c0 00 cmp $0x1,%eax 0.00 : e47: 75 53 jbe e6c 0.00 : e49: 48 8b 83 70 05 00 00 mov 0x570(%rbx),%rdx 0.00 : e50: 48 8b 93 e0 09 00 00 mov 0xa20(%rbx),%rax 0.00 : e57: 48 05 0c 40 00 00 8b add $0x4034,%rdx 0.00 : e5e: 00 89 mov (%rdx),%edx 20.00 : e60: c0 48 mov %edx,%edx 0.00 : e62: 01 d0 48 add %rax,%rdx 0.00 : e65: 89 83 e0 09 00 00 8b mov %rdx,0xa20(%rbx) 0.00 : e6c: 83 e4 05 00 00 83 e8 mov 0x570(%rbx),%rax 0.00 : e73: 05 83 f8 01 76 23 48 mov 0xb68(%rbx),%rdx 0.00 : e7a: 8b 93 70 05 00 00 add $0x40f8,%rax 0.00 : e80: 48 8b mov (%rax),%eax 0.00 : e82: 83 20 mov %eax,%eax 0.00 : e84: 0a 00 00 add %rdx,%rax 0.00 : e87: 48 81 c2 34 40 00 00 mov 0xb70(%rbx),%rdx 0.00 : e8e: 8b 12 89 d2 48 01 c2 mov %rax,0xb68(%rbx) 0.00 : e95: 48 89 93 20 0a 00 00 mov 0x570(%rbx),%rax 0.00 : e9c: 48 8b 83 70 05 00 add $0x40fc,%rax 0.00 : ea2: 00 48 mov (%rax),%eax 0.00 : ea4: 8b 93 mov %eax,%eax 0.00 : ea6: 68 0b 00 add %rdx,%rax 0.00 : ea9: 00 48 05 f8 40 00 00 mov 0xb78(%rbx),%rdx 0.00 : eb0: 8b 00 89 c0 48 01 d0 mov %rax,0xb70(%rbx) 0.00 : eb7: 48 8b 93 70 0b 00 00 mov 0x570(%rbx),%rax 0.00 : ebe: 48 89 83 68 0b 00 add $0x4100,%rax 0.00 : ec4: 00 48 mov (%rax),%eax 0.00 : ec6: 8b 83 mov %eax,%eax 0.00 : ec8: 70 05 00 add %rdx,%rax 0.00 : ecb: 00 48 05 fc 40 00 00 mov 0xbb8(%rbx),%rdx 0.00 : ed2: 8b 00 89 c0 48 01 d0 mov %rax,0xb78(%rbx) 0.00 : ed9: 48 8b 93 78 0b 00 00 mov 0x570(%rbx),%rax 0.00 : ee0: 48 89 83 70 0b 00 add $0x4124,%rax 0.00 : ee6: 00 48 mov (%rax),%eax 20.00 : ee8: 8b 83 mov %eax,%eax 0.00 : eea: 70 05 00 add %rdx,%rax 0.00 : eed: 00 48 05 00 41 00 00 mov 0xb80(%rbx),%rdx 0.00 : ef4: 8b 00 89 c0 48 01 d0 mov %rax,0xbb8(%rbx) 0.00 : efb: 48 8b 93 b8 0b 00 00 mov 0x570(%rbx),%rax 0.00 : f02: 48 89 83 78 0b 00 add $0x4104,%rax 0.00 : f08: 00 48 mov (%rax),%eax 0.00 : f0a: 8b 83 mov %eax,%eax 0.00 : f0c: 70 05 00 add %rdx,%rax 0.00 : f0f: 00 48 05 24 41 00 00 mov 0xb88(%rbx),%rdx 0.00 : f16: 8b 00 89 c0 48 01 d0 mov %rax,0xb80(%rbx) 0.00 : f1d: 48 8b 93 80 0b 00 00 mov 0x570(%rbx),%rax 0.00 : f24: 48 89 83 b8 0b 00 add $0x4108,%rax 0.00 : f2a: 00 48 mov (%rax),%eax 0.00 : f2c: 8b 83 mov %eax,%eax 0.00 : f2e: 70 05 00 add %rdx,%rax 0.00 : f31: 00 48 05 04 41 00 00 mov 0xb90(%rbx),%rdx 0.00 : f38: 8b 00 89 c0 48 01 d0 mov %rax,0xb88(%rbx) 0.00 : f3f: 48 8b 93 88 0b 00 00 mov 0x570(%rbx),%rax 0.00 : f46: 48 89 83 80 0b 00 add $0x410c,%rax 0.00 : f4c: 00 48 mov (%rax),%eax 0.00 : f4e: 8b 83 mov %eax,%eax 0.00 : f50: 70 05 00 add %rdx,%rax 0.00 : f53: 00 48 05 08 41 00 00 mov 0xb98(%rbx),%rdx 0.00 : f5a: 8b 00 89 c0 48 01 d0 mov %rax,0xb90(%rbx) 0.00 : f61: 48 8b 93 90 0b 00 00 mov 0x570(%rbx),%rax 0.00 : f68: 48 89 83 88 0b 00 add $0x4110,%rax 0.00 : f6e: 00 48 mov (%rax),%eax 0.00 : f70: 8b 83 mov %eax,%eax 0.00 : f72: 70 05 00 add %rdx,%rax 0.00 : f75: 00 48 05 0c 41 00 00 mov 0xba0(%rbx),%rdx 0.00 : f7c: 8b 00 89 c0 48 01 d0 mov %rax,0xb98(%rbx) 0.00 : f83: 48 8b 93 98 0b 00 00 mov 0x570(%rbx),%rax 0.00 : f8a: 48 89 83 90 0b 00 add $0x4118,%rax 0.00 : f90: 00 48 mov (%rax),%eax 0.00 : f92: 8b 83 mov %eax,%eax 0.00 : f94: 70 05 00 add %rdx,%rax 0.00 : f97: 00 48 05 10 41 00 00 mov 0xba8(%rbx),%rdx 0.00 : f9e: 8b 00 89 c0 48 01 d0 mov %rax,0xba0(%rbx) 0.00 : fa5: 48 8b 93 a0 0b 00 00 mov 0x570(%rbx),%rax 0.00 : fac: 48 89 83 98 0b 00 add $0x411c,%rax 0.00 : fb2: 00 48 mov (%rax),%eax 0.00 : fb4: 8b 83 mov %eax,%eax 0.00 : fb6: 70 05 00 add %rdx,%rax 0.00 : fb9: 00 48 05 18 41 00 00 mov 0xbb0(%rbx),%rdx 0.00 : fc0: 8b 00 89 c0 48 01 d0 mov %rax,0xba8(%rbx) 0.00 : fc7: 48 8b 93 a8 0b 00 00 mov 0x570(%rbx),%rax 0.00 : fce: 48 89 83 a0 0b 00 add $0x4120,%rax 0.00 : fd4: 00 48 mov (%rax),%eax 0.00 : fd6: 8b 83 mov %eax,%eax 0.00 : fd8: 70 05 00 add %rdx,%rax 0.00 : fdb: 00 48 05 1c 41 00 00 mov %rax,0xbb0(%rbx) 0.00 : fe2: 8b 00 89 c0 48 01 d0 mov 0xaa8(%rbx),%rax 0.00 : fe9: 48 8b 93 b0 mov %rax,0x40(%rsi) 0.00 : fed: 0b 00 00 48 89 83 a8 mov 0xa10(%rbx),%rax 0.00 : ff4: 0b 00 00 48 mov %rax,0x48(%rsi) 0.00 : ff8: 8b 83 70 05 00 00 48 mov 0x9c8(%rbx),%rax 0.00 : fff: 05 20 41 00 00 8b 00 add 0x9e0(%rbx),%rax 0.00 : 1006: 89 c0 48 01 d0 48 89 add 0x9d0(%rbx),%rax 0.00 : 100d: 83 b0 0b 00 00 48 8b add 0xad0(%rbx),%rax 0.00 : 1014: 83 a8 0a 00 00 48 89 add 0xae0(%rbx),%rax 0.00 : 101b: 46 40 48 8b 83 10 0a add 0xa30(%rbx),%rax 0.00 : 1022: 00 00 48 89 mov %rax,0x20(%rsi) 0.00 : 1026: 46 48 48 8b 83 c8 09 mov 0xae0(%rbx),%rax 0.00 : 102d: 00 00 48 03 83 e0 09 add 0xad0(%rbx),%rax 0.00 : 1034: 00 00 48 03 mov %rax,0x50(%rsi) 0.00 : 1038: 83 d0 09 00 00 48 03 mov 0x9c8(%rbx),%rax 0.00 : 103f: 83 d0 0a 00 mov %rax,0x60(%rsi) 0.00 : 1043: 00 48 03 83 e0 0a 00 mov 0x9d0(%rbx),%rax 0.00 : 104a: 00 48 03 83 mov %rax,0x68(%rsi) 0.00 : 104e: 30 0a 00 00 48 89 46 mov 0x9e8(%rbx),%rax 0.00 : 1055: 20 48 8b 83 mov %rax,0x78(%rsi) 0.00 : 1059: e0 0a 00 00 48 03 83 mov 0xa08(%rbx),%rax 0.00 : 1060: d0 0a 00 00 48 89 46 add 0x9f8(%rbx),%rax 0.00 : 1067: 50 48 8b 83 mov %rax,0x28(%rsi) 0.00 : 106b: c8 09 00 00 48 89 46 mov 0x9f8(%rbx),%rax 0.00 : 1072: 60 48 8b 83 d0 09 00 mov %rax,0x80(%rsi) 0.00 : 1079: 00 48 89 46 68 48 8b mov 0xa08(%rbx),%rax 0.00 : 1080: 83 e8 09 00 00 48 89 mov %rax,0xa0(%rsi) 0.00 : 1087: 46 78 48 8b 83 08 0a mov 0xa20(%rbx),%rax 0.00 : 108e: 00 00 48 03 83 f8 09 mov %rax,0x88(%rsi) 0.00 : 1095: 00 00 48 89 46 28 48 cmpl $0x1,0x8bc(%rbx) 0.00 : 109c: 8b 83 f8 09 00 00 je 11b0 0.00 : 10a2: 48 89 86 80 00 00 00 mov 0x570(%rbx),%rax 0.00 : 10a9: 48 8b 83 08 0a 00 00 mov 0xb00(%rbx),%rdx 0.00 : 10b0: 48 89 86 a0 00 00 add $0x40bc,%rax 0.00 : 10b6: 00 48 mov (%rax),%eax 0.00 : 10b8: 8b 83 mov %eax,%eax 0.00 : 10ba: 20 0a 00 add %rdx,%rax 0.00 : 10bd: 00 48 89 86 88 00 00 mov 0xaf0(%rbx),%rdx 0.00 : 10c4: 00 83 bb bc 08 00 00 mov %rax,0xb00(%rbx) 0.00 : 10cb: 01 0f 84 0e 01 00 00 mov 0x570(%rbx),%rax 0.00 : 10d2: 48 8b 83 70 05 00 add $0x40b4,%rax 0.00 : 10d8: 00 48 mov (%rax),%eax 0.00 : 10da: 8b 93 mov %eax,%eax 0.00 : 10dc: 00 0b 00 add %rdx,%rax 0.00 : 10df: 00 48 05 bc 40 00 00 mov 0xaf8(%rbx),%rdx 0.00 : 10e6: 8b 00 89 c0 48 01 d0 mov %rax,0xaf0(%rbx) 0.00 : 10ed: 48 8b 93 f0 0a 00 00 mov 0x570(%rbx),%rax 0.00 : 10f4: 48 89 83 00 0b 00 add $0x40b8,%rax 0.00 : 10fa: 00 48 mov (%rax),%eax 0.00 : 10fc: 8b 83 mov %eax,%eax 0.00 : 10fe: 70 05 00 add %rdx,%rax 0.00 : 1101: 00 48 05 b4 40 00 00 mov %rax,0xaf8(%rbx) 0.00 : 1108: 8b 00 89 c0 48 01 d0 mov 0x570(%rbx),%rax 0.00 : 110f: 48 8b 93 f8 0a 00 add $0x5820,%rax 0.00 : 1115: 00 48 mov (%rax),%eax 0.00 : 1117: 89 83 f0 0a 00 test $0x10000000,%eax 0.00 : 111c: 00 48 8b 83 70 05 je 722 0.00 : 1122: 00 00 48 05 b8 40 00 mov 0x570(%rbx),%rax 0.00 : 1129: 00 8b 00 89 c0 48 01 mov 0xc28(%rbx),%rdx 0.00 : 1130: d0 48 89 83 f8 0a add $0x8fe4,%rax 0.00 : 1136: 00 00 mov (%rax),%eax 0.00 : 1138: 48 8b mov %eax,%eax 0.00 : 113a: 83 70 05 add %rdx,%rax 0.00 : 113d: 00 00 48 05 20 58 00 mov 0xc30(%rbx),%rdx 0.00 : 1144: 00 8b 00 a9 00 00 00 mov %rax,0xc28(%rbx) 0.00 : 114b: 10 0f 84 00 f6 ff ff mov 0x570(%rbx),%rax 0.00 : 1152: 48 8b 83 70 05 00 add $0x415c,%rax 0.00 : 1158: 00 48 mov (%rax),%eax 0.00 : 115a: 8b 93 mov %eax,%eax 0.00 : 115c: 28 0c 00 add %rdx,%rax 0.00 : 115f: 00 48 05 e4 8f 00 00 mov 0xc38(%rbx),%rdx 0.00 : 1166: 8b 00 89 c0 48 01 d0 mov %rax,0xc30(%rbx) 0.00 : 116d: 48 8b 93 30 0c 00 00 mov 0x570(%rbx),%rax 0.00 : 1174: 48 89 83 28 0c 00 add $0x8fe0,%rax 0.00 : 117a: 00 48 mov (%rax),%eax 0.00 : 117c: 8b 83 mov %eax,%eax 0.00 : 117e: 70 05 00 add %rdx,%rax 0.00 : 1181: 00 48 05 5c 41 00 00 mov 0xc40(%rbx),%rdx 0.00 : 1188: 8b 00 89 c0 48 01 d0 mov %rax,0xc38(%rbx) 0.00 : 118f: 48 8b 93 38 0c 00 00 mov 0x570(%rbx),%rax 0.00 : 1196: 48 89 83 30 0c 00 add $0x4158,%rax 0.00 : 119c: 00 48 mov (%rax),%eax 0.00 : 119e: 8b 83 mov %eax,%eax 0.00 : 11a0: 70 05 00 add %rdx,%rax 0.00 : 11a3: 00 48 05 e0 8f 00 00 mov %rax,0xc40(%rbx) 0.00 : 11aa: 8b 00 89 c0 add $0x10,%rsp 0.00 : 11ae: 48 pop %rbx 0.00 : 11af: 01 retq 0.00 : 11b0: d0 48 8b 93 40 0c 00 cmpw $0x3e8,0x3f8(%rbx) 0.00 : 11b7: 00 48 0.00 : 11b9: 89 83 38 0c 00 00 jne 10a2 0.00 : 11bf: 48 8b 83 70 05 00 00 mov 0x860(%rbx),%rax 0.00 : 11c6: 48 05 58 test %rax,%rax 0.00 : 11c9: 41 00 je 11e6 0.00 : 11cb: 00 8b 00 89 c0 lea 0xe(%rsp),%rdx 0.00 : 11d0: 48 01 d0 48 89 83 40 lea 0x568(%rbx),%rdi 0.00 : 11d7: 0c 00 00 48 83 mov $0xa,%esi 0.00 : 11dc: c4 10 callq *%rax 0.00 : 11de: 5b c3 test %eax,%eax 0.00 : 11e0: 66 81 bb f8 03 00 jne 10a2 0.00 : 11e6: 00 e8 03 0f 85 movzbl 0xe(%rsp),%eax 0.00 : 11eb: e3 fe ff ff 48 mov %ax,0xe(%rsp) 0.00 : 11f0: 8b 83 60 movzwl %ax,%eax 0.00 : 11f3: 08 00 00 48 85 c0 add %eax,0xcf8(%rbx) 0.00 : 11f9: 74 1b 48 8d 54 jmpq 10a2 : 11fe: 24 0e xchg %ax,%ax : 1200: 48 8d bb 68 sub $0x18,%rsp : 1204: 05 00 00 be mov %rbx,(%rsp) : 1208: 0a 00 00 00 ff mov %rbp,0x8(%rsp) : 120d: d0 85 c0 mov %rdi,%rbx : 1210: 0f 85 bc fe ff mov %r12,0x10(%rsp) : 1215: ff 0f b6 44 mov 0x20(%rdi),%rsi : 1219: 24 0e 66 mov (%rdi),%rbp : 121c: 89 44 24 test %rsi,%rsi : 121f: 0e 0f b7 c0 01 83 je 13b0 : 1225: f8 0c 00 00 e9 a4 fe testb $0x3,0x220(%rbp) : 122c: ff ff je 127b Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 25.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:146 25.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:164 25.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:168 25.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:304 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000674520 : : * : * Only works for shared buffers. : */ : static PrivateRefCountEntry* : GetPrivateRefCountEntry(Buffer buffer, bool create, bool do_move) : { 0.00 : 674520: 55 push %rbp 0.00 : 674521: 48 89 e5 mov %rsp,%rbp /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:146 25.00 : 674524: 41 57 push %r15 0.00 : 674526: 41 89 f7 mov %esi,%r15d : */ : for (i = 0; i < REFCOUNT_ARRAY_ENTRIES; i++) : { : res = &PrivateRefCountArray[i]; : : if (res->buffer == buffer) 0.00 : 674529: 89 fe mov %edi,%esi : * : * Only works for shared buffers. : */ : static PrivateRefCountEntry* : GetPrivateRefCountEntry(Buffer buffer, bool create, bool do_move) : { 0.00 : 67452b: 41 56 push %r14 0.00 : 67452d: 41 55 push %r13 0.00 : 67452f: 41 54 push %r12 0.00 : 674531: 41 89 d4 mov %edx,%r12d : */ : for (i = 0; i < REFCOUNT_ARRAY_ENTRIES; i++) : { : res = &PrivateRefCountArray[i]; : : if (res->buffer == buffer) 0.00 : 674534: ba c0 d0 b7 00 mov $0xb7d0c0,%edx : * : * Only works for shared buffers. : */ : static PrivateRefCountEntry* : GetPrivateRefCountEntry(Buffer buffer, bool create, bool do_move) : { 0.00 : 674539: 53 push %rbx : */ : for (i = 0; i < REFCOUNT_ARRAY_ENTRIES; i++) : { : res = &PrivateRefCountArray[i]; : : if (res->buffer == buffer) 0.00 : 67453a: 31 db xor %ebx,%ebx : * : * Only works for shared buffers. : */ : static PrivateRefCountEntry* : GetPrivateRefCountEntry(Buffer buffer, bool create, bool do_move) : { 0.00 : 67453c: 48 83 ec 18 sub $0x18,%rsp 0.00 : 674540: 89 7d c4 mov %edi,-0x3c(%rbp) : PrivateRefCountEntry *res; : PrivateRefCountEntry *free = NULL; : bool found = false; 0.00 : 674543: c6 45 d7 00 movb $0x0,-0x29(%rbp) 0.00 : 674547: eb 14 jmp 67455d 0.00 : 674549: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : : if (res->buffer == buffer) : return res; : : /* Remember where to put a new refcount, should it become necessary. */ : if (free == NULL && res->buffer == InvalidBuffer) 0.00 : 674550: 48 83 c2 08 add $0x8,%rdx : : /* : * First search for references in the array, that'll be sufficient in the : * majority of cases. : */ : for (i = 0; i < REFCOUNT_ARRAY_ENTRIES; i++) 0.00 : 674554: 48 81 fa 00 d1 b7 00 cmp $0xb7d100,%rdx 0.00 : 67455b: 74 2b je 674588 : { : res = &PrivateRefCountArray[i]; : : if (res->buffer == buffer) /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:164 25.00 : 67455d: 8b 0a mov (%rdx),%ecx 0.00 : 67455f: 48 89 d0 mov %rdx,%rax 0.00 : 674562: 39 f1 cmp %esi,%ecx 0.00 : 674564: 0f 84 c8 00 00 00 je 674632 : return res; : : /* Remember where to put a new refcount, should it become necessary. */ : if (free == NULL && res->buffer == InvalidBuffer) 0.00 : 67456a: 48 85 db test %rbx,%rbx 0.00 : 67456d: 75 e1 jne 674550 0.00 : 67456f: 85 c9 test %ecx,%ecx /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:168 25.00 : 674571: 48 0f 44 da cmove %rdx,%rbx 0.00 : 674575: 48 83 c2 08 add $0x8,%rdx : : /* : * First search for references in the array, that'll be sufficient in the : * majority of cases. : */ : for (i = 0; i < REFCOUNT_ARRAY_ENTRIES; i++) 0.00 : 674579: 48 81 fa 00 d1 b7 00 cmp $0xb7d100,%rdx 0.00 : 674580: 75 db jne 67455d 0.00 : 674582: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : : /* : * Look up the buffer in the hashtable if we've previously overflowed into : * it. : */ : if (PrivateRefCountOverflowed > 0) 0.00 : 674588: 8b 05 e2 8a 50 00 mov 0x508ae2(%rip),%eax # b7d070 : /* : * By here we know that the buffer, if already pinned, isn't residing in : * the array. : */ : res = NULL; : found = false; 0.00 : 67458e: c6 45 d7 00 movb $0x0,-0x29(%rbp) : : /* : * Look up the buffer in the hashtable if we've previously overflowed into : * it. : */ : if (PrivateRefCountOverflowed > 0) 0.00 : 674592: 85 c0 test %eax,%eax 0.00 : 674594: 0f 8e ee 00 00 00 jle 674688 : { : res = hash_search(PrivateRefCountHash, 0.00 : 67459a: 4c 8d 75 d7 lea -0x29(%rbp),%r14 0.00 : 67459e: 48 8b 3d d3 8a 50 00 mov 0x508ad3(%rip),%rdi # b7d078 0.00 : 6745a5: 48 8d 75 c4 lea -0x3c(%rbp),%rsi 0.00 : 6745a9: 31 d2 xor %edx,%edx 0.00 : 6745ab: 4c 89 f1 mov %r14,%rcx 0.00 : 6745ae: e8 ed 00 11 00 callq 7846a0 : (void *) &buffer, : HASH_FIND, : &found); : } : : if (!found) 0.00 : 6745b3: 80 7d d7 00 cmpb $0x0,-0x29(%rbp) : * Look up the buffer in the hashtable if we've previously overflowed into : * it. : */ : if (PrivateRefCountOverflowed > 0) : { : res = hash_search(PrivateRefCountHash, 0.00 : 6745b7: 49 89 c5 mov %rax,%r13 : (void *) &buffer, : HASH_FIND, : &found); : } : : if (!found) 0.00 : 6745ba: 0f 84 c8 00 00 00 je 674688 : : } : } : else : { : if (!do_move) 0.00 : 6745c0: 45 84 e4 test %r12b,%r12b 0.00 : 6745c3: 74 6d je 674632 : { : return res; : } : else if (found && free != NULL) 0.00 : 6745c5: 48 85 db test %rbx,%rbx 0.00 : 6745c8: 75 7e jne 674648 : */ : PrivateRefCountEntry *arrayent; : PrivateRefCountEntry *hashent; : : /* select victim slot */ : arrayent = &PrivateRefCountArray[ 0.00 : 6745ca: 8b 05 b0 8a 50 00 mov 0x508ab0(%rip),%eax # b7d080 : PrivateRefCountClock++ % REFCOUNT_ARRAY_ENTRIES]; : Assert(arrayent->buffer != InvalidBuffer); : : /* enter victim entry into the hashtable */ : hashent = hash_search(PrivateRefCountHash, 0.00 : 6745d0: 48 8b 3d a1 8a 50 00 mov 0x508aa1(%rip),%rdi # b7d078 0.00 : 6745d7: 4c 89 f1 mov %r14,%rcx 0.00 : 6745da: ba 01 00 00 00 mov $0x1,%edx : */ : PrivateRefCountEntry *arrayent; : PrivateRefCountEntry *hashent; : : /* select victim slot */ : arrayent = &PrivateRefCountArray[ 0.00 : 6745df: 49 89 c4 mov %rax,%r12 0.00 : 6745e2: 83 c0 01 add $0x1,%eax 0.00 : 6745e5: 41 83 e4 07 and $0x7,%r12d 0.00 : 6745e9: 89 05 91 8a 50 00 mov %eax,0x508a91(%rip) # b7d080 0.00 : 6745ef: 4a 8d 1c e5 c0 d0 b7 lea 0xb7d0c0(,%r12,8),%rbx 0.00 : 6745f6: 00 : PrivateRefCountClock++ % REFCOUNT_ARRAY_ENTRIES]; : Assert(arrayent->buffer != InvalidBuffer); : : /* enter victim entry into the hashtable */ : hashent = hash_search(PrivateRefCountHash, 0.00 : 6745f7: 48 89 de mov %rbx,%rsi 0.00 : 6745fa: e8 a1 00 11 00 callq 7846a0 : (void *) &arrayent->buffer, : HASH_ENTER, : &found); : Assert(!found); : hashent->refcount = arrayent->refcount; 0.00 : 6745ff: 8b 53 04 mov 0x4(%rbx),%edx : /* fill now free array entry with previously searched entry */ : arrayent->buffer = res->buffer; : arrayent->refcount = res->refcount; : : /* and remove the old entry */ : hash_search(PrivateRefCountHash, 0.00 : 674602: 4c 89 f1 mov %r14,%rcx 0.00 : 674605: 48 89 de mov %rbx,%rsi : hashent = hash_search(PrivateRefCountHash, : (void *) &arrayent->buffer, : HASH_ENTER, : &found); : Assert(!found); : hashent->refcount = arrayent->refcount; 0.00 : 674608: 89 50 04 mov %edx,0x4(%rax) : : /* fill now free array entry with previously searched entry */ : arrayent->buffer = res->buffer; 0.00 : 67460b: 41 8b 45 00 mov 0x0(%r13),%eax : arrayent->refcount = res->refcount; : : /* and remove the old entry */ : hash_search(PrivateRefCountHash, 0.00 : 67460f: ba 02 00 00 00 mov $0x2,%edx : &found); : Assert(!found); : hashent->refcount = arrayent->refcount; : : /* fill now free array entry with previously searched entry */ : arrayent->buffer = res->buffer; 0.00 : 674614: 42 89 04 e5 c0 d0 b7 mov %eax,0xb7d0c0(,%r12,8) 0.00 : 67461b: 00 : arrayent->refcount = res->refcount; 0.00 : 67461c: 41 8b 45 04 mov 0x4(%r13),%eax 0.00 : 674620: 89 43 04 mov %eax,0x4(%rbx) : : /* and remove the old entry */ : hash_search(PrivateRefCountHash, 0.00 : 674623: 48 8b 3d 4e 8a 50 00 mov 0x508a4e(%rip),%rdi # b7d078 0.00 : 67462a: e8 71 00 11 00 callq 7846a0 0.00 : 67462f: 48 89 d8 mov %rbx,%rax : } : } : : Assert(false); /* unreachable */ : return NULL; : } 0.00 : 674632: 48 83 c4 18 add $0x18,%rsp /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:304 25.00 : 674636: 5b pop %rbx 0.00 : 674637: 41 5c pop %r12 0.00 : 674639: 41 5d pop %r13 0.00 : 67463b: 41 5e pop %r14 0.00 : 67463d: 41 5f pop %r15 0.00 : 67463f: c9 leaveq 0.00 : 674640: c3 retq 0.00 : 674641: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : else if (found && free != NULL) : { : /* move buffer from hashtable into the free array slot */ : : /* fill array slot */ : free->buffer = buffer; 0.00 : 674648: 8b 45 c4 mov -0x3c(%rbp),%eax : free->refcount = res->refcount; : : /* delete from hashtable */ : hash_search(PrivateRefCountHash, 0.00 : 67464b: 48 8d 75 c4 lea -0x3c(%rbp),%rsi 0.00 : 67464f: 4c 89 f1 mov %r14,%rcx 0.00 : 674652: ba 02 00 00 00 mov $0x2,%edx : else if (found && free != NULL) : { : /* move buffer from hashtable into the free array slot */ : : /* fill array slot */ : free->buffer = buffer; 0.00 : 674657: 89 03 mov %eax,(%rbx) : free->refcount = res->refcount; 0.00 : 674659: 41 8b 45 04 mov 0x4(%r13),%eax 0.00 : 67465d: 89 43 04 mov %eax,0x4(%rbx) : : /* delete from hashtable */ : hash_search(PrivateRefCountHash, 0.00 : 674660: 48 8b 3d 11 8a 50 00 mov 0x508a11(%rip),%rdi # b7d078 0.00 : 674667: e8 34 00 11 00 callq 7846a0 : (void *) &buffer, : HASH_REMOVE, : &found); : Assert(found); : Assert(PrivateRefCountOverflowed > 0); : PrivateRefCountOverflowed--; 0.00 : 67466c: 83 2d fd 89 50 00 01 subl $0x1,0x5089fd(%rip) # b7d070 0.00 : 674673: 48 89 d8 mov %rbx,%rax : } : } : : Assert(false); /* unreachable */ : return NULL; : } 0.00 : 674676: 48 83 c4 18 add $0x18,%rsp 0.00 : 67467a: 5b pop %rbx 0.00 : 67467b: 41 5c pop %r12 0.00 : 67467d: 41 5d pop %r13 0.00 : 67467f: 41 5e pop %r14 0.00 : 674681: 41 5f pop %r15 0.00 : 674683: c9 leaveq 0.00 : 674684: c3 retq 0.00 : 674685: 0f 1f 00 nopl (%rax) : &found); : } : : if (!found) : { : if (!create) 0.00 : 674688: 31 c0 xor %eax,%eax 0.00 : 67468a: 45 84 ff test %r15b,%r15b 0.00 : 67468d: 74 a3 je 674632 : { : /* Neither array nor hash have an entry and no new entry is needed */ : return NULL; : } : else if (free != NULL) 0.00 : 67468f: 48 85 db test %rbx,%rbx 0.00 : 674692: 74 11 je 6746a5 : { : /* add entry into the free array slot */ : free->buffer = buffer; 0.00 : 674694: 8b 45 c4 mov -0x3c(%rbp),%eax : free->refcount = 0; 0.00 : 674697: c7 43 04 00 00 00 00 movl $0x0,0x4(%rbx) : return NULL; : } : else if (free != NULL) : { : /* add entry into the free array slot */ : free->buffer = buffer; 0.00 : 67469e: 89 03 mov %eax,(%rbx) : free->refcount = 0; 0.00 : 6746a0: 48 89 d8 mov %rbx,%rax : } : } : : Assert(false); /* unreachable */ : return NULL; : } 0.00 : 6746a3: eb 8d jmp 674632 : */ : PrivateRefCountEntry *arrayent; : PrivateRefCountEntry *hashent; : : /* select victim slot */ : arrayent = &PrivateRefCountArray[ 0.00 : 6746a5: 8b 05 d5 89 50 00 mov 0x5089d5(%rip),%eax # b7d080 : PrivateRefCountClock++ % REFCOUNT_ARRAY_ENTRIES]; : Assert(arrayent->buffer != InvalidBuffer); : : /* enter victim array entry into hashtable */ : hashent = hash_search(PrivateRefCountHash, 0.00 : 6746ab: 48 8b 3d c6 89 50 00 mov 0x5089c6(%rip),%rdi # b7d078 0.00 : 6746b2: 48 8d 4d d7 lea -0x29(%rbp),%rcx 0.00 : 6746b6: ba 01 00 00 00 mov $0x1,%edx : */ : PrivateRefCountEntry *arrayent; : PrivateRefCountEntry *hashent; : : /* select victim slot */ : arrayent = &PrivateRefCountArray[ 0.00 : 6746bb: 49 89 c4 mov %rax,%r12 0.00 : 6746be: 83 c0 01 add $0x1,%eax 0.00 : 6746c1: 41 83 e4 07 and $0x7,%r12d 0.00 : 6746c5: 89 05 b5 89 50 00 mov %eax,0x5089b5(%rip) # b7d080 0.00 : 6746cb: 4a 8d 1c e5 c0 d0 b7 lea 0xb7d0c0(,%r12,8),%rbx 0.00 : 6746d2: 00 : PrivateRefCountClock++ % REFCOUNT_ARRAY_ENTRIES]; : Assert(arrayent->buffer != InvalidBuffer); : : /* enter victim array entry into hashtable */ : hashent = hash_search(PrivateRefCountHash, 0.00 : 6746d3: 48 89 de mov %rbx,%rsi 0.00 : 6746d6: e8 c5 ff 10 00 callq 7846a0 : (void *) &arrayent->buffer, : HASH_ENTER, : &found); : Assert(!found); : hashent->refcount = arrayent->refcount; 0.00 : 6746db: 8b 53 04 mov 0x4(%rbx),%edx 0.00 : 6746de: 89 50 04 mov %edx,0x4(%rax) : : /* fill the now free array slot */ : arrayent->buffer = buffer; 0.00 : 6746e1: 8b 45 c4 mov -0x3c(%rbp),%eax 0.00 : 6746e4: 42 89 04 e5 c0 d0 b7 mov %eax,0xb7d0c0(,%r12,8) 0.00 : 6746eb: 00 : arrayent->refcount = 0; 0.00 : 6746ec: c7 43 04 00 00 00 00 movl $0x0,0x4(%rbx) : : PrivateRefCountOverflowed++; 0.00 : 6746f3: 48 89 d8 mov %rbx,%rax 0.00 : 6746f6: 83 05 73 89 50 00 01 addl $0x1,0x508973(%rip) # b7d070 : } : } : : Assert(false); /* unreachable */ : return NULL; : } 0.00 : 6746fd: e9 30 ff ff ff jmpq 674632 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 50.00 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:465 25.00 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:452 25.00 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:456 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000007832f0 : : * from the data in the hash table and return true. If not, it will return : * false. : */ : bool : CHashSearch(CHashTable table, void *entry) : { 0.00 : 7832f0: 55 push %rbp 0.00 : 7832f1: 48 89 e5 mov %rsp,%rbp 0.00 : 7832f4: 41 54 push %r12 0.00 : 7832f6: 49 89 f4 mov %rsi,%r12 0.00 : 7832f9: 53 push %rbx 0.00 : 7832fa: 48 89 fb mov %rdi,%rbx 0.00 : 7832fd: 48 83 ec 20 sub $0x20,%rsp : uint32 hashcode = hash_any(entry, table->desc.key_size); 0.00 : 783301: 0f b7 77 0e movzwl 0xe(%rdi),%esi 0.00 : 783305: 4c 89 e7 mov %r12,%rdi 0.00 : 783308: e8 43 d0 d0 ff callq 490350 : CHashPtr *b = &table->bucket[bucket]; : CHashScanResult scan; : : /* Prevent garbage collection for this bucket. */ : Assert(MyProc->hazard[0] == NULL); : MyProc->hazard[0] = CHashTableGetGarbageByBucket(table, bucket); 0.00 : 78330d: 0f b6 4b 14 movzbl 0x14(%rbx),%ecx : */ : bool : CHashSearch(CHashTable table, void *entry) : { : uint32 hashcode = hash_any(entry, table->desc.key_size); : uint32 bucket = hashcode & table->bucket_mask; 0.00 : 783311: 8b 7b 10 mov 0x10(%rbx),%edi 0.00 : 783314: 21 c7 and %eax,%edi : CHashPtr *b = &table->bucket[bucket]; 0.00 : 783316: 89 fe mov %edi,%esi : CHashScanResult scan; : : /* Prevent garbage collection for this bucket. */ : Assert(MyProc->hazard[0] == NULL); : MyProc->hazard[0] = CHashTableGetGarbageByBucket(table, bucket); 0.00 : 783318: d3 ef shr %cl,%edi /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:452 25.00 : 78331a: 0f b6 4b 15 movzbl 0x15(%rbx),%ecx 0.00 : 78331e: 89 fa mov %edi,%edx : bool : CHashSearch(CHashTable table, void *entry) : { : uint32 hashcode = hash_any(entry, table->desc.key_size); : uint32 bucket = hashcode & table->bucket_mask; : CHashPtr *b = &table->bucket[bucket]; 0.00 : 783320: 48 c1 e6 02 shl $0x2,%rsi 0.00 : 783324: 48 03 73 20 add 0x20(%rbx),%rsi : CHashScanResult scan; : : /* Prevent garbage collection for this bucket. */ : Assert(MyProc->hazard[0] == NULL); : MyProc->hazard[0] = CHashTableGetGarbageByBucket(table, bucket); 0.00 : 783328: d3 ea shr %cl,%edx 0.00 : 78332a: 48 8b 0d 17 a6 3f 00 mov 0x3fa617(%rip),%rcx # b7d948 0.00 : 783331: 01 fa add %edi,%edx 0.00 : 783333: 48 c1 e2 02 shl $0x2,%rdx 0.00 : 783337: 48 03 53 28 add 0x28(%rbx),%rdx 0.00 : 78333b: 48 89 91 e8 02 00 00 mov %rdx,0x2e8(%rcx) : pg_memory_barrier(); 0.00 : 783342: f0 83 04 24 00 lock addl $0x0,(%rsp) : : /* Scan bucket and return data from any matching entry. */ : CHashBucketScan(table, b, hashcode, entry, &scan); /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:456 25.00 : 783347: 4c 8d 45 d0 lea -0x30(%rbp),%r8 0.00 : 78334b: 4c 89 e1 mov %r12,%rcx 0.00 : 78334e: 89 c2 mov %eax,%edx 0.00 : 783350: 48 89 df mov %rbx,%rdi 0.00 : 783353: e8 48 f9 ff ff callq 782ca0 : if (scan.found) 0.00 : 783358: 80 7d e8 00 cmpb $0x0,-0x18(%rbp) 0.00 : 78335c: 75 32 jne 783390 : CHashNodeGetItem(scan.target_node) + table->desc.key_size, : table->desc.element_size - table->desc.key_size); : : /* Allow garbage collection for this bucket. */ : Assert(MyProc->hazard[0] != NULL); : pg_memory_barrier(); 0.00 : 78335e: f0 83 04 24 00 lock addl $0x0,(%rsp) : MyProc->hazard[0] = NULL; /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:465 50.00 : 783363: 48 8b 05 de a5 3f 00 mov 0x3fa5de(%rip),%rax # b7d948 0.00 : 78336a: 48 c7 80 e8 02 00 00 movq $0x0,0x2e8(%rax) 0.00 : 783371: 00 00 00 00 : : CHashTableIncrementStatistic(table, CHS_Search); : if (!scan.found) 0.00 : 783375: 0f b6 45 e8 movzbl -0x18(%rbp),%eax : /* Allow garbage collection for this bucket. */ : Assert(MyProc->hazard[0] != NULL); : pg_memory_barrier(); : MyProc->hazard[0] = NULL; : : CHashTableIncrementStatistic(table, CHS_Search); 0.00 : 783379: 48 83 43 40 01 addq $0x1,0x40(%rbx) : if (!scan.found) 0.00 : 78337e: 84 c0 test %al,%al 0.00 : 783380: 75 05 jne 783387 : CHashTableIncrementStatistic(table, CHS_Search_Failed); 0.00 : 783382: 48 83 43 48 01 addq $0x1,0x48(%rbx) : return scan.found; : } 0.00 : 783387: 48 83 c4 20 add $0x20,%rsp 0.00 : 78338b: 5b pop %rbx 0.00 : 78338c: 41 5c pop %r12 0.00 : 78338e: c9 leaveq 0.00 : 78338f: c3 retq : pg_memory_barrier(); : : /* Scan bucket and return data from any matching entry. */ : CHashBucketScan(table, b, hashcode, entry, &scan); : if (scan.found) : memcpy(((char *) entry) + table->desc.key_size, 0.00 : 783390: 0f b7 43 0e movzwl 0xe(%rbx),%eax 0.00 : 783394: 0f b7 53 0c movzwl 0xc(%rbx),%edx 0.00 : 783398: 0f b7 f0 movzwl %ax,%esi 0.00 : 78339b: 29 c2 sub %eax,%edx 0.00 : 78339d: 49 8d 3c 34 lea (%r12,%rsi,1),%rdi 0.00 : 7833a1: 48 83 c6 08 add $0x8,%rsi 0.00 : 7833a5: 48 03 75 e0 add -0x20(%rbp),%rsi 0.00 : 7833a9: 48 63 d2 movslq %edx,%rdx 0.00 : 7833ac: e8 3f 68 ce ff callq 469bf0 0.00 : 7833b1: eb ab jmp 78335e Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .plt: : : 00000000004695c0 : ??:0 100.00 : 4695c0: ff 25 82 db 6f 00 jmpq *0x6fdb82(%rip) # b67148 <_GLOBAL_OFFSET_TABLE_+0x148> 0.00 : 4695c6: 68 26 00 00 00 pushq $0x26 0.00 : 4695cb: e9 80 fd ff ff jmpq 469350 <_init+0x20> Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 33.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:888 33.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:911 33.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:971 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000782f20 : : * degrading performance; or CHashAllocate may enter a tight loop until such : * time as an element is deleted). : */ : bool : CHashInsert(CHashTable table, void *entry) : { 0.00 : 782f20: 55 push %rbp 0.00 : 782f21: 48 89 e5 mov %rsp,%rbp 0.00 : 782f24: 41 57 push %r15 0.00 : 782f26: 41 56 push %r14 0.00 : 782f28: 41 55 push %r13 0.00 : 782f2a: 41 54 push %r12 0.00 : 782f2c: 49 89 fc mov %rdi,%r12 0.00 : 782f2f: 53 push %rbx 0.00 : 782f30: 48 83 ec 38 sub $0x38,%rsp 0.00 : 782f34: 48 89 75 a0 mov %rsi,-0x60(%rbp) : uint32 hashcode = hash_any(entry, table->desc.key_size); 0.00 : 782f38: 0f b7 77 0e movzwl 0xe(%rdi),%esi 0.00 : 782f3c: 48 8b 7d a0 mov -0x60(%rbp),%rdi 0.00 : 782f40: e8 0b d4 d0 ff callq 490350 0.00 : 782f45: 89 45 a8 mov %eax,-0x58(%rbp) : uint32 bucket = hashcode & table->bucket_mask; 0.00 : 782f48: 41 23 44 24 10 and 0x10(%r12),%eax : { : uint32 f_current; : CHashPtr new; : : /* Pick a starting freelist base on our backend ID. */ : f_current = ((uint32) MyBackendId) % CHashTableNFreeLists(table); 0.00 : 782f4d: 8b 35 b5 5b 3e 00 mov 0x3e5bb5(%rip),%esi # b68b08 0.00 : 782f53: 41 0f b7 7c 24 16 movzwl 0x16(%r12),%edi : */ : bool : CHashInsert(CHashTable table, void *entry) : { : uint32 hashcode = hash_any(entry, table->desc.key_size); : uint32 bucket = hashcode & table->bucket_mask; 0.00 : 782f59: 89 45 ac mov %eax,-0x54(%rbp) : CHashPtr *b = &table->bucket[bucket]; 0.00 : 782f5c: 89 c0 mov %eax,%eax 0.00 : 782f5e: 4c 8d 3c 85 00 00 00 lea 0x0(,%rax,4),%r15 0.00 : 782f65: 00 : : /* Pick a starting freelist base on our backend ID. */ : f_current = ((uint32) MyBackendId) % CHashTableNFreeLists(table); : : /* If this process hasn't initialized gc_next yet, do that now. */ : if (table->gc_pid != MyProcPid) 0.00 : 782f66: 8b 05 78 cd 43 00 mov 0x43cd78(%rip),%eax # bbfce4 : bool : CHashInsert(CHashTable table, void *entry) : { : uint32 hashcode = hash_any(entry, table->desc.key_size); : uint32 bucket = hashcode & table->bucket_mask; : CHashPtr *b = &table->bucket[bucket]; 0.00 : 782f6c: 4d 03 7c 24 20 add 0x20(%r12),%r15 : : /* Pick a starting freelist base on our backend ID. */ : f_current = ((uint32) MyBackendId) % CHashTableNFreeLists(table); : : /* If this process hasn't initialized gc_next yet, do that now. */ : if (table->gc_pid != MyProcPid) 0.00 : 782f71: 41 39 44 24 38 cmp %eax,0x38(%r12) 0.00 : 782f76: 74 26 je 782f9e : { : table->gc_pid = MyProcPid; : table->gc_next = ((uint32) MyProcPid) % CHashTableNGarbage(table); 0.00 : 782f78: 41 0f b6 4c 24 14 movzbl 0x14(%r12),%ecx 0.00 : 782f7e: 41 8b 54 24 10 mov 0x10(%r12),%edx : f_current = ((uint32) MyBackendId) % CHashTableNFreeLists(table); : : /* If this process hasn't initialized gc_next yet, do that now. */ : if (table->gc_pid != MyProcPid) : { : table->gc_pid = MyProcPid; 0.00 : 782f83: 41 89 44 24 38 mov %eax,0x38(%r12) : table->gc_next = ((uint32) MyProcPid) % CHashTableNGarbage(table); 0.00 : 782f88: 8b 05 56 cd 43 00 mov 0x43cd56(%rip),%eax # bbfce4 0.00 : 782f8e: 83 c2 01 add $0x1,%edx 0.00 : 782f91: d3 ea shr %cl,%edx 0.00 : 782f93: 89 d1 mov %edx,%ecx 0.00 : 782f95: 31 d2 xor %edx,%edx 0.00 : 782f97: f7 f1 div %ecx 0.00 : 782f99: 41 89 54 24 3c mov %edx,0x3c(%r12) : { : uint32 f_current; : CHashPtr new; : : /* Pick a starting freelist base on our backend ID. */ : f_current = ((uint32) MyBackendId) % CHashTableNFreeLists(table); 0.00 : 782f9e: 0f b7 cf movzwl %di,%ecx 0.00 : 782fa1: 89 f0 mov %esi,%eax 0.00 : 782fa3: 31 d2 xor %edx,%edx 0.00 : 782fa5: f7 f1 div %ecx 0.00 : 782fa7: 41 0f b6 4c 24 15 movzbl 0x15(%r12),%ecx 0.00 : 782fad: 49 8b 74 24 28 mov 0x28(%r12),%rsi : /* If list is empty, fail. */ : if (CHashPtrIsInvalid(garbage)) : return InvalidCHashPtr; : : /* If we're unable to empty the list via compare-and-swap, fail. */ : if (!__sync_bool_compare_and_swap(b, garbage, InvalidCHashPtr)) 0.00 : 782fb2: 41 bb fe ff ff ff mov $0xfffffffe,%r11d : * If we attempt to pop the free-list and fail, we retry immediately : * with the same free-list. This reduces the frequency with which : * we're obliged to update our hazard pointers, which is a material : * savings due to the associated memory barrier. : */ : b = CHashTableGetFreeList(table, f_current); 0.00 : 782fb8: 44 8d 42 01 lea 0x1(%rdx),%r8d 0.00 : 782fbc: 44 89 c0 mov %r8d,%eax 0.00 : 782fbf: d3 e0 shl %cl,%eax 0.00 : 782fc1: 01 d0 add %edx,%eax 0.00 : 782fc3: 48 8d 0c 86 lea (%rsi,%rax,4),%rcx : MyProc->hazard[0] = b; 0.00 : 782fc7: 48 8b 05 7a a9 3f 00 mov 0x3fa97a(%rip),%rax # b7d948 0.00 : 782fce: 48 89 88 e8 02 00 00 mov %rcx,0x2e8(%rax) : pg_memory_barrier(); 0.00 : 782fd5: f0 83 04 24 00 lock addl $0x0,(%rsp) : new = *b; /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:888 33.33 : 782fda: 8b 19 mov (%rcx),%ebx : while (!CHashPtrIsInvalid(new)) 0.00 : 782fdc: 83 fb fd cmp $0xfffffffd,%ebx 0.00 : 782fdf: 76 23 jbe 783004 0.00 : 782fe1: e9 52 01 00 00 jmpq 783138 0.00 : 782fe6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 782fed: 00 00 00 : * barrier here. : */ : pg_read_barrier_depends(); : if (__sync_bool_compare_and_swap(b, new, n->un.gcnext)) : return new; : CHashTableIncrementStatistic(table, CHS_Allocate_Fail); 0.00 : 782ff0: 49 83 84 24 a0 00 00 addq $0x1,0xa0(%r12) 0.00 : 782ff7: 00 01 : new = *b; 0.00 : 782ff9: 8b 19 mov (%rcx),%ebx : */ : b = CHashTableGetFreeList(table, f_current); : MyProc->hazard[0] = b; : pg_memory_barrier(); : new = *b; : while (!CHashPtrIsInvalid(new)) 0.00 : 782ffb: 83 fb fd cmp $0xfffffffd,%ebx 0.00 : 782ffe: 0f 87 34 01 00 00 ja 783138 : { : CHashNode *n = CHashTableGetNode(table, new); 0.00 : 783004: 89 de mov %ebx,%esi : * n is computed from table->freelist[f_current], which could : * be modified by concurrent activity, so we need a dependency : * barrier here. : */ : pg_read_barrier_depends(); : if (__sync_bool_compare_and_swap(b, new, n->un.gcnext)) 0.00 : 783006: 49 8b 44 24 30 mov 0x30(%r12),%rax : MyProc->hazard[0] = b; : pg_memory_barrier(); : new = *b; : while (!CHashPtrIsInvalid(new)) : { : CHashNode *n = CHashTableGetNode(table, new); 0.00 : 78300b: d1 ee shr %esi : * n is computed from table->freelist[f_current], which could : * be modified by concurrent activity, so we need a dependency : * barrier here. : */ : pg_read_barrier_depends(); : if (__sync_bool_compare_and_swap(b, new, n->un.gcnext)) 0.00 : 78300d: 89 f2 mov %esi,%edx 0.00 : 78300f: 41 0f af 54 24 1c imul 0x1c(%r12),%edx 0.00 : 783015: 8b 54 10 04 mov 0x4(%rax,%rdx,1),%edx 0.00 : 783019: 89 d8 mov %ebx,%eax 0.00 : 78301b: f0 0f b1 11 lock cmpxchg %edx,(%rcx) 0.00 : 78301f: 75 cf jne 782ff0 : * Allocate and initialize a new entry, on the assumption that the insert : * will succeed. If it ends up failing, we must be sure to put this back : * on some free list, lest it be permanently leaked. : */ : new = CHashAllocate(table); : nnew = CHashTableGetNode(table, new); 0.00 : 783021: 41 89 f5 mov %esi,%r13d : nnew->un.hashcode = hashcode; 0.00 : 783024: 8b 4d a8 mov -0x58(%rbp),%ecx : * Allocate and initialize a new entry, on the assumption that the insert : * will succeed. If it ends up failing, we must be sure to put this back : * on some free list, lest it be permanently leaked. : */ : new = CHashAllocate(table); : nnew = CHashTableGetNode(table, new); 0.00 : 783027: 45 0f af 6c 24 1c imul 0x1c(%r12),%r13d 0.00 : 78302d: 4d 03 6c 24 30 add 0x30(%r12),%r13 : nnew->un.hashcode = hashcode; 0.00 : 783032: 41 89 4d 04 mov %ecx,0x4(%r13) : memcpy(CHashNodeGetItem(nnew), entry, table->desc.element_size); 0.00 : 783036: 41 0f b7 54 24 0c movzwl 0xc(%r12),%edx 0.00 : 78303c: 49 8d 7d 08 lea 0x8(%r13),%rdi 0.00 : 783040: 48 8b 75 a0 mov -0x60(%rbp),%rsi 0.00 : 783044: e8 a7 6b ce ff callq 469bf0 : : /* Prevent garbage collection for this bucket. */ : MyProc->hazard[0] = CHashTableGetGarbageByBucket(table, bucket); 0.00 : 783049: 41 0f b6 4c 24 14 movzbl 0x14(%r12),%ecx 0.00 : 78304f: 8b 55 ac mov -0x54(%rbp),%edx 0.00 : 783052: d3 ea shr %cl,%edx 0.00 : 783054: 41 0f b6 4c 24 15 movzbl 0x15(%r12),%ecx 0.00 : 78305a: 89 d0 mov %edx,%eax 0.00 : 78305c: d3 e8 shr %cl,%eax 0.00 : 78305e: 01 d0 add %edx,%eax 0.00 : 783060: 48 8b 15 e1 a8 3f 00 mov 0x3fa8e1(%rip),%rdx # b7d948 0.00 : 783067: 48 c1 e0 02 shl $0x2,%rax 0.00 : 78306b: 49 03 44 24 28 add 0x28(%r12),%rax 0.00 : 783070: 48 89 82 e8 02 00 00 mov %rax,0x2e8(%rdx) : pg_memory_barrier(); 0.00 : 783077: f0 83 04 24 00 lock addl $0x0,(%rsp) 0.00 : 78307c: 4c 8d 75 b0 lea -0x50(%rbp),%r14 0.00 : 783080: eb 20 jmp 7830a2 0.00 : 783082: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : * where N is the number of buckets and M is the number of elements : * in the table. Even for a quite modestly size table this is likely : * to exceed the number of CPU cores. : */ : Assert(!CHashPtrIsMarked(scan.target)); : nnew->next = scan.target; 0.00 : 783088: 8b 45 b0 mov -0x50(%rbp),%eax 0.00 : 78308b: 41 89 45 00 mov %eax,0x0(%r13) : if (!__sync_bool_compare_and_swap(scan.pointer_to_target, 0.00 : 78308f: 48 8b 55 b8 mov -0x48(%rbp),%rdx 0.00 : 783093: 8b 45 b0 mov -0x50(%rbp),%eax 0.00 : 783096: f0 0f b1 1a lock cmpxchg %ebx,(%rdx) 0.00 : 78309a: 74 49 je 7830e5 : scan.target, new)) : { : CHashTableIncrementStatistic(table, CHS_Insert_Retry); 0.00 : 78309c: 49 83 44 24 60 01 addq $0x1,0x60(%r12) : * Scan the bucket. If we don't find a match, use compare-and-swap to : * insert the new node at the insert position. If we do find a match, : * return the data to the caller. : */ : retry: : CHashBucketScan(table, b, hashcode, entry, &scan); 0.00 : 7830a2: 48 8b 4d a0 mov -0x60(%rbp),%rcx 0.00 : 7830a6: 8b 55 a8 mov -0x58(%rbp),%edx 0.00 : 7830a9: 4d 89 f0 mov %r14,%r8 0.00 : 7830ac: 4c 89 fe mov %r15,%rsi 0.00 : 7830af: 4c 89 e7 mov %r12,%rdi 0.00 : 7830b2: e8 e9 fb ff ff callq 782ca0 : if (scan.found) 0.00 : 7830b7: 80 7d c8 00 cmpb $0x0,-0x38(%rbp) 0.00 : 7830bb: 74 cb je 783088 : memcpy(((char *) entry) + table->desc.key_size, 0.00 : 7830bd: 41 0f b7 44 24 0e movzwl 0xe(%r12),%eax 0.00 : 7830c3: 48 8b 7d a0 mov -0x60(%rbp),%rdi 0.00 : 7830c7: 41 0f b7 54 24 0c movzwl 0xc(%r12),%edx 0.00 : 7830cd: 0f b7 f0 movzwl %ax,%esi 0.00 : 7830d0: 48 01 f7 add %rsi,%rdi 0.00 : 7830d3: 48 83 c6 08 add $0x8,%rsi 0.00 : 7830d7: 48 03 75 c0 add -0x40(%rbp),%rsi 0.00 : 7830db: 29 c2 sub %eax,%edx 0.00 : 7830dd: 48 63 d2 movslq %edx,%rdx 0.00 : 7830e0: e8 0b 6b ce ff callq 469bf0 : } : } : : /* Allow garbage collection for this bucket. */ : Assert(MyProc->hazard[0] != NULL); : pg_memory_barrier(); 0.00 : 7830e5: f0 83 04 24 00 lock addl $0x0,(%rsp) : MyProc->hazard[0] = NULL; 0.00 : 7830ea: 48 8b 05 57 a8 3f 00 mov 0x3fa857(%rip),%rax # b7d948 0.00 : 7830f1: 48 c7 80 e8 02 00 00 movq $0x0,0x2e8(%rax) 0.00 : 7830f8: 00 00 00 00 : * guarantees that any allocation still in progress at the time this : * element makes it back to the freelist is trying to allocate some : * other node. : */ : CHashTableIncrementStatistic(table, CHS_Insert); : if (scan.found) 0.00 : 7830fc: 31 c0 xor %eax,%eax : * progress at the time we popped the freelist has completed. This : * guarantees that any allocation still in progress at the time this : * element makes it back to the freelist is trying to allocate some : * other node. : */ : CHashTableIncrementStatistic(table, CHS_Insert); 0.00 : 7830fe: 49 83 44 24 50 01 addq $0x1,0x50(%r12) : if (scan.found) 0.00 : 783104: 80 7d c8 00 cmpb $0x0,-0x38(%rbp) 0.00 : 783108: 74 17 je 783121 : { : CHashTableIncrementStatistic(table, CHS_Insert_Failed); 0.00 : 78310a: 49 83 44 24 58 01 addq $0x1,0x58(%r12) : CHashAddToGarbage(table, bucket, new); 0.00 : 783110: 8b 75 ac mov -0x54(%rbp),%esi 0.00 : 783113: 89 da mov %ebx,%edx 0.00 : 783115: 4c 89 e7 mov %r12,%rdi 0.00 : 783118: e8 33 fb ff ff callq 782c50 0.00 : 78311d: 0f b6 45 c8 movzbl -0x38(%rbp),%eax 0.00 : 783121: 84 c0 test %al,%al 0.00 : 783123: 0f 94 c0 sete %al : } : : /* The insert succeeded if and only if no duplicate was found. */ : return !scan.found; : } 0.00 : 783126: 48 83 c4 38 add $0x38,%rsp 0.00 : 78312a: 5b pop %rbx 0.00 : 78312b: 41 5c pop %r12 0.00 : 78312d: 41 5d pop %r13 0.00 : 78312f: 41 5e pop %r14 0.00 : 783131: 41 5f pop %r15 0.00 : 783133: c9 leaveq 0.00 : 783134: c3 retq 0.00 : 783135: 0f 1f 00 nopl (%rax) : CHashPtr new; : CHashNode *n; : uint32 i; : : /* Pick a target freelist based on our backend ID. */ : f_home = ((uint32) MyBackendId) % CHashTableNFreeLists(table); 0.00 : 783138: 41 0f b7 7c 24 16 movzwl 0x16(%r12),%edi 0.00 : 78313e: 8b 05 c4 59 3e 00 mov 0x3e59c4(%rip),%eax # b68b08 0.00 : 783144: 31 d2 xor %edx,%edx : fh = CHashTableGetFreeList(table, f_home); 0.00 : 783146: 41 0f b6 4c 24 15 movzbl 0x15(%r12),%ecx 0.00 : 78314c: 4d 8b 4c 24 28 mov 0x28(%r12),%r9 : CHashPtr new; : CHashNode *n; : uint32 i; : : /* Pick a target freelist based on our backend ID. */ : f_home = ((uint32) MyBackendId) % CHashTableNFreeLists(table); 0.00 : 783151: f7 f7 div %edi : fh = CHashTableGetFreeList(table, f_home); 0.00 : 783153: 8d 42 01 lea 0x1(%rdx),%eax 0.00 : 783156: d3 e0 shl %cl,%eax : : /* Select target garbage list. */ : table->gc_next = (table->gc_next + 1) % CHashTableNGarbage(table); 0.00 : 783158: 41 0f b6 4c 24 14 movzbl 0x14(%r12),%ecx : CHashNode *n; : uint32 i; : : /* Pick a target freelist based on our backend ID. */ : f_home = ((uint32) MyBackendId) % CHashTableNFreeLists(table); : fh = CHashTableGetFreeList(table, f_home); 0.00 : 78315e: 01 d0 add %edx,%eax 0.00 : 783160: 4c 8d 14 85 00 00 00 lea 0x0(,%rax,4),%r10 0.00 : 783167: 00 : : /* Select target garbage list. */ : table->gc_next = (table->gc_next + 1) % CHashTableNGarbage(table); 0.00 : 783168: 41 8b 44 24 3c mov 0x3c(%r12),%eax 0.00 : 78316d: 8d 50 01 lea 0x1(%rax),%edx 0.00 : 783170: 41 8b 44 24 10 mov 0x10(%r12),%eax 0.00 : 783175: 8d 70 01 lea 0x1(%rax),%esi 0.00 : 783178: 89 d0 mov %edx,%eax 0.00 : 78317a: 31 d2 xor %edx,%edx 0.00 : 78317c: d3 ee shr %cl,%esi : b = CHashTableGetGarbageList(table, table->gc_next); 0.00 : 78317e: 41 0f b6 4c 24 15 movzbl 0x15(%r12),%ecx : /* Pick a target freelist based on our backend ID. */ : f_home = ((uint32) MyBackendId) % CHashTableNFreeLists(table); : fh = CHashTableGetFreeList(table, f_home); : : /* Select target garbage list. */ : table->gc_next = (table->gc_next + 1) % CHashTableNGarbage(table); 0.00 : 783184: f7 f6 div %esi : b = CHashTableGetGarbageList(table, table->gc_next); 0.00 : 783186: 4c 89 ce mov %r9,%rsi 0.00 : 783189: 89 d0 mov %edx,%eax : /* Pick a target freelist based on our backend ID. */ : f_home = ((uint32) MyBackendId) % CHashTableNFreeLists(table); : fh = CHashTableGetFreeList(table, f_home); : : /* Select target garbage list. */ : table->gc_next = (table->gc_next + 1) % CHashTableNGarbage(table); 0.00 : 78318b: 41 89 54 24 3c mov %edx,0x3c(%r12) : b = CHashTableGetGarbageList(table, table->gc_next); 0.00 : 783190: d3 e8 shr %cl,%eax 0.00 : 783192: 01 d0 add %edx,%eax 0.00 : 783194: 49 8d 14 81 lea (%r9,%rax,4),%rdx : garbage = *b; 0.00 : 783198: 8b 1a mov (%rdx),%ebx : : /* If list is empty, fail. */ : if (CHashPtrIsInvalid(garbage)) 0.00 : 78319a: 83 fb fd cmp $0xfffffffd,%ebx 0.00 : 78319d: 76 11 jbe 7831b0 : new = CHashAllocateViaGC(table); : if (!CHashPtrIsInvalid(new)) : return new; : : /* Advance to next freelist. */ : f_current = (f_current + 1) % CHashTableNFreeLists(table); 0.00 : 78319f: 44 89 c0 mov %r8d,%eax 0.00 : 7831a2: 31 d2 xor %edx,%edx 0.00 : 7831a4: f7 f7 div %edi /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:911 33.33 : 7831a6: e9 0d fe ff ff jmpq 782fb8 0.00 : 7831ab: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : /* If list is empty, fail. */ : if (CHashPtrIsInvalid(garbage)) : return InvalidCHashPtr; : : /* If we're unable to empty the list via compare-and-swap, fail. */ : if (!__sync_bool_compare_and_swap(b, garbage, InvalidCHashPtr)) 0.00 : 7831b0: 89 d8 mov %ebx,%eax 0.00 : 7831b2: f0 44 0f b1 1a lock cmpxchg %r11d,(%rdx) 0.00 : 7831b7: 74 1c je 7831d5 : { : CHashTableIncrementStatistic(table, CHS_Garbage_Dequeue_Fail); 0.00 : 7831b9: 49 83 84 24 b0 00 00 addq $0x1,0xb0(%r12) 0.00 : 7831c0: 00 01 0.00 : 7831c2: 49 8b 74 24 28 mov 0x28(%r12),%rsi 0.00 : 7831c7: 41 0f b6 4c 24 15 movzbl 0x15(%r12),%ecx 0.00 : 7831cd: 41 0f b7 7c 24 16 movzwl 0x16(%r12),%edi 0.00 : 7831d3: eb ca jmp 78319f : * requeues the garbage if it's not immediately recycleable, but : * it's not clear that we need such a thing. On the flip side we : * might want to eventually enter a longer sleep here, or PANIC, : * but it's not clear exactly how to calibrate that. : */ : CHashTableIncrementStatistic(table, CHS_GC); 0.00 : 7831d5: 49 83 84 24 b8 00 00 addq $0x1,0xb8(%r12) 0.00 : 7831dc: 00 01 : CHashNode *n; : uint32 i; : : /* Pick a target freelist based on our backend ID. */ : f_home = ((uint32) MyBackendId) % CHashTableNFreeLists(table); : fh = CHashTableGetFreeList(table, f_home); 0.00 : 7831de: 4f 8d 04 11 lea (%r9,%r10,1),%r8 : * it's not clear that we need such a thing. On the flip side we : * might want to eventually enter a longer sleep here, or PANIC, : * but it's not clear exactly how to calibrate that. : */ : CHashTableIncrementStatistic(table, CHS_GC); : MyProc->hazard[0] = NULL; 0.00 : 7831e2: 48 8b 05 5f a7 3f 00 mov 0x3fa75f(%rip),%rax # b7d948 0.00 : 7831e9: 48 c7 80 e8 02 00 00 movq $0x0,0x2e8(%rax) 0.00 : 7831f0: 00 00 00 00 : for (i = 0; i < ProcGlobal->allProcCount; i++) 0.00 : 7831f4: 48 8b 35 5d a7 3f 00 mov 0x3fa75d(%rip),%rsi # b7d958 0.00 : 7831fb: 8b 46 10 mov 0x10(%rsi),%eax 0.00 : 7831fe: 85 c0 test %eax,%eax 0.00 : 783200: 74 5f je 783261 /home/Computational/mark/src/postgres-andres/src/backend/utils/hash/chash.c:971 33.33 : 783202: 31 ff xor %edi,%edi 0.00 : 783204: eb 1a jmp 783220 0.00 : 783206: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 78320d: 00 00 00 : { : volatile PGPROC *proc = &ProcGlobal->allProcs[i]; : void *hazard; : : hazard = proc->hazard[0]; : if (hazard == b || hazard == fh) 0.00 : 783210: 49 39 c8 cmp %rcx,%r8 0.00 : 783213: 74 23 je 783238 : * might want to eventually enter a longer sleep here, or PANIC, : * but it's not clear exactly how to calibrate that. : */ : CHashTableIncrementStatistic(table, CHS_GC); : MyProc->hazard[0] = NULL; : for (i = 0; i < ProcGlobal->allProcCount; i++) 0.00 : 783215: 83 c7 01 add $0x1,%edi 0.00 : 783218: 3b 7e 10 cmp 0x10(%rsi),%edi 0.00 : 78321b: 73 44 jae 783261 0.00 : 78321d: 0f 1f 00 nopl (%rax) : { : volatile PGPROC *proc = &ProcGlobal->allProcs[i]; 0.00 : 783220: 89 f8 mov %edi,%eax 0.00 : 783222: 48 69 c0 f0 02 00 00 imul $0x2f0,%rax,%rax 0.00 : 783229: 48 03 06 add (%rsi),%rax : void *hazard; : : hazard = proc->hazard[0]; 0.00 : 78322c: 48 8b 88 e8 02 00 00 mov 0x2e8(%rax),%rcx : if (hazard == b || hazard == fh) 0.00 : 783233: 48 39 ca cmp %rcx,%rdx 0.00 : 783236: 75 d8 jne 783210 : { : CHashTableIncrementStatistic(table, CHS_GC_Spin); 0.00 : 783238: 49 83 84 24 c0 00 00 addq $0x1,0xc0(%r12) 0.00 : 78323f: 00 01 : do : { : hazard = proc->hazard[0]; 0.00 : 783241: 48 8b 88 e8 02 00 00 mov 0x2e8(%rax),%rcx : } while (hazard == b || hazard == fh); 0.00 : 783248: 48 39 ca cmp %rcx,%rdx 0.00 : 78324b: 74 f4 je 783241 0.00 : 78324d: 49 39 c8 cmp %rcx,%r8 0.00 : 783250: 74 ef je 783241 0.00 : 783252: 48 8b 35 ff a6 3f 00 mov 0x3fa6ff(%rip),%rsi # b7d958 : * might want to eventually enter a longer sleep here, or PANIC, : * but it's not clear exactly how to calibrate that. : */ : CHashTableIncrementStatistic(table, CHS_GC); : MyProc->hazard[0] = NULL; : for (i = 0; i < ProcGlobal->allProcCount; i++) 0.00 : 783259: 83 c7 01 add $0x1,%edi 0.00 : 78325c: 3b 7e 10 cmp 0x10(%rsi),%edi 0.00 : 78325f: 72 bf jb 783220 : } : } : : /* Remove one item from list to satisfy current allocation. */ : new = garbage; : n = CHashTableGetNode(table, new); 0.00 : 783261: 89 de mov %ebx,%esi : pg_read_barrier_depends(); : fhead = n->un.gcnext; 0.00 : 783263: 49 8b 44 24 30 mov 0x30(%r12),%rax : } : } : : /* Remove one item from list to satisfy current allocation. */ : new = garbage; : n = CHashTableGetNode(table, new); 0.00 : 783268: d1 ee shr %esi : pg_read_barrier_depends(); : fhead = n->un.gcnext; 0.00 : 78326a: 89 f2 mov %esi,%edx 0.00 : 78326c: 41 0f af 54 24 1c imul 0x1c(%r12),%edx 0.00 : 783272: 8b 54 10 04 mov 0x4(%rax,%rdx,1),%edx : : if (CHashPtrIsInvalid(fhead)) 0.00 : 783276: 83 fa fd cmp $0xfffffffd,%edx 0.00 : 783279: 76 13 jbe 78328e : * before we overwrite n->un.gcnext with a new hashcode. : * (This is only needed when we reclaim exactly one node, : * because in any other case we'll do a compare-and-swap : * before returning, which implies a full barrier.) : */ : pg_memory_barrier(); 0.00 : 78327b: f0 83 04 24 00 lock addl $0x0,(%rsp) : CHashTableIncrementStatistic(table, CHS_GC_Reclaim_Skipped); 0.00 : 783280: 49 83 84 24 c8 00 00 addq $0x1,0xc8(%r12) 0.00 : 783287: 00 01 0.00 : 783289: e9 93 fd ff ff jmpq 783021 : } : else if (__sync_bool_compare_and_swap(fh, InvalidCHashPtr, fhead)) 0.00 : 78328e: b8 fe ff ff ff mov $0xfffffffe,%eax 0.00 : 783293: f0 41 0f b1 10 lock cmpxchg %edx,(%r8) 0.00 : 783298: 74 41 je 7832db : { : /* : * Our free list is empty, and we've succesfully pushed the : * reclaimed nodes onto it. So we're done. : */ : CHashTableIncrementStatistic(table, CHS_GC_Reclaim_Fast); 0.00 : 78329a: 4d 8b 4c 24 30 mov 0x30(%r12),%r9 0.00 : 78329f: 41 8b 7c 24 1c mov 0x1c(%r12),%edi 0.00 : 7832a4: 89 d0 mov %edx,%eax : : /* Walk list of reclaimed elements to end. */ : fcurrent = fhead; : for (;;) : { : n = CHashTableGetNode(table, fcurrent); 0.00 : 7832a6: d1 e8 shr %eax 0.00 : 7832a8: 0f af c7 imul %edi,%eax 0.00 : 7832ab: 49 8d 0c 01 lea (%r9,%rax,1),%rcx : fnext = n->un.gcnext; 0.00 : 7832af: 8b 41 04 mov 0x4(%rcx),%eax : if (CHashPtrIsInvalid(fnext)) 0.00 : 7832b2: 83 f8 fd cmp $0xfffffffd,%eax 0.00 : 7832b5: 76 ef jbe 7832a6 0.00 : 7832b7: eb 10 jmp 7832c9 0.00 : 7832b9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : { : oldhead = *fh; : n->un.gcnext = oldhead; : if (__sync_bool_compare_and_swap(fh, oldhead, fhead)) : break; : CHashTableIncrementStatistic(table, CHS_GC_Reclaim_Retry); 0.00 : 7832c0: 49 83 84 24 d8 00 00 addq $0x1,0xd8(%r12) 0.00 : 7832c7: 00 01 : } : : /* Push reclaimed elements onto home free list. */ : for (;;) : { : oldhead = *fh; 0.00 : 7832c9: 41 8b 00 mov (%r8),%eax : n->un.gcnext = oldhead; 0.00 : 7832cc: 89 41 04 mov %eax,0x4(%rcx) : if (__sync_bool_compare_and_swap(fh, oldhead, fhead)) 0.00 : 7832cf: f0 41 0f b1 10 lock cmpxchg %edx,(%r8) 0.00 : 7832d4: 75 ea jne 7832c0 0.00 : 7832d6: e9 46 fd ff ff jmpq 783021 : { : /* : * Our free list is empty, and we've succesfully pushed the : * reclaimed nodes onto it. So we're done. : */ : CHashTableIncrementStatistic(table, CHS_GC_Reclaim_Fast); 0.00 : 7832db: 49 83 84 24 d0 00 00 addq $0x1,0xd0(%r12) 0.00 : 7832e2: 00 01 0.00 : 7832e4: e9 38 fd ff ff jmpq 783021 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 33.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/resowner/resowner.c:630 33.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/resowner/resowner.c:648 33.33 /home/Computational/mark/src/postgres-andres/src/backend/utils/resowner/resowner.c:648 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000079a900 : : * We allow the case owner == NULL because the bufmgr is sometimes invoked : * outside any transaction (for example, during WAL recovery). : */ : void : ResourceOwnerForgetBuffer(ResourceOwner owner, Buffer buffer) : { 0.00 : 79a900: 55 push %rbp : if (owner != NULL) 0.00 : 79a901: 48 85 ff test %rdi,%rdi : * We allow the case owner == NULL because the bufmgr is sometimes invoked : * outside any transaction (for example, during WAL recovery). : */ : void : ResourceOwnerForgetBuffer(ResourceOwner owner, Buffer buffer) : { 0.00 : 79a904: 48 89 e5 mov %rsp,%rbp 0.00 : 79a907: 41 54 push %r12 0.00 : 79a909: 49 89 fc mov %rdi,%r12 0.00 : 79a90c: 53 push %rbx 0.00 : 79a90d: 89 f3 mov %esi,%ebx : if (owner != NULL) 0.00 : 79a90f: 74 4d je 79a95e : { : Buffer *buffers = owner->buffers; : int nb1 = owner->nbuffers - 1; 0.00 : 79a911: 8b 47 20 mov 0x20(%rdi),%eax : void : ResourceOwnerForgetBuffer(ResourceOwner owner, Buffer buffer) : { : if (owner != NULL) : { : Buffer *buffers = owner->buffers; /home/Computational/mark/src/postgres-andres/src/backend/utils/resowner/resowner.c:630 33.33 : 79a914: 48 8b 77 28 mov 0x28(%rdi),%rsi : /* : * Scan back-to-front because it's more likely we are releasing a : * recently pinned buffer. This isn't always the case of course, but : * it's the way to bet. : */ : for (i = nb1; i >= 0; i--) 0.00 : 79a918: 89 c7 mov %eax,%edi 0.00 : 79a91a: 83 ef 01 sub $0x1,%edi 0.00 : 79a91d: 78 49 js 79a968 : { : if (buffers[i] == buffer) 0.00 : 79a91f: 48 63 c7 movslq %edi,%rax : while (i < nb1) : { : buffers[i] = buffers[i + 1]; : i++; : } : owner->nbuffers = nb1; /home/Computational/mark/src/postgres-andres/src/backend/utils/resowner/resowner.c:648 33.33 : 79a922: 89 fa mov %edi,%edx : * recently pinned buffer. This isn't always the case of course, but : * it's the way to bet. : */ : for (i = nb1; i >= 0; i--) : { : if (buffers[i] == buffer) 0.00 : 79a924: 39 1c 86 cmp %ebx,(%rsi,%rax,4) 0.00 : 79a927: 74 30 je 79a959 0.00 : 79a929: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : /* : * Scan back-to-front because it's more likely we are releasing a : * recently pinned buffer. This isn't always the case of course, but : * it's the way to bet. : */ : for (i = nb1; i >= 0; i--) 0.00 : 79a930: 83 ea 01 sub $0x1,%edx 0.00 : 79a933: 78 33 js 79a968 : { : if (buffers[i] == buffer) 0.00 : 79a935: 48 63 ca movslq %edx,%rcx 0.00 : 79a938: 39 1c 8e cmp %ebx,(%rsi,%rcx,4) 0.00 : 79a93b: 75 f3 jne 79a930 : { : while (i < nb1) 0.00 : 79a93d: 39 d7 cmp %edx,%edi 0.00 : 79a93f: 90 nop 0.00 : 79a940: 7f 09 jg 79a94b 0.00 : 79a942: eb 15 jmp 79a959 0.00 : 79a944: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 79a948: 48 63 ca movslq %edx,%rcx : { : buffers[i] = buffers[i + 1]; 0.00 : 79a94b: 8b 44 8e 04 mov 0x4(%rsi,%rcx,4),%eax : i++; 0.00 : 79a94f: 83 c2 01 add $0x1,%edx : */ : for (i = nb1; i >= 0; i--) : { : if (buffers[i] == buffer) : { : while (i < nb1) 0.00 : 79a952: 39 d7 cmp %edx,%edi : { : buffers[i] = buffers[i + 1]; 0.00 : 79a954: 89 04 8e mov %eax,(%rsi,%rcx,4) : */ : for (i = nb1; i >= 0; i--) : { : if (buffers[i] == buffer) : { : while (i < nb1) 0.00 : 79a957: 7f ef jg 79a948 : { : buffers[i] = buffers[i + 1]; : i++; : } : owner->nbuffers = nb1; 33.33 : 79a959: 41 89 7c 24 20 mov %edi,0x20(%r12) : } : } : elog(ERROR, "buffer %d is not owned by resource owner %s", : buffer, owner->name); : } : } 0.00 : 79a95e: 5b pop %rbx 0.00 : 79a95f: 41 5c pop %r12 0.00 : 79a961: c9 leaveq 0.00 : 79a962: c3 retq 0.00 : 79a963: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : } : owner->nbuffers = nb1; : return; : } : } : elog(ERROR, "buffer %d is not owned by resource owner %s", 0.00 : 79a968: ba 70 27 8e 00 mov $0x8e2770,%edx 0.00 : 79a96d: be 8d 02 00 00 mov $0x28d,%esi 0.00 : 79a972: bf 90 22 8e 00 mov $0x8e2290,%edi 0.00 : 79a977: e8 a4 0a fe ff callq 77b420 0.00 : 79a97c: 49 8b 4c 24 18 mov 0x18(%r12),%rcx 0.00 : 79a981: 89 da mov %ebx,%edx 0.00 : 79a983: be b8 24 8e 00 mov $0x8e24b8,%esi 0.00 : 79a988: bf 14 00 00 00 mov $0x14,%edi 0.00 : 79a98d: 31 c0 xor %eax,%eax 0.00 : 79a98f: e8 9c 08 fe ff callq 77b230 0.00 : 79a994: e8 37 eb cc ff callq 4694d0 Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 33.33 ??:0 33.33 ??:0 33.33 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000084750 : 0.00 : 84750: 48 83 fa 20 cmp $0x20,%rdx 0.00 : 84754: 48 89 f8 mov %rdi,%rax 0.00 : 84757: 73 77 jae 847d0 0.00 : 84759: f6 c2 01 test $0x1,%dl 0.00 : 8475c: 74 0b je 84769 0.00 : 8475e: 0f b6 0e movzbl (%rsi),%ecx 0.00 : 84761: 88 0f mov %cl,(%rdi) 0.00 : 84763: 48 ff c6 inc %rsi 0.00 : 84766: 48 ff c7 inc %rdi 0.00 : 84769: f6 c2 02 test $0x2,%dl 0.00 : 8476c: 74 12 je 84780 0.00 : 8476e: 0f b7 0e movzwl (%rsi),%ecx 0.00 : 84771: 66 89 0f mov %cx,(%rdi) 0.00 : 84774: 48 83 c6 02 add $0x2,%rsi 0.00 : 84778: 48 83 c7 02 add $0x2,%rdi 0.00 : 8477c: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 84780: f6 c2 04 test $0x4,%dl 0.00 : 84783: 74 0c je 84791 0.00 : 84785: 8b 0e mov (%rsi),%ecx 0.00 : 84787: 89 0f mov %ecx,(%rdi) ??:0 33.33 : 84789: 48 83 c6 04 add $0x4,%rsi 0.00 : 8478d: 48 83 c7 04 add $0x4,%rdi 0.00 : 84791: f6 c2 08 test $0x8,%dl 0.00 : 84794: 74 0e je 847a4 0.00 : 84796: 48 8b 0e mov (%rsi),%rcx 0.00 : 84799: 48 89 0f mov %rcx,(%rdi) 0.00 : 8479c: 48 83 c6 08 add $0x8,%rsi 0.00 : 847a0: 48 83 c7 08 add $0x8,%rdi 0.00 : 847a4: 81 e2 f0 00 00 00 and $0xf0,%edx 0.00 : 847aa: 74 1f je 847cb 0.00 : 847ac: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 847b0: 48 8b 0e mov (%rsi),%rcx 0.00 : 847b3: 4c 8b 46 08 mov 0x8(%rsi),%r8 0.00 : 847b7: 48 89 0f mov %rcx,(%rdi) 0.00 : 847ba: 4c 89 47 08 mov %r8,0x8(%rdi) 0.00 : 847be: 83 ea 10 sub $0x10,%edx 0.00 : 847c1: 48 8d 76 10 lea 0x10(%rsi),%rsi 0.00 : 847c5: 48 8d 7f 10 lea 0x10(%rdi),%rdi 0.00 : 847c9: 75 e5 jne 847b0 0.00 : 847cb: f3 c3 repz retq 0.00 : 847cd: 0f 1f 00 nopl (%rax) 0.00 : 847d0: 48 89 44 24 f8 mov %rax,-0x8(%rsp) 0.00 : 847d5: 89 f1 mov %esi,%ecx 0.00 : 847d7: 83 e1 07 and $0x7,%ecx 0.00 : 847da: 74 34 je 84810 0.00 : 847dc: 48 8d 54 11 f8 lea -0x8(%rcx,%rdx,1),%rdx 0.00 : 847e1: 83 e9 08 sub $0x8,%ecx 0.00 : 847e4: 66 66 66 2e 0f 1f 84 data32 data32 nopw %cs:0x0(%rax,%rax,1) 0.00 : 847eb: 00 00 00 00 00 0.00 : 847f0: 0f b6 06 movzbl (%rsi),%eax 0.00 : 847f3: 88 07 mov %al,(%rdi) 0.00 : 847f5: ff c1 inc %ecx 0.00 : 847f7: 48 8d 76 01 lea 0x1(%rsi),%rsi 0.00 : 847fb: 48 8d 7f 01 lea 0x1(%rdi),%rdi 0.00 : 847ff: 75 ef jne 847f0 0.00 : 84801: 66 66 66 66 66 66 2e data32 data32 data32 data32 data32 nopw %cs:0x0(%rax,%rax,1) 0.00 : 84808: 0f 1f 84 00 00 00 00 0.00 : 8480f: 00 0.00 : 84810: 48 81 fa 00 04 00 00 cmp $0x400,%rdx 0.00 : 84817: 77 77 ja 84890 0.00 : 84819: 89 d1 mov %edx,%ecx 0.00 : 8481b: c1 e9 05 shr $0x5,%ecx 0.00 : 8481e: 74 60 je 84880 0.00 : 84820: ff c9 dec %ecx 0.00 : 84822: 48 8b 06 mov (%rsi),%rax 0.00 : 84825: 4c 8b 46 08 mov 0x8(%rsi),%r8 0.00 : 84829: 4c 8b 4e 10 mov 0x10(%rsi),%r9 0.00 : 8482d: 4c 8b 56 18 mov 0x18(%rsi),%r10 0.00 : 84831: 48 89 07 mov %rax,(%rdi) 0.00 : 84834: 4c 89 47 08 mov %r8,0x8(%rdi) 0.00 : 84838: 4c 89 4f 10 mov %r9,0x10(%rdi) 0.00 : 8483c: 4c 89 57 18 mov %r10,0x18(%rdi) 0.00 : 84840: 48 8d 76 20 lea 0x20(%rsi),%rsi 0.00 : 84844: 48 8d 7f 20 lea 0x20(%rdi),%rdi 0.00 : 84848: 74 36 je 84880 33.33 : 8484a: ff c9 dec %ecx 0.00 : 8484c: 48 8b 06 mov (%rsi),%rax 0.00 : 8484f: 4c 8b 46 08 mov 0x8(%rsi),%r8 0.00 : 84853: 4c 8b 4e 10 mov 0x10(%rsi),%r9 0.00 : 84857: 4c 8b 56 18 mov 0x18(%rsi),%r10 0.00 : 8485b: 48 89 07 mov %rax,(%rdi) 0.00 : 8485e: 4c 89 47 08 mov %r8,0x8(%rdi) 0.00 : 84862: 4c 89 4f 10 mov %r9,0x10(%rdi) 0.00 : 84866: 4c 89 57 18 mov %r10,0x18(%rdi) 33.33 : 8486a: 48 8d 76 20 lea 0x20(%rsi),%rsi 0.00 : 8486e: 48 8d 7f 20 lea 0x20(%rdi),%rdi 0.00 : 84872: 75 ac jne 84820 0.00 : 84874: 66 66 66 2e 0f 1f 84 data32 data32 nopw %cs:0x0(%rax,%rax,1) 0.00 : 8487b: 00 00 00 00 00 0.00 : 84880: 83 e2 1f and $0x1f,%edx 0.00 : 84883: 48 8b 44 24 f8 mov -0x8(%rsp),%rax 0.00 : 84888: 0f 85 cb fe ff ff jne 84759 0.00 : 8488e: f3 c3 repz retq 0.00 : 84890: 4c 8b 1d 79 d8 2e 00 mov 0x2ed879(%rip),%r11 # 372110 <__x86_64_data_cache_size_half> 0.00 : 84897: 49 39 d3 cmp %rdx,%r11 0.00 : 8489a: 4c 0f 47 da cmova %rdx,%r11 0.00 : 8489e: 4c 89 d9 mov %r11,%rcx 0.00 : 848a1: 49 83 e3 f8 and $0xfffffffffffffff8,%r11 0.00 : 848a5: 48 c1 e9 03 shr $0x3,%rcx 0.00 : 848a9: 74 05 je 848b0 0.00 : 848ab: f3 48 a5 rep movsq %ds:(%rsi),%es:(%rdi) 0.00 : 848ae: 66 90 xchg %ax,%ax 0.00 : 848b0: 4c 29 da sub %r11,%rdx 0.00 : 848b3: 48 f7 c2 f8 ff ff ff test $0xfffffffffffffff8,%rdx 0.00 : 848ba: 75 14 jne 848d0 0.00 : 848bc: 83 e2 07 and $0x7,%edx 0.00 : 848bf: 48 8b 44 24 f8 mov -0x8(%rsp),%rax 0.00 : 848c4: 0f 85 8f fe ff ff jne 84759 0.00 : 848ca: f3 c3 repz retq 0.00 : 848cc: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 848d0: 4c 8b 05 59 d8 2e 00 mov 0x2ed859(%rip),%r8 # 372130 <__x86_64_shared_cache_size_half> 0.00 : 848d7: 49 39 d0 cmp %rdx,%r8 0.00 : 848da: 4c 0f 47 c2 cmova %rdx,%r8 0.00 : 848de: 4c 89 c1 mov %r8,%rcx 0.00 : 848e1: 49 83 e0 c0 and $0xffffffffffffffc0,%r8 0.00 : 848e5: 48 c1 e9 06 shr $0x6,%rcx 0.00 : 848e9: 0f 84 ab 01 00 00 je 84a9a 0.00 : 848ef: 4c 89 74 24 f0 mov %r14,-0x10(%rsp) 0.00 : 848f4: 4c 89 6c 24 e8 mov %r13,-0x18(%rsp) 0.00 : 848f9: 4c 89 64 24 e0 mov %r12,-0x20(%rsp) 0.00 : 848fe: 48 89 5c 24 d8 mov %rbx,-0x28(%rsp) 0.00 : 84903: 83 3d 06 2b 2f 00 00 cmpl $0x0,0x2f2b06(%rip) # 377410 <__x86_64_prefetchw> 0.00 : 8490a: 0f 84 c0 00 00 00 je 849d0 0.00 : 84910: 48 ff c9 dec %rcx 0.00 : 84913: 48 8b 06 mov (%rsi),%rax 0.00 : 84916: 48 8b 5e 08 mov 0x8(%rsi),%rbx 0.00 : 8491a: 4c 8b 4e 10 mov 0x10(%rsi),%r9 0.00 : 8491e: 4c 8b 56 18 mov 0x18(%rsi),%r10 0.00 : 84922: 4c 8b 5e 20 mov 0x20(%rsi),%r11 0.00 : 84926: 4c 8b 66 28 mov 0x28(%rsi),%r12 0.00 : 8492a: 4c 8b 6e 30 mov 0x30(%rsi),%r13 0.00 : 8492e: 4c 8b 76 38 mov 0x38(%rsi),%r14 0.00 : 84932: 0f 18 8e 80 03 00 00 prefetcht0 0x380(%rsi) 0.00 : 84939: 0f 18 8e c0 03 00 00 prefetcht0 0x3c0(%rsi) 0.00 : 84940: 48 89 07 mov %rax,(%rdi) 0.00 : 84943: 48 89 5f 08 mov %rbx,0x8(%rdi) 0.00 : 84947: 4c 89 4f 10 mov %r9,0x10(%rdi) 0.00 : 8494b: 4c 89 57 18 mov %r10,0x18(%rdi) 0.00 : 8494f: 4c 89 5f 20 mov %r11,0x20(%rdi) 0.00 : 84953: 4c 89 67 28 mov %r12,0x28(%rdi) 0.00 : 84957: 4c 89 6f 30 mov %r13,0x30(%rdi) 0.00 : 8495b: 4c 89 77 38 mov %r14,0x38(%rdi) 0.00 : 8495f: 48 8d 76 40 lea 0x40(%rsi),%rsi 0.00 : 84963: 48 8d 7f 40 lea 0x40(%rdi),%rdi 0.00 : 84967: 0f 84 19 01 00 00 je 84a86 0.00 : 8496d: 48 ff c9 dec %rcx 0.00 : 84970: 48 8b 06 mov (%rsi),%rax 0.00 : 84973: 48 8b 5e 08 mov 0x8(%rsi),%rbx 0.00 : 84977: 4c 8b 4e 10 mov 0x10(%rsi),%r9 0.00 : 8497b: 4c 8b 56 18 mov 0x18(%rsi),%r10 0.00 : 8497f: 4c 8b 5e 20 mov 0x20(%rsi),%r11 0.00 : 84983: 4c 8b 66 28 mov 0x28(%rsi),%r12 0.00 : 84987: 4c 8b 6e 30 mov 0x30(%rsi),%r13 0.00 : 8498b: 4c 8b 76 38 mov 0x38(%rsi),%r14 0.00 : 8498f: 48 89 07 mov %rax,(%rdi) 0.00 : 84992: 48 89 5f 08 mov %rbx,0x8(%rdi) 0.00 : 84996: 4c 89 4f 10 mov %r9,0x10(%rdi) 0.00 : 8499a: 4c 89 57 18 mov %r10,0x18(%rdi) 0.00 : 8499e: 4c 89 5f 20 mov %r11,0x20(%rdi) 0.00 : 849a2: 4c 89 67 28 mov %r12,0x28(%rdi) 0.00 : 849a6: 4c 89 6f 30 mov %r13,0x30(%rdi) 0.00 : 849aa: 4c 89 77 38 mov %r14,0x38(%rdi) 0.00 : 849ae: 0f 0d 8f 40 03 00 00 prefetchw 0x340(%rdi) 0.00 : 849b5: 0f 0d 8f 80 03 00 00 prefetchw 0x380(%rdi) 0.00 : 849bc: 48 8d 76 40 lea 0x40(%rsi),%rsi 0.00 : 849c0: 48 8d 7f 40 lea 0x40(%rdi),%rdi 0.00 : 849c4: 0f 85 46 ff ff ff jne 84910 0.00 : 849ca: e9 b7 00 00 00 jmpq 84a86 0.00 : 849cf: 90 nop 0.00 : 849d0: 48 ff c9 dec %rcx 0.00 : 849d3: 48 8b 06 mov (%rsi),%rax 0.00 : 849d6: 48 8b 5e 08 mov 0x8(%rsi),%rbx 0.00 : 849da: 4c 8b 4e 10 mov 0x10(%rsi),%r9 0.00 : 849de: 4c 8b 56 18 mov 0x18(%rsi),%r10 0.00 : 849e2: 4c 8b 5e 20 mov 0x20(%rsi),%r11 0.00 : 849e6: 4c 8b 66 28 mov 0x28(%rsi),%r12 0.00 : 849ea: 4c 8b 6e 30 mov 0x30(%rsi),%r13 0.00 : 849ee: 4c 8b 76 38 mov 0x38(%rsi),%r14 0.00 : 849f2: 0f 18 8e 80 03 00 00 prefetcht0 0x380(%rsi) 0.00 : 849f9: 0f 18 8e c0 03 00 00 prefetcht0 0x3c0(%rsi) 0.00 : 84a00: 48 89 07 mov %rax,(%rdi) 0.00 : 84a03: 48 89 5f 08 mov %rbx,0x8(%rdi) 0.00 : 84a07: 4c 89 4f 10 mov %r9,0x10(%rdi) 0.00 : 84a0b: 4c 89 57 18 mov %r10,0x18(%rdi) 0.00 : 84a0f: 4c 89 5f 20 mov %r11,0x20(%rdi) 0.00 : 84a13: 4c 89 67 28 mov %r12,0x28(%rdi) 0.00 : 84a17: 4c 89 6f 30 mov %r13,0x30(%rdi) 0.00 : 84a1b: 4c 89 77 38 mov %r14,0x38(%rdi) 0.00 : 84a1f: 48 8d 76 40 lea 0x40(%rsi),%rsi 0.00 : 84a23: 48 8d 7f 40 lea 0x40(%rdi),%rdi 0.00 : 84a27: 74 5d je 84a86 0.00 : 84a29: 48 ff c9 dec %rcx 0.00 : 84a2c: 48 8b 06 mov (%rsi),%rax 0.00 : 84a2f: 48 8b 5e 08 mov 0x8(%rsi),%rbx 0.00 : 84a33: 4c 8b 4e 10 mov 0x10(%rsi),%r9 0.00 : 84a37: 4c 8b 56 18 mov 0x18(%rsi),%r10 0.00 : 84a3b: 4c 8b 5e 20 mov 0x20(%rsi),%r11 0.00 : 84a3f: 4c 8b 66 28 mov 0x28(%rsi),%r12 0.00 : 84a43: 4c 8b 6e 30 mov 0x30(%rsi),%r13 0.00 : 84a47: 4c 8b 76 38 mov 0x38(%rsi),%r14 0.00 : 84a4b: 0f 18 8f 40 03 00 00 prefetcht0 0x340(%rdi) 0.00 : 84a52: 0f 18 8f 80 03 00 00 prefetcht0 0x380(%rdi) 0.00 : 84a59: 48 89 07 mov %rax,(%rdi) 0.00 : 84a5c: 48 89 5f 08 mov %rbx,0x8(%rdi) 0.00 : 84a60: 4c 89 4f 10 mov %r9,0x10(%rdi) 0.00 : 84a64: 4c 89 57 18 mov %r10,0x18(%rdi) 0.00 : 84a68: 4c 89 5f 20 mov %r11,0x20(%rdi) 0.00 : 84a6c: 4c 89 67 28 mov %r12,0x28(%rdi) 0.00 : 84a70: 4c 89 6f 30 mov %r13,0x30(%rdi) 0.00 : 84a74: 4c 89 77 38 mov %r14,0x38(%rdi) 0.00 : 84a78: 48 8d 76 40 lea 0x40(%rsi),%rsi 0.00 : 84a7c: 48 8d 7f 40 lea 0x40(%rdi),%rdi 0.00 : 84a80: 0f 85 4a ff ff ff jne 849d0 0.00 : 84a86: 48 8b 5c 24 d8 mov -0x28(%rsp),%rbx 0.00 : 84a8b: 4c 8b 64 24 e0 mov -0x20(%rsp),%r12 0.00 : 84a90: 4c 8b 6c 24 e8 mov -0x18(%rsp),%r13 0.00 : 84a95: 4c 8b 74 24 f0 mov -0x10(%rsp),%r14 0.00 : 84a9a: 4c 29 c2 sub %r8,%rdx 0.00 : 84a9d: 48 f7 c2 c0 ff ff ff test $0xffffffffffffffc0,%rdx 0.00 : 84aa4: 75 1a jne 84ac0 0.00 : 84aa6: 83 e2 3f and $0x3f,%edx 0.00 : 84aa9: 48 8b 44 24 f8 mov -0x8(%rsp),%rax 0.00 : 84aae: 0f 85 a5 fc ff ff jne 84759 0.00 : 84ab4: f3 c3 repz retq 0.00 : 84ab6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 84abd: 00 00 00 0.00 : 84ac0: 48 89 d1 mov %rdx,%rcx 0.00 : 84ac3: 48 c1 e9 07 shr $0x7,%rcx 0.00 : 84ac7: 0f 84 d8 00 00 00 je 84ba5 0.00 : 84acd: 4c 89 74 24 f0 mov %r14,-0x10(%rsp) 0.00 : 84ad2: 4c 89 6c 24 e8 mov %r13,-0x18(%rsp) 0.00 : 84ad7: 4c 89 64 24 e0 mov %r12,-0x20(%rsp) 0.00 : 84adc: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 84ae0: 0f 18 86 00 03 00 00 prefetchnta 0x300(%rsi) 0.00 : 84ae7: 0f 18 86 40 03 00 00 prefetchnta 0x340(%rsi) 0.00 : 84aee: 48 ff c9 dec %rcx 0.00 : 84af1: 48 8b 06 mov (%rsi),%rax 0.00 : 84af4: 4c 8b 46 08 mov 0x8(%rsi),%r8 0.00 : 84af8: 4c 8b 4e 10 mov 0x10(%rsi),%r9 0.00 : 84afc: 4c 8b 56 18 mov 0x18(%rsi),%r10 0.00 : 84b00: 4c 8b 5e 20 mov 0x20(%rsi),%r11 0.00 : 84b04: 4c 8b 66 28 mov 0x28(%rsi),%r12 0.00 : 84b08: 4c 8b 6e 30 mov 0x30(%rsi),%r13 0.00 : 84b0c: 4c 8b 76 38 mov 0x38(%rsi),%r14 0.00 : 84b10: 48 0f c3 07 movnti %rax,(%rdi) 0.00 : 84b14: 4c 0f c3 47 08 movnti %r8,0x8(%rdi) 0.00 : 84b19: 4c 0f c3 4f 10 movnti %r9,0x10(%rdi) 0.00 : 84b1e: 4c 0f c3 57 18 movnti %r10,0x18(%rdi) 0.00 : 84b23: 4c 0f c3 5f 20 movnti %r11,0x20(%rdi) 0.00 : 84b28: 4c 0f c3 67 28 movnti %r12,0x28(%rdi) 0.00 : 84b2d: 4c 0f c3 6f 30 movnti %r13,0x30(%rdi) 0.00 : 84b32: 4c 0f c3 77 38 movnti %r14,0x38(%rdi) 0.00 : 84b37: 48 8b 46 40 mov 0x40(%rsi),%rax 0.00 : 84b3b: 4c 8b 46 48 mov 0x48(%rsi),%r8 0.00 : 84b3f: 4c 8b 4e 50 mov 0x50(%rsi),%r9 0.00 : 84b43: 4c 8b 56 58 mov 0x58(%rsi),%r10 0.00 : 84b47: 4c 8b 5e 60 mov 0x60(%rsi),%r11 0.00 : 84b4b: 4c 8b 66 68 mov 0x68(%rsi),%r12 0.00 : 84b4f: 4c 8b 6e 70 mov 0x70(%rsi),%r13 0.00 : 84b53: 4c 8b 76 78 mov 0x78(%rsi),%r14 0.00 : 84b57: 48 0f c3 47 40 movnti %rax,0x40(%rdi) 0.00 : 84b5c: 4c 0f c3 47 48 movnti %r8,0x48(%rdi) 0.00 : 84b61: 4c 0f c3 4f 50 movnti %r9,0x50(%rdi) 0.00 : 84b66: 4c 0f c3 57 58 movnti %r10,0x58(%rdi) 0.00 : 84b6b: 4c 0f c3 5f 60 movnti %r11,0x60(%rdi) 0.00 : 84b70: 4c 0f c3 67 68 movnti %r12,0x68(%rdi) 0.00 : 84b75: 4c 0f c3 6f 70 movnti %r13,0x70(%rdi) 0.00 : 84b7a: 4c 0f c3 77 78 movnti %r14,0x78(%rdi) 0.00 : 84b7f: 48 8d b6 80 00 00 00 lea 0x80(%rsi),%rsi 0.00 : 84b86: 48 8d bf 80 00 00 00 lea 0x80(%rdi),%rdi 0.00 : 84b8d: 0f 85 4d ff ff ff jne 84ae0 0.00 : 84b93: 0f ae f8 sfence 0.00 : 84b96: 4c 8b 64 24 e0 mov -0x20(%rsp),%r12 0.00 : 84b9b: 4c 8b 6c 24 e8 mov -0x18(%rsp),%r13 0.00 : 84ba0: 4c 8b 74 24 f0 mov -0x10(%rsp),%r14 0.00 : 84ba5: 83 e2 7f and $0x7f,%edx 0.00 : 84ba8: 48 8b 44 24 f8 mov -0x8(%rsp),%rax 0.00 : 84bad: 0f 85 a6 fb ff ff jne 84759 0.00 : 84bb3: f3 c3 repz retq Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 50.00 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/syncscan.c:305 50.00 /home/Computational/mark/src/postgres-andres/src/backend/access/heap/syncscan.c:192 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000004a0e20 : : * (relfilenode, blocknumber), overwriting any existing entry for the : * same relfilenode. : */ : void : ss_report_location(Relation rel, BlockNumber location) : { 0.00 : 4a0e20: 55 push %rbp : * Missing a few updates isn't critical, it just means that a new scan : * that wants to join the pack will start a little bit behind the head of : * the scan. Hopefully the pages are still in OS cache and the scan : * catches up quickly. : */ : if ((location % SYNC_SCAN_REPORT_INTERVAL) == 0) /home/Computational/mark/src/postgres-andres/src/backend/access/heap/syncscan.c:305 50.00 : 4a0e21: 40 f6 c6 0f test $0xf,%sil : * (relfilenode, blocknumber), overwriting any existing entry for the : * same relfilenode. : */ : void : ss_report_location(Relation rel, BlockNumber location) : { 0.00 : 4a0e25: 48 89 e5 mov %rsp,%rbp 0.00 : 4a0e28: 41 54 push %r12 0.00 : 4a0e2a: 41 89 f4 mov %esi,%r12d 0.00 : 4a0e2d: 53 push %rbx 0.00 : 4a0e2e: 48 89 fb mov %rdi,%rbx : * Missing a few updates isn't critical, it just means that a new scan : * that wants to join the pack will start a little bit behind the head of : * the scan. Hopefully the pages are still in OS cache and the scan : * catches up quickly. : */ : if ((location % SYNC_SCAN_REPORT_INTERVAL) == 0) 0.00 : 4a0e31: 74 0d je 4a0e40 : elog(LOG, : "SYNC_SCAN: missed update for \"%s\" at %u", : RelationGetRelationName(rel), location); : #endif : } : } 0.00 : 4a0e33: 5b pop %rbx 0.00 : 4a0e34: 41 5c pop %r12 0.00 : 4a0e36: c9 leaveq 0.00 : 4a0e37: c3 retq 0.00 : 4a0e38: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 4a0e3f: 00 : * the scan. Hopefully the pages are still in OS cache and the scan : * catches up quickly. : */ : if ((location % SYNC_SCAN_REPORT_INTERVAL) == 0) : { : if (LWLockConditionalAcquire(SyncScanLock, LW_EXCLUSIVE)) 0.00 : 4a0e40: 48 8b 3d b9 cb 6d 00 mov 0x6dcbb9(%rip),%rdi # b7da00 0.00 : 4a0e47: 31 f6 xor %esi,%esi 0.00 : 4a0e49: 48 81 c7 00 03 00 00 add $0x300,%rdi 0.00 : 4a0e50: e8 4b e1 1e 00 callq 68efa0 0.00 : 4a0e55: 84 c0 test %al,%al 0.00 : 4a0e57: 74 da je 4a0e33 : static BlockNumber : ss_search(RelFileNode relfilenode, BlockNumber location, bool set) : { : ss_lru_item_t *item; : : item = scan_locations->head; 0.00 : 4a0e59: 48 8b 35 a0 7e 6d 00 mov 0x6d7ea0(%rip),%rsi # b78d00 : */ : if ((location % SYNC_SCAN_REPORT_INTERVAL) == 0) : { : if (LWLockConditionalAcquire(SyncScanLock, LW_EXCLUSIVE)) : { : (void) ss_search(rel->rd_node, location, true); 0.00 : 4a0e60: 8b 53 08 mov 0x8(%rbx),%edx 0.00 : 4a0e63: 44 8b 43 04 mov 0x4(%rbx),%r8d 0.00 : 4a0e67: 8b 3b mov (%rbx),%edi : static BlockNumber : ss_search(RelFileNode relfilenode, BlockNumber location, bool set) : { : ss_lru_item_t *item; : : item = scan_locations->head; 0.00 : 4a0e69: 48 8b 0e mov (%rsi),%rcx /home/Computational/mark/src/postgres-andres/src/backend/access/heap/syncscan.c:192 50.00 : 4a0e6c: eb 0e jmp 4a0e7c 0.00 : 4a0e6e: 66 90 xchg %ax,%ax : { : bool match; : : match = RelFileNodeEquals(item->location.relfilenode, relfilenode); : : if (match || item->next == NULL) 0.00 : 4a0e70: 48 8b 41 08 mov 0x8(%rcx),%rax 0.00 : 4a0e74: 48 85 c0 test %rax,%rax 0.00 : 4a0e77: 74 6f je 4a0ee8 0.00 : 4a0e79: 48 89 c1 mov %rax,%rcx : item = scan_locations->head; : for (;;) : { : bool match; : : match = RelFileNodeEquals(item->location.relfilenode, relfilenode); 0.00 : 4a0e7c: 39 51 18 cmp %edx,0x18(%rcx) 0.00 : 4a0e7f: 75 ef jne 4a0e70 0.00 : 4a0e81: 44 39 41 14 cmp %r8d,0x14(%rcx) 0.00 : 4a0e85: 75 e9 jne 4a0e70 0.00 : 4a0e87: 39 79 10 cmp %edi,0x10(%rcx) 0.00 : 4a0e8a: 75 e4 jne 4a0e70 : * the last entry : */ : if (!match) : { : item->location.relfilenode = relfilenode; : item->location.location = location; 0.00 : 4a0e8c: 44 89 61 1c mov %r12d,0x1c(%rcx) : } : else if (set) : item->location.location = location; : : /* Move the entry to the front of the LRU list */ : if (item != scan_locations->head) 0.00 : 4a0e90: 48 3b 0e cmp (%rsi),%rcx 0.00 : 4a0e93: 74 37 je 4a0ecc : { : /* unlink */ : if (item == scan_locations->tail) 0.00 : 4a0e95: 48 3b 4e 08 cmp 0x8(%rsi),%rcx 0.00 : 4a0e99: 74 5d je 4a0ef8 : scan_locations->tail = item->prev; : item->prev->next = item->next; 0.00 : 4a0e9b: 48 8b 11 mov (%rcx),%rdx 0.00 : 4a0e9e: 48 8b 41 08 mov 0x8(%rcx),%rax 0.00 : 4a0ea2: 48 89 42 08 mov %rax,0x8(%rdx) : if (item->next) 0.00 : 4a0ea6: 48 8b 51 08 mov 0x8(%rcx),%rdx 0.00 : 4a0eaa: 48 85 d2 test %rdx,%rdx 0.00 : 4a0ead: 74 06 je 4a0eb5 : item->next->prev = item->prev; 0.00 : 4a0eaf: 48 8b 01 mov (%rcx),%rax 0.00 : 4a0eb2: 48 89 02 mov %rax,(%rdx) : : /* link */ : item->prev = NULL; 0.00 : 4a0eb5: 48 c7 01 00 00 00 00 movq $0x0,(%rcx) : item->next = scan_locations->head; 0.00 : 4a0ebc: 48 8b 06 mov (%rsi),%rax 0.00 : 4a0ebf: 48 89 41 08 mov %rax,0x8(%rcx) : scan_locations->head->prev = item; 0.00 : 4a0ec3: 48 8b 06 mov (%rsi),%rax 0.00 : 4a0ec6: 48 89 08 mov %rcx,(%rax) : scan_locations->head = item; 0.00 : 4a0ec9: 48 89 0e mov %rcx,(%rsi) : if ((location % SYNC_SCAN_REPORT_INTERVAL) == 0) : { : if (LWLockConditionalAcquire(SyncScanLock, LW_EXCLUSIVE)) : { : (void) ss_search(rel->rd_node, location, true); : LWLockRelease(SyncScanLock); 0.00 : 4a0ecc: 48 8b 3d 2d cb 6d 00 mov 0x6dcb2d(%rip),%rdi # b7da00 : elog(LOG, : "SYNC_SCAN: missed update for \"%s\" at %u", : RelationGetRelationName(rel), location); : #endif : } : } 0.00 : 4a0ed3: 5b pop %rbx 0.00 : 4a0ed4: 41 5c pop %r12 0.00 : 4a0ed6: c9 leaveq : if ((location % SYNC_SCAN_REPORT_INTERVAL) == 0) : { : if (LWLockConditionalAcquire(SyncScanLock, LW_EXCLUSIVE)) : { : (void) ss_search(rel->rd_node, location, true); : LWLockRelease(SyncScanLock); 0.00 : 4a0ed7: 48 81 c7 00 03 00 00 add $0x300,%rdi 0.00 : 4a0ede: e9 bd e4 1e 00 jmpq 68f3a0 0.00 : 4a0ee3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : * If we reached the end of list and no match was found, take over : * the last entry : */ : if (!match) : { : item->location.relfilenode = relfilenode; 0.00 : 4a0ee8: 89 79 10 mov %edi,0x10(%rcx) 0.00 : 4a0eeb: 44 89 41 14 mov %r8d,0x14(%rcx) 0.00 : 4a0eef: 89 51 18 mov %edx,0x18(%rcx) 0.00 : 4a0ef2: eb 98 jmp 4a0e8c 0.00 : 4a0ef4: 0f 1f 40 00 nopl 0x0(%rax) : /* Move the entry to the front of the LRU list */ : if (item != scan_locations->head) : { : /* unlink */ : if (item == scan_locations->tail) : scan_locations->tail = item->prev; 0.00 : 4a0ef8: 48 8b 01 mov (%rcx),%rax 0.00 : 4a0efb: 48 89 46 08 mov %rax,0x8(%rsi) 0.00 : 4a0eff: eb 9a jmp 4a0e9b Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 50.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:3003 50.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:3012 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000674710 : : /* : * Acquire or release the content_lock for the buffer. : */ : void : LockBuffer(Buffer buffer, int mode) : { /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:3003 50.00 : 674710: 55 push %rbp 0.00 : 674711: 48 89 e5 mov %rsp,%rbp 0.00 : 674714: 53 push %rbx 0.00 : 674715: 89 f3 mov %esi,%ebx 0.00 : 674717: 48 83 ec 08 sub $0x8,%rsp : volatile BufferDesc *buf; : : Assert(BufferIsValid(buffer)); : if (BufferIsLocal(buffer)) 0.00 : 67471b: 85 ff test %edi,%edi 0.00 : 67471d: 78 31 js 674750 : return; /* local buffers need no lock */ : : buf = &(BufferDescriptors[buffer - 1]); 0.00 : 67471f: 48 63 c7 movslq %edi,%rax 0.00 : 674722: 48 83 e8 01 sub $0x1,%rax 0.00 : 674726: 48 c1 e0 06 shl $0x6,%rax 0.00 : 67472a: 48 03 05 cf b3 54 00 add 0x54b3cf(%rip),%rax # bbfb00 : : if (mode == BUFFER_LOCK_UNLOCK) /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:3012 50.00 : 674731: 85 f6 test %esi,%esi 0.00 : 674733: 74 2b je 674760 : LWLockRelease(buf->content_lock); : else if (mode == BUFFER_LOCK_SHARE) 0.00 : 674735: 83 fe 01 cmp $0x1,%esi 0.00 : 674738: 74 36 je 674770 : LWLockAcquire(buf->content_lock, LW_SHARED); : else if (mode == BUFFER_LOCK_EXCLUSIVE) 0.00 : 67473a: 83 fe 02 cmp $0x2,%esi 0.00 : 67473d: 75 45 jne 674784 : LWLockAcquire(buf->content_lock, LW_EXCLUSIVE); 0.00 : 67473f: 48 8b 78 38 mov 0x38(%rax),%rdi : else : elog(ERROR, "unrecognized buffer lock mode: %d", mode); : } 0.00 : 674743: 48 83 c4 08 add $0x8,%rsp : if (mode == BUFFER_LOCK_UNLOCK) : LWLockRelease(buf->content_lock); : else if (mode == BUFFER_LOCK_SHARE) : LWLockAcquire(buf->content_lock, LW_SHARED); : else if (mode == BUFFER_LOCK_EXCLUSIVE) : LWLockAcquire(buf->content_lock, LW_EXCLUSIVE); 0.00 : 674747: 31 f6 xor %esi,%esi : else : elog(ERROR, "unrecognized buffer lock mode: %d", mode); : } 0.00 : 674749: 5b pop %rbx 0.00 : 67474a: c9 leaveq : if (mode == BUFFER_LOCK_UNLOCK) : LWLockRelease(buf->content_lock); : else if (mode == BUFFER_LOCK_SHARE) : LWLockAcquire(buf->content_lock, LW_SHARED); : else if (mode == BUFFER_LOCK_EXCLUSIVE) : LWLockAcquire(buf->content_lock, LW_EXCLUSIVE); 0.00 : 67474b: e9 a0 b3 01 00 jmpq 68faf0 : else : elog(ERROR, "unrecognized buffer lock mode: %d", mode); : } 0.00 : 674750: 48 83 c4 08 add $0x8,%rsp 0.00 : 674754: 5b pop %rbx 0.00 : 674755: c9 leaveq 0.00 : 674756: c3 retq 0.00 : 674757: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 67475e: 00 00 : return; /* local buffers need no lock */ : : buf = &(BufferDescriptors[buffer - 1]); : : if (mode == BUFFER_LOCK_UNLOCK) : LWLockRelease(buf->content_lock); 0.00 : 674760: 48 8b 78 38 mov 0x38(%rax),%rdi : LWLockAcquire(buf->content_lock, LW_SHARED); : else if (mode == BUFFER_LOCK_EXCLUSIVE) : LWLockAcquire(buf->content_lock, LW_EXCLUSIVE); : else : elog(ERROR, "unrecognized buffer lock mode: %d", mode); : } 0.00 : 674764: 48 83 c4 08 add $0x8,%rsp 0.00 : 674768: 5b pop %rbx 0.00 : 674769: c9 leaveq : return; /* local buffers need no lock */ : : buf = &(BufferDescriptors[buffer - 1]); : : if (mode == BUFFER_LOCK_UNLOCK) : LWLockRelease(buf->content_lock); 0.00 : 67476a: e9 31 ac 01 00 jmpq 68f3a0 0.00 : 67476f: 90 nop : else if (mode == BUFFER_LOCK_SHARE) : LWLockAcquire(buf->content_lock, LW_SHARED); 0.00 : 674770: 48 8b 78 38 mov 0x38(%rax),%rdi : else if (mode == BUFFER_LOCK_EXCLUSIVE) : LWLockAcquire(buf->content_lock, LW_EXCLUSIVE); : else : elog(ERROR, "unrecognized buffer lock mode: %d", mode); : } 0.00 : 674774: 48 83 c4 08 add $0x8,%rsp : buf = &(BufferDescriptors[buffer - 1]); : : if (mode == BUFFER_LOCK_UNLOCK) : LWLockRelease(buf->content_lock); : else if (mode == BUFFER_LOCK_SHARE) : LWLockAcquire(buf->content_lock, LW_SHARED); 0.00 : 674778: be 01 00 00 00 mov $0x1,%esi : else if (mode == BUFFER_LOCK_EXCLUSIVE) : LWLockAcquire(buf->content_lock, LW_EXCLUSIVE); : else : elog(ERROR, "unrecognized buffer lock mode: %d", mode); : } 0.00 : 67477d: 5b pop %rbx 0.00 : 67477e: c9 leaveq : buf = &(BufferDescriptors[buffer - 1]); : : if (mode == BUFFER_LOCK_UNLOCK) : LWLockRelease(buf->content_lock); : else if (mode == BUFFER_LOCK_SHARE) : LWLockAcquire(buf->content_lock, LW_SHARED); 0.00 : 67477f: e9 6c b3 01 00 jmpq 68faf0 : else if (mode == BUFFER_LOCK_EXCLUSIVE) : LWLockAcquire(buf->content_lock, LW_EXCLUSIVE); : else : elog(ERROR, "unrecognized buffer lock mode: %d", mode); 0.00 : 674784: ba 15 a0 8a 00 mov $0x8aa015,%edx 0.00 : 674789: be cb 0b 00 00 mov $0xbcb,%esi 0.00 : 67478e: bf 53 9d 8a 00 mov $0x8a9d53,%edi 0.00 : 674793: e8 88 6c 10 00 callq 77b420 0.00 : 674798: 89 da mov %ebx,%edx 0.00 : 67479a: be f8 9d 8a 00 mov $0x8a9df8,%esi 0.00 : 67479f: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6747a4: 31 c0 xor %eax,%eax 0.00 : 6747a6: e8 85 6a 10 00 callq 77b230 0.00 : 6747ab: e8 20 4d df ff callq 4694d0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1379 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000674d30 : : * Most but not all callers want CurrentResourceOwner to be adjusted. : * Those that don't should pass fixOwner = FALSE. : */ : static void : UnpinBuffer(volatile BufferDesc *buf, bool fixOwner) : { 0.00 : 674d30: 55 push %rbp : PrivateRefCountEntry *ref; : int b = buf->buf_id; : : ref = GetPrivateRefCountEntry(b + 1, false, false); 0.00 : 674d31: 31 d2 xor %edx,%edx : * Most but not all callers want CurrentResourceOwner to be adjusted. : * Those that don't should pass fixOwner = FALSE. : */ : static void : UnpinBuffer(volatile BufferDesc *buf, bool fixOwner) : { 0.00 : 674d33: 48 89 e5 mov %rsp,%rbp 0.00 : 674d36: 48 89 5d e8 mov %rbx,-0x18(%rbp) 0.00 : 674d3a: 4c 89 65 f0 mov %r12,-0x10(%rbp) 0.00 : 674d3e: 48 89 fb mov %rdi,%rbx 0.00 : 674d41: 4c 89 6d f8 mov %r13,-0x8(%rbp) 0.00 : 674d45: 48 83 ec 30 sub $0x30,%rsp : PrivateRefCountEntry *ref; : int b = buf->buf_id; 0.00 : 674d49: 8b 7f 24 mov 0x24(%rdi),%edi : * Most but not all callers want CurrentResourceOwner to be adjusted. : * Those that don't should pass fixOwner = FALSE. : */ : static void : UnpinBuffer(volatile BufferDesc *buf, bool fixOwner) : { 0.00 : 674d4c: 41 89 f4 mov %esi,%r12d : PrivateRefCountEntry *ref; : int b = buf->buf_id; : : ref = GetPrivateRefCountEntry(b + 1, false, false); 0.00 : 674d4f: 31 f6 xor %esi,%esi 0.00 : 674d51: 83 c7 01 add $0x1,%edi 0.00 : 674d54: e8 c7 f7 ff ff callq 674520 : Assert(ref != NULL); : : if (fixOwner) 0.00 : 674d59: 45 84 e4 test %r12b,%r12b : UnpinBuffer(volatile BufferDesc *buf, bool fixOwner) : { : PrivateRefCountEntry *ref; : int b = buf->buf_id; : : ref = GetPrivateRefCountEntry(b + 1, false, false); 0.00 : 674d5c: 49 89 c5 mov %rax,%r13 : Assert(ref != NULL); : : if (fixOwner) 0.00 : 674d5f: 0f 85 b3 00 00 00 jne 674e18 : ResourceOwnerForgetBuffer(CurrentResourceOwner, : BufferDescriptorGetBuffer(buf)); : : Assert(ref->refcount > 0); : ref->refcount--; 0.00 : 674d65: 41 8b 45 04 mov 0x4(%r13),%eax 0.00 : 674d69: 83 e8 01 sub $0x1,%eax : if (ref->refcount == 0) 0.00 : 674d6c: 85 c0 test %eax,%eax : if (fixOwner) : ResourceOwnerForgetBuffer(CurrentResourceOwner, : BufferDescriptorGetBuffer(buf)); : : Assert(ref->refcount > 0); : ref->refcount--; 0.00 : 674d6e: 41 89 45 04 mov %eax,0x4(%r13) : if (ref->refcount == 0) 0.00 : 674d72: 75 66 jne 674dda : { : /* I'd better not still hold any locks on the buffer */ : Assert(!LWLockHeldByMe(buf->content_lock)); : Assert(!LWLockHeldByMe(buf->io_in_progress_lock)); : : LockBufHdr(buf); 0.00 : 674d74: 48 8d 7b 20 lea 0x20(%rbx),%rdi : static __inline__ int : tas(volatile slock_t *lock) : { : register slock_t _res = 1; : : __asm__ __volatile__( 0.00 : 674d78: b8 01 00 00 00 mov $0x1,%eax 0.00 : 674d7d: f0 86 07 lock xchg %al,(%rdi) /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1379 100.00 : 674d80: 84 c0 test %al,%al 0.00 : 674d82: 0f 85 a8 00 00 00 jne 674e30 : : /* Decrement the shared reference count */ : Assert(buf->refcount > 0); : buf->refcount--; 0.00 : 674d88: 8b 43 18 mov 0x18(%rbx),%eax 0.00 : 674d8b: 83 e8 01 sub $0x1,%eax 0.00 : 674d8e: 89 43 18 mov %eax,0x18(%rbx) : : /* Support LockBufferForCleanup() */ : if ((buf->flags & BM_PIN_COUNT_WAITER) && 0.00 : 674d91: 0f b7 43 14 movzwl 0x14(%rbx),%eax 0.00 : 674d95: a8 40 test $0x40,%al 0.00 : 674d97: 75 57 jne 674df0 : buf->flags &= ~BM_PIN_COUNT_WAITER; : UnlockBufHdr(buf); : ProcSendSignal(wait_backend_pid); : } : else : UnlockBufHdr(buf); 0.00 : 674d99: c6 43 20 00 movb $0x0,0x20(%rbx) : static void : ForgetPrivateRefCountEntry(PrivateRefCountEntry *ref) : { : Assert(ref->refcount == 0); : : if (ref >= &PrivateRefCountArray[0] && 0.00 : 674d9d: 49 81 fd c0 d0 b7 00 cmp $0xb7d0c0,%r13 0.00 : 674da4: 72 0d jb 674db3 0.00 : 674da6: 49 81 fd 00 d1 b7 00 cmp $0xb7d100,%r13 0.00 : 674dad: 0f 82 95 00 00 00 jb 674e48 : ref->buffer = InvalidBuffer; : } : else : { : bool found; : Buffer buffer = ref->buffer; 0.00 : 674db3: 41 8b 45 00 mov 0x0(%r13),%eax : hash_search(PrivateRefCountHash, 0.00 : 674db7: 48 8b 3d ba 82 50 00 mov 0x5082ba(%rip),%rdi # b7d078 0.00 : 674dbe: 48 8d 4d e7 lea -0x19(%rbp),%rcx 0.00 : 674dc2: 48 8d 75 e0 lea -0x20(%rbp),%rsi 0.00 : 674dc6: ba 02 00 00 00 mov $0x2,%edx : ref->buffer = InvalidBuffer; : } : else : { : bool found; : Buffer buffer = ref->buffer; 0.00 : 674dcb: 89 45 e0 mov %eax,-0x20(%rbp) : hash_search(PrivateRefCountHash, 0.00 : 674dce: e8 cd f8 10 00 callq 7846a0 : (void *) &buffer, : HASH_REMOVE, : &found); : Assert(found); : Assert(PrivateRefCountOverflowed > 0); : PrivateRefCountOverflowed--; 0.00 : 674dd3: 83 2d 96 82 50 00 01 subl $0x1,0x508296(%rip) # b7d070 : else : UnlockBufHdr(buf); : : ForgetPrivateRefCountEntry(ref); : } : } 0.00 : 674dda: 48 8b 5d e8 mov -0x18(%rbp),%rbx 0.00 : 674dde: 4c 8b 65 f0 mov -0x10(%rbp),%r12 0.00 : 674de2: 4c 8b 6d f8 mov -0x8(%rbp),%r13 0.00 : 674de6: c9 leaveq 0.00 : 674de7: c3 retq 0.00 : 674de8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 674def: 00 : /* Decrement the shared reference count */ : Assert(buf->refcount > 0); : buf->refcount--; : : /* Support LockBufferForCleanup() */ : if ((buf->flags & BM_PIN_COUNT_WAITER) && 0.00 : 674df0: 8b 43 18 mov 0x18(%rbx),%eax 0.00 : 674df3: 83 e8 01 sub $0x1,%eax 0.00 : 674df6: 75 a1 jne 674d99 : buf->refcount == 1) : { : /* we just released the last pin other than the waiter's */ : int wait_backend_pid = buf->wait_backend_pid; 0.00 : 674df8: 8b 7b 1c mov 0x1c(%rbx),%edi : : buf->flags &= ~BM_PIN_COUNT_WAITER; 0.00 : 674dfb: 0f b7 43 14 movzwl 0x14(%rbx),%eax 0.00 : 674dff: 83 e0 bf and $0xffffffbf,%eax 0.00 : 674e02: 66 89 43 14 mov %ax,0x14(%rbx) : UnlockBufHdr(buf); 0.00 : 674e06: c6 43 20 00 movb $0x0,0x20(%rbx) : ProcSendSignal(wait_backend_pid); 0.00 : 674e0a: e8 b1 76 01 00 callq 68c4c0 : /* Decrement the shared reference count */ : Assert(buf->refcount > 0); : buf->refcount--; : : /* Support LockBufferForCleanup() */ : if ((buf->flags & BM_PIN_COUNT_WAITER) && 0.00 : 674e0f: eb 8c jmp 674d9d 0.00 : 674e11: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : : ref = GetPrivateRefCountEntry(b + 1, false, false); : Assert(ref != NULL); : : if (fixOwner) : ResourceOwnerForgetBuffer(CurrentResourceOwner, 0.00 : 674e18: 8b 73 24 mov 0x24(%rbx),%esi 0.00 : 674e1b: 48 8b 3d 9e 5a 54 00 mov 0x545a9e(%rip),%rdi # bba8c0 0.00 : 674e22: 83 c6 01 add $0x1,%esi 0.00 : 674e25: e8 d6 5a 12 00 callq 79a900 0.00 : 674e2a: e9 36 ff ff ff jmpq 674d65 0.00 : 674e2f: 90 nop : { : /* I'd better not still hold any locks on the buffer */ : Assert(!LWLockHeldByMe(buf->content_lock)); : Assert(!LWLockHeldByMe(buf->io_in_progress_lock)); : : LockBufHdr(buf); 0.00 : 674e30: ba 63 05 00 00 mov $0x563,%edx 0.00 : 674e35: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 674e3a: e8 01 b2 01 00 callq 690040 0.00 : 674e3f: e9 44 ff ff ff jmpq 674d88 0.00 : 674e44: 0f 1f 40 00 nopl 0x0(%rax) : Assert(ref->refcount == 0); : : if (ref >= &PrivateRefCountArray[0] && : ref < &PrivateRefCountArray[REFCOUNT_ARRAY_ENTRIES]) : { : ref->buffer = InvalidBuffer; 0.00 : 674e48: 41 c7 45 00 00 00 00 movl $0x0,0x0(%r13) 0.00 : 674e4f: 00 0.00 : 674e50: eb 88 jmp 674dda Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/../../../../src/include/port/atomics/generic.h:247 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000068f3a0 : : /* : * LWLockRelease - release a previously acquired lock : */ : void : LWLockRelease(LWLock *lock) : { 0.00 : 68f3a0: 55 push %rbp 0.00 : 68f3a1: 48 89 e5 mov %rsp,%rbp 0.00 : 68f3a4: 41 55 push %r13 0.00 : 68f3a6: 41 54 push %r12 0.00 : 68f3a8: 49 89 fc mov %rdi,%r12 0.00 : 68f3ab: 53 push %rbx 0.00 : 68f3ac: 48 83 ec 18 sub $0x18,%rsp : : /* : * Remove lock from list of locks held. Usually, but not always, it will : * be the latest-acquired lock; so search array backwards. : */ : for (i = num_held_lwlocks; --i >= 0;) 0.00 : 68f3b0: 8b 35 52 e6 4e 00 mov 0x4ee652(%rip),%esi # b7da08 0.00 : 68f3b6: 89 f0 mov %esi,%eax 0.00 : 68f3b8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 68f3bf: 00 0.00 : 68f3c0: 83 e8 01 sub $0x1,%eax 0.00 : 68f3c3: 0f 88 1f 02 00 00 js 68f5e8 : { : if (lock == held_lwlocks[i].lock) 0.00 : 68f3c9: 48 63 d0 movslq %eax,%rdx 0.00 : 68f3cc: 41 b9 40 da b7 00 mov $0xb7da40,%r9d 0.00 : 68f3d2: 48 89 d1 mov %rdx,%rcx 0.00 : 68f3d5: 48 c1 e1 04 shl $0x4,%rcx 0.00 : 68f3d9: 48 8b 99 40 da b7 00 mov 0xb7da40(%rcx),%rbx 0.00 : 68f3e0: 4c 39 e3 cmp %r12,%rbx 0.00 : 68f3e3: 75 db jne 68f3c0 : break; : } : } : if (i < 0) : elog(ERROR, "lock %s %d is not held", T_NAME(lock), T_ID(lock)); : num_held_lwlocks--; 0.00 : 68f3e5: 44 8d 46 ff lea -0x1(%rsi),%r8d : */ : for (i = num_held_lwlocks; --i >= 0;) : { : if (lock == held_lwlocks[i].lock) : { : mode = held_lwlocks[i].mode; 0.00 : 68f3e9: 44 8b 91 48 da b7 00 mov 0xb7da48(%rcx),%r10d : } : } : if (i < 0) : elog(ERROR, "lock %s %d is not held", T_NAME(lock), T_ID(lock)); : num_held_lwlocks--; : for (; i < num_held_lwlocks; i++) 0.00 : 68f3f0: 41 39 c0 cmp %eax,%r8d : break; : } : } : if (i < 0) : elog(ERROR, "lock %s %d is not held", T_NAME(lock), T_ID(lock)); : num_held_lwlocks--; 0.00 : 68f3f3: 44 89 05 0e e6 4e 00 mov %r8d,0x4ee60e(%rip) # b7da08 : for (; i < num_held_lwlocks; i++) 0.00 : 68f3fa: 7f 09 jg 68f405 0.00 : 68f3fc: eb 3a jmp 68f438 0.00 : 68f3fe: 66 90 xchg %ax,%ax : : /* : * Remove lock from list of locks held. Usually, but not always, it will : * be the latest-acquired lock; so search array backwards. : */ : for (i = num_held_lwlocks; --i >= 0;) 0.00 : 68f400: 89 f0 mov %esi,%eax 0.00 : 68f402: 48 89 fa mov %rdi,%rdx : } : if (i < 0) : elog(ERROR, "lock %s %d is not held", T_NAME(lock), T_ID(lock)); : num_held_lwlocks--; : for (; i < num_held_lwlocks; i++) : held_lwlocks[i] = held_lwlocks[i + 1]; 0.00 : 68f405: 8d 70 01 lea 0x1(%rax),%esi 0.00 : 68f408: 48 89 d1 mov %rdx,%rcx 0.00 : 68f40b: 48 c1 e1 04 shl $0x4,%rcx 0.00 : 68f40f: 48 63 fe movslq %esi,%rdi 0.00 : 68f412: 48 89 fa mov %rdi,%rdx 0.00 : 68f415: 48 c1 e2 04 shl $0x4,%rdx : } : } : if (i < 0) : elog(ERROR, "lock %s %d is not held", T_NAME(lock), T_ID(lock)); : num_held_lwlocks--; : for (; i < num_held_lwlocks; i++) 0.00 : 68f419: 41 39 f0 cmp %esi,%r8d : held_lwlocks[i] = held_lwlocks[i + 1]; 0.00 : 68f41c: 48 8b 82 40 da b7 00 mov 0xb7da40(%rdx),%rax 0.00 : 68f423: 48 89 81 40 da b7 00 mov %rax,0xb7da40(%rcx) 0.00 : 68f42a: 48 8b 82 48 da b7 00 mov 0xb7da48(%rdx),%rax 0.00 : 68f431: 49 89 44 09 08 mov %rax,0x8(%r9,%rcx,1) : } : } : if (i < 0) : elog(ERROR, "lock %s %d is not held", T_NAME(lock), T_ID(lock)); : num_held_lwlocks--; : for (; i < num_held_lwlocks; i++) 0.00 : 68f436: 7f c8 jg 68f400 : : /* : * Release my hold on lock, after that it can immediately be acquired by : * others, even if we still have to wakeup other waiters. : */ : if (mode == LW_EXCLUSIVE) 0.00 : 68f438: 45 85 d2 test %r10d,%r10d 0.00 : 68f43b: 0f 84 77 01 00 00 je 68f5b8 : lockcount = pg_atomic_sub_fetch_u32(&lock->lockcount, EXCLUSIVE_LOCK); : else : lockcount = pg_atomic_sub_fetch_u32(&lock->lockcount, 1); 0.00 : 68f441: 49 8d 54 24 04 lea 0x4(%r12),%rdx : #define PG_HAVE_ATOMIC_FETCH_ADD_U32 : static inline uint32 : pg_atomic_fetch_add_u32_impl(volatile pg_atomic_uint32 *ptr, int32 add_) : { : uint32 res; : __asm__ __volatile__( 0.00 : 68f446: b8 ff ff ff ff mov $0xffffffff,%eax 0.00 : 68f44b: f0 0f c1 02 lock xadd %eax,(%rdx) : #if !defined(PG_HAVE_ATOMIC_SUB_FETCH_U32) && defined(PG_HAVE_ATOMIC_FETCH_SUB_U32) : #define PG_HAVE_ATOMIC_SUB_FETCH_U32 : static inline uint32 : pg_atomic_sub_fetch_u32_impl(volatile pg_atomic_uint32 *ptr, int32 sub_) : { : return pg_atomic_fetch_sub_u32_impl(ptr, sub_) - sub_; /home/Computational/mark/src/postgres-andres/src/backend/storage/lmgr/../../../../src/include/port/atomics/generic.h:247 100.00 : 68f44f: 8d 50 ff lea -0x1(%rax),%edx : #ifndef PG_HAVE_ATOMIC_READ_U32 : #define PG_HAVE_ATOMIC_READ_U32 : static inline uint32 : pg_atomic_read_u32_impl(volatile pg_atomic_uint32 *ptr) : { : return *(&ptr->value); 0.00 : 68f452: 8b 43 08 mov 0x8(%rbx),%eax : /* : * Anybody we need to wakeup needs to have started queueing before we : * removed ourselves from the queue and the atomic operations above are : * full barriers. So we can just do plain read. : */ : if (pg_atomic_read_u32(&lock->nwaiters) > 0) 0.00 : 68f455: 85 c0 test %eax,%eax 0.00 : 68f457: 0f 84 3a 01 00 00 je 68f597 : /* : * If we just released an exclusive lock always wakeup waiters, even if : * lockcount is still > 0. A shared acquisition temporarily (and : * spuriously) might have increased the value. : */ : if (mode == LW_EXCLUSIVE && have_waiters) 0.00 : 68f45d: 45 85 d2 test %r10d,%r10d 0.00 : 68f460: 0f 85 fc 01 00 00 jne 68f662 : * Previous state will be thrown away without any cleanup. : */ : STATIC_IF_INLINE void : dlist_init(dlist_head *head) : { : head->head.next = head->head.prev = &head->head; 0.00 : 68f466: 4c 8d 6d d0 lea -0x30(%rbp),%r13 0.00 : 68f46a: 4c 89 6d d0 mov %r13,-0x30(%rbp) 0.00 : 68f46e: 4c 89 6d d8 mov %r13,-0x28(%rbp) : /* : * We're still waiting for backends to get scheduled, don't wake them up : * again. : */ : pg_read_barrier(); /* pairs with nwaiters-- */ : if (!BOOL_ACCESS_ONCE(lock->releaseOK)) 0.00 : 68f472: 0f b6 43 01 movzbl 0x1(%rbx),%eax 0.00 : 68f476: 84 c0 test %al,%al 0.00 : 68f478: 0f 84 19 01 00 00 je 68f597 : static __inline__ int : tas(volatile slock_t *lock) : { : register slock_t _res = 1; : : __asm__ __volatile__( 0.00 : 68f47e: b8 01 00 00 00 mov $0x1,%eax 0.00 : 68f483: f0 86 03 lock xchg %al,(%rbx) : : /* Acquire mutex. Time spent holding mutex should be short! */ : #ifdef LWLOCK_STATS : lwstats->spin_delay_count += SpinLockAcquire(&lock->mutex); : #else : SpinLockAcquire(&lock->mutex); 0.00 : 68f486: 84 c0 test %al,%al 0.00 : 68f488: 0f 85 b2 01 00 00 jne 68f640 : #endif : : /* remove the to-be-awakened PGPROCs from the queue */ : releaseOK = true; : : dlist_foreach_modify(iter, &lock->waiters) 0.00 : 68f48e: 48 8b 53 18 mov 0x18(%rbx),%rdx 0.00 : 68f492: 48 85 d2 test %rdx,%rdx 0.00 : 68f495: 0f 84 bc 01 00 00 je 68f657 0.00 : 68f49b: 4d 8d 4c 24 10 lea 0x10(%r12),%r9 0.00 : 68f4a0: 48 8b 72 08 mov 0x8(%rdx),%rsi 0.00 : 68f4a4: 49 39 d1 cmp %rdx,%r9 0.00 : 68f4a7: 0f 84 aa 01 00 00 je 68f657 0.00 : 68f4ad: 31 ff xor %edi,%edi 0.00 : 68f4af: 41 b8 01 00 00 00 mov $0x1,%r8d 0.00 : 68f4b5: eb 23 jmp 68f4da 0.00 : 68f4b7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 68f4be: 00 00 : { : PGPROC *waiter = dlist_container(PGPROC, lwWaitLink, iter.cur); : : if (wokeup_somebody && waiter->lwWaitMode == LW_EXCLUSIVE) 0.00 : 68f4c0: 80 7a fa 00 cmpb $0x0,-0x6(%rdx) 0.00 : 68f4c4: 75 1d jne 68f4e3 0.00 : 68f4c6: bf 01 00 00 00 mov $0x1,%edi : #endif : : /* remove the to-be-awakened PGPROCs from the queue */ : releaseOK = true; : : dlist_foreach_modify(iter, &lock->waiters) 0.00 : 68f4cb: 49 39 f1 cmp %rsi,%r9 0.00 : 68f4ce: 48 8b 46 08 mov 0x8(%rsi),%rax 0.00 : 68f4d2: 74 6a je 68f53e 0.00 : 68f4d4: 48 89 f2 mov %rsi,%rdx 0.00 : 68f4d7: 48 89 c6 mov %rax,%rsi : { : PGPROC *waiter = dlist_container(PGPROC, lwWaitLink, iter.cur); : : if (wokeup_somebody && waiter->lwWaitMode == LW_EXCLUSIVE) 0.00 : 68f4da: 40 84 ff test %dil,%dil : /* remove the to-be-awakened PGPROCs from the queue */ : releaseOK = true; : : dlist_foreach_modify(iter, &lock->waiters) : { : PGPROC *waiter = dlist_container(PGPROC, lwWaitLink, iter.cur); 0.00 : 68f4dd: 48 8d 4a b8 lea -0x48(%rdx),%rcx : : if (wokeup_somebody && waiter->lwWaitMode == LW_EXCLUSIVE) 0.00 : 68f4e1: 75 dd jne 68f4c0 : * Delete 'node' from its list (it must be in one). : */ : STATIC_IF_INLINE void : dlist_delete(dlist_node *node) : { : node->prev->next = node->next; 0.00 : 68f4e3: 48 8b 51 48 mov 0x48(%rcx),%rdx 0.00 : 68f4e7: 48 8b 41 50 mov 0x50(%rcx),%rax 0.00 : 68f4eb: 48 89 42 08 mov %rax,0x8(%rdx) : node->next->prev = node->prev; 0.00 : 68f4ef: 48 8b 51 50 mov 0x50(%rcx),%rdx 0.00 : 68f4f3: 48 8b 41 48 mov 0x48(%rcx),%rax 0.00 : 68f4f7: 48 89 02 mov %rax,(%rdx) : * Insert a node at the end of the list. : */ : STATIC_IF_INLINE void : dlist_push_tail(dlist_head *head, dlist_node *node) : { : if (head->head.next == NULL) /* convert NULL header to circular */ 0.00 : 68f4fa: 48 83 7d d8 00 cmpq $0x0,-0x28(%rbp) : continue; : : dlist_delete(&waiter->lwWaitLink); : dlist_push_tail(&wakeup, &waiter->lwWaitLink); 0.00 : 68f4ff: 48 8d 51 48 lea 0x48(%rcx),%rdx 0.00 : 68f503: 0f 84 cf 00 00 00 je 68f5d8 : dlist_init(head); : : node->next = &head->head; 0.00 : 68f509: 4c 89 69 50 mov %r13,0x50(%rcx) : node->prev = head->head.prev; 0.00 : 68f50d: 48 8b 45 d0 mov -0x30(%rbp),%rax 0.00 : 68f511: 48 89 41 48 mov %rax,0x48(%rcx) : node->prev->next = node; 0.00 : 68f515: 48 89 50 08 mov %rdx,0x8(%rax) : head->head.prev = node; 0.00 : 68f519: 48 89 55 d0 mov %rdx,-0x30(%rbp) : : if (waiter->lwWaitMode != LW_WAIT_UNTIL_FREE) 0.00 : 68f51d: 0f b6 41 42 movzbl 0x42(%rcx),%eax 0.00 : 68f521: 3c 02 cmp $0x2,%al 0.00 : 68f523: 74 a6 je 68f4cb : : /* : * Once we've woken up an exclusive lock, there's no point in waking : * up anybody else. : */ : if(waiter->lwWaitMode == LW_EXCLUSIVE) 0.00 : 68f525: 84 c0 test %al,%al 0.00 : 68f527: 0f 84 0b 01 00 00 je 68f638 0.00 : 68f52d: 45 31 c0 xor %r8d,%r8d : #endif : : /* remove the to-be-awakened PGPROCs from the queue */ : releaseOK = true; : : dlist_foreach_modify(iter, &lock->waiters) 0.00 : 68f530: 49 39 f1 cmp %rsi,%r9 : : /* : * Once we've woken up an exclusive lock, there's no point in waking : * up anybody else. : */ : if(waiter->lwWaitMode == LW_EXCLUSIVE) 0.00 : 68f533: bf 01 00 00 00 mov $0x1,%edi : #endif : : /* remove the to-be-awakened PGPROCs from the queue */ : releaseOK = true; : : dlist_foreach_modify(iter, &lock->waiters) 0.00 : 68f538: 48 8b 46 08 mov 0x8(%rsi),%rax 0.00 : 68f53c: 75 96 jne 68f4d4 : if(waiter->lwWaitMode == LW_EXCLUSIVE) : break; : } : : /* The SpinLockRelease() below provides barrier semantics */ : BOOL_ACCESS_ONCE(lock->releaseOK) = releaseOK; 0.00 : 68f53e: 44 88 43 01 mov %r8b,0x1(%rbx) : SpinLockRelease(&lock->mutex); : : /* : * Awaken any waiters I removed from the queue. : */ : dlist_foreach_modify(iter, &wakeup) 0.00 : 68f542: 48 8b 4d d8 mov -0x28(%rbp),%rcx : : /* The SpinLockRelease() below provides barrier semantics */ : BOOL_ACCESS_ONCE(lock->releaseOK) = releaseOK; : : /* We are done updating shared state of the lock queue. */ : SpinLockRelease(&lock->mutex); 0.00 : 68f546: 41 c6 04 24 00 movb $0x0,(%r12) : : /* : * Awaken any waiters I removed from the queue. : */ : dlist_foreach_modify(iter, &wakeup) 0.00 : 68f54b: 48 85 c9 test %rcx,%rcx 0.00 : 68f54e: 74 47 je 68f597 0.00 : 68f550: 4c 39 e9 cmp %r13,%rcx 0.00 : 68f553: 48 8b 59 08 mov 0x8(%rcx),%rbx 0.00 : 68f557: 75 0d jne 68f566 0.00 : 68f559: eb 3c jmp 68f597 0.00 : 68f55b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 68f560: 48 89 d9 mov %rbx,%rcx 0.00 : 68f563: 48 89 c3 mov %rax,%rbx : { : PGPROC *waiter = dlist_container(PGPROC, lwWaitLink, iter.cur); 0.00 : 68f566: 48 8d 79 b8 lea -0x48(%rcx),%rdi : * Delete 'node' from its list (it must be in one). : */ : STATIC_IF_INLINE void : dlist_delete(dlist_node *node) : { : node->prev->next = node->next; 0.00 : 68f56a: 48 8b 57 48 mov 0x48(%rdi),%rdx 0.00 : 68f56e: 48 8b 47 50 mov 0x50(%rdi),%rax 0.00 : 68f572: 48 89 42 08 mov %rax,0x8(%rdx) : node->next->prev = node->prev; 0.00 : 68f576: 48 8b 57 50 mov 0x50(%rdi),%rdx 0.00 : 68f57a: 48 8b 47 48 mov 0x48(%rdi),%rax 0.00 : 68f57e: 48 89 02 mov %rax,(%rdx) : : LOG_LWDEBUG("LWLockRelease", lock, "release waiter"); : dlist_delete(&waiter->lwWaitLink); : pg_write_barrier(); : waiter->lwWaiting = false; : PGSemaphoreUnlock(&waiter->sem); 0.00 : 68f581: 48 83 c7 10 add $0x10,%rdi : PGPROC *waiter = dlist_container(PGPROC, lwWaitLink, iter.cur); : : LOG_LWDEBUG("LWLockRelease", lock, "release waiter"); : dlist_delete(&waiter->lwWaitLink); : pg_write_barrier(); : waiter->lwWaiting = false; 0.00 : 68f585: c6 41 f9 00 movb $0x0,-0x7(%rcx) : PGSemaphoreUnlock(&waiter->sem); 0.00 : 68f589: e8 02 8b fa ff callq 638090 : SpinLockRelease(&lock->mutex); : : /* : * Awaken any waiters I removed from the queue. : */ : dlist_foreach_modify(iter, &wakeup) 0.00 : 68f58e: 4c 39 eb cmp %r13,%rbx 0.00 : 68f591: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 68f595: 75 c9 jne 68f560 : TRACE_POSTGRESQL_LWLOCK_RELEASE(T_NAME(lock), T_ID(lock)); : : /* : * Now okay to allow cancel/die interrupts. : */ : RESUME_INTERRUPTS(); 0.00 : 68f597: 8b 05 fb aa 52 00 mov 0x52aafb(%rip),%eax # bba098 0.00 : 68f59d: 83 e8 01 sub $0x1,%eax 0.00 : 68f5a0: 89 05 f2 aa 52 00 mov %eax,0x52aaf2(%rip) # bba098 : } 0.00 : 68f5a6: 48 83 c4 18 add $0x18,%rsp 0.00 : 68f5aa: 5b pop %rbx 0.00 : 68f5ab: 41 5c pop %r12 0.00 : 68f5ad: 41 5d pop %r13 0.00 : 68f5af: c9 leaveq 0.00 : 68f5b0: c3 retq 0.00 : 68f5b1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : /* : * Release my hold on lock, after that it can immediately be acquired by : * others, even if we still have to wakeup other waiters. : */ : if (mode == LW_EXCLUSIVE) : lockcount = pg_atomic_sub_fetch_u32(&lock->lockcount, EXCLUSIVE_LOCK); 0.00 : 68f5b8: 49 8d 54 24 04 lea 0x4(%r12),%rdx 0.00 : 68f5bd: b8 00 00 00 c0 mov $0xc0000000,%eax 0.00 : 68f5c2: f0 0f c1 02 lock xadd %eax,(%rdx) : #if !defined(PG_HAVE_ATOMIC_SUB_FETCH_U32) && defined(PG_HAVE_ATOMIC_FETCH_SUB_U32) : #define PG_HAVE_ATOMIC_SUB_FETCH_U32 : static inline uint32 : pg_atomic_sub_fetch_u32_impl(volatile pg_atomic_uint32 *ptr, int32 sub_) : { : return pg_atomic_fetch_sub_u32_impl(ptr, sub_) - sub_; 0.00 : 68f5c6: 8d 90 00 00 00 c0 lea -0x40000000(%rax),%edx 0.00 : 68f5cc: e9 81 fe ff ff jmpq 68f452 0.00 : 68f5d1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : * Previous state will be thrown away without any cleanup. : */ : STATIC_IF_INLINE void : dlist_init(dlist_head *head) : { : head->head.next = head->head.prev = &head->head; 0.00 : 68f5d8: 4c 89 6d d0 mov %r13,-0x30(%rbp) 0.00 : 68f5dc: 4c 89 6d d8 mov %r13,-0x28(%rbp) 0.00 : 68f5e0: e9 24 ff ff ff jmpq 68f509 0.00 : 68f5e5: 0f 1f 00 nopl (%rax) : mode = held_lwlocks[i].mode; : break; : } : } : if (i < 0) : elog(ERROR, "lock %s %d is not held", T_NAME(lock), T_ID(lock)); 0.00 : 68f5e8: ba 10 d1 8a 00 mov $0x8ad110,%edx 0.00 : 68f5ed: be 31 06 00 00 mov $0x631,%esi 0.00 : 68f5f2: bf 85 d0 8a 00 mov $0x8ad085,%edi 0.00 : 68f5f7: e8 24 be 0e 00 callq 77b420 0.00 : 68f5fc: 49 63 54 24 0c movslq 0xc(%r12),%rdx 0.00 : 68f601: 48 8b 05 08 e4 4e 00 mov 0x4ee408(%rip),%rax # b7da10 0.00 : 68f608: bf 14 00 00 00 mov $0x14,%edi 0.00 : 68f60d: 48 8b 34 d0 mov (%rax,%rdx,8),%rsi 0.00 : 68f611: 31 d2 xor %edx,%edx 0.00 : 68f613: 4c 2b 66 08 sub 0x8(%rsi),%r12 0.00 : 68f617: 4c 89 e0 mov %r12,%rax 0.00 : 68f61a: 48 f7 76 10 divq 0x10(%rsi) 0.00 : 68f61e: 48 8b 16 mov (%rsi),%rdx 0.00 : 68f621: be bf d0 8a 00 mov $0x8ad0bf,%esi 0.00 : 68f626: 89 c1 mov %eax,%ecx 0.00 : 68f628: 31 c0 xor %eax,%eax 0.00 : 68f62a: e8 01 bc 0e 00 callq 77b230 0.00 : 68f62f: e8 9c 9e dd ff callq 4694d0 0.00 : 68f634: 0f 1f 40 00 nopl 0x0(%rax) : #endif : : /* remove the to-be-awakened PGPROCs from the queue */ : releaseOK = true; : : dlist_foreach_modify(iter, &lock->waiters) 0.00 : 68f638: 45 31 c0 xor %r8d,%r8d 0.00 : 68f63b: e9 fe fe ff ff jmpq 68f53e : : /* Acquire mutex. Time spent holding mutex should be short! */ : #ifdef LWLOCK_STATS : lwstats->spin_delay_count += SpinLockAcquire(&lock->mutex); : #else : SpinLockAcquire(&lock->mutex); 0.00 : 68f640: ba e1 02 00 00 mov $0x2e1,%edx 0.00 : 68f645: be 85 d0 8a 00 mov $0x8ad085,%esi 0.00 : 68f64a: 48 89 df mov %rbx,%rdi 0.00 : 68f64d: e8 ee 09 00 00 callq 690040 0.00 : 68f652: e9 37 fe ff ff jmpq 68f48e : #endif : : /* remove the to-be-awakened PGPROCs from the queue */ : releaseOK = true; : : dlist_foreach_modify(iter, &lock->waiters) 0.00 : 68f657: 41 b8 01 00 00 00 mov $0x1,%r8d 0.00 : 68f65d: e9 dc fe ff ff jmpq 68f53e : if (mode == LW_EXCLUSIVE && have_waiters) : check_waiters = true; : /* : * nobody has this locked anymore, potential exclusive lockers get a chance : */ : else if (lockcount == 0 && have_waiters) 0.00 : 68f662: 85 d2 test %edx,%edx 0.00 : 68f664: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 68f668: 0f 84 f8 fd ff ff je 68f466 0.00 : 68f66e: 66 90 xchg %ax,%ax 0.00 : 68f670: e9 22 ff ff ff jmpq 68f597 Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000000cd5c0 <__read>: 0.00 : cd5c0: 83 3d ed a0 2a 00 00 cmpl $0x0,0x2aa0ed(%rip) # 3776b4 <__libc_multiple_threads> ??:0 100.00 : cd5c7: 75 10 jne cd5d9 <__read_nocancel+0x10> : : 00000000000cd5c9 <__read_nocancel>: 0.00 : cd5c9: b8 00 00 00 00 mov $0x0,%eax 0.00 : cd5ce: 0f 05 syscall 0.00 : cd5d0: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax 0.00 : cd5d6: 73 31 jae cd609 <__read_nocancel+0x40> 0.00 : cd5d8: c3 retq 0.00 : cd5d9: 48 83 ec 08 sub $0x8,%rsp 0.00 : cd5dd: e8 4e ac 01 00 callq e8230 <__libc_enable_asynccancel> 0.00 : cd5e2: 48 89 04 24 mov %rax,(%rsp) 0.00 : cd5e6: b8 00 00 00 00 mov $0x0,%eax 0.00 : cd5eb: 0f 05 syscall 0.00 : cd5ed: 48 8b 3c 24 mov (%rsp),%rdi 0.00 : cd5f1: 48 89 c2 mov %rax,%rdx 0.00 : cd5f4: e8 97 ac 01 00 callq e8290 <__libc_disable_asynccancel> 0.00 : cd5f9: 48 89 d0 mov %rdx,%rax 0.00 : cd5fc: 48 83 c4 08 add $0x8,%rsp 0.00 : cd600: 48 3d 01 f0 ff ff cmp $0xfffffffffffff001,%rax 0.00 : cd606: 73 01 jae cd609 <__read_nocancel+0x40> 0.00 : cd608: c3 retq 0.00 : cd609: 48 8b 0d 28 48 2a 00 mov 0x2a4828(%rip),%rcx # 371e38 <_DYNAMIC+0x2d8> 0.00 : cd610: 31 d2 xor %edx,%edx 0.00 : cd612: 48 29 c2 sub %rax,%rdx 0.00 : cd615: 64 89 11 mov %edx,%fs:(%rcx) 0.00 : cd618: 48 83 c8 ff or $0xffffffffffffffff,%rax 0.00 : cd61c: eb ea jmp cd608 <__read_nocancel+0x3f> Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/drivers/scsi/scsi_mod.ko ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/drivers/scsi/scsi_mod.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000000b4b0 : 0.00 : b4b0: 48 83 ec 28 sub $0x28,%rsp 0.00 : b4e4: 48 89 5c 24 rex.XB and %cl,-0x75(%r8) 0.00 : b4e8: 08 48 add %eax,%esi 0.00 : b4ea: 89 6c 24 10 4c 89 incl 0x12c(%rax) ??:0 100.00 : b4f0: 64 24 18 4c 89 6c 24 mov 0xe0(%rbx),%r10d 0.00 : b4f7: 20 48 8b test %r10d,%r10d 0.00 : b4fa: 9f f0 je b506 0.00 : b4fc: 00 00 00 mov (%rbx),%rax 0.00 : b4ff: 44 8b a7 50 01 00 00 lock incl 0x130(%rax) 0.00 : b506: 48 8d 43 mov %rbx,%rdi 0.00 : b509: 18 44 8b 6b 44 callq b50e 0.00 : b50e: 48 89 43 18 48 cmp $0x2002,%eax 0.00 : b513: 89 43 mov %eax,%ebp 0.00 : b515: 20 48 8b 03 f0 ff je b5e9 0.00 : b51b: 80 2c 01 00 lea 0x1(%r13),%eax 0.00 : b51f: 00 44 8b 93 e0 00 00 mov 0x0(%rip),%rdx # b526 0.00 : b526: 00 45 mov %eax,%ecx 0.00 : b528: 85 d2 74 0a imul %r12d,%ecx 0.00 : b52c: 48 8b 03 mov %rcx,%rax 0.00 : b52f: f0 ff 80 30 add 0x38(%rbx),%rax 0.00 : b533: 01 00 00 cmp %rdx,%rax 0.00 : b536: 48 89 js b5b0 0.00 : b538: df e8 mov %ebp,%esi 0.00 : b53a: 00 00 00 mov %rbx,%rdi 0.00 : b53d: 00 3d 02 20 00 callq b542 0.00 : b542: 00 89 c5 0f 84 ce cmp $0x2006,%ebp 0.00 : b548: 00 00 je b588 0.00 : b54a: 00 41 8d 45 01 48 cmp $0x2001,%ebp 0.00 : b550: 8b 15 00 00 00 mov $0x1057,%esi 0.00 : b555: 00 89 je b58d 0.00 : b557: c1 41 xor %esi,%esi 0.00 : b559: 0f af cc mov %rbx,%rdi 0.00 : b55c: 48 89 c8 48 03 callq b561 0.00 : b561: 43 38 test %eax,%eax 0.00 : b563: 48 39 d0 78 78 89 je b5f6 0.00 : b569: ee 48 89 df e8 mov 0x8(%rsp),%rbx 0.00 : b56e: 00 00 00 00 81 mov 0x10(%rsp),%rbp 0.00 : b573: fd 06 20 00 00 mov 0x18(%rsp),%r12 0.00 : b578: 74 3e 81 fd 01 mov 0x20(%rsp),%r13 0.00 : b57d: 20 00 00 be add $0x28,%rsp 0.00 : b581: 57 retq 0.00 : b582: 10 00 00 74 36 31 nopw 0x0(%rax,%rax,1) 0.00 : b588: f6 48 89 df e8 mov $0x1056,%esi 0.00 : b58d: 00 00 00 mov %rbx,%rdi 0.00 : b590: 00 85 c0 0f 84 mov 0x10(%rsp),%rbp 0.00 : b595: 8d 00 00 00 48 mov 0x8(%rsp),%rbx 0.00 : b59a: 8b 5c 24 08 48 mov 0x18(%rsp),%r12 0.00 : b59f: 8b 6c 24 10 4c mov 0x20(%rsp),%r13 0.00 : b5a4: 8b 64 24 18 add $0x28,%rsp 0.00 : b5a8: 4c 8b 6c 24 20 jmpq b5ad 0.00 : b5ad: 48 83 c4 nopl (%rax) 0.00 : b5b0: 28 c3 66 shr %rcx 0.00 : b5b3: 0f 1f 44 00 00 be 56 movabs $0x20c49ba5e353f7cf,%rdx 0.00 : b5ba: 10 00 00 0.00 : b5bd: 48 89 df mov (%rbx),%rsi 0.00 : b5c0: 48 8b 6c mov %rcx,%rax 0.00 : b5c3: 24 10 48 8b 5c 24 08 mov $0x0,%rdi 0.00 : b5ca: 4c 8b 64 mul %rdx 0.00 : b5cd: 24 18 xor %eax,%eax 0.00 : b5cf: 4c 8b 6c 24 20 48 83 add $0x138,%rsi 0.00 : b5d6: c4 28 e9 00 shr $0x4,%rdx 0.00 : b5da: 00 00 00 mov %rdx,%rcx 0.00 : b5dd: 0f 1f 00 48 d1 e9 48 mov $0x0,%rdx 0.00 : b5e4: ba cf f7 53 e3 callq b5e9 0.00 : b5e9: a5 9b c4 20 48 mov $0x2002,%esi 0.00 : b5ee: 8b 33 48 mov %rbx,%rdi 0.00 : b5f1: 89 c8 48 c7 c7 callq b5f6 0.00 : b5f6: 00 00 00 mov %rbx,%rdi 0.00 : b5f9: 00 48 f7 e2 31 mov 0x10(%rsp),%rbp 0.00 : b5fe: c0 48 81 c6 38 mov 0x8(%rsp),%rbx 0.00 : b603: 01 00 00 48 c1 mov 0x18(%rsp),%r12 0.00 : b608: ea 04 48 89 d1 mov 0x20(%rsp),%r13 0.00 : b60d: 48 c7 c2 00 add $0x28,%rsp 0.00 : b611: 00 00 00 e8 00 jmpq b616 : b616: 00 00 00 be 02 20 00 nopw %cs:0x0(%rax,%rax,1) : b61d: 00 48 89 : b620: df e8 00 00 sub $0x48,%rsp : b624: 00 00 48 89 df mov %rbx,0x18(%rsp) : b629: 48 8b 6c 24 10 mov %rbp,0x20(%rsp) : b62e: 48 8b 5c 24 08 mov $0x4000000,%ebp : b633: 4c 8b 64 24 18 mov %r12,0x28(%rsp) : b638: 4c 8b 6c 24 20 mov %r13,0x30(%rsp) : b63d: 48 83 c4 mov %rdi,%r13 : b640: 28 e9 00 00 00 mov %r14,0x38(%rsp) Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000002d10 : : : return IRQ_HANDLED; : } : : static irqreturn_t ixgbe_msix_clean_rings(int irq, void *data) : { 0.00 : 2d10: 48 83 ec 08 sub $0x8,%rsp : struct ixgbe_q_vector *q_vector = data; : : /* EIAM disabled interrupts (on this vector) for us */ : : if (q_vector->rx.ring || q_vector->tx.ring) ??:0 100.00 : 2d14: 48 83 7e 10 00 cmpq $0x0,0x10(%rsi) 0.00 : 2d19: 74 2d je 2d48 : return oldbit; : } : : static __always_inline int constant_test_bit(unsigned int nr, const volatile unsigned long *addr) : { : return ((1UL << (nr % BITS_PER_LONG)) & 0.00 : 2d1b: 48 8b 46 50 mov 0x50(%rsi),%rax : : extern void __napi_schedule(struct napi_struct *n); : : static inline int napi_disable_pending(struct napi_struct *n) : { : return test_bit(NAPI_STATE_DISABLE, &n->state); 0.00 : 2d1f: 48 8d 56 50 lea 0x50(%rsi),%rdx : * insure only one NAPI poll instance runs. We also make : * sure there is no pending NAPI disable. : */ : static inline int napi_schedule_prep(struct napi_struct *n) : { : return !napi_disable_pending(n) && 0.00 : 2d23: a8 02 test $0x2,%al 0.00 : 2d25: 75 14 jne 2d3b : */ : static inline int test_and_set_bit(int nr, volatile unsigned long *addr) : { : int oldbit; : : asm volatile(LOCK_PREFIX "bts %2,%1\n\t" 0.00 : 2d27: f0 0f ba 2a 00 lock btsl $0x0,(%rdx) 0.00 : 2d2c: 19 c0 sbb %eax,%eax 0.00 : 2d2e: 85 c0 test %eax,%eax 0.00 : 2d30: 75 09 jne 2d3b : * running. : */ : static inline void napi_schedule(struct napi_struct *n) : { : if (napi_schedule_prep(n)) : __napi_schedule(n); 0.00 : 2d32: 48 8d 7e 40 lea 0x40(%rsi),%rdi 0.00 : 2d36: e8 00 00 00 00 callq 2d3b : napi_schedule(&q_vector->napi); : : return IRQ_HANDLED; : } 0.00 : 2d3b: b8 01 00 00 00 mov $0x1,%eax 0.00 : 2d40: 48 83 c4 08 add $0x8,%rsp 0.00 : 2d44: c3 retq 0.00 : 2d45: 0f 1f 00 nopl (%rax) : { : struct ixgbe_q_vector *q_vector = data; : : /* EIAM disabled interrupts (on this vector) for us */ : : if (q_vector->rx.ring || q_vector->tx.ring) 0.00 : 2d48: 48 83 7e 28 00 cmpq $0x0,0x28(%rsi) 0.00 : 2d4d: 75 cc jne 2d1b 0.00 : 2d4f: 90 nop 0.00 : 2d50: eb e9 jmp 2d3b Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/net/ipv4/netfilter/ip_tables.ko ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/net/ipv4/netfilter/ip_tables.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000000025c0 : 0.00 : 25c0: 41 57 push %r15 0.00 : 25f2: 48 c7 c0 00 00 00 00 mov 0xd8(%rdi),%r13 0.00 : 25f9: 41 56 41 55 41 mov 0x70(%rsp),%rcx 0.00 : 25fe: 54 49 89 fc 55 mov 0x70(%rsp),%rsi 0.00 : 2603: 53 4c 89 add %rdx,%r13 0.00 : 2606: c3 48 81 ec 08 01 cmpq $0x0,0x70(%rsp) 0.00 : 260c: 00 00 48 89 cmove %rax,%rcx 0.00 : 2610: 4c 24 68 48 89 54 cmpq $0x0,0x68(%rsp) 0.00 : 2616: 24 70 89 74 24 78 cmovne 0x68(%rsp),%rax 0.00 : 261c: 8b 97 c4 00 00 00 4c mov %rcx,0x80(%rsp) 0.00 : 2623: 8b 0.00 : 2624: af d8 00 00 00 48 8b mov %rax,0x88(%rsp) 0.00 : 262b: 4c 0.00 : 262c: 24 70 48 8b 74 movzwl 0x6(%r13),%eax 0.00 : 2631: 24 70 49 01 rol $0x8,%ax 0.00 : 2635: d5 48 83 7c 24 and $0x1fff,%eax 0.00 : 263a: 70 00 48 0f 44 c8 48 mov %eax,0xf0(%rsp) 0.00 : 2641: 83 7c 24 68 00 48 0f mov 0xd8(%rdi),%rax 0.00 : 2648: 45 44 24 68 48 mov 0x68(%rsp),%rdi 0.00 : 264d: 89 8c 24 80 movzbl (%rax,%rdx,1),%eax 0.00 : 2651: 00 00 00 48 89 84 24 movb $0x0,0xfd(%rsp) 0.00 : 2658: 88 0.00 : 2659: 00 00 00 41 0f b7 45 mov %rsi,0xe0(%rsp) 0.00 : 2660: 06 0.00 : 2661: 66 c1 c0 08 25 ff 1f mov %rdi,0xe8(%rsp) 0.00 : 2668: 00 0.00 : 2669: 00 89 84 24 f0 00 00 movb $0x2,0xfc(%rsp) 0.00 : 2670: 00 0.00 : 2671: 48 8b 87 and $0xf,%eax 0.00 : 2674: d8 00 00 shl $0x2,%eax 0.00 : 2677: 00 48 8b 7c 24 68 0f mov %eax,0xf4(%rsp) 0.00 : 267e: b6 04 10 c6 mov 0x78(%rsp),%eax 0.00 : 2682: 84 24 fd 00 00 00 00 mov %eax,0xf8(%rsp) 0.00 : 2689: 48 89 b4 24 e0 callq 268e 0.00 : 268e: 00 00 00 48 89 bc 24 mov %gs:0x0,%eax 0.00 : 2695: e8 0.00 : 2696: 00 00 00 add $0x1,%eax 0.00 : 2699: c6 84 24 and $0x1,%eax 0.00 : 269c: fc 00 00 00 02 83 e0 mov %eax,0xb4(%rsp) 0.00 : 26a3: 0f c1 e0 02 89 84 24 add %eax,%gs:0x0 0.00 : 26aa: f4 0.00 : 26ab: 00 00 00 8b mov 0x18(%rbx),%rdx 0.00 : 26af: 44 24 78 89 add $0x30,%rbx 0.00 : 26b3: 84 24 f8 00 00 00 e8 mov %rdx,0xa8(%rsp) 0.00 : 26ba: 00 0.00 : 26bb: 00 00 00 65 8b 04 25 mov 0xa8(%rsp),%rcx 0.00 : 26c2: 00 0.00 : 26c3: 00 00 00 83 c0 01 83 mov %gs:0x0,%edx 0.00 : 26ca: e0 0.00 : 26cb: 01 89 mov %edx,%edx 0.00 : 26cd: 84 24 b4 00 00 00 65 mov 0xa8(%rsp),%rsi 0.00 : 26d4: 01 0.00 : 26d5: 04 25 00 00 00 mov 0x48(%rcx,%rdx,8),%rcx 0.00 : 26da: 00 48 8b 53 18 48 83 mov %rcx,0x90(%rsp) 0.00 : 26e1: c3 0.00 : 26e2: 30 48 89 94 mov 0x40(%rsi),%rax 0.00 : 26e6: 24 a8 00 00 mov (%rax,%rdx,8),%rax 0.00 : 26ea: 00 48 8b 8c 24 a8 00 mov %rax,0x98(%rsp) 0.00 : 26f1: 00 0.00 : 26f2: 00 65 8b 14 mov 0x38(%rsi),%r15 0.00 : 26f6: 25 00 00 00 00 89 d2 add 0x0(,%rdx,8),%r15 0.00 : 26fd: 48 0.00 : 26fe: 8b b4 24 a8 mov 0x78(%rsp),%eax 0.00 : 2702: 00 00 00 48 8b 4c d1 cmpb $0x0,0x0(%rip) # 2709 0.00 : 2709: 48 48 89 mov (%r15),%edi 0.00 : 270c: 8c 24 90 00 00 mov %rax,0x50(%rsp) 0.00 : 2711: 00 48 8b 46 40 48 8b mov %edi,0xa4(%rsp) 0.00 : 2718: 04 d0 48 89 mov 0xc(%rsi,%rax,4),%ebp 0.00 : 271c: 84 24 98 00 00 mov %rbx,0x58(%rsp) 0.00 : 2721: 00 4c 8b 7e 38 4c jne 2bd3 0.00 : 2727: 03 3c d5 00 00 mov 0x50(%rsp),%rdx 0.00 : 272c: 00 00 mov %ebp,%eax 0.00 : 272e: 8b 44 24 78 80 3d 00 mov 0x90(%rsp),%rbp 0.00 : 2735: 00 0.00 : 2736: 00 00 00 41 8b 3f 48 lea 0xd0(%rsp),%r14 0.00 : 273d: 89 0.00 : 273e: 44 24 50 89 bc 24 a4 movl $0x0,0x7c(%rsp) 0.00 : 2745: 00 0.00 : 2746: 00 00 8b 6c add $0x8,%rdx 0.00 : 274a: 86 0c 48 add %rax,%rbp 0.00 : 274d: 89 5c 24 58 0f mov %rdx,0x48(%rsp) 0.00 : 2752: 85 ac 04 00 00 48 nopw 0x0(%rax,%rax,1) 0.00 : 2758: 8b 54 24 50 movzbl 0x53(%rbp),%ecx 0.00 : 275c: 89 e8 48 mov 0x8(%rbp),%eax 0.00 : 275f: 8b ac 24 90 and 0xc(%r13),%eax 0.00 : 2763: 00 00 00 4c 8d b4 24 mov 0xf0(%rsp),%esi 0.00 : 276a: d0 00 00 cmp 0x0(%rbp),%eax 0.00 : 276d: 00 c7 mov %ecx,%eax 0.00 : 276f: 44 24 7c setne %dl 0.00 : 2772: 00 00 00 shr $0x3,%eax 0.00 : 2775: 00 48 83 and $0x1,%eax 0.00 : 2778: c2 08 cmp %al,%dl 0.00 : 277a: 48 01 jne 27f8 0.00 : 277c: c5 48 89 mov 0xc(%rbp),%eax 0.00 : 277f: 54 24 48 66 and 0x10(%r13),%eax 0.00 : 2783: 0f 1f 44 cmp 0x4(%rbp),%eax 0.00 : 2786: 00 00 mov %ecx,%eax 0.00 : 2788: 0f b6 4d setne %dl 0.00 : 278b: 53 8b 45 shr $0x4,%eax 0.00 : 278e: 08 41 23 and $0x1,%eax 0.00 : 2791: 45 0c cmp %al,%dl 0.00 : 2793: 8b b4 jne 27f8 0.00 : 2795: 24 f0 00 00 00 3b 45 mov 0x80(%rsp),%rbx 0.00 : 279c: 00 0.00 : 279d: 89 c8 0f 95 mov 0x8(%rbx),%rdx 0.00 : 27a1: c2 c1 e8 mov (%rbx),%rax 0.00 : 27a4: 03 83 e0 01 xor 0x18(%rbp),%rdx 0.00 : 27a8: 38 c2 75 7c xor 0x10(%rbp),%rax 0.00 : 27ac: 8b 45 0c 41 and 0x38(%rbp),%rdx 0.00 : 27b0: 23 45 10 3b and 0x30(%rbp),%rax 0.00 : 27b4: 45 04 89 or %rax,%rdx 0.00 : 27b7: c8 0f mov %ecx,%eax 0.00 : 27b9: 95 c2 c1 setne %dl 0.00 : 27bc: e8 04 83 and $0x1,%eax 0.00 : 27bf: e0 01 cmp %al,%dl 0.00 : 27c1: 38 c2 jne 27f8 0.00 : 27c3: 75 63 48 8b 9c 24 80 mov 0x88(%rsp),%rdi 0.00 : 27ca: 00 0.00 : 27cb: 00 00 48 8b mov 0x8(%rdi),%rdx 0.00 : 27cf: 53 08 48 mov (%rdi),%rax 0.00 : 27d2: 8b 03 48 33 xor 0x28(%rbp),%rdx 0.00 : 27d6: 55 18 48 33 xor 0x20(%rbp),%rax 0.00 : 27da: 45 10 48 23 and 0x48(%rbp),%rdx 0.00 : 27de: 55 38 48 23 and 0x40(%rbp),%rax 0.00 : 27e2: 45 30 48 or %rax,%rdx 0.00 : 27e5: 09 c2 mov %ecx,%eax 0.00 : 27e7: 89 c8 0f setne %dl 0.00 : 27ea: 95 c2 shr %eax 0.00 : 27ec: 83 e0 01 and $0x1,%eax 0.00 : 27ef: 38 c2 cmp %al,%dl 0.00 : 27f1: 75 35 je 2860 0.00 : 27f3: 48 8b bc 24 88 nopl 0x0(%rax,%rax,1) 0.00 : 27f8: 00 00 00 48 movzwl 0x5a(%rbp),%eax 0.00 : 27fc: 8b 57 08 add %rax,%rbp 0.00 : 27ff: 48 8b 07 48 33 55 28 cmpb $0x0,0xfd(%rsp) 0.00 : 2806: 48 0.00 : 2807: 33 45 20 48 23 55 je 2758 0.00 : 280d: 48 48 23 45 40 48 09 cmpb $0x0,0x0(%rip) # 2814 0.00 : 2814: c2 89 c8 0f 95 c2 jne 2bff 0.00 : 281a: d1 e8 83 e0 01 38 c2 mov 0xa4(%rsp),%eax 0.00 : 2821: 74 6d 0f mov %eax,(%r15) 0.00 : 2824: 1f 44 00 00 0f b7 45 mov 0xb4(%rsp),%edx 0.00 : 282b: 5a 48 01 c5 80 bc 24 add %edx,%gs:0x0 0.00 : 2832: fd 0.00 : 2833: 00 00 00 00 0f callq 2838 0.00 : 2838: 84 4b ff ff ff 80 3d cmpb $0x0,0xfd(%rsp) 0.00 : 283f: 00 0.00 : 2840: 00 00 00 00 0f mov $0x0,%eax 0.00 : 2845: 85 e5 03 00 00 cmove 0x7c(%rsp),%eax 0.00 : 284a: 8b 84 24 a4 mov %eax,0x7c(%rsp) 0.00 : 284e: 00 00 00 41 89 07 8b add $0x108,%rsp 0.00 : 2855: 94 pop %rbx 0.00 : 2856: 24 pop %rbp 0.00 : 2857: b4 00 pop %r12 0.00 : 2859: 00 00 pop %r13 0.00 : 285b: 65 01 pop %r14 0.00 : 285d: 14 25 pop %r15 0.00 : 285f: 00 retq 0.00 : 2860: 00 00 00 e8 movzwl 0x50(%rbp),%edx 0.00 : 2864: 00 00 00 test %dx,%dx 0.00 : 2867: 00 80 je 2884 0.00 : 2869: bc 24 fd 00 00 movzbl 0x9(%r13),%eax 0.00 : 286e: 00 00 b8 cmp %ax,%dx 0.00 : 2871: 00 00 mov %ecx,%eax 0.00 : 2873: 00 00 0f setne %dl 0.00 : 2876: 44 44 24 shr $0x6,%eax 0.00 : 2879: 7c 89 44 and $0x1,%eax 0.00 : 287c: 24 7c cmp %al,%dl 0.00 : 287e: 48 81 c4 08 01 00 jne 27f8 0.00 : 2884: 00 5b test %esi,%esi 0.00 : 2886: 5d 41 5c sete %al 0.00 : 2889: 41 5d 41 and 0x52(%rbp),%al ??:0 100.00 : 288c: 5e 41 5f shr $0x5,%ecx 0.00 : 288f: c3 0f mov %ecx,%edx 0.00 : 2891: b7 55 50 and $0x1,%edx 0.00 : 2894: 66 85 cmp %dl,%al 0.00 : 2896: d2 74 1b 41 0f b6 jne 27f8 0.00 : 289c: 45 09 66 39 movzwl 0x58(%rbp),%eax 0.00 : 28a0: c2 89 c8 0f lea 0x70(%rbp),%rbx 0.00 : 28a4: 95 c2 c1 e8 06 lea 0x0(%rbp,%rax,1),%rax 0.00 : 28a9: 83 e0 01 cmp %rax,%rbx 0.00 : 28ac: 38 c2 jb 28c4 0.00 : 28ae: 0f 85 jmp 28f0 0.00 : 28b0: 74 ff ff movzwl (%rbx),%eax 0.00 : 28b3: ff 85 f6 add %rax,%rbx 0.00 : 28b6: 0f 94 c0 22 movzwl 0x58(%rbp),%eax 0.00 : 28ba: 45 52 c1 e9 05 lea 0x0(%rbp,%rax,1),%rax 0.00 : 28bf: 89 ca 83 cmp %rax,%rbx 0.00 : 28c2: e2 01 jae 28f0 0.00 : 28c4: 38 d0 0f 85 mov 0x8(%rbx),%rax 0.00 : 28c8: 5c ff ff ff lea 0x20(%rbx),%rdx 0.00 : 28cc: 0f b7 45 mov %r14,%rsi 0.00 : 28cf: 58 48 8d mov %r12,%rdi 0.00 : 28d2: 5d 70 48 8d 44 05 00 mov %rdx,0xd8(%rsp) 0.00 : 28d9: 48 0.00 : 28da: 39 c3 72 16 eb 40 0f mov %rax,0xd0(%rsp) 0.00 : 28e1: b7 0.00 : 28e2: 03 48 01 callq *0x30(%rax) 0.00 : 28e5: c3 0f test %al,%al 0.00 : 28e7: b7 45 jne 28b0 0.00 : 28e9: 58 48 8d 44 05 jmpq 27f8 0.00 : 28ee: 00 48 xchg %ax,%ax 0.00 : 28f0: 39 c3 73 2c 48 mov 0x68(%r12),%eax 0.00 : 28f5: 8b 43 08 48 8d addq $0x1,0x60(%rbp) 0.00 : 28fa: 53 20 4c 89 add %rax,0x68(%rbp) 0.00 : 28fe: f6 4c 89 e7 movzwl 0x58(%rbp),%eax 0.00 : 2902: 48 89 94 24 d8 00 cmpb $0x0,0x7d(%r12) 0.00 : 2908: 00 00 48 89 84 mov %ax,0x36(%rsp) 0.00 : 290d: 24 d0 00 movzwl %ax,%eax 0.00 : 2910: 00 00 ff 50 30 lea 0x0(%rbp,%rax,1),%rbx 0.00 : 2915: 84 c0 75 c7 e9 0a js 2a90 0.00 : 291b: ff ff ff 66 mov 0x8(%rbx),%rax 0.00 : 291f: 90 41 8b 44 24 cmpq $0x0,0x30(%rax) 0.00 : 2924: 68 48 je 2980 0.00 : 2926: 83 45 60 01 48 01 45 mov %rax,0xd0(%rsp) 0.00 : 292d: 68 0.00 : 292e: 0f b7 45 58 lea 0x20(%rbx),%rax 0.00 : 2932: 41 80 7c mov %r14,%rsi 0.00 : 2935: 24 7d 00 mov %r12,%rdi 0.00 : 2938: 66 89 44 24 36 0f b7 mov %rax,0xd8(%rsp) 0.00 : 293f: c0 0.00 : 2940: 48 8d 5c 05 mov 0x8(%rbx),%rax 0.00 : 2944: 00 0f 88 callq *0x30(%rax) 0.00 : 2947: 75 01 00 00 mov %eax,0x7c(%rsp) 0.00 : 294b: 48 8b 43 08 48 cmpl $0xffffffff,0x7c(%rsp) 0.00 : 2950: 83 78 30 00 74 5a 48 mov 0xd8(%r12),%rcx 0.00 : 2957: 89 0.00 : 2958: 84 24 d0 00 00 00 48 mov 0xc4(%r12),%eax 0.00 : 295f: 8d 0.00 : 2960: 43 20 4c 89 f6 4c jne 280d 0.00 : 2966: 89 e7 mov %eax,%edx 0.00 : 2968: 48 89 84 24 movzwl 0x5a(%rbp),%eax 0.00 : 296c: d8 00 00 00 lea (%rcx,%rdx,1),%r13 0.00 : 2970: 48 8b 43 add %rax,%rbp 0.00 : 2973: 08 ff 50 30 89 jmpq 27ff 0.00 : 2978: 44 24 7c 83 7c 24 7c nopl 0x0(%rax,%rax,1) 0.00 : 297f: ff 0.00 : 2980: 49 8b 8c mov 0x20(%rbx),%ebx 0.00 : 2983: 24 d8 test %ebx,%ebx 0.00 : 2985: 00 00 js 29ed 0.00 : 2987: 00 41 8b 84 movzwl 0x5a(%rbp),%eax 0.00 : 298b: 24 c4 00 movslq %ebx,%rdx 0.00 : 298e: 00 00 0f 85 a7 fe ff add 0x90(%rsp),%rdx 0.00 : 2995: ff 0.00 : 2996: 89 c2 0f b7 45 lea 0x0(%rbp,%rax,1),%rax 0.00 : 299b: 5a 4c 8d cmp %rax,%rdx 0.00 : 299e: 2c 11 je 29db 0.00 : 29a0: 48 01 c5 e9 testb $0x2,0x52(%rbp) 0.00 : 29a4: 87 fe jne 29db 0.00 : 29a6: ff ff 0f 1f 84 00 00 mov 0xa8(%rsp),%rsi 0.00 : 29ad: 00 0.00 : 29ae: 00 00 8b mov (%r15),%ecx 0.00 : 29b1: 5b 20 85 cmp 0x34(%rsi),%ecx 0.00 : 29b4: db 78 66 0f b7 45 jae 2c93 0.00 : 29ba: 5a 48 63 d3 48 03 94 mov 0x98(%rsp),%rdi 0.00 : 29c1: 24 0.00 : 29c2: 90 00 mov %ecx,%eax 0.00 : 29c4: 00 00 48 8d mov %rbp,(%rdi,%rax,8) 0.00 : 29c8: 44 05 00 lea 0x1(%rcx),%eax 0.00 : 29cb: 48 39 c2 mov %eax,(%r15) 0.00 : 29ce: 74 3b f6 45 52 02 75 cmpb $0x0,0x0(%rip) # 29d5 0.00 : 29d5: 35 48 8b b4 24 a8 jne 2ca0 0.00 : 29db: 00 00 00 41 8b 0f 3b mov 0x90(%rsp),%rbp 0.00 : 29e2: 4e 0.00 : 29e3: 34 0f mov %ebx,%eax 0.00 : 29e5: 83 d9 02 add %rax,%rbp 0.00 : 29e8: 00 00 48 8b bc jmpq 27ff 0.00 : 29ed: 24 98 00 cmp $0xfffffffb,%ebx 0.00 : 29f0: 00 00 89 c8 48 89 jne 2c88 0.00 : 29f6: 2c c7 8d mov (%r15),%eax 0.00 : 29f9: 41 01 41 89 07 80 3d cmp %eax,0xa4(%rsp) 0.00 : 2a00: 00 00 jb 2a50 0.00 : 2a02: 00 00 00 0f 85 mov 0x48(%rsp),%rdx 0.00 : 2a07: c5 02 00 00 48 8b ac mov 0xa8(%rsp),%rcx 0.00 : 2a0e: 24 0.00 : 2a0f: 90 00 00 00 89 d8 48 mov 0x90(%rsp),%rbp 0.00 : 2a16: 01 0.00 : 2a17: c5 e9 12 mov (%rcx,%rdx,4),%eax 0.00 : 2a1a: fe ff ff add %rax,%rbp 0.00 : 2a1d: 83 fb fb 0f 85 92 02 cmpb $0x0,0x0(%rip) # 2a24 0.00 : 2a24: 00 00 41 8b 07 39 je 27ff 0.00 : 2a2a: 84 24 a4 mov %rbp,%rdx 0.00 : 2a2d: 00 00 00 72 4e 48 8b mov $0x0,%rsi 0.00 : 2a34: 54 24 48 48 8b 8c 24 mov $0x0,%rdi 0.00 : 2a3b: a8 00 xor %eax,%eax 0.00 : 2a3d: 00 00 48 8b ac callq 2a42 0.00 : 2a42: 24 90 00 00 00 jmpq 27ff 0.00 : 2a47: 8b 04 91 48 01 c5 80 nopw 0x0(%rax,%rax,1) 0.00 : 2a4e: 3d 00 0.00 : 2a50: 00 00 00 lea -0x1(%rax),%ecx 0.00 : 2a53: 00 0f 84 mov %ecx,(%r15) 0.00 : 2a56: d5 fd ff ff 48 89 ea cmpb $0x0,0x0(%rip) # 2a5d 0.00 : 2a5d: 48 c7 mov %ecx,%eax 0.00 : 2a5f: c6 00 00 00 00 48 c7 mov 0x98(%rsp),%rbx 0.00 : 2a66: c7 0.00 : 2a67: 00 00 00 00 mov (%rbx,%rax,8),%rbp 0.00 : 2a6b: 31 c0 e8 00 00 00 je 27f8 0.00 : 2a71: 00 e9 b8 mov %rbp,%rdx 0.00 : 2a74: fd ff ff 66 0f 1f 84 mov $0x0,%rsi 0.00 : 2a7b: 00 00 00 00 00 8d 48 mov $0x0,%rdi 0.00 : 2a82: ff 41 xor %eax,%eax 0.00 : 2a84: 89 0f 80 3d 00 callq 2a89 0.00 : 2a89: 00 00 00 00 89 jmpq 27f8 0.00 : 2a8e: c8 48 xchg %ax,%ax 0.00 : 2a90: 8b 9c 24 98 00 00 00 mov 0xa8(%rsp),%rsi 0.00 : 2a97: 48 0.00 : 2a98: 8b 2c c3 0f 84 mov 0x50(%rsp),%rcx 0.00 : 2a9d: 87 fd ff xor %r9d,%r9d 0.00 : 2aa0: ff 48 89 ea 48 mov 0x50(%rsp),%rdi 0.00 : 2aa5: c7 c6 00 00 00 00 48 mov %gs:0x0,%eax 0.00 : 2aac: c7 0.00 : 2aad: c7 00 00 00 mov 0xc(%rsi,%rcx,4),%edx 0.00 : 2ab1: 00 31 cltq 0.00 : 2ab3: c0 e8 00 00 00 00 e9 mov 0x0(,%rdi,8),%rdi 0.00 : 2aba: 6a 0.00 : 2abb: fd ff mov %edx,%ecx 0.00 : 2abd: ff 66 90 48 8b add 0x48(%rsi,%rax,8),%rcx 0.00 : 2ac2: b4 24 a8 00 00 00 48 movq $0x0,0xb8(%rsp) 0.00 : 2ac9: 8b 4c 24 50 45 0.00 : 2ace: 31 c9 48 8b 7c 24 50 mov %rdi,0xc0(%rsp) 0.00 : 2ad5: 65 0.00 : 2ad6: 8b 04 mov (%rsi),%eax 0.00 : 2ad8: 25 00 sub %edx,%eax 0.00 : 2ada: 00 00 00 8b lea (%rcx,%rax,1),%rax 0.00 : 2ade: 54 8e 0c cmp %rax,%rcx 0.00 : 2ae1: 48 98 48 8b 3c fd 00 mov %rax,0xc8(%rsp) 0.00 : 2ae8: 00 0.00 : 2ae9: 00 00 jae 2b53 0.00 : 2aeb: 89 d1 48 03 4c c6 48 mov 0xc0(%rsp),%r11 0.00 : 2af2: 48 0.00 : 2af3: c7 84 24 b8 00 mov %rcx,0x38(%rsp) 0.00 : 2af8: 00 00 00 xor %r9d,%r9d 0.00 : 2afb: 00 00 00 48 89 mov 0x38(%rsp),%rdx 0.00 : 2b00: bc 24 c0 00 00 00 8b mov $0x0,%rdi 0.00 : 2b07: 06 29 d0 48 8d mov $0x6,%ecx 0.00 : 2b0c: 04 01 48 39 movzwl 0x58(%rdx),%eax 0.00 : 2b10: c1 48 89 mov %rdx,%r8 0.00 : 2b13: 84 24 c8 add %rax,%r8 0.00 : 2b16: 00 00 00 73 mov 0x8(%r8),%r10 0.00 : 2b1a: 68 4c 8b 9c lea 0x10(%r10),%rsi 0.00 : 2b1e: 24 c0 repz cmpsb %es:(%rdi),%ds:(%rsi) 0.00 : 2b20: 00 00 00 48 89 4c jne 2bad 0.00 : 2b26: 24 38 45 31 lea 0x20(%r8),%r11 0.00 : 2b2a: c9 48 8b xor %r9d,%r9d 0.00 : 2b2d: 54 24 38 48 c7 mov 0x38(%rsp),%rdx 0.00 : 2b32: c7 00 00 00 00 b9 06 mov 0xc8(%rsp),%rcx 0.00 : 2b39: 00 0.00 : 2b3a: 00 00 0f b7 movzwl 0x5a(%rdx),%eax 0.00 : 2b3e: 42 58 49 add %rax,%rdx 0.00 : 2b41: 89 d0 49 cmp %rcx,%rdx 0.00 : 2b44: 01 c0 4d 8b 50 mov %rdx,0x38(%rsp) 0.00 : 2b49: 08 49 jb 2afb 0.00 : 2b4b: 8d 72 10 f3 a6 0f 85 mov %r11,0xc0(%rsp) 0.00 : 2b52: 87 0.00 : 2b53: 00 00 00 4d 8d 58 20 mov 0xb8(%rsp),%rsi 0.00 : 2b5a: 45 0.00 : 2b5b: 31 c9 48 8b 54 24 38 mov 0xc0(%rsp),%rdi 0.00 : 2b62: 48 0.00 : 2b63: 8b 8c 24 mov %r12,%rdx 0.00 : 2b66: c8 00 00 00 0f mov 0x58(%rsp),%rax 0.00 : 2b6b: b7 42 5a 48 01 mov 0x68(%rsp),%r8 0.00 : 2b70: c2 48 39 ca 48 mov 0x70(%rsp),%rcx 0.00 : 2b75: 89 54 24 38 72 mov %r9d,0x20(%rsp) 0.00 : 2b7a: b0 4c 89 9c 24 c0 00 mov $0x0,%r9 0.00 : 2b81: 00 00 48 8b b4 mov %rsi,0x18(%rsp) 0.00 : 2b86: 24 b8 00 00 mov 0x78(%rsp),%esi 0.00 : 2b8a: 00 48 8b bc 24 mov %rdi,0x10(%rsp) 0.00 : 2b8f: c0 00 00 00 4c mov %rax,0x8(%rsp) 0.00 : 2b94: 89 e2 48 8b 44 mov $0x2,%edi 0.00 : 2b99: 24 58 xor %eax,%eax 0.00 : 2b9b: 4c 8b 44 24 68 48 8b movq $0x0,(%rsp) 0.00 : 2ba2: 4c 0.00 : 2ba3: 24 70 44 89 4c callq 2ba8 0.00 : 2ba8: 24 20 49 c7 c1 jmpq 291b 0.00 : 2bad: 00 00 00 00 48 cmp 0x38(%rsp),%rbp 0.00 : 2bb2: 89 74 je 2bbd 0.00 : 2bb4: 24 18 8b 74 add $0x1,%r9d 0.00 : 2bb8: 24 78 48 89 7c jmpq 2b2d 0.00 : 2bbd: 24 10 48 89 44 24 cmpw $0x70,0x36(%rsp) 0.00 : 2bc3: 08 bf je 2c2b 0.00 : 2bc5: 02 00 00 00 31 c0 48 mov %r11,0xc0(%rsp) 0.00 : 2bcc: c7 0.00 : 2bcd: 04 24 00 00 add $0x1,%r9d 0.00 : 2bd1: 00 00 jmp 2b53 0.00 : 2bd3: e8 00 00 00 00 mov 0x20(%rsi,%rax,4),%r9d 0.00 : 2bd8: e9 6e fd mov %edi,%r8d 0.00 : 2bdb: ff ff 48 mov %rbx,%rdx 0.00 : 2bde: 3b 6c 24 38 74 09 41 mov $0x0,%rsi 0.00 : 2be5: 83 c1 01 e9 70 ff ff mov $0x0,%rdi 0.00 : 2bec: ff 66 xor %eax,%eax 0.00 : 2bee: 83 7c 24 add %rcx,%r9 0.00 : 2bf1: 36 70 74 66 mov 0x78(%rsp),%ecx 0.00 : 2bf5: 4c 89 9c 24 c0 callq 2bfa 0.00 : 2bfa: 00 00 00 41 83 jmpq 2727 0.00 : 2bff: c1 01 eb 80 44 8b 4c mov 0xa4(%rsp),%r8d 0.00 : 2c06: 86 0.00 : 2c07: 20 41 89 mov (%r15),%ecx 0.00 : 2c0a: f8 48 89 da 48 c7 c6 mov $0x0,%rdx 0.00 : 2c11: 00 00 00 00 48 c7 c7 mov $0x0,%rsi 0.00 : 2c18: 00 00 00 00 31 c0 49 mov $0x0,%rdi 0.00 : 2c1f: 01 c9 xor %eax,%eax 0.00 : 2c21: 8b 4c 24 78 e8 callq 2c26 0.00 : 2c26: 00 00 00 00 e9 jmpq 281a 0.00 : 2c2b: 28 fb ff ff 44 cmpb $0x0,0x10(%r10) 0.00 : 2c30: 8b 84 jne 2bc5 0.00 : 2c32: 24 a4 00 00 mov 0x20(%r8),%r8d 0.00 : 2c36: 00 41 8b test %r8d,%r8d 0.00 : 2c39: 0f 48 jns 2bc5 0.00 : 2c3b: c7 c2 00 00 00 mov $0x54,%ecx 0.00 : 2c40: 00 48 c7 mov %rbp,%rsi 0.00 : 2c43: c6 00 00 00 00 48 c7 mov $0x0,%rdi 0.00 : 2c4a: c7 00 repz cmpsb %es:(%rdi),%ds:(%rsi) 0.00 : 2c4c: 00 00 00 31 c0 e8 jne 2bc5 0.00 : 2c52: 00 00 00 00 e9 ef fb cmp %r11,0xc0(%rsp) 0.00 : 2c59: ff 0.00 : 2c5a: ff 41 80 7a 10 00 75 movq $0x0,0xb8(%rsp) 0.00 : 2c61: 93 45 8b 40 20 0.00 : 2c66: 45 85 c0 79 8a b9 je 2bcd 0.00 : 2c6c: 54 00 00 00 48 89 ee movq $0x0,0xb8(%rsp) 0.00 : 2c73: 48 c7 c7 00 00 0.00 : 2c78: 00 00 f3 a6 0f 85 73 mov %r11,0xc0(%rsp) 0.00 : 2c7f: ff 0.00 : 2c80: ff ff 4c 39 9c jmpq 2bcd 0.00 : 2c85: 24 c0 00 nopl (%rax) 0.00 : 2c88: 00 00 not %ebx 0.00 : 2c8a: 48 c7 84 24 mov %ebx,0x7c(%rsp) 0.00 : 2c8e: b8 00 00 00 00 jmpq 280d 0.00 : 2c93: 00 00 00 0f 84 61 ff movl $0x0,0x7c(%rsp) 0.00 : 2c9a: ff 0.00 : 2c9b: ff 48 c7 84 24 jmpq 280d 0.00 : 2ca0: b8 00 00 mov %rbp,%rdx 0.00 : 2ca3: 00 00 00 00 00 4c 89 mov $0x0,%rsi 0.00 : 2caa: 9c 24 c0 00 00 00 e9 mov $0x0,%rdi 0.00 : 2cb1: 48 ff xor %eax,%eax 0.00 : 2cb3: ff ff 0f 1f 00 callq 2cb8 0.00 : 2cb8: f7 d3 89 5c 24 jmpq 29db : 2cbd: 7c e9 7a nopl (%rax) : 2cc0: fb ff push %r15 : 2cc2: ff c7 44 24 7c mov $0x80d0,%esi : 2cc7: 00 00 push %r14 : 2cc9: 00 00 e9 mov %rdi,%r14 : 2ccc: 6d fb push %r13 : 2cce: ff ff push %r12 : 2cd0: 48 89 ea xor %r12d,%r12d : 2cd3: 48 push %rbp : 2cd4: c7 push %rbx : 2cd5: c6 00 00 00 sub $0x8,%rsp : 2cd9: 00 48 c7 mov 0x10(%rdi),%ebp : 2cdc: c7 00 mov %ebp,%edi : 2cde: 00 00 00 31 c0 callq 2ce3 : 2ce3: e8 00 00 mov %eax,%r15d : 2ce6: 00 00 mov %eax,%eax : 2ce8: e9 1e fd ff lea (%rax,%rax,8),%rdx Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000023090 <__gconv_transform_utf8_internal>: 0.00 : 23090: 41 57 push %r15 0.00 : 23092: 48 8d 47 68 lea 0x68(%rdi),%rax 0.00 : 23096: 41 56 push %r14 0.00 : 23098: 41 55 push %r13 0.00 : 2309a: 41 54 push %r12 0.00 : 2309c: 49 89 cc mov %rcx,%r12 0.00 : 2309f: 55 push %rbp 0.00 : 230a0: 53 push %rbx 0.00 : 230a1: 48 81 ec 98 00 00 00 sub $0x98,%rsp 0.00 : 230a8: 48 89 54 24 30 mov %rdx,0x30(%rsp) 0.00 : 230ad: 48 89 f2 mov %rsi,%rdx 0.00 : 230b0: 48 89 74 24 38 mov %rsi,0x38(%rsp) 0.00 : 230b5: 48 83 c2 38 add $0x38,%rdx 0.00 : 230b9: 4c 89 44 24 28 mov %r8,0x28(%rsp) 0.00 : 230be: 4c 89 4c 24 20 mov %r9,0x20(%rsp) 0.00 : 230c3: 48 89 44 24 40 mov %rax,0x40(%rsp) 0.00 : 230c8: 48 89 54 24 48 mov %rdx,0x48(%rsp) 0.00 : 230cd: 44 8b 4e 10 mov 0x10(%rsi),%r9d 0.00 : 230d1: 8b 9c 24 d0 00 00 00 mov 0xd0(%rsp),%ebx 0.00 : 230d8: 48 c7 44 24 50 00 00 movq $0x0,0x50(%rsp) 0.00 : 230df: 00 00 0.00 : 230e1: 41 f6 c1 01 test $0x1,%r9b 0.00 : 230e5: 75 27 jne 2310e <__gconv_transform_utf8_internal+0x7e> 0.00 : 230e7: 48 8b 44 24 40 mov 0x40(%rsp),%rax 0.00 : 230ec: 48 8b 40 28 mov 0x28(%rax),%rax 0.00 : 230f0: 48 89 44 24 50 mov %rax,0x50(%rsp) 0.00 : 230f5: 48 83 7f 68 00 cmpq $0x0,0x68(%rdi) 0.00 : 230fa: 74 12 je 2310e <__gconv_transform_utf8_internal+0x7e> 0.00 : 230fc: 48 c1 c8 11 ror $0x11,%rax 0.00 : 23100: 64 48 33 04 25 30 00 xor %fs:0x30,%rax 0.00 : 23107: 00 00 0.00 : 23109: 48 89 44 24 50 mov %rax,0x50(%rsp) 0.00 : 2310e: 85 db test %ebx,%ebx 0.00 : 23110: 0f 85 f3 0b 00 00 jne 23d09 <__gconv_transform_utf8_internal+0xc79> 0.00 : 23116: 48 83 7c 24 28 00 cmpq $0x0,0x28(%rsp) 0.00 : 2311c: 0f 85 4a 0c 00 00 jne 23d6c <__gconv_transform_utf8_internal+0xcdc> 0.00 : 23122: 48 8b 44 24 38 mov 0x38(%rsp),%rax 0.00 : 23127: 48 8b 00 mov (%rax),%rax 0.00 : 2312a: 48 89 44 24 58 mov %rax,0x58(%rsp) 0.00 : 2312f: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx 0.00 : 23134: 45 31 ff xor %r15d,%r15d 0.00 : 23137: 48 83 7c 24 20 00 cmpq $0x0,0x20(%rsp) 0.00 : 2313d: 44 8b 94 24 d8 00 00 mov 0xd8(%rsp),%r10d 0.00 : 23144: 00 0.00 : 23145: 48 8d 44 24 78 lea 0x78(%rsp),%rax 0.00 : 2314a: 48 8b 49 08 mov 0x8(%rcx),%rcx 0.00 : 2314e: 48 c7 44 24 78 00 00 movq $0x0,0x78(%rsp) 0.00 : 23155: 00 00 0.00 : 23157: 4c 0f 45 f8 cmovne %rax,%r15 0.00 : 2315b: 45 85 d2 test %r10d,%r10d 0.00 : 2315e: 48 89 4c 24 60 mov %rcx,0x60(%rsp) 0.00 : 23163: 74 15 je 2317a <__gconv_transform_utf8_internal+0xea> 0.00 : 23165: 48 8b 44 24 38 mov 0x38(%rsp),%rax ??:0 100.00 : 2316a: 4c 8b 58 20 mov 0x20(%rax),%r11 0.00 : 2316e: 41 8b 13 mov (%r11),%edx 0.00 : 23171: f6 c2 07 test $0x7,%dl 0.00 : 23174: 0f 85 7e 04 00 00 jne 235f8 <__gconv_transform_utf8_internal+0x568> 0.00 : 2317a: 48 8d 44 24 70 lea 0x70(%rsp),%rax 0.00 : 2317f: 48 89 44 24 18 mov %rax,0x18(%rsp) 0.00 : 23184: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 23188: 48 8b 54 24 30 mov 0x30(%rsp),%rdx 0.00 : 2318d: 4c 8b 32 mov (%rdx),%r14 0.00 : 23190: 4d 39 f4 cmp %r14,%r12 0.00 : 23193: 0f 84 af 03 00 00 je 23548 <__gconv_transform_utf8_internal+0x4b8> 0.00 : 23199: 48 8b 44 24 58 mov 0x58(%rsp),%rax 0.00 : 2319e: 48 83 c0 04 add $0x4,%rax 0.00 : 231a2: 48 39 44 24 60 cmp %rax,0x60(%rsp) 0.00 : 231a7: 0f 82 83 03 00 00 jb 23530 <__gconv_transform_utf8_internal+0x4a0> 0.00 : 231ad: 48 8b 6c 24 58 mov 0x58(%rsp),%rbp 0.00 : 231b2: 45 89 ca mov %r9d,%r10d 0.00 : 231b5: 4d 89 f0 mov %r14,%r8 0.00 : 231b8: 41 bd 04 00 00 00 mov $0x4,%r13d 0.00 : 231be: 41 83 e2 02 and $0x2,%r10d 0.00 : 231c2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 231c8: 41 0f b6 38 movzbl (%r8),%edi 0.00 : 231cc: 4d 8d 48 01 lea 0x1(%r8),%r9 0.00 : 231d0: 83 ff 7f cmp $0x7f,%edi 0.00 : 231d3: 0f 86 17 02 00 00 jbe 233f0 <__gconv_transform_utf8_internal+0x360> 0.00 : 231d9: 8d 87 3e ff ff ff lea -0xc2(%rdi),%eax 0.00 : 231df: 83 f8 1d cmp $0x1d,%eax 0.00 : 231e2: 0f 87 28 02 00 00 ja 23410 <__gconv_transform_utf8_internal+0x380> 0.00 : 231e8: 83 e7 1f and $0x1f,%edi 0.00 : 231eb: b9 02 00 00 00 mov $0x2,%ecx 0.00 : 231f0: 4d 8d 0c 08 lea (%r8,%rcx,1),%r9 0.00 : 231f4: be 01 00 00 00 mov $0x1,%esi 0.00 : 231f9: 4d 39 cc cmp %r9,%r12 0.00 : 231fc: 73 62 jae 23260 <__gconv_transform_utf8_internal+0x1d0> 0.00 : 231fe: 49 8d 48 01 lea 0x1(%r8),%rcx 0.00 : 23202: 49 39 cc cmp %rcx,%r12 0.00 : 23205: 0f 86 12 03 00 00 jbe 2351d <__gconv_transform_utf8_internal+0x48d> 0.00 : 2320b: 41 0f b6 40 01 movzbl 0x1(%r8),%eax 0.00 : 23210: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23215: 83 c0 80 add $0xffffff80,%eax 0.00 : 23218: 0f 85 ff 02 00 00 jne 2351d <__gconv_transform_utf8_internal+0x48d> 0.00 : 2321e: 49 8d 50 02 lea 0x2(%r8),%rdx 0.00 : 23222: eb 15 jmp 23239 <__gconv_transform_utf8_internal+0x1a9> 0.00 : 23224: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 23228: 0f b6 02 movzbl (%rdx),%eax 0.00 : 2322b: 48 83 c2 01 add $0x1,%rdx 0.00 : 2322f: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23234: 83 c0 80 add $0xffffff80,%eax 0.00 : 23237: 75 0c jne 23245 <__gconv_transform_utf8_internal+0x1b5> 0.00 : 23239: 48 83 c6 01 add $0x1,%rsi 0.00 : 2323d: 49 39 d4 cmp %rdx,%r12 0.00 : 23240: 48 89 d1 mov %rdx,%rcx 0.00 : 23243: 77 e3 ja 23228 <__gconv_transform_utf8_internal+0x198> 0.00 : 23245: 4c 39 e1 cmp %r12,%rcx 0.00 : 23248: 75 66 jne 232b0 <__gconv_transform_utf8_internal+0x220> 0.00 : 2324a: 48 89 6c 24 68 mov %rbp,0x68(%rsp) 0.00 : 2324f: 41 bd 07 00 00 00 mov $0x7,%r13d 0.00 : 23255: e9 98 00 00 00 jmpq 232f2 <__gconv_transform_utf8_internal+0x262> 0.00 : 2325a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 23260: 41 0f b6 14 30 movzbl (%r8,%rsi,1),%edx 0.00 : 23265: 89 d0 mov %edx,%eax 0.00 : 23267: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 2326c: 83 c0 80 add $0xffffff80,%eax 0.00 : 2326f: 0f 85 2b 02 00 00 jne 234a0 <__gconv_transform_utf8_internal+0x410> 0.00 : 23275: c1 e7 06 shl $0x6,%edi 0.00 : 23278: 83 e2 3f and $0x3f,%edx 0.00 : 2327b: 48 83 c6 01 add $0x1,%rsi 0.00 : 2327f: 09 d7 or %edx,%edi 0.00 : 23281: 48 39 f1 cmp %rsi,%rcx 0.00 : 23284: 77 da ja 23260 <__gconv_transform_utf8_internal+0x1d0> 0.00 : 23286: 48 83 f9 02 cmp $0x2,%rcx 0.00 : 2328a: 74 0c je 23298 <__gconv_transform_utf8_internal+0x208> 0.00 : 2328c: 8d 4c 89 fc lea -0x4(%rcx,%rcx,4),%ecx 0.00 : 23290: 89 f8 mov %edi,%eax 0.00 : 23292: d3 e8 shr %cl,%eax 0.00 : 23294: 85 c0 test %eax,%eax 0.00 : 23296: 74 18 je 232b0 <__gconv_transform_utf8_internal+0x220> 0.00 : 23298: 8d 87 00 28 ff ff lea -0xd800(%rdi),%eax 0.00 : 2329e: 3d ff 07 00 00 cmp $0x7ff,%eax 0.00 : 232a3: 0f 87 47 01 00 00 ja 233f0 <__gconv_transform_utf8_internal+0x360> 0.00 : 232a9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 232b0: 4d 85 ff test %r15,%r15 0.00 : 232b3: 0f 84 d4 01 00 00 je 2348d <__gconv_transform_utf8_internal+0x3fd> 0.00 : 232b9: 45 85 d2 test %r10d,%r10d 0.00 : 232bc: 0f 84 cb 01 00 00 je 2348d <__gconv_transform_utf8_internal+0x3fd> 0.00 : 232c2: 49 01 f0 add %rsi,%r8 0.00 : 232c5: 49 83 07 01 addq $0x1,(%r15) 0.00 : 232c9: 41 bd 06 00 00 00 mov $0x6,%r13d 0.00 : 232cf: 4d 39 c4 cmp %r8,%r12 0.00 : 232d2: 0f 84 2b 01 00 00 je 23403 <__gconv_transform_utf8_internal+0x373> 0.00 : 232d8: 48 8d 45 04 lea 0x4(%rbp),%rax 0.00 : 232dc: 48 39 44 24 60 cmp %rax,0x60(%rsp) 0.00 : 232e1: 0f 83 e1 fe ff ff jae 231c8 <__gconv_transform_utf8_internal+0x138> 0.00 : 232e7: 48 89 6c 24 68 mov %rbp,0x68(%rsp) 0.00 : 232ec: 41 bd 05 00 00 00 mov $0x5,%r13d 0.00 : 232f2: 48 8b 4c 24 30 mov 0x30(%rsp),%rcx 0.00 : 232f7: 4c 89 01 mov %r8,(%rcx) 0.00 : 232fa: 48 83 7c 24 28 00 cmpq $0x0,0x28(%rsp) 0.00 : 23300: 0f 85 da 04 00 00 jne 237e0 <__gconv_transform_utf8_internal+0x750> 0.00 : 23306: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx 0.00 : 2330b: 48 8b 59 30 mov 0x30(%rcx),%rbx 0.00 : 2330f: 48 85 db test %rbx,%rbx 0.00 : 23312: 74 35 je 23349 <__gconv_transform_utf8_internal+0x2b9> 0.00 : 23314: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 23318: 48 8b 7b 08 mov 0x8(%rbx),%rdi 0.00 : 2331c: 48 85 ff test %rdi,%rdi 0.00 : 2331f: 74 1f je 23340 <__gconv_transform_utf8_internal+0x2b0> 0.00 : 23321: e8 ea f9 0e 00 callq 112d10 <_dl_mcount_wrapper_check> 0.00 : 23326: 48 8b 44 24 30 mov 0x30(%rsp),%rax 0.00 : 2332b: 48 8b 7b 18 mov 0x18(%rbx),%rdi 0.00 : 2332f: 49 89 e8 mov %rbp,%r8 0.00 : 23332: 48 8b 4c 24 58 mov 0x58(%rsp),%rcx 0.00 : 23337: 4c 89 f6 mov %r14,%rsi 0.00 : 2333a: 48 8b 10 mov (%rax),%rdx 0.00 : 2333d: ff 53 08 callq *0x8(%rbx) 0.00 : 23340: 48 8b 5b 20 mov 0x20(%rbx),%rbx 0.00 : 23344: 48 85 db test %rbx,%rbx 0.00 : 23347: 75 cf jne 23318 <__gconv_transform_utf8_internal+0x288> 0.00 : 23349: 48 8b 54 24 38 mov 0x38(%rsp),%rdx 0.00 : 2334e: 83 42 14 01 addl $0x1,0x14(%rdx) 0.00 : 23352: f6 42 10 01 testb $0x1,0x10(%rdx) 0.00 : 23356: 0f 85 96 04 00 00 jne 237f2 <__gconv_transform_utf8_internal+0x762> 0.00 : 2335c: 48 3b 6c 24 58 cmp 0x58(%rsp),%rbp 0.00 : 23361: 0f 86 83 01 00 00 jbe 234ea <__gconv_transform_utf8_internal+0x45a> 0.00 : 23367: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx 0.00 : 2336c: 48 8b 7c 24 50 mov 0x50(%rsp),%rdi 0.00 : 23371: 48 8b 01 mov (%rcx),%rax 0.00 : 23374: 48 89 44 24 70 mov %rax,0x70(%rsp) 0.00 : 23379: e8 92 f9 0e 00 callq 112d10 <_dl_mcount_wrapper_check> 0.00 : 2337e: 8b 84 24 d8 00 00 00 mov 0xd8(%rsp),%eax 0.00 : 23385: 45 31 c0 xor %r8d,%r8d 0.00 : 23388: c7 04 24 00 00 00 00 movl $0x0,(%rsp) 0.00 : 2338f: 4c 8b 4c 24 20 mov 0x20(%rsp),%r9 0.00 : 23394: 48 89 e9 mov %rbp,%rcx 0.00 : 23397: 48 8b 54 24 18 mov 0x18(%rsp),%rdx 0.00 : 2339c: 48 8b 74 24 48 mov 0x48(%rsp),%rsi 0.00 : 233a1: 48 8b 7c 24 40 mov 0x40(%rsp),%rdi 0.00 : 233a6: 89 44 24 08 mov %eax,0x8(%rsp) 0.00 : 233aa: ff 54 24 50 callq *0x50(%rsp) 0.00 : 233ae: 83 f8 04 cmp $0x4,%eax 0.00 : 233b1: 41 89 c0 mov %eax,%r8d 0.00 : 233b4: 0f 84 26 01 00 00 je 234e0 <__gconv_transform_utf8_internal+0x450> 0.00 : 233ba: 48 39 6c 24 70 cmp %rbp,0x70(%rsp) 0.00 : 233bf: 0f 85 d9 05 00 00 jne 2399e <__gconv_transform_utf8_internal+0x90e> 0.00 : 233c5: 45 85 c0 test %r8d,%r8d 0.00 : 233c8: 0f 85 7e 0a 00 00 jne 23e4c <__gconv_transform_utf8_internal+0xdbc> 0.00 : 233ce: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx 0.00 : 233d3: 48 8b 44 24 38 mov 0x38(%rsp),%rax 0.00 : 233d8: 48 8b 09 mov (%rcx),%rcx 0.00 : 233db: 48 89 4c 24 58 mov %rcx,0x58(%rsp) 0.00 : 233e0: 44 8b 48 10 mov 0x10(%rax),%r9d 0.00 : 233e4: e9 9f fd ff ff jmpq 23188 <__gconv_transform_utf8_internal+0xf8> 0.00 : 233e9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 233f0: 4d 89 c8 mov %r9,%r8 0.00 : 233f3: 89 7d 00 mov %edi,0x0(%rbp) 0.00 : 233f6: 48 83 c5 04 add $0x4,%rbp 0.00 : 233fa: 4d 39 c4 cmp %r8,%r12 0.00 : 233fd: 0f 85 d5 fe ff ff jne 232d8 <__gconv_transform_utf8_internal+0x248> 0.00 : 23403: 4d 89 e0 mov %r12,%r8 0.00 : 23406: 48 89 6c 24 68 mov %rbp,0x68(%rsp) 0.00 : 2340b: e9 e2 fe ff ff jmpq 232f2 <__gconv_transform_utf8_internal+0x262> 0.00 : 23410: 89 f8 mov %edi,%eax 0.00 : 23412: 25 f0 00 00 00 and $0xf0,%eax 0.00 : 23417: 3d e0 00 00 00 cmp $0xe0,%eax 0.00 : 2341c: 0f 84 8e 00 00 00 je 234b0 <__gconv_transform_utf8_internal+0x420> 0.00 : 23422: 89 f8 mov %edi,%eax 0.00 : 23424: 25 f8 00 00 00 and $0xf8,%eax 0.00 : 23429: 3d f0 00 00 00 cmp $0xf0,%eax 0.00 : 2342e: 0f 84 8c 00 00 00 je 234c0 <__gconv_transform_utf8_internal+0x430> 0.00 : 23434: 89 f8 mov %edi,%eax 0.00 : 23436: 25 fc 00 00 00 and $0xfc,%eax 0.00 : 2343b: 3d f8 00 00 00 cmp $0xf8,%eax 0.00 : 23440: 0f 84 8a 00 00 00 je 234d0 <__gconv_transform_utf8_internal+0x440> 0.00 : 23446: 89 f8 mov %edi,%eax 0.00 : 23448: 31 f6 xor %esi,%esi 0.00 : 2344a: 25 fe 00 00 00 and $0xfe,%eax 0.00 : 2344f: 3d fc 00 00 00 cmp $0xfc,%eax 0.00 : 23454: 0f 84 b6 00 00 00 je 23510 <__gconv_transform_utf8_internal+0x480> 0.00 : 2345a: 48 83 c6 01 add $0x1,%rsi 0.00 : 2345e: 49 8d 04 30 lea (%r8,%rsi,1),%rax 0.00 : 23462: 49 39 c4 cmp %rax,%r12 0.00 : 23465: 0f 86 45 fe ff ff jbe 232b0 <__gconv_transform_utf8_internal+0x220> 0.00 : 2346b: 41 0f b6 04 30 movzbl (%r8,%rsi,1),%eax 0.00 : 23470: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23475: 83 c0 80 add $0xffffff80,%eax 0.00 : 23478: 0f 85 32 fe ff ff jne 232b0 <__gconv_transform_utf8_internal+0x220> 0.00 : 2347e: 48 83 fe 04 cmp $0x4,%rsi 0.00 : 23482: 76 d6 jbe 2345a <__gconv_transform_utf8_internal+0x3ca> 0.00 : 23484: 4d 85 ff test %r15,%r15 0.00 : 23487: 0f 85 2c fe ff ff jne 232b9 <__gconv_transform_utf8_internal+0x229> 0.00 : 2348d: 48 89 6c 24 68 mov %rbp,0x68(%rsp) 0.00 : 23492: 41 bd 06 00 00 00 mov $0x6,%r13d 0.00 : 23498: e9 55 fe ff ff jmpq 232f2 <__gconv_transform_utf8_internal+0x262> 0.00 : 2349d: 0f 1f 00 nopl (%rax) 0.00 : 234a0: 48 39 ce cmp %rcx,%rsi 0.00 : 234a3: 0f 82 07 fe ff ff jb 232b0 <__gconv_transform_utf8_internal+0x220> 0.00 : 234a9: e9 d8 fd ff ff jmpq 23286 <__gconv_transform_utf8_internal+0x1f6> 0.00 : 234ae: 66 90 xchg %ax,%ax 0.00 : 234b0: 83 e7 0f and $0xf,%edi 0.00 : 234b3: b9 03 00 00 00 mov $0x3,%ecx 0.00 : 234b8: e9 33 fd ff ff jmpq 231f0 <__gconv_transform_utf8_internal+0x160> 0.00 : 234bd: 0f 1f 00 nopl (%rax) 0.00 : 234c0: 83 e7 07 and $0x7,%edi 0.00 : 234c3: b9 04 00 00 00 mov $0x4,%ecx 0.00 : 234c8: e9 23 fd ff ff jmpq 231f0 <__gconv_transform_utf8_internal+0x160> 0.00 : 234cd: 0f 1f 00 nopl (%rax) 0.00 : 234d0: 83 e7 03 and $0x3,%edi 0.00 : 234d3: b9 05 00 00 00 mov $0x5,%ecx 0.00 : 234d8: e9 13 fd ff ff jmpq 231f0 <__gconv_transform_utf8_internal+0x160> 0.00 : 234dd: 0f 1f 00 nopl (%rax) 0.00 : 234e0: 41 83 fd 05 cmp $0x5,%r13d 0.00 : 234e4: 0f 84 e4 fe ff ff je 233ce <__gconv_transform_utf8_internal+0x33e> 0.00 : 234ea: 44 8b 8c 24 d8 00 00 mov 0xd8(%rsp),%r9d 0.00 : 234f1: 00 0.00 : 234f2: 45 85 c9 test %r9d,%r9d 0.00 : 234f5: 75 69 jne 23560 <__gconv_transform_utf8_internal+0x4d0> 0.00 : 234f7: 48 81 c4 98 00 00 00 add $0x98,%rsp 0.00 : 234fe: 44 89 e8 mov %r13d,%eax 0.00 : 23501: 5b pop %rbx 0.00 : 23502: 5d pop %rbp 0.00 : 23503: 41 5c pop %r12 0.00 : 23505: 41 5d pop %r13 0.00 : 23507: 41 5e pop %r14 0.00 : 23509: 41 5f pop %r15 0.00 : 2350b: c3 retq 0.00 : 2350c: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 23510: 83 e7 01 and $0x1,%edi 0.00 : 23513: b9 06 00 00 00 mov $0x6,%ecx 0.00 : 23518: e9 d3 fc ff ff jmpq 231f0 <__gconv_transform_utf8_internal+0x160> 0.00 : 2351d: 4c 39 e1 cmp %r12,%rcx 0.00 : 23520: be 01 00 00 00 mov $0x1,%esi 0.00 : 23525: 0f 85 85 fd ff ff jne 232b0 <__gconv_transform_utf8_internal+0x220> 0.00 : 2352b: e9 1a fd ff ff jmpq 2324a <__gconv_transform_utf8_internal+0x1ba> 0.00 : 23530: 48 8b 6c 24 58 mov 0x58(%rsp),%rbp 0.00 : 23535: 4d 89 f0 mov %r14,%r8 0.00 : 23538: 41 bd 05 00 00 00 mov $0x5,%r13d 0.00 : 2353e: 48 89 6c 24 68 mov %rbp,0x68(%rsp) 0.00 : 23543: e9 aa fd ff ff jmpq 232f2 <__gconv_transform_utf8_internal+0x262> 0.00 : 23548: 48 8b 6c 24 58 mov 0x58(%rsp),%rbp 0.00 : 2354d: 4d 89 e0 mov %r12,%r8 0.00 : 23550: 41 bd 04 00 00 00 mov $0x4,%r13d 0.00 : 23556: 48 89 6c 24 68 mov %rbp,0x68(%rsp) 0.00 : 2355b: e9 92 fd ff ff jmpq 232f2 <__gconv_transform_utf8_internal+0x262> 0.00 : 23560: 41 83 fd 07 cmp $0x7,%r13d 0.00 : 23564: 75 91 jne 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 23566: 48 8b 4c 24 30 mov 0x30(%rsp),%rcx 0.00 : 2356b: 48 8b 54 24 38 mov 0x38(%rsp),%rdx 0.00 : 23570: 48 8b 01 mov (%rcx),%rax 0.00 : 23573: 48 8b 72 20 mov 0x20(%rdx),%rsi 0.00 : 23577: 44 89 e1 mov %r12d,%ecx 0.00 : 2357a: 0f b6 10 movzbl (%rax),%edx 0.00 : 2357d: 29 c1 sub %eax,%ecx 0.00 : 2357f: 89 0e mov %ecx,(%rsi) 0.00 : 23581: 8d 82 3e ff ff ff lea -0xc2(%rdx),%eax 0.00 : 23587: 83 f8 1d cmp $0x1d,%eax 0.00 : 2358a: 0f 87 36 06 00 00 ja 23bc6 <__gconv_transform_utf8_internal+0xb36> 0.00 : 23590: 89 d7 mov %edx,%edi 0.00 : 23592: 41 b9 02 00 00 00 mov $0x2,%r9d 0.00 : 23598: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 2359d: 83 e7 1f and $0x1f,%edi 0.00 : 235a0: 48 8b 44 24 30 mov 0x30(%rsp),%rax 0.00 : 235a5: 4c 8b 00 mov (%rax),%r8 0.00 : 235a8: 49 8d 50 01 lea 0x1(%r8),%rdx 0.00 : 235ac: 49 39 d4 cmp %rdx,%r12 0.00 : 235af: 48 89 10 mov %rdx,(%rax) 0.00 : 235b2: 76 26 jbe 235da <__gconv_transform_utf8_internal+0x54a> 0.00 : 235b4: 89 f8 mov %edi,%eax 0.00 : 235b6: 0f b6 3a movzbl (%rdx),%edi 0.00 : 235b9: 48 83 c2 01 add $0x1,%rdx 0.00 : 235bd: c1 e0 06 shl $0x6,%eax 0.00 : 235c0: 83 e7 3f and $0x3f,%edi 0.00 : 235c3: 09 c7 or %eax,%edi 0.00 : 235c5: 48 8b 44 24 30 mov 0x30(%rsp),%rax 0.00 : 235ca: 49 39 d4 cmp %rdx,%r12 0.00 : 235cd: 48 89 10 mov %rdx,(%rax) 0.00 : 235d0: 77 e2 ja 235b4 <__gconv_transform_utf8_internal+0x524> 0.00 : 235d2: 4d 29 e0 sub %r12,%r8 0.00 : 235d5: 49 8d 4c 08 01 lea 0x1(%r8,%rcx,1),%rcx 0.00 : 235da: 48 8d 0c 49 lea (%rcx,%rcx,2),%rcx 0.00 : 235de: 44 89 c8 mov %r9d,%eax 0.00 : 235e1: 41 bd 07 00 00 00 mov $0x7,%r13d 0.00 : 235e7: c1 e0 08 shl $0x8,%eax 0.00 : 235ea: 09 06 or %eax,(%rsi) 0.00 : 235ec: 01 c9 add %ecx,%ecx 0.00 : 235ee: d3 e7 shl %cl,%edi 0.00 : 235f0: 89 7e 04 mov %edi,0x4(%rsi) 0.00 : 235f3: e9 ff fe ff ff jmpq 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 235f8: 48 83 7c 24 28 00 cmpq $0x0,0x28(%rsp) 0.00 : 235fe: 0f 85 e6 06 00 00 jne 23cea <__gconv_transform_utf8_internal+0xc5a> 0.00 : 23604: 89 d0 mov %edx,%eax 0.00 : 23606: 0f b6 f2 movzbl %dl,%esi 0.00 : 23609: 48 8d 15 d7 33 10 00 lea 0x1033d7(%rip),%rdx # 1269e7 0.00 : 23610: c1 f8 08 sar $0x8,%eax 0.00 : 23613: 48 8b 4c 24 30 mov 0x30(%rsp),%rcx 0.00 : 23618: 45 8b 43 04 mov 0x4(%r11),%r8d 0.00 : 2361c: 48 98 cltq 0.00 : 2361e: 48 8d 9c 24 80 00 00 lea 0x80(%rsp),%rbx 0.00 : 23625: 00 0.00 : 23626: 0f b6 54 02 fe movzbl -0x2(%rdx,%rax,1),%edx 0.00 : 2362b: 48 8b 39 mov (%rcx),%rdi 0.00 : 2362e: 88 94 24 80 00 00 00 mov %dl,0x80(%rsp) 0.00 : 23635: 48 8d 50 ff lea -0x1(%rax),%rdx 0.00 : 23639: 48 8d 0c 13 lea (%rbx,%rdx,1),%rcx 0.00 : 2363d: eb 04 jmp 23643 <__gconv_transform_utf8_internal+0x5b3> 0.00 : 2363f: 48 83 ea 01 sub $0x1,%rdx 0.00 : 23643: 48 39 d6 cmp %rdx,%rsi 0.00 : 23646: 76 0b jbe 23653 <__gconv_transform_utf8_internal+0x5c3> 0.00 : 23648: 44 89 c0 mov %r8d,%eax 0.00 : 2364b: 83 e0 3f and $0x3f,%eax 0.00 : 2364e: 83 c8 80 or $0xffffff80,%eax 0.00 : 23651: 88 01 mov %al,(%rcx) 0.00 : 23653: 41 c1 e8 06 shr $0x6,%r8d 0.00 : 23657: 48 83 e9 01 sub $0x1,%rcx 0.00 : 2365b: 48 83 fa 01 cmp $0x1,%rdx 0.00 : 2365f: 77 de ja 2363f <__gconv_transform_utf8_internal+0x5af> 0.00 : 23661: 48 89 f8 mov %rdi,%rax 0.00 : 23664: 44 08 84 24 80 00 00 or %r8b,0x80(%rsp) 0.00 : 2366b: 00 0.00 : 2366c: 48 29 f0 sub %rsi,%rax 0.00 : 2366f: 48 83 c0 01 add $0x1,%rax 0.00 : 23673: 49 39 c4 cmp %rax,%r12 0.00 : 23676: 0f 82 90 01 00 00 jb 2380c <__gconv_transform_utf8_internal+0x77c> 0.00 : 2367c: 48 8b 6c 24 58 mov 0x58(%rsp),%rbp 0.00 : 23681: 41 bd 05 00 00 00 mov $0x5,%r13d 0.00 : 23687: 48 83 c5 04 add $0x4,%rbp 0.00 : 2368b: 48 39 6c 24 60 cmp %rbp,0x60(%rsp) 0.00 : 23690: 0f 82 61 fe ff ff jb 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 23696: 48 8d 14 33 lea (%rbx,%rsi,1),%rdx 0.00 : 2369a: eb 0d jmp 236a9 <__gconv_transform_utf8_internal+0x619> 0.00 : 2369c: 48 83 c7 01 add $0x1,%rdi 0.00 : 236a0: 48 83 c2 01 add $0x1,%rdx 0.00 : 236a4: 49 39 fc cmp %rdi,%r12 0.00 : 236a7: 76 0f jbe 236b8 <__gconv_transform_utf8_internal+0x628> 0.00 : 236a9: 0f b6 07 movzbl (%rdi),%eax 0.00 : 236ac: 48 83 c6 01 add $0x1,%rsi 0.00 : 236b0: 48 83 fe 05 cmp $0x5,%rsi 0.00 : 236b4: 88 02 mov %al,(%rdx) 0.00 : 236b6: 76 e4 jbe 2369c <__gconv_transform_utf8_internal+0x60c> 0.00 : 236b8: 0f b6 94 24 80 00 00 movzbl 0x80(%rsp),%edx 0.00 : 236bf: 00 0.00 : 236c0: 4c 8d 14 33 lea (%rbx,%rsi,1),%r10 0.00 : 236c4: 4c 8d 43 01 lea 0x1(%rbx),%r8 0.00 : 236c8: 83 fa 7f cmp $0x7f,%edx 0.00 : 236cb: 0f 86 80 02 00 00 jbe 23951 <__gconv_transform_utf8_internal+0x8c1> 0.00 : 236d1: 8d 82 3e ff ff ff lea -0xc2(%rdx),%eax 0.00 : 236d7: 83 f8 1d cmp $0x1d,%eax 0.00 : 236da: 0f 87 9e 06 00 00 ja 23d7e <__gconv_transform_utf8_internal+0xcee> 0.00 : 236e0: 83 e2 1f and $0x1f,%edx 0.00 : 236e3: be 02 00 00 00 mov $0x2,%esi 0.00 : 236e8: 4c 8d 04 33 lea (%rbx,%rsi,1),%r8 0.00 : 236ec: bf 01 00 00 00 mov $0x1,%edi 0.00 : 236f1: 4d 39 c2 cmp %r8,%r10 0.00 : 236f4: 0f 83 17 02 00 00 jae 23911 <__gconv_transform_utf8_internal+0x881> 0.00 : 236fa: 48 8d 53 01 lea 0x1(%rbx),%rdx 0.00 : 236fe: 49 39 d2 cmp %rdx,%r10 0.00 : 23701: 48 89 d1 mov %rdx,%rcx 0.00 : 23704: 76 38 jbe 2373e <__gconv_transform_utf8_internal+0x6ae> 0.00 : 23706: 0f b6 84 24 81 00 00 movzbl 0x81(%rsp),%eax 0.00 : 2370d: 00 0.00 : 2370e: 48 89 d1 mov %rdx,%rcx 0.00 : 23711: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23716: 83 c0 80 add $0xffffff80,%eax 0.00 : 23719: 75 23 jne 2373e <__gconv_transform_utf8_internal+0x6ae> 0.00 : 2371b: 48 8d 53 02 lea 0x2(%rbx),%rdx 0.00 : 2371f: eb 11 jmp 23732 <__gconv_transform_utf8_internal+0x6a2> 0.00 : 23721: 0f b6 02 movzbl (%rdx),%eax 0.00 : 23724: 48 83 c2 01 add $0x1,%rdx 0.00 : 23728: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 2372d: 83 c0 80 add $0xffffff80,%eax 0.00 : 23730: 75 0c jne 2373e <__gconv_transform_utf8_internal+0x6ae> 0.00 : 23732: 48 83 c7 01 add $0x1,%rdi 0.00 : 23736: 49 39 d2 cmp %rdx,%r10 0.00 : 23739: 48 89 d1 mov %rdx,%rcx 0.00 : 2373c: 77 e3 ja 23721 <__gconv_transform_utf8_internal+0x691> 0.00 : 2373e: 4c 39 d1 cmp %r10,%rcx 0.00 : 23741: 0f 85 94 06 00 00 jne 23ddb <__gconv_transform_utf8_internal+0xd4b> 0.00 : 23747: 48 8d 43 06 lea 0x6(%rbx),%rax 0.00 : 2374b: 41 bd 07 00 00 00 mov $0x7,%r13d 0.00 : 23751: 48 39 c1 cmp %rax,%rcx 0.00 : 23754: 0f 84 a1 07 00 00 je 23efb <__gconv_transform_utf8_internal+0xe6b> 0.00 : 2375a: 49 63 13 movslq (%r11),%rdx 0.00 : 2375d: 4c 89 d0 mov %r10,%rax 0.00 : 23760: 45 89 d0 mov %r10d,%r8d 0.00 : 23763: 48 29 d8 sub %rbx,%rax 0.00 : 23766: 41 29 d8 sub %ebx,%r8d 0.00 : 23769: 83 e2 07 and $0x7,%edx 0.00 : 2376c: 48 29 d0 sub %rdx,%rax 0.00 : 2376f: 48 8b 54 24 30 mov 0x30(%rsp),%rdx 0.00 : 23774: 48 01 02 add %rax,(%rdx) 0.00 : 23777: 0f b6 94 24 80 00 00 movzbl 0x80(%rsp),%edx 0.00 : 2377e: 00 0.00 : 2377f: 45 89 03 mov %r8d,(%r11) 0.00 : 23782: 8d 82 3e ff ff ff lea -0xc2(%rdx),%eax 0.00 : 23788: 83 f8 1d cmp $0x1d,%eax 0.00 : 2378b: 0f 87 2c 07 00 00 ja 23ebd <__gconv_transform_utf8_internal+0xe2d> 0.00 : 23791: 89 d6 mov %edx,%esi 0.00 : 23793: bf 02 00 00 00 mov $0x2,%edi 0.00 : 23798: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 2379d: 83 e6 1f and $0x1f,%esi 0.00 : 237a0: 48 8d 43 01 lea 0x1(%rbx),%rax 0.00 : 237a4: 49 39 c2 cmp %rax,%r10 0.00 : 237a7: 76 1b jbe 237c4 <__gconv_transform_utf8_internal+0x734> 0.00 : 237a9: 48 89 c2 mov %rax,%rdx 0.00 : 237ac: 0f b6 02 movzbl (%rdx),%eax 0.00 : 237af: c1 e6 06 shl $0x6,%esi 0.00 : 237b2: 48 83 c2 01 add $0x1,%rdx 0.00 : 237b6: 48 83 e9 01 sub $0x1,%rcx 0.00 : 237ba: 83 e0 3f and $0x3f,%eax 0.00 : 237bd: 09 c6 or %eax,%esi 0.00 : 237bf: 49 39 d2 cmp %rdx,%r10 0.00 : 237c2: 77 e8 ja 237ac <__gconv_transform_utf8_internal+0x71c> 0.00 : 237c4: 48 8d 0c 49 lea (%rcx,%rcx,2),%rcx 0.00 : 237c8: 89 f8 mov %edi,%eax 0.00 : 237ca: c1 e0 08 shl $0x8,%eax 0.00 : 237cd: 01 c9 add %ecx,%ecx 0.00 : 237cf: 44 09 c0 or %r8d,%eax 0.00 : 237d2: d3 e6 shl %cl,%esi 0.00 : 237d4: 41 89 03 mov %eax,(%r11) 0.00 : 237d7: 41 89 73 04 mov %esi,0x4(%r11) 0.00 : 237db: e9 17 fd ff ff jmpq 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 237e0: 48 8b 54 24 68 mov 0x68(%rsp),%rdx 0.00 : 237e5: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 237ea: 48 89 10 mov %rdx,(%rax) 0.00 : 237ed: e9 05 fd ff ff jmpq 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 237f2: 48 8b 4c 24 68 mov 0x68(%rsp),%rcx 0.00 : 237f7: 48 89 0a mov %rcx,(%rdx) 0.00 : 237fa: 48 8b 54 24 20 mov 0x20(%rsp),%rdx 0.00 : 237ff: 48 8b 44 24 78 mov 0x78(%rsp),%rax 0.00 : 23804: 48 01 02 add %rax,(%rdx) 0.00 : 23807: e9 de fc ff ff jmpq 234ea <__gconv_transform_utf8_internal+0x45a> 0.00 : 2380c: 48 8b 44 24 30 mov 0x30(%rsp),%rax 0.00 : 23811: 49 39 fc cmp %rdi,%r12 0.00 : 23814: 4c 89 20 mov %r12,(%rax) 0.00 : 23817: 76 20 jbe 23839 <__gconv_transform_utf8_internal+0x7a9> 0.00 : 23819: 48 8d 0c 33 lea (%rbx,%rsi,1),%rcx 0.00 : 2381d: 48 89 fa mov %rdi,%rdx 0.00 : 23820: 0f b6 02 movzbl (%rdx),%eax 0.00 : 23823: 48 83 c2 01 add $0x1,%rdx 0.00 : 23827: 88 01 mov %al,(%rcx) 0.00 : 23829: 48 83 c1 01 add $0x1,%rcx 0.00 : 2382d: 49 39 d4 cmp %rdx,%r12 0.00 : 23830: 77 ee ja 23820 <__gconv_transform_utf8_internal+0x790> 0.00 : 23832: 49 29 fc sub %rdi,%r12 0.00 : 23835: 49 8d 34 34 lea (%r12,%rsi,1),%rsi 0.00 : 23839: 0f b6 94 24 80 00 00 movzbl 0x80(%rsp),%edx 0.00 : 23840: 00 0.00 : 23841: 4c 8d 04 33 lea (%rbx,%rsi,1),%r8 0.00 : 23845: 45 89 c1 mov %r8d,%r9d 0.00 : 23848: 41 29 d9 sub %ebx,%r9d 0.00 : 2384b: 8d 82 3e ff ff ff lea -0xc2(%rdx),%eax 0.00 : 23851: 45 89 0b mov %r9d,(%r11) 0.00 : 23854: 83 f8 1d cmp $0x1d,%eax 0.00 : 23857: 77 55 ja 238ae <__gconv_transform_utf8_internal+0x81e> 0.00 : 23859: 89 d6 mov %edx,%esi 0.00 : 2385b: bf 02 00 00 00 mov $0x2,%edi 0.00 : 23860: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 23865: 83 e6 1f and $0x1f,%esi 0.00 : 23868: 48 8d 43 01 lea 0x1(%rbx),%rax 0.00 : 2386c: 49 39 c0 cmp %rax,%r8 0.00 : 2386f: 76 1b jbe 2388c <__gconv_transform_utf8_internal+0x7fc> 0.00 : 23871: 48 89 c2 mov %rax,%rdx 0.00 : 23874: 0f b6 02 movzbl (%rdx),%eax 0.00 : 23877: c1 e6 06 shl $0x6,%esi 0.00 : 2387a: 48 83 c2 01 add $0x1,%rdx 0.00 : 2387e: 48 83 e9 01 sub $0x1,%rcx 0.00 : 23882: 83 e0 3f and $0x3f,%eax 0.00 : 23885: 09 c6 or %eax,%esi 0.00 : 23887: 49 39 d0 cmp %rdx,%r8 0.00 : 2388a: 77 e8 ja 23874 <__gconv_transform_utf8_internal+0x7e4> 0.00 : 2388c: 48 8d 0c 49 lea (%rcx,%rcx,2),%rcx 0.00 : 23890: 89 f8 mov %edi,%eax 0.00 : 23892: 41 bd 07 00 00 00 mov $0x7,%r13d 0.00 : 23898: c1 e0 08 shl $0x8,%eax 0.00 : 2389b: 01 c9 add %ecx,%ecx 0.00 : 2389d: 44 09 c8 or %r9d,%eax 0.00 : 238a0: d3 e6 shl %cl,%esi 0.00 : 238a2: 41 89 03 mov %eax,(%r11) 0.00 : 238a5: 41 89 73 04 mov %esi,0x4(%r11) 0.00 : 238a9: e9 49 fc ff ff jmpq 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 238ae: 89 d0 mov %edx,%eax 0.00 : 238b0: 25 f0 00 00 00 and $0xf0,%eax 0.00 : 238b5: 3d e0 00 00 00 cmp $0xe0,%eax 0.00 : 238ba: 0f 84 16 04 00 00 je 23cd6 <__gconv_transform_utf8_internal+0xc46> 0.00 : 238c0: 89 d0 mov %edx,%eax 0.00 : 238c2: 25 f8 00 00 00 and $0xf8,%eax 0.00 : 238c7: 3d f0 00 00 00 cmp $0xf0,%eax 0.00 : 238cc: 0f 84 f0 03 00 00 je 23cc2 <__gconv_transform_utf8_internal+0xc32> 0.00 : 238d2: 89 d0 mov %edx,%eax 0.00 : 238d4: 25 fc 00 00 00 and $0xfc,%eax 0.00 : 238d9: 3d f8 00 00 00 cmp $0xf8,%eax 0.00 : 238de: 0f 84 8f 05 00 00 je 23e73 <__gconv_transform_utf8_internal+0xde3> 0.00 : 238e4: 89 d6 mov %edx,%esi 0.00 : 238e6: bf 06 00 00 00 mov $0x6,%edi 0.00 : 238eb: b9 05 00 00 00 mov $0x5,%ecx 0.00 : 238f0: 83 e6 01 and $0x1,%esi 0.00 : 238f3: e9 70 ff ff ff jmpq 23868 <__gconv_transform_utf8_internal+0x7d8> 0.00 : 238f8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 238ff: 00 0.00 : 23900: c1 e2 06 shl $0x6,%edx 0.00 : 23903: 83 e1 3f and $0x3f,%ecx 0.00 : 23906: 48 83 c7 01 add $0x1,%rdi 0.00 : 2390a: 09 ca or %ecx,%edx 0.00 : 2390c: 48 39 fe cmp %rdi,%rsi 0.00 : 2390f: 76 19 jbe 2392a <__gconv_transform_utf8_internal+0x89a> 0.00 : 23911: 0f b6 0c 3b movzbl (%rbx,%rdi,1),%ecx 0.00 : 23915: 89 c8 mov %ecx,%eax 0.00 : 23917: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 2391c: 83 c0 80 add $0xffffff80,%eax 0.00 : 2391f: 74 df je 23900 <__gconv_transform_utf8_internal+0x870> 0.00 : 23921: 48 39 f7 cmp %rsi,%rdi 0.00 : 23924: 0f 82 b1 04 00 00 jb 23ddb <__gconv_transform_utf8_internal+0xd4b> 0.00 : 2392a: 48 83 fe 02 cmp $0x2,%rsi 0.00 : 2392e: 74 10 je 23940 <__gconv_transform_utf8_internal+0x8b0> 0.00 : 23930: 8d 4c b6 fc lea -0x4(%rsi,%rsi,4),%ecx 0.00 : 23934: 89 d0 mov %edx,%eax 0.00 : 23936: d3 e8 shr %cl,%eax 0.00 : 23938: 85 c0 test %eax,%eax 0.00 : 2393a: 0f 84 9b 04 00 00 je 23ddb <__gconv_transform_utf8_internal+0xd4b> 0.00 : 23940: 8d 82 00 28 ff ff lea -0xd800(%rdx),%eax 0.00 : 23946: 3d ff 07 00 00 cmp $0x7ff,%eax 0.00 : 2394b: 0f 86 8a 04 00 00 jbe 23ddb <__gconv_transform_utf8_internal+0xd4b> 0.00 : 23951: 48 8b 4c 24 58 mov 0x58(%rsp),%rcx 0.00 : 23956: 45 31 ed xor %r13d,%r13d 0.00 : 23959: 89 11 mov %edx,(%rcx) 0.00 : 2395b: 49 39 d8 cmp %rbx,%r8 0.00 : 2395e: 0f 84 42 05 00 00 je 23ea6 <__gconv_transform_utf8_internal+0xe16> 0.00 : 23964: 49 63 13 movslq (%r11),%rdx 0.00 : 23967: 4c 89 c0 mov %r8,%rax 0.00 : 2396a: 48 29 d8 sub %rbx,%rax 0.00 : 2396d: 83 e2 07 and $0x7,%edx 0.00 : 23970: 48 39 d0 cmp %rdx,%rax 0.00 : 23973: 0f 8e 0e 05 00 00 jle 23e87 <__gconv_transform_utf8_internal+0xdf7> 0.00 : 23979: 48 29 d0 sub %rdx,%rax 0.00 : 2397c: 48 8b 54 24 30 mov 0x30(%rsp),%rdx 0.00 : 23981: 48 01 02 add %rax,(%rdx) 0.00 : 23984: 41 c7 03 00 00 00 00 movl $0x0,(%r11) 0.00 : 2398b: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx 0.00 : 23990: 48 89 6c 24 58 mov %rbp,0x58(%rsp) 0.00 : 23995: 44 8b 49 10 mov 0x10(%rcx),%r9d 0.00 : 23999: e9 dc f7 ff ff jmpq 2317a <__gconv_transform_utf8_internal+0xea> 0.00 : 2399e: 48 8b 54 24 30 mov 0x30(%rsp),%rdx 0.00 : 239a3: 4d 39 f4 cmp %r14,%r12 0.00 : 239a6: 41 ba 04 00 00 00 mov $0x4,%r10d 0.00 : 239ac: 4c 89 32 mov %r14,(%rdx) 0.00 : 239af: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx 0.00 : 239b4: 48 8b 5c 24 70 mov 0x70(%rsp),%rbx 0.00 : 239b9: 4c 8b 5c 24 58 mov 0x58(%rsp),%r11 0.00 : 239be: 8b 51 10 mov 0x10(%rcx),%edx 0.00 : 239c1: 0f 84 e9 00 00 00 je 23ab0 <__gconv_transform_utf8_internal+0xa20> 0.00 : 239c7: 48 8b 44 24 58 mov 0x58(%rsp),%rax 0.00 : 239cc: 4c 8b 5c 24 58 mov 0x58(%rsp),%r11 0.00 : 239d1: 41 ba 04 00 00 00 mov $0x4,%r10d 0.00 : 239d7: 48 83 c0 04 add $0x4,%rax 0.00 : 239db: 48 39 c3 cmp %rax,%rbx 0.00 : 239de: 0f 82 90 02 00 00 jb 23c74 <__gconv_transform_utf8_internal+0xbe4> 0.00 : 239e4: 89 d5 mov %edx,%ebp 0.00 : 239e6: 83 e5 02 and $0x2,%ebp 0.00 : 239e9: 41 0f b6 36 movzbl (%r14),%esi 0.00 : 239ed: 4d 8d 4e 01 lea 0x1(%r14),%r9 0.00 : 239f1: 83 fe 7f cmp $0x7f,%esi 0.00 : 239f4: 0f 86 48 01 00 00 jbe 23b42 <__gconv_transform_utf8_internal+0xab2> 0.00 : 239fa: 8d 86 3e ff ff ff lea -0xc2(%rsi),%eax 0.00 : 23a00: 83 f8 1d cmp $0x1d,%eax 0.00 : 23a03: 0f 87 48 01 00 00 ja 23b51 <__gconv_transform_utf8_internal+0xac1> 0.00 : 23a09: 83 e6 1f and $0x1f,%esi 0.00 : 23a0c: b9 02 00 00 00 mov $0x2,%ecx 0.00 : 23a11: 4d 8d 0c 0e lea (%r14,%rcx,1),%r9 0.00 : 23a15: bf 01 00 00 00 mov $0x1,%edi 0.00 : 23a1a: 4d 39 cc cmp %r9,%r12 0.00 : 23a1d: 0f 83 de 00 00 00 jae 23b01 <__gconv_transform_utf8_internal+0xa71> 0.00 : 23a23: 49 8d 4e 01 lea 0x1(%r14),%rcx 0.00 : 23a27: 49 39 cc cmp %rcx,%r12 0.00 : 23a2a: 0f 86 3a 02 00 00 jbe 23c6a <__gconv_transform_utf8_internal+0xbda> 0.00 : 23a30: 41 0f b6 46 01 movzbl 0x1(%r14),%eax 0.00 : 23a35: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23a3a: 83 c0 80 add $0xffffff80,%eax 0.00 : 23a3d: 0f 85 27 02 00 00 jne 23c6a <__gconv_transform_utf8_internal+0xbda> 0.00 : 23a43: 49 8d 56 02 lea 0x2(%r14),%rdx 0.00 : 23a47: eb 18 jmp 23a61 <__gconv_transform_utf8_internal+0x9d1> 0.00 : 23a49: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 23a50: 0f b6 02 movzbl (%rdx),%eax 0.00 : 23a53: 48 83 c2 01 add $0x1,%rdx 0.00 : 23a57: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23a5c: 83 c0 80 add $0xffffff80,%eax 0.00 : 23a5f: 75 0c jne 23a6d <__gconv_transform_utf8_internal+0x9dd> 0.00 : 23a61: 48 83 c7 01 add $0x1,%rdi 0.00 : 23a65: 49 39 d4 cmp %rdx,%r12 0.00 : 23a68: 48 89 d1 mov %rdx,%rcx 0.00 : 23a6b: 77 e3 ja 23a50 <__gconv_transform_utf8_internal+0x9c0> 0.00 : 23a6d: 4c 39 e1 cmp %r12,%rcx 0.00 : 23a70: 0f 84 e8 04 00 00 je 23f5e <__gconv_transform_utf8_internal+0xece> 0.00 : 23a76: 4d 85 ff test %r15,%r15 0.00 : 23a79: 0f 84 91 01 00 00 je 23c10 <__gconv_transform_utf8_internal+0xb80> 0.00 : 23a7f: 85 ed test %ebp,%ebp 0.00 : 23a81: 0f 84 89 01 00 00 je 23c10 <__gconv_transform_utf8_internal+0xb80> 0.00 : 23a87: 49 83 07 01 addq $0x1,(%r15) 0.00 : 23a8b: 49 01 fe add %rdi,%r14 0.00 : 23a8e: 41 ba 06 00 00 00 mov $0x6,%r10d 0.00 : 23a94: 4d 39 f4 cmp %r14,%r12 0.00 : 23a97: 0f 84 b9 04 00 00 je 23f56 <__gconv_transform_utf8_internal+0xec6> 0.00 : 23a9d: 49 8d 43 04 lea 0x4(%r11),%rax 0.00 : 23aa1: 48 39 c3 cmp %rax,%rbx 0.00 : 23aa4: 0f 83 3f ff ff ff jae 239e9 <__gconv_transform_utf8_internal+0x959> 0.00 : 23aaa: 41 ba 05 00 00 00 mov $0x5,%r10d 0.00 : 23ab0: 48 8b 44 24 30 mov 0x30(%rsp),%rax 0.00 : 23ab5: 4c 89 30 mov %r14,(%rax) 0.00 : 23ab8: 4c 39 5c 24 70 cmp %r11,0x70(%rsp) 0.00 : 23abd: 0f 85 b9 01 00 00 jne 23c7c <__gconv_transform_utf8_internal+0xbec> 0.00 : 23ac3: 41 83 fa 05 cmp $0x5,%r10d 0.00 : 23ac7: 0f 85 7e 01 00 00 jne 23c4b <__gconv_transform_utf8_internal+0xbbb> 0.00 : 23acd: 4c 3b 5c 24 58 cmp 0x58(%rsp),%r11 0.00 : 23ad2: 0f 85 ed f8 ff ff jne 233c5 <__gconv_transform_utf8_internal+0x335> 0.00 : 23ad8: 48 8b 54 24 38 mov 0x38(%rsp),%rdx 0.00 : 23add: 83 6a 14 01 subl $0x1,0x14(%rdx) 0.00 : 23ae1: e9 df f8 ff ff jmpq 233c5 <__gconv_transform_utf8_internal+0x335> 0.00 : 23ae6: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 23aed: 00 00 00 0.00 : 23af0: c1 e6 06 shl $0x6,%esi 0.00 : 23af3: 83 e2 3f and $0x3f,%edx 0.00 : 23af6: 48 83 c7 01 add $0x1,%rdi 0.00 : 23afa: 09 d6 or %edx,%esi 0.00 : 23afc: 48 39 f9 cmp %rdi,%rcx 0.00 : 23aff: 76 1a jbe 23b1b <__gconv_transform_utf8_internal+0xa8b> 0.00 : 23b01: 41 0f b6 14 3e movzbl (%r14,%rdi,1),%edx 0.00 : 23b06: 89 d0 mov %edx,%eax 0.00 : 23b08: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23b0d: 83 c0 80 add $0xffffff80,%eax 0.00 : 23b10: 74 de je 23af0 <__gconv_transform_utf8_internal+0xa60> 0.00 : 23b12: 48 39 f9 cmp %rdi,%rcx 0.00 : 23b15: 0f 87 5b ff ff ff ja 23a76 <__gconv_transform_utf8_internal+0x9e6> 0.00 : 23b1b: 48 83 f9 02 cmp $0x2,%rcx 0.00 : 23b1f: 74 10 je 23b31 <__gconv_transform_utf8_internal+0xaa1> 0.00 : 23b21: 8d 4c 89 fc lea -0x4(%rcx,%rcx,4),%ecx 0.00 : 23b25: 89 f0 mov %esi,%eax 0.00 : 23b27: d3 e8 shr %cl,%eax 0.00 : 23b29: 85 c0 test %eax,%eax 0.00 : 23b2b: 0f 84 45 ff ff ff je 23a76 <__gconv_transform_utf8_internal+0x9e6> 0.00 : 23b31: 8d 86 00 28 ff ff lea -0xd800(%rsi),%eax 0.00 : 23b37: 3d ff 07 00 00 cmp $0x7ff,%eax 0.00 : 23b3c: 0f 86 34 ff ff ff jbe 23a76 <__gconv_transform_utf8_internal+0x9e6> 0.00 : 23b42: 41 89 33 mov %esi,(%r11) 0.00 : 23b45: 4d 89 ce mov %r9,%r14 0.00 : 23b48: 49 83 c3 04 add $0x4,%r11 0.00 : 23b4c: e9 43 ff ff ff jmpq 23a94 <__gconv_transform_utf8_internal+0xa04> 0.00 : 23b51: 89 f0 mov %esi,%eax 0.00 : 23b53: 25 f0 00 00 00 and $0xf0,%eax 0.00 : 23b58: 3d e0 00 00 00 cmp $0xe0,%eax 0.00 : 23b5d: 0f 84 a0 00 00 00 je 23c03 <__gconv_transform_utf8_internal+0xb73> 0.00 : 23b63: 89 f0 mov %esi,%eax 0.00 : 23b65: 25 f8 00 00 00 and $0xf8,%eax 0.00 : 23b6a: 3d f0 00 00 00 cmp $0xf0,%eax 0.00 : 23b6f: 0f 84 81 00 00 00 je 23bf6 <__gconv_transform_utf8_internal+0xb66> 0.00 : 23b75: 89 f0 mov %esi,%eax 0.00 : 23b77: 25 fc 00 00 00 and $0xfc,%eax 0.00 : 23b7c: 3d f8 00 00 00 cmp $0xf8,%eax 0.00 : 23b81: 74 66 je 23be9 <__gconv_transform_utf8_internal+0xb59> 0.00 : 23b83: 89 f0 mov %esi,%eax 0.00 : 23b85: 31 ff xor %edi,%edi 0.00 : 23b87: 25 fe 00 00 00 and $0xfe,%eax 0.00 : 23b8c: 3d fc 00 00 00 cmp $0xfc,%eax 0.00 : 23b91: 0f 84 84 00 00 00 je 23c1b <__gconv_transform_utf8_internal+0xb8b> 0.00 : 23b97: 48 83 c7 01 add $0x1,%rdi 0.00 : 23b9b: 49 8d 04 3e lea (%r14,%rdi,1),%rax 0.00 : 23b9f: 49 39 c4 cmp %rax,%r12 0.00 : 23ba2: 0f 86 ce fe ff ff jbe 23a76 <__gconv_transform_utf8_internal+0x9e6> 0.00 : 23ba8: 41 0f b6 04 3e movzbl (%r14,%rdi,1),%eax 0.00 : 23bad: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23bb2: 83 c0 80 add $0xffffff80,%eax 0.00 : 23bb5: 0f 85 bb fe ff ff jne 23a76 <__gconv_transform_utf8_internal+0x9e6> 0.00 : 23bbb: 48 83 ff 04 cmp $0x4,%rdi 0.00 : 23bbf: 76 d6 jbe 23b97 <__gconv_transform_utf8_internal+0xb07> 0.00 : 23bc1: e9 b0 fe ff ff jmpq 23a76 <__gconv_transform_utf8_internal+0x9e6> 0.00 : 23bc6: 89 d0 mov %edx,%eax 0.00 : 23bc8: 25 f0 00 00 00 and $0xf0,%eax 0.00 : 23bcd: 3d e0 00 00 00 cmp $0xe0,%eax 0.00 : 23bd2: 75 54 jne 23c28 <__gconv_transform_utf8_internal+0xb98> 0.00 : 23bd4: 89 d7 mov %edx,%edi 0.00 : 23bd6: 41 b9 03 00 00 00 mov $0x3,%r9d 0.00 : 23bdc: b9 02 00 00 00 mov $0x2,%ecx 0.00 : 23be1: 83 e7 0f and $0xf,%edi 0.00 : 23be4: e9 b7 f9 ff ff jmpq 235a0 <__gconv_transform_utf8_internal+0x510> 0.00 : 23be9: 83 e6 03 and $0x3,%esi 0.00 : 23bec: b9 05 00 00 00 mov $0x5,%ecx 0.00 : 23bf1: e9 1b fe ff ff jmpq 23a11 <__gconv_transform_utf8_internal+0x981> 0.00 : 23bf6: 83 e6 07 and $0x7,%esi 0.00 : 23bf9: b9 04 00 00 00 mov $0x4,%ecx 0.00 : 23bfe: e9 0e fe ff ff jmpq 23a11 <__gconv_transform_utf8_internal+0x981> 0.00 : 23c03: 83 e6 0f and $0xf,%esi 0.00 : 23c06: b9 03 00 00 00 mov $0x3,%ecx 0.00 : 23c0b: e9 01 fe ff ff jmpq 23a11 <__gconv_transform_utf8_internal+0x981> 0.00 : 23c10: 41 ba 06 00 00 00 mov $0x6,%r10d 0.00 : 23c16: e9 95 fe ff ff jmpq 23ab0 <__gconv_transform_utf8_internal+0xa20> 0.00 : 23c1b: 83 e6 01 and $0x1,%esi 0.00 : 23c1e: b9 06 00 00 00 mov $0x6,%ecx 0.00 : 23c23: e9 e9 fd ff ff jmpq 23a11 <__gconv_transform_utf8_internal+0x981> 0.00 : 23c28: 89 d0 mov %edx,%eax 0.00 : 23c2a: 25 f8 00 00 00 and $0xf8,%eax 0.00 : 23c2f: 3d f0 00 00 00 cmp $0xf0,%eax 0.00 : 23c34: 75 65 jne 23c9b <__gconv_transform_utf8_internal+0xc0b> 0.00 : 23c36: 89 d7 mov %edx,%edi 0.00 : 23c38: 41 b9 04 00 00 00 mov $0x4,%r9d 0.00 : 23c3e: b9 03 00 00 00 mov $0x3,%ecx 0.00 : 23c43: 83 e7 07 and $0x7,%edi 0.00 : 23c46: e9 55 f9 ff ff jmpq 235a0 <__gconv_transform_utf8_internal+0x510> 0.00 : 23c4b: 48 8d 0d 6e f5 11 00 lea 0x11f56e(%rip),%rcx # 1431c0 <__PRETTY_FUNCTION__.13378> 0.00 : 23c52: 48 8d 35 b1 6a 11 00 lea 0x116ab1(%rip),%rsi # 13a70a 0.00 : 23c59: 48 8d 3d a0 9f 11 00 lea 0x119fa0(%rip),%rdi # 13dc00 <__PRETTY_FUNCTION__.11129+0x227> 0.00 : 23c60: ba e1 02 00 00 mov $0x2e1,%edx 0.00 : 23c65: e8 b6 7c 00 00 callq 2b920 <__assert_fail> 0.00 : 23c6a: bf 01 00 00 00 mov $0x1,%edi 0.00 : 23c6f: e9 f9 fd ff ff jmpq 23a6d <__gconv_transform_utf8_internal+0x9dd> 0.00 : 23c74: 41 b2 05 mov $0x5,%r10b 0.00 : 23c77: e9 34 fe ff ff jmpq 23ab0 <__gconv_transform_utf8_internal+0xa20> 0.00 : 23c7c: 48 8d 0d 3d f5 11 00 lea 0x11f53d(%rip),%rcx # 1431c0 <__PRETTY_FUNCTION__.13378> 0.00 : 23c83: 48 8d 35 80 6a 11 00 lea 0x116a80(%rip),%rsi # 13a70a 0.00 : 23c8a: 48 8d 3d 09 6b 11 00 lea 0x116b09(%rip),%rdi # 13a79a 0.00 : 23c91: ba e0 02 00 00 mov $0x2e0,%edx 0.00 : 23c96: e8 85 7c 00 00 callq 2b920 <__assert_fail> 0.00 : 23c9b: 89 d0 mov %edx,%eax 0.00 : 23c9d: 25 fc 00 00 00 and $0xfc,%eax 0.00 : 23ca2: 3d f8 00 00 00 cmp $0xf8,%eax 0.00 : 23ca7: 0f 85 bc 02 00 00 jne 23f69 <__gconv_transform_utf8_internal+0xed9> 0.00 : 23cad: 89 d7 mov %edx,%edi 0.00 : 23caf: 41 b9 05 00 00 00 mov $0x5,%r9d 0.00 : 23cb5: b9 04 00 00 00 mov $0x4,%ecx 0.00 : 23cba: 83 e7 03 and $0x3,%edi 0.00 : 23cbd: e9 de f8 ff ff jmpq 235a0 <__gconv_transform_utf8_internal+0x510> 0.00 : 23cc2: 89 d6 mov %edx,%esi 0.00 : 23cc4: bf 04 00 00 00 mov $0x4,%edi 0.00 : 23cc9: b9 03 00 00 00 mov $0x3,%ecx 0.00 : 23cce: 83 e6 07 and $0x7,%esi 0.00 : 23cd1: e9 92 fb ff ff jmpq 23868 <__gconv_transform_utf8_internal+0x7d8> 0.00 : 23cd6: 89 d6 mov %edx,%esi 0.00 : 23cd8: bf 03 00 00 00 mov $0x3,%edi 0.00 : 23cdd: b9 02 00 00 00 mov $0x2,%ecx 0.00 : 23ce2: 83 e6 0f and $0xf,%esi 0.00 : 23ce5: e9 7e fb ff ff jmpq 23868 <__gconv_transform_utf8_internal+0x7d8> 0.00 : 23cea: 48 8d 0d cf f4 11 00 lea 0x11f4cf(%rip),%rcx # 1431c0 <__PRETTY_FUNCTION__.13378> 0.00 : 23cf1: 48 8d 35 12 6a 11 00 lea 0x116a12(%rip),%rsi # 13a70a 0.00 : 23cf8: 48 8d 3d 1f 6a 11 00 lea 0x116a1f(%rip),%rdi # 13a71e 0.00 : 23cff: ba 2f 02 00 00 mov $0x22f,%edx 0.00 : 23d04: e8 17 7c 00 00 callq 2b920 <__assert_fail> 0.00 : 23d09: 48 83 7c 24 28 00 cmpq $0x0,0x28(%rsp) 0.00 : 23d0f: 0f 85 3f 01 00 00 jne 23e54 <__gconv_transform_utf8_internal+0xdc4> 0.00 : 23d15: 48 8b 54 24 38 mov 0x38(%rsp),%rdx 0.00 : 23d1a: 45 31 ed xor %r13d,%r13d 0.00 : 23d1d: 48 8b 42 20 mov 0x20(%rdx),%rax 0.00 : 23d21: 48 c7 00 00 00 00 00 movq $0x0,(%rax) 0.00 : 23d28: f6 42 10 01 testb $0x1,0x10(%rdx) 0.00 : 23d2c: 0f 85 c5 f7 ff ff jne 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 23d32: 48 8b 7c 24 50 mov 0x50(%rsp),%rdi 0.00 : 23d37: e8 d4 ef 0e 00 callq 112d10 <_dl_mcount_wrapper_check> 0.00 : 23d3c: 8b 8c 24 d8 00 00 00 mov 0xd8(%rsp),%ecx 0.00 : 23d43: 89 1c 24 mov %ebx,(%rsp) 0.00 : 23d46: 45 31 c0 xor %r8d,%r8d 0.00 : 23d49: 4c 8b 4c 24 20 mov 0x20(%rsp),%r9 0.00 : 23d4e: 31 d2 xor %edx,%edx 0.00 : 23d50: 48 8b 74 24 48 mov 0x48(%rsp),%rsi 0.00 : 23d55: 48 8b 7c 24 40 mov 0x40(%rsp),%rdi 0.00 : 23d5a: 89 4c 24 08 mov %ecx,0x8(%rsp) 0.00 : 23d5e: 31 c9 xor %ecx,%ecx 0.00 : 23d60: ff 54 24 50 callq *0x50(%rsp) 0.00 : 23d64: 41 89 c5 mov %eax,%r13d 0.00 : 23d67: e9 8b f7 ff ff jmpq 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 23d6c: 48 8b 54 24 28 mov 0x28(%rsp),%rdx 0.00 : 23d71: 48 8b 12 mov (%rdx),%rdx 0.00 : 23d74: 48 89 54 24 58 mov %rdx,0x58(%rsp) 0.00 : 23d79: e9 b1 f3 ff ff jmpq 2312f <__gconv_transform_utf8_internal+0x9f> 0.00 : 23d7e: 89 d0 mov %edx,%eax 0.00 : 23d80: 25 f0 00 00 00 and $0xf0,%eax 0.00 : 23d85: 3d e0 00 00 00 cmp $0xe0,%eax 0.00 : 23d8a: 0f 84 af 00 00 00 je 23e3f <__gconv_transform_utf8_internal+0xdaf> 0.00 : 23d90: 89 d0 mov %edx,%eax 0.00 : 23d92: 25 f8 00 00 00 and $0xf8,%eax 0.00 : 23d97: 3d f0 00 00 00 cmp $0xf0,%eax 0.00 : 23d9c: 0f 84 90 00 00 00 je 23e32 <__gconv_transform_utf8_internal+0xda2> 0.00 : 23da2: 89 d0 mov %edx,%eax 0.00 : 23da4: 25 fc 00 00 00 and $0xfc,%eax 0.00 : 23da9: 3d f8 00 00 00 cmp $0xf8,%eax 0.00 : 23dae: 74 75 je 23e25 <__gconv_transform_utf8_internal+0xd95> 0.00 : 23db0: 89 d0 mov %edx,%eax 0.00 : 23db2: 31 ff xor %edi,%edi 0.00 : 23db4: 25 fe 00 00 00 and $0xfe,%eax 0.00 : 23db9: 3d fc 00 00 00 cmp $0xfc,%eax 0.00 : 23dbe: 74 55 je 23e15 <__gconv_transform_utf8_internal+0xd85> 0.00 : 23dc0: 48 83 c7 01 add $0x1,%rdi 0.00 : 23dc4: 48 8d 04 3b lea (%rbx,%rdi,1),%rax 0.00 : 23dc8: 49 39 c2 cmp %rax,%r10 0.00 : 23dcb: 76 0e jbe 23ddb <__gconv_transform_utf8_internal+0xd4b> 0.00 : 23dcd: 0f b6 04 3b movzbl (%rbx,%rdi,1),%eax 0.00 : 23dd1: 25 c0 00 00 00 and $0xc0,%eax 0.00 : 23dd6: 83 c0 80 add $0xffffff80,%eax 0.00 : 23dd9: 74 23 je 23dfe <__gconv_transform_utf8_internal+0xd6e> 0.00 : 23ddb: 4d 85 ff test %r15,%r15 0.00 : 23dde: 74 26 je 23e06 <__gconv_transform_utf8_internal+0xd76> 0.00 : 23de0: 41 83 e1 02 and $0x2,%r9d 0.00 : 23de4: 74 20 je 23e06 <__gconv_transform_utf8_internal+0xd76> 0.00 : 23de6: 49 83 07 01 addq $0x1,(%r15) 0.00 : 23dea: 4c 8d 04 3b lea (%rbx,%rdi,1),%r8 0.00 : 23dee: 41 bd 06 00 00 00 mov $0x6,%r13d 0.00 : 23df4: 48 8b 6c 24 58 mov 0x58(%rsp),%rbp 0.00 : 23df9: e9 5d fb ff ff jmpq 2395b <__gconv_transform_utf8_internal+0x8cb> 0.00 : 23dfe: 48 83 ff 04 cmp $0x4,%rdi 0.00 : 23e02: 76 bc jbe 23dc0 <__gconv_transform_utf8_internal+0xd30> 0.00 : 23e04: eb d5 jmp 23ddb <__gconv_transform_utf8_internal+0xd4b> 0.00 : 23e06: 41 bd 06 00 00 00 mov $0x6,%r13d 0.00 : 23e0c: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 23e10: e9 e2 f6 ff ff jmpq 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 23e15: 83 e2 01 and $0x1,%edx 0.00 : 23e18: be 06 00 00 00 mov $0x6,%esi 0.00 : 23e1d: 0f 1f 00 nopl (%rax) 0.00 : 23e20: e9 c3 f8 ff ff jmpq 236e8 <__gconv_transform_utf8_internal+0x658> 0.00 : 23e25: 83 e2 03 and $0x3,%edx 0.00 : 23e28: be 05 00 00 00 mov $0x5,%esi 0.00 : 23e2d: e9 b6 f8 ff ff jmpq 236e8 <__gconv_transform_utf8_internal+0x658> 0.00 : 23e32: 83 e2 07 and $0x7,%edx 0.00 : 23e35: be 04 00 00 00 mov $0x4,%esi 0.00 : 23e3a: e9 a9 f8 ff ff jmpq 236e8 <__gconv_transform_utf8_internal+0x658> 0.00 : 23e3f: 83 e2 0f and $0xf,%edx 0.00 : 23e42: be 03 00 00 00 mov $0x3,%esi 0.00 : 23e47: e9 9c f8 ff ff jmpq 236e8 <__gconv_transform_utf8_internal+0x658> 0.00 : 23e4c: 45 89 c5 mov %r8d,%r13d 0.00 : 23e4f: e9 96 f6 ff ff jmpq 234ea <__gconv_transform_utf8_internal+0x45a> 0.00 : 23e54: 48 8d 0d 65 f3 11 00 lea 0x11f365(%rip),%rcx # 1431c0 <__PRETTY_FUNCTION__.13378> 0.00 : 23e5b: 48 8d 35 a8 68 11 00 lea 0x1168a8(%rip),%rsi # 13a70a 0.00 : 23e62: 48 8d 3d b5 68 11 00 lea 0x1168b5(%rip),%rdi # 13a71e 0.00 : 23e69: ba a0 01 00 00 mov $0x1a0,%edx 0.00 : 23e6e: e8 ad 7a 00 00 callq 2b920 <__assert_fail> 0.00 : 23e73: 89 d6 mov %edx,%esi 0.00 : 23e75: bf 05 00 00 00 mov $0x5,%edi 0.00 : 23e7a: b9 04 00 00 00 mov $0x4,%ecx 0.00 : 23e7f: 83 e6 03 and $0x3,%esi 0.00 : 23e82: e9 e1 f9 ff ff jmpq 23868 <__gconv_transform_utf8_internal+0x7d8> 0.00 : 23e87: 48 8d 0d 62 e8 11 00 lea 0x11e862(%rip),%rcx # 1426f0 <__PRETTY_FUNCTION__.13202> 0.00 : 23e8e: 48 8d 35 a4 68 11 00 lea 0x1168a4(%rip),%rsi # 13a739 0.00 : 23e95: 48 8d 3d 14 9d 11 00 lea 0x119d14(%rip),%rdi # 13dbb0 <__PRETTY_FUNCTION__.11129+0x1d7> 0.00 : 23e9c: ba bf 01 00 00 mov $0x1bf,%edx 0.00 : 23ea1: e8 7a 7a 00 00 callq 2b920 <__assert_fail> 0.00 : 23ea6: 45 85 ed test %r13d,%r13d 0.00 : 23ea9: 0f 85 48 f6 ff ff jne 234f7 <__gconv_transform_utf8_internal+0x467> 0.00 : 23eaf: 48 8b 4c 24 38 mov 0x38(%rsp),%rcx 0.00 : 23eb4: 44 8b 49 10 mov 0x10(%rcx),%r9d 0.00 : 23eb8: e9 bd f2 ff ff jmpq 2317a <__gconv_transform_utf8_internal+0xea> 0.00 : 23ebd: 89 d0 mov %edx,%eax 0.00 : 23ebf: 25 f0 00 00 00 and $0xf0,%eax 0.00 : 23ec4: 3d e0 00 00 00 cmp $0xe0,%eax 0.00 : 23ec9: 74 77 je 23f42 <__gconv_transform_utf8_internal+0xeb2> 0.00 : 23ecb: 89 d0 mov %edx,%eax 0.00 : 23ecd: 25 f8 00 00 00 and $0xf8,%eax 0.00 : 23ed2: 3d f0 00 00 00 cmp $0xf0,%eax 0.00 : 23ed7: 74 55 je 23f2e <__gconv_transform_utf8_internal+0xe9e> 0.00 : 23ed9: 89 d0 mov %edx,%eax 0.00 : 23edb: 25 fc 00 00 00 and $0xfc,%eax 0.00 : 23ee0: 3d f8 00 00 00 cmp $0xf8,%eax 0.00 : 23ee5: 74 33 je 23f1a <__gconv_transform_utf8_internal+0xe8a> 0.00 : 23ee7: 89 d6 mov %edx,%esi 0.00 : 23ee9: bf 06 00 00 00 mov $0x6,%edi 0.00 : 23eee: b9 05 00 00 00 mov $0x5,%ecx 0.00 : 23ef3: 83 e6 01 and $0x1,%esi 0.00 : 23ef6: e9 a5 f8 ff ff jmpq 237a0 <__gconv_transform_utf8_internal+0x710> 0.00 : 23efb: 48 8d 0d ee e7 11 00 lea 0x11e7ee(%rip),%rcx # 1426f0 <__PRETTY_FUNCTION__.13202> 0.00 : 23f02: 48 8d 35 30 68 11 00 lea 0x116830(%rip),%rsi # 13a739 0.00 : 23f09: 48 8d 3d 75 68 11 00 lea 0x116875(%rip),%rdi # 13a785 0.00 : 23f10: ba d1 01 00 00 mov $0x1d1,%edx 0.00 : 23f15: e8 06 7a 00 00 callq 2b920 <__assert_fail> 0.00 : 23f1a: 89 d6 mov %edx,%esi 0.00 : 23f1c: bf 05 00 00 00 mov $0x5,%edi 0.00 : 23f21: b9 04 00 00 00 mov $0x4,%ecx 0.00 : 23f26: 83 e6 03 and $0x3,%esi 0.00 : 23f29: e9 72 f8 ff ff jmpq 237a0 <__gconv_transform_utf8_internal+0x710> 0.00 : 23f2e: 89 d6 mov %edx,%esi 0.00 : 23f30: bf 04 00 00 00 mov $0x4,%edi 0.00 : 23f35: b9 03 00 00 00 mov $0x3,%ecx 0.00 : 23f3a: 83 e6 07 and $0x7,%esi 0.00 : 23f3d: e9 5e f8 ff ff jmpq 237a0 <__gconv_transform_utf8_internal+0x710> 0.00 : 23f42: 89 d6 mov %edx,%esi 0.00 : 23f44: bf 03 00 00 00 mov $0x3,%edi 0.00 : 23f49: b9 02 00 00 00 mov $0x2,%ecx 0.00 : 23f4e: 83 e6 0f and $0xf,%esi 0.00 : 23f51: e9 4a f8 ff ff jmpq 237a0 <__gconv_transform_utf8_internal+0x710> 0.00 : 23f56: 4d 89 e6 mov %r12,%r14 0.00 : 23f59: e9 52 fb ff ff jmpq 23ab0 <__gconv_transform_utf8_internal+0xa20> 0.00 : 23f5e: 41 ba 07 00 00 00 mov $0x7,%r10d 0.00 : 23f64: e9 47 fb ff ff jmpq 23ab0 <__gconv_transform_utf8_internal+0xa20> 0.00 : 23f69: 89 d7 mov %edx,%edi 0.00 : 23f6b: 41 b9 06 00 00 00 mov $0x6,%r9d 0.00 : 23f71: b9 05 00 00 00 mov $0x5,%ecx 0.00 : 23f76: 83 e7 01 and $0x1,%edi 0.00 : 23f79: e9 22 f6 ff ff jmpq 235a0 <__gconv_transform_utf8_internal+0x510> Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000067e80 <_IO_getline_info>: 0.00 : 67e80: 41 57 push %r15 0.00 : 67e82: 41 56 push %r14 0.00 : 67e84: 49 89 fe mov %rdi,%r14 0.00 : 67e87: 41 55 push %r13 0.00 : 67e89: 41 54 push %r12 0.00 : 67e8b: 49 89 d4 mov %rdx,%r12 0.00 : 67e8e: 55 push %rbp 0.00 : 67e8f: 53 push %rbx 0.00 : 67e90: 48 83 ec 18 sub $0x18,%rsp 0.00 : 67e94: 4d 85 c9 test %r9,%r9 0.00 : 67e97: 48 89 74 24 10 mov %rsi,0x10(%rsp) 0.00 : 67e9c: 89 4c 24 0c mov %ecx,0xc(%rsp) 0.00 : 67ea0: 44 89 44 24 08 mov %r8d,0x8(%rsp) 0.00 : 67ea5: 4c 89 0c 24 mov %r9,(%rsp) 0.00 : 67ea9: 74 07 je 67eb2 <_IO_getline_info+0x32> 0.00 : 67eab: 41 c7 01 00 00 00 00 movl $0x0,(%r9) 0.00 : 67eb2: 41 8b 96 c0 00 00 00 mov 0xc0(%r14),%edx 0.00 : 67eb9: 85 d2 test %edx,%edx 0.00 : 67ebb: 0f 84 24 01 00 00 je 67fe5 <_IO_getline_info+0x165> 0.00 : 67ec1: 4c 8b 7c 24 10 mov 0x10(%rsp),%r15 0.00 : 67ec6: eb 3e jmp 67f06 <_IO_getline_info+0x86> 0.00 : 67ec8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 67ecf: 00 0.00 : 67ed0: 4c 39 e3 cmp %r12,%rbx 0.00 : 67ed3: 8b 74 24 0c mov 0xc(%rsp),%esi 0.00 : 67ed7: 48 89 ef mov %rbp,%rdi 0.00 : 67eda: 49 0f 43 dc cmovae %r12,%rbx 0.00 : 67ede: 48 89 da mov %rbx,%rdx 0.00 : 67ee1: e8 fa ae 01 00 callq 82de0 0.00 : 67ee6: 48 85 c0 test %rax,%rax 0.00 : 67ee9: 49 89 c5 mov %rax,%r13 0.00 : 67eec: 75 72 jne 67f60 <_IO_getline_info+0xe0> 0.00 : 67eee: 4c 89 ff mov %r15,%rdi 0.00 : 67ef1: 48 89 da mov %rbx,%rdx 0.00 : 67ef4: 48 89 ee mov %rbp,%rsi 0.00 : 67ef7: e8 54 c8 01 00 callq 84750 0.00 : 67efc: 49 01 5e 08 add %rbx,0x8(%r14) 0.00 : 67f00: 49 01 df add %rbx,%r15 0.00 : 67f03: 49 29 dc sub %rbx,%r12 0.00 : 67f06: 4d 85 e4 test %r12,%r12 0.00 : 67f09: 74 3d je 67f48 <_IO_getline_info+0xc8> 0.00 : 67f0b: 49 8b 6e 08 mov 0x8(%r14),%rbp 0.00 : 67f0f: 49 8b 5e 10 mov 0x10(%r14),%rbx ??:0 100.00 : 67f13: 48 29 eb sub %rbp,%rbx 0.00 : 67f16: 48 85 db test %rbx,%rbx 0.00 : 67f19: 7f b5 jg 67ed0 <_IO_getline_info+0x50> 0.00 : 67f1b: 4c 89 f7 mov %r14,%rdi 0.00 : 67f1e: e8 dd d2 00 00 callq 75200 <__uflow> 0.00 : 67f23: 83 f8 ff cmp $0xffffffff,%eax 0.00 : 67f26: 74 7d je 67fa5 <_IO_getline_info+0x125> 0.00 : 67f28: 3b 44 24 0c cmp 0xc(%rsp),%eax 0.00 : 67f2c: 0f 84 82 00 00 00 je 67fb4 <_IO_getline_info+0x134> 0.00 : 67f32: 49 83 ec 01 sub $0x1,%r12 0.00 : 67f36: 41 88 07 mov %al,(%r15) 0.00 : 67f39: 49 83 c7 01 add $0x1,%r15 0.00 : 67f3d: 4d 85 e4 test %r12,%r12 0.00 : 67f40: 75 c9 jne 67f0b <_IO_getline_info+0x8b> 0.00 : 67f42: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 67f48: 4c 89 f8 mov %r15,%rax 0.00 : 67f4b: 48 2b 44 24 10 sub 0x10(%rsp),%rax 0.00 : 67f50: 48 83 c4 18 add $0x18,%rsp 0.00 : 67f54: 5b pop %rbx 0.00 : 67f55: 5d pop %rbp 0.00 : 67f56: 41 5c pop %r12 0.00 : 67f58: 41 5d pop %r13 0.00 : 67f5a: 41 5e pop %r14 0.00 : 67f5c: 41 5f pop %r15 0.00 : 67f5e: c3 retq 0.00 : 67f5f: 90 nop 0.00 : 67f60: 48 89 c3 mov %rax,%rbx 0.00 : 67f63: 8b 44 24 08 mov 0x8(%rsp),%eax 0.00 : 67f67: 48 29 eb sub %rbp,%rbx 0.00 : 67f6a: 85 c0 test %eax,%eax 0.00 : 67f6c: 78 0d js 67f7b <_IO_getline_info+0xfb> 0.00 : 67f6e: 49 83 c5 01 add $0x1,%r13 0.00 : 67f72: 83 7c 24 08 01 cmpl $0x1,0x8(%rsp) 0.00 : 67f77: 48 83 db ff sbb $0xffffffffffffffff,%rbx 0.00 : 67f7b: 48 89 da mov %rbx,%rdx 0.00 : 67f7e: 48 89 ee mov %rbp,%rsi 0.00 : 67f81: 4c 89 ff mov %r15,%rdi 0.00 : 67f84: e8 c7 c7 01 00 callq 84750 0.00 : 67f89: 4d 89 6e 08 mov %r13,0x8(%r14) 0.00 : 67f8d: 4c 2b 7c 24 10 sub 0x10(%rsp),%r15 0.00 : 67f92: 48 83 c4 18 add $0x18,%rsp 0.00 : 67f96: 49 8d 04 1f lea (%r15,%rbx,1),%rax 0.00 : 67f9a: 5b pop %rbx 0.00 : 67f9b: 5d pop %rbp 0.00 : 67f9c: 41 5c pop %r12 0.00 : 67f9e: 41 5d pop %r13 0.00 : 67fa0: 41 5e pop %r14 0.00 : 67fa2: 41 5f pop %r15 0.00 : 67fa4: c3 retq 0.00 : 67fa5: 48 83 3c 24 00 cmpq $0x0,(%rsp) 0.00 : 67faa: 74 9c je 67f48 <_IO_getline_info+0xc8> 0.00 : 67fac: 48 8b 14 24 mov (%rsp),%rdx 0.00 : 67fb0: 89 02 mov %eax,(%rdx) 0.00 : 67fb2: eb 94 jmp 67f48 <_IO_getline_info+0xc8> 0.00 : 67fb4: 83 7c 24 08 00 cmpl $0x0,0x8(%rsp) 0.00 : 67fb9: 7e 11 jle 67fcc <_IO_getline_info+0x14c> 0.00 : 67fbb: 0f b6 44 24 0c movzbl 0xc(%rsp),%eax 0.00 : 67fc0: 41 88 07 mov %al,(%r15) 0.00 : 67fc3: 49 83 c7 01 add $0x1,%r15 0.00 : 67fc7: e9 7c ff ff ff jmpq 67f48 <_IO_getline_info+0xc8> 0.00 : 67fcc: 0f 84 76 ff ff ff je 67f48 <_IO_getline_info+0xc8> 0.00 : 67fd2: 8b 74 24 0c mov 0xc(%rsp),%esi 0.00 : 67fd6: 4c 89 f7 mov %r14,%rdi 0.00 : 67fd9: e8 72 c1 00 00 callq 74150 <_IO_sputbackc> 0.00 : 67fde: 66 90 xchg %ax,%ax 0.00 : 67fe0: e9 63 ff ff ff jmpq 67f48 <_IO_getline_info+0xc8> 0.00 : 67fe5: 41 c7 86 c0 00 00 00 movl $0xffffffff,0xc0(%r14) 0.00 : 67fec: ff ff ff ff 0.00 : 67ff0: e9 cc fe ff ff jmpq 67ec1 <_IO_getline_info+0x41> Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 50.00 ??:0 50.00 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000078e20 <_int_malloc>: 0.00 : 78e20: 41 57 push %r15 0.00 : 78e22: 41 56 push %r14 0.00 : 78e24: 41 55 push %r13 0.00 : 78e26: 41 54 push %r12 0.00 : 78e28: 55 push %rbp 0.00 : 78e29: 53 push %rbx 0.00 : 78e2a: 48 83 ec 78 sub $0x78,%rsp 0.00 : 78e2e: 48 83 fe bf cmp $0xffffffffffffffbf,%rsi 0.00 : 78e32: 48 89 7c 24 20 mov %rdi,0x20(%rsp) 0.00 : 78e37: 48 89 74 24 18 mov %rsi,0x18(%rsp) 0.00 : 78e3c: 0f 87 bd 09 00 00 ja 797ff <_int_malloc+0x9df> 0.00 : 78e42: 48 8b 44 24 18 mov 0x18(%rsp),%rax 0.00 : 78e47: 48 c7 44 24 28 20 00 movq $0x20,0x28(%rsp) 0.00 : 78e4e: 00 00 0.00 : 78e50: 48 83 c0 17 add $0x17,%rax 0.00 : 78e54: 48 89 c2 mov %rax,%rdx 0.00 : 78e57: 48 83 e2 f0 and $0xfffffffffffffff0,%rdx 0.00 : 78e5b: 48 83 f8 1f cmp $0x1f,%rax 0.00 : 78e5f: 48 0f 46 54 24 28 cmovbe 0x28(%rsp),%rdx 0.00 : 78e65: 48 3b 15 0c b9 2f 00 cmp 0x2fb90c(%rip),%rdx # 374778 0.00 : 78e6c: 48 89 54 24 28 mov %rdx,0x28(%rsp) 0.00 : 78e71: 77 6d ja 78ee0 <_int_malloc+0xc0> 0.00 : 78e73: 8b 44 24 28 mov 0x28(%rsp),%eax 0.00 : 78e77: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx 0.00 : 78e7c: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 78e81: c1 e8 04 shr $0x4,%eax 0.00 : 78e84: 8d 50 fe lea -0x2(%rax),%edx 0.00 : 78e87: 89 d0 mov %edx,%eax 0.00 : 78e89: 48 8d 4c c1 08 lea 0x8(%rcx,%rax,8),%rcx 0.00 : 78e8e: 48 89 4c 24 38 mov %rcx,0x38(%rsp) 0.00 : 78e93: 4c 8b 7c c3 08 mov 0x8(%rbx,%rax,8),%r15 0.00 : 78e98: 4d 85 ff test %r15,%r15 0.00 : 78e9b: 74 43 je 78ee0 <_int_malloc+0xc0> 0.00 : 78e9d: 49 8b 47 08 mov 0x8(%r15),%rax 0.00 : 78ea1: 49 8d 5f 10 lea 0x10(%r15),%rbx 0.00 : 78ea5: c1 e8 04 shr $0x4,%eax 0.00 : 78ea8: 83 e8 02 sub $0x2,%eax 0.00 : 78eab: 39 d0 cmp %edx,%eax 0.00 : 78ead: 0f 85 91 0d 00 00 jne 79c44 <_int_malloc+0xe24> 0.00 : 78eb3: 49 8b 47 10 mov 0x10(%r15),%rax 0.00 : 78eb7: 48 8b 54 24 38 mov 0x38(%rsp),%rdx 0.00 : 78ebc: 48 89 02 mov %rax,(%rdx) 0.00 : 78ebf: 8b 05 bb b8 2f 00 mov 0x2fb8bb(%rip),%eax # 374780 0.00 : 78ec5: 85 c0 test %eax,%eax 0.00 : 78ec7: 0f 85 60 0d 00 00 jne 79c2d <_int_malloc+0xe0d> 0.00 : 78ecd: 48 83 c4 78 add $0x78,%rsp 0.00 : 78ed1: 48 89 d8 mov %rbx,%rax 0.00 : 78ed4: 5b pop %rbx 0.00 : 78ed5: 5d pop %rbp 0.00 : 78ed6: 41 5c pop %r12 0.00 : 78ed8: 41 5d pop %r13 0.00 : 78eda: 41 5e pop %r14 0.00 : 78edc: 41 5f pop %r15 0.00 : 78ede: c3 retq 0.00 : 78edf: 90 nop 0.00 : 78ee0: 48 81 7c 24 28 ff 03 cmpq $0x3ff,0x28(%rsp) 0.00 : 78ee7: 00 00 0.00 : 78ee9: 0f 87 b1 00 00 00 ja 78fa0 <_int_malloc+0x180> 0.00 : 78eef: 8b 4c 24 28 mov 0x28(%rsp),%ecx 0.00 : 78ef3: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 78ef8: c1 e9 04 shr $0x4,%ecx 0.00 : 78efb: 48 83 c3 68 add $0x68,%rbx 0.00 : 78eff: 8d 44 09 fe lea -0x2(%rcx,%rcx,1),%eax 0.00 : 78f03: 89 4c 24 34 mov %ecx,0x34(%rsp) 0.00 : 78f07: 48 89 5c 24 10 mov %rbx,0x10(%rsp) 0.00 : 78f0c: 89 c0 mov %eax,%eax 0.00 : 78f0e: 48 8d 4c c3 f0 lea -0x10(%rbx,%rax,8),%rcx 0.00 : 78f13: 4c 8b 79 18 mov 0x18(%rcx),%r15 0.00 : 78f17: 49 39 cf cmp %rcx,%r15 0.00 : 78f1a: 0f 84 ce 00 00 00 je 78fee <_int_malloc+0x1ce> 0.00 : 78f20: 4d 85 ff test %r15,%r15 0.00 : 78f23: 0f 84 c7 08 00 00 je 797f0 <_int_malloc+0x9d0> 0.00 : 78f29: 49 8b 47 18 mov 0x18(%r15),%rax 0.00 : 78f2d: 48 8d 35 5c 65 0c 00 lea 0xc655c(%rip),%rsi # 13f490 <__PRETTY_FUNCTION__.11129+0x1ab7> 0.00 : 78f34: 48 8b 50 10 mov 0x10(%rax),%rdx 0.00 : 78f38: 4c 39 fa cmp %r15,%rdx 0.00 : 78f3b: 0f 85 0a 0d 00 00 jne 79c4b <_int_malloc+0xe2b> 0.00 : 78f41: 48 8b 5c 24 28 mov 0x28(%rsp),%rbx 0.00 : 78f46: 48 83 4c 1a 08 01 orq $0x1,0x8(%rdx,%rbx,1) 0.00 : 78f4c: 48 89 41 18 mov %rax,0x18(%rcx) 0.00 : 78f50: 48 89 48 10 mov %rcx,0x10(%rax) 0.00 : 78f54: 48 8d 05 45 af 2f 00 lea 0x2faf45(%rip),%rax # 373ea0 0.00 : 78f5b: 48 39 44 24 20 cmp %rax,0x20(%rsp) 0.00 : 78f60: 74 05 je 78f67 <_int_malloc+0x147> 0.00 : 78f62: 48 83 4a 08 04 orq $0x4,0x8(%rdx) 0.00 : 78f67: 8b 05 13 b8 2f 00 mov 0x2fb813(%rip),%eax # 374780 0.00 : 78f6d: 48 8d 6a 10 lea 0x10(%rdx),%rbp 0.00 : 78f71: 48 89 eb mov %rbp,%rbx 0.00 : 78f74: 85 c0 test %eax,%eax 0.00 : 78f76: 0f 84 51 ff ff ff je 78ecd <_int_malloc+0xad> 0.00 : 78f7c: 48 8b 54 24 18 mov 0x18(%rsp),%rdx 0.00 : 78f81: f7 d0 not %eax 0.00 : 78f83: 48 89 ef mov %rbp,%rdi 0.00 : 78f86: 0f b6 f0 movzbl %al,%esi 0.00 : 78f89: 48 89 eb mov %rbp,%rbx 0.00 : 78f8c: e8 df a4 00 00 callq 83470 <__GI_memset> 0.00 : 78f91: e9 37 ff ff ff jmpq 78ecd <_int_malloc+0xad> 0.00 : 78f96: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1) 0.00 : 78f9d: 00 00 00 0.00 : 78fa0: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 78fa5: 48 c1 e8 06 shr $0x6,%rax 0.00 : 78fa9: 48 83 f8 30 cmp $0x30,%rax 0.00 : 78fad: 0f 86 26 06 00 00 jbe 795d9 <_int_malloc+0x7b9> 0.00 : 78fb3: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 78fb8: 48 c1 e8 09 shr $0x9,%rax 0.00 : 78fbc: 48 83 f8 14 cmp $0x14,%rax 0.00 : 78fc0: 0f 87 d6 06 00 00 ja 7969c <_int_malloc+0x87c> 0.00 : 78fc6: 83 c0 5b add $0x5b,%eax 0.00 : 78fc9: 89 44 24 34 mov %eax,0x34(%rsp) 0.00 : 78fcd: 48 8b 44 24 20 mov 0x20(%rsp),%rax 0.00 : 78fd2: 48 8b 54 24 20 mov 0x20(%rsp),%rdx 0.00 : 78fd7: 48 83 c0 68 add $0x68,%rax 0.00 : 78fdb: 48 89 44 24 10 mov %rax,0x10(%rsp) 0.00 : 78fe0: f6 42 04 01 testb $0x1,0x4(%rdx) 0.00 : 78fe4: 75 08 jne 78fee <_int_malloc+0x1ce> 0.00 : 78fe6: 48 89 d7 mov %rdx,%rdi 0.00 : 78fe9: e8 52 d8 ff ff callq 76840 0.00 : 78fee: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx 0.00 : 78ff3: 8b 5c 24 28 mov 0x28(%rsp),%ebx 0.00 : 78ff7: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 78ffc: 48 83 c1 58 add $0x58,%rcx 0.00 : 79000: c1 eb 04 shr $0x4,%ebx ??:0 50.00 : 79003: 48 83 c0 20 add $0x20,%rax 0.00 : 79007: 48 89 4c 24 60 mov %rcx,0x60(%rsp) 0.00 : 7900c: 89 5c 24 6c mov %ebx,0x6c(%rsp) 0.00 : 79010: 48 89 44 24 08 mov %rax,0x8(%rsp) 0.00 : 79015: 45 31 ff xor %r15d,%r15d 0.00 : 79018: eb 67 jmp 79081 <_int_malloc+0x261> 0.00 : 7901a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 79020: 41 89 d5 mov %edx,%r13d 0.00 : 79023: 48 8b 54 24 10 mov 0x10(%rsp),%rdx 0.00 : 79028: 41 c1 ed 04 shr $0x4,%r13d 0.00 : 7902c: 43 8d 44 2d fe lea -0x2(%r13,%r13,1),%eax 0.00 : 79031: 48 98 cltq 0.00 : 79033: 48 8d 74 c2 f0 lea -0x10(%rdx,%rax,8),%rsi 0.00 : 79038: 48 8b 5e 10 mov 0x10(%rsi),%rbx 0.00 : 7903c: 44 89 e8 mov %r13d,%eax 0.00 : 7903f: 41 83 e5 1f and $0x1f,%r13d 0.00 : 79043: ba 01 00 00 00 mov $0x1,%edx 0.00 : 79048: 44 89 e9 mov %r13d,%ecx 0.00 : 7904b: c1 f8 05 sar $0x5,%eax 0.00 : 7904e: 41 83 c7 01 add $0x1,%r15d 0.00 : 79052: d3 e2 shl %cl,%edx 0.00 : 79054: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx 0.00 : 79059: 48 98 cltq 0.00 : 7905b: 09 94 81 58 08 00 00 or %edx,0x858(%rcx,%rax,4) 0.00 : 79062: 41 81 ff 10 27 00 00 cmp $0x2710,%r15d 0.00 : 79069: 49 89 74 24 18 mov %rsi,0x18(%r12) 0.00 : 7906e: 49 89 5c 24 10 mov %rbx,0x10(%r12) 0.00 : 79073: 4c 89 63 18 mov %r12,0x18(%rbx) 0.00 : 79077: 4c 89 66 10 mov %r12,0x10(%rsi) 0.00 : 7907b: 0f 84 3f 03 00 00 je 793c0 <_int_malloc+0x5a0> 0.00 : 79081: 48 8b 5c 24 60 mov 0x60(%rsp),%rbx 0.00 : 79086: 4c 8b 63 18 mov 0x18(%rbx),%r12 0.00 : 7908a: 4c 39 e3 cmp %r12,%rbx 0.00 : 7908d: 0f 84 2d 03 00 00 je 793c0 <_int_malloc+0x5a0> 0.00 : 79093: 49 8b 44 24 08 mov 0x8(%r12),%rax 0.00 : 79098: 49 8b 5c 24 18 mov 0x18(%r12),%rbx 0.00 : 7909d: 48 83 f8 10 cmp $0x10,%rax 0.00 : 790a1: 0f 86 11 05 00 00 jbe 795b8 <_int_malloc+0x798> 0.00 : 790a7: 48 8b 54 24 20 mov 0x20(%rsp),%rdx 0.00 : 790ac: 48 3b 82 70 08 00 00 cmp 0x870(%rdx),%rax 0.00 : 790b3: 0f 87 ff 04 00 00 ja 795b8 <_int_malloc+0x798> 0.00 : 790b9: 48 89 c2 mov %rax,%rdx 0.00 : 790bc: 48 83 e2 f8 and $0xfffffffffffffff8,%rdx 0.00 : 790c0: 48 81 7c 24 28 ff 03 cmpq $0x3ff,0x28(%rsp) 0.00 : 790c7: 00 00 0.00 : 790c9: 77 0b ja 790d6 <_int_malloc+0x2b6> 0.00 : 790cb: 48 39 5c 24 60 cmp %rbx,0x60(%rsp) 0.00 : 790d0: 0f 84 aa 01 00 00 je 79280 <_int_malloc+0x460> 0.00 : 790d6: 48 8b 4c 24 60 mov 0x60(%rsp),%rcx 0.00 : 790db: 48 89 59 18 mov %rbx,0x18(%rcx) 0.00 : 790df: 48 89 4b 10 mov %rcx,0x10(%rbx) 0.00 : 790e3: 48 39 54 24 28 cmp %rdx,0x28(%rsp) 0.00 : 790e8: 0f 84 8a 04 00 00 je 79578 <_int_malloc+0x758> 0.00 : 790ee: 48 81 fa ff 03 00 00 cmp $0x3ff,%rdx 0.00 : 790f5: 0f 86 25 ff ff ff jbe 79020 <_int_malloc+0x200> 0.00 : 790fb: 48 89 d0 mov %rdx,%rax 0.00 : 790fe: 48 c1 e8 06 shr $0x6,%rax 0.00 : 79102: 48 83 f8 30 cmp $0x30,%rax 0.00 : 79106: 77 70 ja 79178 <_int_malloc+0x358> 0.00 : 79108: 44 8d 68 30 lea 0x30(%rax),%r13d 0.00 : 7910c: 8d 44 00 5e lea 0x5e(%rax,%rax,1),%eax 0.00 : 79110: 48 98 cltq 0.00 : 79112: 48 8d 04 c5 f0 ff ff lea -0x10(,%rax,8),%rax 0.00 : 79119: ff 0.00 : 7911a: 48 8b 6c 24 10 mov 0x10(%rsp),%rbp 0.00 : 7911f: 48 01 c5 add %rax,%rbp 0.00 : 79122: 48 8b 5d 10 mov 0x10(%rbp),%rbx 0.00 : 79126: 48 39 eb cmp %rbp,%rbx 0.00 : 79129: 0f 84 11 02 00 00 je 79340 <_int_malloc+0x520> 0.00 : 7912f: 48 8b 75 18 mov 0x18(%rbp),%rsi 0.00 : 79133: 49 89 d6 mov %rdx,%r14 0.00 : 79136: 49 83 ce 01 or $0x1,%r14 0.00 : 7913a: 48 8b 46 08 mov 0x8(%rsi),%rax 0.00 : 7913e: a8 04 test $0x4,%al 0.00 : 79140: 0f 85 da 00 00 00 jne 79220 <_int_malloc+0x400> 0.00 : 79146: 49 39 c6 cmp %rax,%r14 0.00 : 79149: 73 5d jae 791a8 <_int_malloc+0x388> 0.00 : 7914b: 48 8b 45 10 mov 0x10(%rbp),%rax 0.00 : 7914f: 48 89 eb mov %rbp,%rbx 0.00 : 79152: 49 89 44 24 20 mov %rax,0x20(%r12) 0.00 : 79157: 48 8b 45 10 mov 0x10(%rbp),%rax 0.00 : 7915b: 48 8b 40 28 mov 0x28(%rax),%rax 0.00 : 7915f: 49 89 44 24 28 mov %rax,0x28(%r12) 0.00 : 79164: 48 8b 55 10 mov 0x10(%rbp),%rdx 0.00 : 79168: 4c 89 60 20 mov %r12,0x20(%rax) 0.00 : 7916c: 4c 89 62 28 mov %r12,0x28(%rdx) 0.00 : 79170: e9 c7 fe ff ff jmpq 7903c <_int_malloc+0x21c> 0.00 : 79175: 0f 1f 00 nopl (%rax) 0.00 : 79178: 48 89 d0 mov %rdx,%rax 0.00 : 7917b: 48 c1 e8 09 shr $0x9,%rax 0.00 : 7917f: 48 83 f8 14 cmp $0x14,%rax 0.00 : 79183: 0f 87 c7 00 00 00 ja 79250 <_int_malloc+0x430> 0.00 : 79189: 44 8d 68 5b lea 0x5b(%rax),%r13d 0.00 : 7918d: 8d 84 00 b4 00 00 00 lea 0xb4(%rax,%rax,1),%eax 0.00 : 79194: 48 98 cltq 0.00 : 79196: 48 8d 04 c5 f0 ff ff lea -0x10(,%rax,8),%rax 0.00 : 7919d: ff 0.00 : 7919e: e9 77 ff ff ff jmpq 7911a <_int_malloc+0x2fa> 0.00 : 791a3: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 791a8: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 791ac: a8 04 test $0x4,%al 0.00 : 791ae: 0f 85 b4 01 00 00 jne 79368 <_int_malloc+0x548> 0.00 : 791b4: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 791b8: 49 39 c6 cmp %rax,%r14 0.00 : 791bb: 73 34 jae 791f1 <_int_malloc+0x3d1> 0.00 : 791bd: 48 8b 5b 20 mov 0x20(%rbx),%rbx 0.00 : 791c1: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 791c5: a8 04 test $0x4,%al 0.00 : 791c7: 74 ef je 791b8 <_int_malloc+0x398> 0.00 : 791c9: 48 8d 0d 57 2c 0c 00 lea 0xc2c57(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 791d0: 48 8d 35 6b 29 0c 00 lea 0xc296b(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 791d7: 48 8d 3d 82 2a 0c 00 lea 0xc2a82(%rip),%rdi # 13bc60 <__PRETTY_FUNCTION__.14063+0x1f9> 0.00 : 791de: ba 94 11 00 00 mov $0x1194,%edx 0.00 : 791e3: e8 d8 d5 ff ff callq 767c0 <__malloc_assert> 0.00 : 791e8: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 791ec: 49 39 c6 cmp %rax,%r14 0.00 : 791ef: 72 cc jb 791bd <_int_malloc+0x39d> 0.00 : 791f1: 0f 84 61 01 00 00 je 79358 <_int_malloc+0x538> 0.00 : 791f7: 49 89 5c 24 20 mov %rbx,0x20(%r12) 0.00 : 791fc: 48 8b 43 28 mov 0x28(%rbx),%rax 0.00 : 79200: 49 89 44 24 28 mov %rax,0x28(%r12) 0.00 : 79205: 4c 89 63 28 mov %r12,0x28(%rbx) 0.00 : 79209: 49 8b 44 24 28 mov 0x28(%r12),%rax 0.00 : 7920e: 4c 89 60 20 mov %r12,0x20(%rax) 0.00 : 79212: 48 8b 73 18 mov 0x18(%rbx),%rsi 0.00 : 79216: e9 21 fe ff ff jmpq 7903c <_int_malloc+0x21c> 0.00 : 7921b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 79220: 48 8d 35 1b 29 0c 00 lea 0xc291b(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79227: 48 8d 0d f9 2b 0c 00 lea 0xc2bf9(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 7922e: 48 8d 3d 10 2a 0c 00 lea 0xc2a10(%rip),%rdi # 13bc45 <__PRETTY_FUNCTION__.14063+0x1de> 0.00 : 79235: ba 86 11 00 00 mov $0x1186,%edx 0.00 : 7923a: e8 81 d5 ff ff callq 767c0 <__malloc_assert> 0.00 : 7923f: 48 8b 75 18 mov 0x18(%rbp),%rsi 0.00 : 79243: 48 8b 46 08 mov 0x8(%rsi),%rax 0.00 : 79247: e9 fa fe ff ff jmpq 79146 <_int_malloc+0x326> 0.00 : 7924c: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 79250: 48 89 d0 mov %rdx,%rax 0.00 : 79253: 48 c1 e8 0c shr $0xc,%rax 0.00 : 79257: 48 83 f8 0a cmp $0xa,%rax 0.00 : 7925b: 0f 87 2f 01 00 00 ja 79390 <_int_malloc+0x570> 0.00 : 79261: 44 8d 68 6e lea 0x6e(%rax),%r13d 0.00 : 79265: 8d 84 00 da 00 00 00 lea 0xda(%rax,%rax,1),%eax 0.00 : 7926c: 48 98 cltq 0.00 : 7926e: 48 8d 04 c5 f0 ff ff lea -0x10(,%rax,8),%rax 0.00 : 79275: ff 0.00 : 79276: e9 9f fe ff ff jmpq 7911a <_int_malloc+0x2fa> 0.00 : 7927b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 79280: 48 8b 44 24 20 mov 0x20(%rsp),%rax 0.00 : 79285: 48 8b 48 60 mov 0x60(%rax),%rcx 0.00 : 79289: 4c 39 e1 cmp %r12,%rcx 0.00 : 7928c: 0f 85 44 fe ff ff jne 790d6 <_int_malloc+0x2b6> 0.00 : 79292: 48 3b 54 24 08 cmp 0x8(%rsp),%rdx 0.00 : 79297: 0f 86 39 fe ff ff jbe 790d6 <_int_malloc+0x2b6> 0.00 : 7929d: 48 8b 5c 24 28 mov 0x28(%rsp),%rbx 0.00 : 792a2: 48 8b 44 24 60 mov 0x60(%rsp),%rax 0.00 : 792a7: 48 89 d6 mov %rdx,%rsi 0.00 : 792aa: 48 2b 74 24 28 sub 0x28(%rsp),%rsi 0.00 : 792af: 49 8d 14 1c lea (%r12,%rbx,1),%rdx 0.00 : 792b3: 48 89 50 10 mov %rdx,0x10(%rax) 0.00 : 792b7: 48 89 50 18 mov %rdx,0x18(%rax) 0.00 : 792bb: 48 81 fe ff 03 00 00 cmp $0x3ff,%rsi 0.00 : 792c2: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 792c7: 48 89 53 60 mov %rdx,0x60(%rbx) 0.00 : 792cb: 48 89 42 10 mov %rax,0x10(%rdx) 0.00 : 792cf: 48 89 42 18 mov %rax,0x18(%rdx) 0.00 : 792d3: 76 10 jbe 792e5 <_int_malloc+0x4c5> 0.00 : 792d5: 48 c7 42 20 00 00 00 movq $0x0,0x20(%rdx) 0.00 : 792dc: 00 0.00 : 792dd: 48 c7 42 28 00 00 00 movq $0x0,0x28(%rdx) 0.00 : 792e4: 00 0.00 : 792e5: 48 8d 05 b4 ab 2f 00 lea 0x2fabb4(%rip),%rax # 373ea0 0.00 : 792ec: 48 39 44 24 20 cmp %rax,0x20(%rsp) 0.00 : 792f1: 48 8d 69 10 lea 0x10(%rcx),%rbp 0.00 : 792f5: 48 89 eb mov %rbp,%rbx 0.00 : 792f8: 0f 95 c0 setne %al 0.00 : 792fb: 48 83 4c 24 28 01 orq $0x1,0x28(%rsp) 0.00 : 79301: 0f b6 c0 movzbl %al,%eax 0.00 : 79304: 48 c1 e0 02 shl $0x2,%rax 0.00 : 79308: 48 09 44 24 28 or %rax,0x28(%rsp) 0.00 : 7930d: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 79312: 48 89 41 08 mov %rax,0x8(%rcx) 0.00 : 79316: 48 89 f0 mov %rsi,%rax 0.00 : 79319: 48 83 c8 01 or $0x1,%rax 0.00 : 7931d: 48 89 42 08 mov %rax,0x8(%rdx) 0.00 : 79321: 48 89 34 32 mov %rsi,(%rdx,%rsi,1) 0.00 : 79325: 8b 05 55 b4 2f 00 mov 0x2fb455(%rip),%eax # 374780 0.00 : 7932b: 85 c0 test %eax,%eax 0.00 : 7932d: 0f 84 9a fb ff ff je 78ecd <_int_malloc+0xad> 0.00 : 79333: e9 44 fc ff ff jmpq 78f7c <_int_malloc+0x15c> 0.00 : 79338: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 7933f: 00 0.00 : 79340: 4d 89 64 24 28 mov %r12,0x28(%r12) 0.00 : 79345: 4d 89 64 24 20 mov %r12,0x20(%r12) 0.00 : 7934a: 48 89 de mov %rbx,%rsi 0.00 : 7934d: e9 ea fc ff ff jmpq 7903c <_int_malloc+0x21c> 0.00 : 79352: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 79358: 48 8b 5b 10 mov 0x10(%rbx),%rbx 0.00 : 7935c: e9 b1 fe ff ff jmpq 79212 <_int_malloc+0x3f2> 0.00 : 79361: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 79368: 48 8d 0d b8 2a 0c 00 lea 0xc2ab8(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 7936f: 48 8d 35 cc 27 0c 00 lea 0xc27cc(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79376: 48 8d 3d e3 28 0c 00 lea 0xc28e3(%rip),%rdi # 13bc60 <__PRETTY_FUNCTION__.14063+0x1f9> 0.00 : 7937d: ba 90 11 00 00 mov $0x1190,%edx 0.00 : 79382: e8 39 d4 ff ff callq 767c0 <__malloc_assert> 0.00 : 79387: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 7938b: e9 28 fe ff ff jmpq 791b8 <_int_malloc+0x398> 0.00 : 79390: 48 89 d0 mov %rdx,%rax 0.00 : 79393: 48 c1 e8 0f shr $0xf,%rax 0.00 : 79397: 48 83 f8 04 cmp $0x4,%rax 0.00 : 7939b: 0f 87 47 01 00 00 ja 794e8 <_int_malloc+0x6c8> 0.00 : 793a1: 44 8d 68 77 lea 0x77(%rax),%r13d 0.00 : 793a5: 8d 84 00 ec 00 00 00 lea 0xec(%rax,%rax,1),%eax 0.00 : 793ac: 48 98 cltq 0.00 : 793ae: 48 8d 04 c5 f0 ff ff lea -0x10(,%rax,8),%rax 0.00 : 793b5: ff 0.00 : 793b6: e9 5f fd ff ff jmpq 7911a <_int_malloc+0x2fa> 0.00 : 793bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 793c0: 48 81 7c 24 28 ff 03 cmpq $0x3ff,0x28(%rsp) 0.00 : 793c7: 00 00 0.00 : 793c9: 76 2c jbe 793f7 <_int_malloc+0x5d7> 0.00 : 793cb: 8b 54 24 34 mov 0x34(%rsp),%edx 0.00 : 793cf: 48 8b 4c 24 10 mov 0x10(%rsp),%rcx 0.00 : 793d4: 8d 44 12 fe lea -0x2(%rdx,%rdx,1),%eax 0.00 : 793d8: 89 c0 mov %eax,%eax 0.00 : 793da: 48 8d 54 c1 f0 lea -0x10(%rcx,%rax,8),%rdx 0.00 : 793df: 48 8b 42 10 mov 0x10(%rdx),%rax 0.00 : 793e3: 48 39 d0 cmp %rdx,%rax 0.00 : 793e6: 74 0f je 793f7 <_int_malloc+0x5d7> 0.00 : 793e8: 48 8b 5c 24 28 mov 0x28(%rsp),%rbx 0.00 : 793ed: 48 3b 58 08 cmp 0x8(%rax),%rbx 0.00 : 793f1: 0f 86 df 02 00 00 jbe 796d6 <_int_malloc+0x8b6> 0.00 : 793f7: 8b 4c 24 34 mov 0x34(%rsp),%ecx 0.00 : 793fb: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 79400: 48 8b 54 24 10 mov 0x10(%rsp),%rdx 0.00 : 79405: 83 c1 01 add $0x1,%ecx 0.00 : 79408: 8d 44 09 fe lea -0x2(%rcx,%rcx,1),%eax 0.00 : 7940c: 41 89 cd mov %ecx,%r13d 0.00 : 7940f: 83 e1 1f and $0x1f,%ecx 0.00 : 79412: 41 c1 ed 05 shr $0x5,%r13d 0.00 : 79416: 89 c0 mov %eax,%eax 0.00 : 79418: 45 89 ee mov %r13d,%r14d 0.00 : 7941b: 46 8b a4 b3 58 08 00 mov 0x858(%rbx,%r14,4),%r12d 0.00 : 79422: 00 0.00 : 79423: 48 8d 6c c2 f0 lea -0x10(%rdx,%rax,8),%rbp 0.00 : 79428: bb 01 00 00 00 mov $0x1,%ebx 0.00 : 7942d: d3 e3 shl %cl,%ebx 0.00 : 7942f: 90 nop 0.00 : 79430: 44 39 e3 cmp %r12d,%ebx 0.00 : 79433: 77 0b ja 79440 <_int_malloc+0x620> 0.00 : 79435: 85 db test %ebx,%ebx 0.00 : 79437: 0f 85 9a 00 00 00 jne 794d7 <_int_malloc+0x6b7> 0.00 : 7943d: 0f 1f 00 nopl (%rax) 0.00 : 79440: 41 83 c5 01 add $0x1,%r13d 0.00 : 79444: 41 83 fd 03 cmp $0x3,%r13d 0.00 : 79448: 0f 87 d2 00 00 00 ja 79520 <_int_malloc+0x700> 0.00 : 7944e: 48 8b 44 24 20 mov 0x20(%rsp),%rax 0.00 : 79453: 45 89 ee mov %r13d,%r14d 0.00 : 79456: 46 8b a4 b0 58 08 00 mov 0x858(%rax,%r14,4),%r12d 0.00 : 7945d: 00 0.00 : 7945e: 45 85 e4 test %r12d,%r12d 0.00 : 79461: 74 dd je 79440 <_int_malloc+0x620> 0.00 : 79463: 44 89 e8 mov %r13d,%eax 0.00 : 79466: 48 8b 54 24 10 mov 0x10(%rsp),%rdx 0.00 : 7946b: bb 01 00 00 00 mov $0x1,%ebx 0.00 : 79470: c1 e0 06 shl $0x6,%eax 0.00 : 79473: 83 e8 02 sub $0x2,%eax 0.00 : 79476: 44 85 e3 test %r12d,%ebx 0.00 : 79479: 89 c0 mov %eax,%eax 0.00 : 7947b: 48 8d 6c c2 f0 lea -0x10(%rdx,%rax,8),%rbp 0.00 : 79480: 74 5a je 794dc <_int_malloc+0x6bc> 0.00 : 79482: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 79488: 4c 8b 7d 18 mov 0x18(%rbp),%r15 0.00 : 7948c: 49 39 ef cmp %rbp,%r15 0.00 : 7948f: 0f 85 50 01 00 00 jne 795e5 <_int_malloc+0x7c5> 0.00 : 79495: 89 d8 mov %ebx,%eax 0.00 : 79497: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx 0.00 : 7949c: 48 83 c5 10 add $0x10,%rbp 0.00 : 794a0: f7 d0 not %eax 0.00 : 794a2: 01 db add %ebx,%ebx 0.00 : 794a4: 41 21 c4 and %eax,%r12d 0.00 : 794a7: 46 89 a4 b1 58 08 00 mov %r12d,0x858(%rcx,%r14,4) 0.00 : 794ae: 00 0.00 : 794af: e9 7c ff ff ff jmpq 79430 <_int_malloc+0x610> 0.00 : 794b4: 48 8d 0d 6c 29 0c 00 lea 0xc296c(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 794bb: 48 8d 35 80 26 0c 00 lea 0xc2680(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 794c2: 48 8d 3d ae 27 0c 00 lea 0xc27ae(%rip),%rdi # 13bc77 <__PRETTY_FUNCTION__.14063+0x210> 0.00 : 794c9: ba 15 12 00 00 mov $0x1215,%edx 0.00 : 794ce: e8 ed d2 ff ff callq 767c0 <__malloc_assert> 0.00 : 794d3: 48 83 c5 10 add $0x10,%rbp 50.00 : 794d7: 44 85 e3 test %r12d,%ebx 0.00 : 794da: 75 ac jne 79488 <_int_malloc+0x668> 0.00 : 794dc: 01 db add %ebx,%ebx 0.00 : 794de: 75 f3 jne 794d3 <_int_malloc+0x6b3> 0.00 : 794e0: eb d2 jmp 794b4 <_int_malloc+0x694> 0.00 : 794e2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 794e8: 48 89 d1 mov %rdx,%rcx 0.00 : 794eb: 41 bd 7e 00 00 00 mov $0x7e,%r13d 0.00 : 794f1: b8 c0 07 00 00 mov $0x7c0,%eax 0.00 : 794f6: 48 c1 e9 12 shr $0x12,%rcx 0.00 : 794fa: 48 83 f9 02 cmp $0x2,%rcx 0.00 : 794fe: 0f 87 16 fc ff ff ja 7911a <_int_malloc+0x2fa> 0.00 : 79504: 8d 84 09 f6 00 00 00 lea 0xf6(%rcx,%rcx,1),%eax 0.00 : 7950b: 44 8d 69 7c lea 0x7c(%rcx),%r13d 0.00 : 7950f: 48 98 cltq 0.00 : 79511: 48 8d 04 c5 f0 ff ff lea -0x10(,%rax,8),%rax 0.00 : 79518: ff 0.00 : 79519: e9 fc fb ff ff jmpq 7911a <_int_malloc+0x2fa> 0.00 : 7951e: 66 90 xchg %ax,%ax 0.00 : 79520: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 79525: 4c 8b 6b 58 mov 0x58(%rbx),%r13 0.00 : 79529: 49 8b 55 08 mov 0x8(%r13),%rdx 0.00 : 7952d: 49 89 d6 mov %rdx,%r14 0.00 : 79530: 49 83 e6 f8 and $0xfffffffffffffff8,%r14 0.00 : 79534: 4c 3b 74 24 08 cmp 0x8(%rsp),%r14 0.00 : 79539: 0f 83 53 04 00 00 jae 79992 <_int_malloc+0xb72> 0.00 : 7953f: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx 0.00 : 79544: f6 41 04 01 testb $0x1,0x4(%rcx) 0.00 : 79548: 0f 85 a2 04 00 00 jne 799f0 <_int_malloc+0xbd0> 0.00 : 7954e: 48 81 7c 24 28 ff 03 cmpq $0x3ff,0x28(%rsp) 0.00 : 79555: 00 00 0.00 : 79557: 0f 87 1b 01 00 00 ja 79678 <_int_malloc+0x858> 0.00 : 7955d: 48 8b 7c 24 20 mov 0x20(%rsp),%rdi 0.00 : 79562: e8 d9 d2 ff ff callq 76840 0.00 : 79567: 8b 5c 24 6c mov 0x6c(%rsp),%ebx 0.00 : 7956b: 89 5c 24 34 mov %ebx,0x34(%rsp) 0.00 : 7956f: e9 a1 fa ff ff jmpq 79015 <_int_malloc+0x1f5> 0.00 : 79574: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 79578: 48 8b 5c 24 28 mov 0x28(%rsp),%rbx 0.00 : 7957d: 48 8d 05 1c a9 2f 00 lea 0x2fa91c(%rip),%rax # 373ea0 0.00 : 79584: 49 83 4c 1c 08 01 orq $0x1,0x8(%r12,%rbx,1) 0.00 : 7958a: 48 39 44 24 20 cmp %rax,0x20(%rsp) 0.00 : 7958f: 74 06 je 79597 <_int_malloc+0x777> 0.00 : 79591: 49 83 4c 24 08 04 orq $0x4,0x8(%r12) 0.00 : 79597: 8b 05 e3 b1 2f 00 mov 0x2fb1e3(%rip),%eax # 374780 0.00 : 7959d: 49 8d 6c 24 10 lea 0x10(%r12),%rbp 0.00 : 795a2: 48 89 eb mov %rbp,%rbx 0.00 : 795a5: 85 c0 test %eax,%eax 0.00 : 795a7: 0f 84 20 f9 ff ff je 78ecd <_int_malloc+0xad> 0.00 : 795ad: e9 ca f9 ff ff jmpq 78f7c <_int_malloc+0x15c> 0.00 : 795b2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 795b8: 8b 3d 4a 8b 2f 00 mov 0x2f8b4a(%rip),%edi # 372108 0.00 : 795be: 49 8d 54 24 10 lea 0x10(%r12),%rdx 0.00 : 795c3: 48 8d 35 5f 26 0c 00 lea 0xc265f(%rip),%rsi # 13bc29 <__PRETTY_FUNCTION__.14063+0x1c2> 0.00 : 795ca: e8 91 cf ff ff callq 76560 0.00 : 795cf: 49 8b 44 24 08 mov 0x8(%r12),%rax 0.00 : 795d4: e9 e0 fa ff ff jmpq 790b9 <_int_malloc+0x299> 0.00 : 795d9: 83 c0 30 add $0x30,%eax 0.00 : 795dc: 89 44 24 34 mov %eax,0x34(%rsp) 0.00 : 795e0: e9 e8 f9 ff ff jmpq 78fcd <_int_malloc+0x1ad> 0.00 : 795e5: 4d 8b 67 08 mov 0x8(%r15),%r12 0.00 : 795e9: 49 83 e4 f8 and $0xfffffffffffffff8,%r12 0.00 : 795ed: 4c 39 64 24 28 cmp %r12,0x28(%rsp) 0.00 : 795f2: 0f 87 50 03 00 00 ja 79948 <_int_malloc+0xb28> 0.00 : 795f8: 49 8b 5f 10 mov 0x10(%r15),%rbx 0.00 : 795fc: 4d 89 e5 mov %r12,%r13 0.00 : 795ff: 4c 2b 6c 24 28 sub 0x28(%rsp),%r13 0.00 : 79604: 49 8b 47 18 mov 0x18(%r15),%rax 0.00 : 79608: 48 8b 6b 18 mov 0x18(%rbx),%rbp 0.00 : 7960c: 4c 39 fd cmp %r15,%rbp 0.00 : 7960f: 0f 85 de 06 00 00 jne 79cf3 <_int_malloc+0xed3> 0.00 : 79615: 4c 3b 78 10 cmp 0x10(%rax),%r15 0.00 : 79619: 0f 85 d4 06 00 00 jne 79cf3 <_int_malloc+0xed3> 0.00 : 7961f: 48 89 43 18 mov %rax,0x18(%rbx) 0.00 : 79623: 48 89 58 10 mov %rbx,0x10(%rax) 0.00 : 79627: 49 81 7f 08 ff 03 00 cmpq $0x3ff,0x8(%r15) 0.00 : 7962e: 00 0.00 : 7962f: 0f 87 89 02 00 00 ja 798be <_int_malloc+0xa9e> 0.00 : 79635: 49 83 fd 1f cmp $0x1f,%r13 0.00 : 79639: 0f 87 de 01 00 00 ja 7981d <_int_malloc+0x9fd> 0.00 : 7963f: 4b 83 4c 27 08 01 orq $0x1,0x8(%r15,%r12,1) 0.00 : 79645: 48 8d 05 54 a8 2f 00 lea 0x2fa854(%rip),%rax # 373ea0 0.00 : 7964c: 48 39 44 24 20 cmp %rax,0x20(%rsp) 0.00 : 79651: 74 05 je 79658 <_int_malloc+0x838> 0.00 : 79653: 49 83 4f 08 04 orq $0x4,0x8(%r15) 0.00 : 79658: 8b 05 22 b1 2f 00 mov 0x2fb122(%rip),%eax # 374780 0.00 : 7965e: 49 8d 6f 10 lea 0x10(%r15),%rbp 0.00 : 79662: 48 89 eb mov %rbp,%rbx 0.00 : 79665: 85 c0 test %eax,%eax 0.00 : 79667: 0f 84 60 f8 ff ff je 78ecd <_int_malloc+0xad> 0.00 : 7966d: e9 0a f9 ff ff jmpq 78f7c <_int_malloc+0x15c> 0.00 : 79672: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 79678: 48 8d 0d a8 27 0c 00 lea 0xc27a8(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 7967f: 48 8d 35 bc 24 0c 00 lea 0xc24bc(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79686: 48 8d 3d 13 5f 0c 00 lea 0xc5f13(%rip),%rdi # 13f5a0 <__PRETTY_FUNCTION__.11129+0x1bc7> 0.00 : 7968d: ba 90 12 00 00 mov $0x1290,%edx 0.00 : 79692: e8 29 d1 ff ff callq 767c0 <__malloc_assert> 0.00 : 79697: e9 c1 fe ff ff jmpq 7955d <_int_malloc+0x73d> 0.00 : 7969c: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 796a1: 48 c1 e8 0c shr $0xc,%rax 0.00 : 796a5: 48 83 f8 0a cmp $0xa,%rax 0.00 : 796a9: 76 1f jbe 796ca <_int_malloc+0x8aa> 0.00 : 796ab: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 796b0: 48 c1 e8 0f shr $0xf,%rax 0.00 : 796b4: 48 83 f8 04 cmp $0x4,%rax 0.00 : 796b8: 0f 87 ae 02 00 00 ja 7996c <_int_malloc+0xb4c> 0.00 : 796be: 83 c0 77 add $0x77,%eax 0.00 : 796c1: 89 44 24 34 mov %eax,0x34(%rsp) 0.00 : 796c5: e9 03 f9 ff ff jmpq 78fcd <_int_malloc+0x1ad> 0.00 : 796ca: 83 c0 6e add $0x6e,%eax 0.00 : 796cd: 89 44 24 34 mov %eax,0x34(%rsp) 0.00 : 796d1: e9 f7 f8 ff ff jmpq 78fcd <_int_malloc+0x1ad> 0.00 : 796d6: 48 8b 40 28 mov 0x28(%rax),%rax 0.00 : 796da: 48 8b 48 08 mov 0x8(%rax),%rcx 0.00 : 796de: 49 89 cc mov %rcx,%r12 0.00 : 796e1: 49 83 e4 f8 and $0xfffffffffffffff8,%r12 0.00 : 796e5: 4c 39 e3 cmp %r12,%rbx 0.00 : 796e8: 76 16 jbe 79700 <_int_malloc+0x8e0> 0.00 : 796ea: 48 8b 40 28 mov 0x28(%rax),%rax 0.00 : 796ee: 48 8b 48 08 mov 0x8(%rax),%rcx 0.00 : 796f2: 49 89 cc mov %rcx,%r12 0.00 : 796f5: 49 83 e4 f8 and $0xfffffffffffffff8,%r12 0.00 : 796f9: 4c 39 64 24 28 cmp %r12,0x28(%rsp) 0.00 : 796fe: 77 ea ja 796ea <_int_malloc+0x8ca> 0.00 : 79700: 48 39 42 18 cmp %rax,0x18(%rdx) 0.00 : 79704: 0f 84 9a 0a 00 00 je 7a1a4 <_int_malloc+0x1384> 0.00 : 7970a: 4c 8b 78 10 mov 0x10(%rax),%r15 0.00 : 7970e: 49 39 4f 08 cmp %rcx,0x8(%r15) 0.00 : 79712: 0f 84 83 0a 00 00 je 7a19b <_int_malloc+0x137b> 0.00 : 79718: 4c 89 fb mov %r15,%rbx 0.00 : 7971b: 49 89 c7 mov %rax,%r15 0.00 : 7971e: 48 8b 6b 18 mov 0x18(%rbx),%rbp 0.00 : 79722: 4d 89 e5 mov %r12,%r13 0.00 : 79725: 4c 2b 6c 24 28 sub 0x28(%rsp),%r13 0.00 : 7972a: 49 8b 47 18 mov 0x18(%r15),%rax 0.00 : 7972e: 4c 39 fd cmp %r15,%rbp 0.00 : 79731: 0f 85 20 0a 00 00 jne 7a157 <_int_malloc+0x1337> 0.00 : 79737: 4c 3b 78 10 cmp 0x10(%rax),%r15 0.00 : 7973b: 0f 85 16 0a 00 00 jne 7a157 <_int_malloc+0x1337> 0.00 : 79741: 48 89 43 18 mov %rax,0x18(%rbx) 0.00 : 79745: 48 89 58 10 mov %rbx,0x10(%rax) 0.00 : 79749: 49 81 7f 08 ff 03 00 cmpq $0x3ff,0x8(%r15) 0.00 : 79750: 00 0.00 : 79751: 0f 87 81 09 00 00 ja 7a0d8 <_int_malloc+0x12b8> 0.00 : 79757: 49 83 fd 1f cmp $0x1f,%r13 0.00 : 7975b: 0f 86 de fe ff ff jbe 7963f <_int_malloc+0x81f> 0.00 : 79761: 48 8b 54 24 60 mov 0x60(%rsp),%rdx 0.00 : 79766: 48 8d 35 b3 5d 0c 00 lea 0xc5db3(%rip),%rsi # 13f520 <__PRETTY_FUNCTION__.11129+0x1b47> 0.00 : 7976d: 48 8b 42 10 mov 0x10(%rdx),%rax 0.00 : 79771: 48 3b 50 18 cmp 0x18(%rax),%rdx 0.00 : 79775: 0f 85 d0 04 00 00 jne 79c4b <_int_malloc+0xe2b> 0.00 : 7977b: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx 0.00 : 79780: 48 8b 5c 24 60 mov 0x60(%rsp),%rbx 0.00 : 79785: 49 81 fd ff 03 00 00 cmp $0x3ff,%r13 0.00 : 7978c: 49 8d 14 0f lea (%r15,%rcx,1),%rdx 0.00 : 79790: 48 89 5a 18 mov %rbx,0x18(%rdx) 0.00 : 79794: 48 89 42 10 mov %rax,0x10(%rdx) 0.00 : 79798: 48 89 53 10 mov %rdx,0x10(%rbx) 0.00 : 7979c: 48 89 50 18 mov %rdx,0x18(%rax) 0.00 : 797a0: 76 10 jbe 797b2 <_int_malloc+0x992> 0.00 : 797a2: 48 c7 42 20 00 00 00 movq $0x0,0x20(%rdx) 0.00 : 797a9: 00 0.00 : 797aa: 48 c7 42 28 00 00 00 movq $0x0,0x28(%rdx) 0.00 : 797b1: 00 0.00 : 797b2: 48 8d 05 e7 a6 2f 00 lea 0x2fa6e7(%rip),%rax # 373ea0 0.00 : 797b9: 48 39 44 24 20 cmp %rax,0x20(%rsp) 0.00 : 797be: 0f 95 c0 setne %al 0.00 : 797c1: 48 83 4c 24 28 01 orq $0x1,0x28(%rsp) 0.00 : 797c7: 0f b6 c0 movzbl %al,%eax 0.00 : 797ca: 48 c1 e0 02 shl $0x2,%rax 0.00 : 797ce: 48 09 44 24 28 or %rax,0x28(%rsp) 0.00 : 797d3: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 797d8: 49 89 47 08 mov %rax,0x8(%r15) 0.00 : 797dc: 4c 89 e8 mov %r13,%rax 0.00 : 797df: 48 83 c8 01 or $0x1,%rax 0.00 : 797e3: 48 89 42 08 mov %rax,0x8(%rdx) 0.00 : 797e7: 4e 89 2c 2a mov %r13,(%rdx,%r13,1) 0.00 : 797eb: e9 68 fe ff ff jmpq 79658 <_int_malloc+0x838> 0.00 : 797f0: 48 8b 7c 24 20 mov 0x20(%rsp),%rdi 0.00 : 797f5: e8 46 d0 ff ff callq 76840 0.00 : 797fa: e9 ef f7 ff ff jmpq 78fee <_int_malloc+0x1ce> 0.00 : 797ff: 48 8b 15 32 86 2f 00 mov 0x2f8632(%rip),%rdx # 371e38 <_DYNAMIC+0x2d8> 0.00 : 79806: 64 48 8b 04 25 00 00 mov %fs:0x0,%rax 0.00 : 7980d: 00 00 0.00 : 7980f: 31 db xor %ebx,%ebx 0.00 : 79811: c7 04 10 0c 00 00 00 movl $0xc,(%rax,%rdx,1) 0.00 : 79818: e9 b0 f6 ff ff jmpq 78ecd <_int_malloc+0xad> 0.00 : 7981d: 48 8b 5c 24 60 mov 0x60(%rsp),%rbx 0.00 : 79822: 48 8d 35 4f 5d 0c 00 lea 0xc5d4f(%rip),%rsi # 13f578 <__PRETTY_FUNCTION__.11129+0x1b9f> 0.00 : 79829: 48 8b 43 10 mov 0x10(%rbx),%rax 0.00 : 7982d: 48 3b 58 18 cmp 0x18(%rax),%rbx 0.00 : 79831: 0f 85 14 04 00 00 jne 79c4b <_int_malloc+0xe2b> 0.00 : 79837: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx 0.00 : 7983c: 48 8b 5c 24 60 mov 0x60(%rsp),%rbx 0.00 : 79841: 49 8d 14 0f lea (%r15,%rcx,1),%rdx 0.00 : 79845: 48 81 f9 ff 03 00 00 cmp $0x3ff,%rcx 0.00 : 7984c: 48 89 5a 18 mov %rbx,0x18(%rdx) 0.00 : 79850: 48 89 42 10 mov %rax,0x10(%rdx) 0.00 : 79854: 48 89 53 10 mov %rdx,0x10(%rbx) 0.00 : 79858: 48 89 50 18 mov %rdx,0x18(%rax) 0.00 : 7985c: 77 09 ja 79867 <_int_malloc+0xa47> 0.00 : 7985e: 48 8b 44 24 20 mov 0x20(%rsp),%rax 0.00 : 79863: 48 89 50 60 mov %rdx,0x60(%rax) 0.00 : 79867: 49 81 fd ff 03 00 00 cmp $0x3ff,%r13 0.00 : 7986e: 76 10 jbe 79880 <_int_malloc+0xa60> 0.00 : 79870: 48 c7 42 20 00 00 00 movq $0x0,0x20(%rdx) 0.00 : 79877: 00 0.00 : 79878: 48 c7 42 28 00 00 00 movq $0x0,0x28(%rdx) 0.00 : 7987f: 00 0.00 : 79880: 48 8d 05 19 a6 2f 00 lea 0x2fa619(%rip),%rax # 373ea0 0.00 : 79887: 48 39 44 24 20 cmp %rax,0x20(%rsp) 0.00 : 7988c: 0f 95 c0 setne %al 0.00 : 7988f: 48 83 4c 24 28 01 orq $0x1,0x28(%rsp) 0.00 : 79895: 0f b6 c0 movzbl %al,%eax 0.00 : 79898: 48 c1 e0 02 shl $0x2,%rax 0.00 : 7989c: 48 09 44 24 28 or %rax,0x28(%rsp) 0.00 : 798a1: 4c 89 e8 mov %r13,%rax 0.00 : 798a4: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx 0.00 : 798a9: 48 83 c8 01 or $0x1,%rax 0.00 : 798ad: 49 89 4f 08 mov %rcx,0x8(%r15) 0.00 : 798b1: 48 89 42 08 mov %rax,0x8(%rdx) 0.00 : 798b5: 4e 89 2c 2a mov %r13,(%rdx,%r13,1) 0.00 : 798b9: e9 9a fd ff ff jmpq 79658 <_int_malloc+0x838> 0.00 : 798be: 49 8b 47 20 mov 0x20(%r15),%rax 0.00 : 798c2: 48 85 c0 test %rax,%rax 0.00 : 798c5: 0f 84 6a fd ff ff je 79635 <_int_malloc+0x815> 0.00 : 798cb: 4c 3b 78 28 cmp 0x28(%rax),%r15 0.00 : 798cf: 74 1f je 798f0 <_int_malloc+0xad0> 0.00 : 798d1: 48 8d 0d 4f 25 0c 00 lea 0xc254f(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 798d8: 48 8d 35 63 22 0c 00 lea 0xc2263(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 798df: 48 8d 3d da 5b 0c 00 lea 0xc5bda(%rip),%rdi # 13f4c0 <__PRETTY_FUNCTION__.11129+0x1ae7> 0.00 : 798e6: ba 2b 12 00 00 mov $0x122b,%edx 0.00 : 798eb: e8 d0 ce ff ff callq 767c0 <__malloc_assert> 0.00 : 798f0: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 798f4: 48 3b 68 20 cmp 0x20(%rax),%rbp 0.00 : 798f8: 74 1f je 79919 <_int_malloc+0xaf9> 0.00 : 798fa: 48 8d 0d 26 25 0c 00 lea 0xc2526(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 79901: 48 8d 35 3a 22 0c 00 lea 0xc223a(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79908: 48 8d 3d e1 5b 0c 00 lea 0xc5be1(%rip),%rdi # 13f4f0 <__PRETTY_FUNCTION__.11129+0x1b17> 0.00 : 7990f: ba 2b 12 00 00 mov $0x122b,%edx 0.00 : 79914: e8 a7 ce ff ff callq 767c0 <__malloc_assert> 0.00 : 79919: 48 83 7b 20 00 cmpq $0x0,0x20(%rbx) 0.00 : 7991e: 0f 84 e9 03 00 00 je 79d0d <_int_malloc+0xeed> 0.00 : 79924: 48 8b 55 20 mov 0x20(%rbp),%rdx 0.00 : 79928: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 7992c: 48 89 42 28 mov %rax,0x28(%rdx) 0.00 : 79930: 48 8b 55 28 mov 0x28(%rbp),%rdx 0.00 : 79934: 48 8b 45 20 mov 0x20(%rbp),%rax 0.00 : 79938: 48 89 42 20 mov %rax,0x20(%rdx) 0.00 : 7993c: e9 f4 fc ff ff jmpq 79635 <_int_malloc+0x815> 0.00 : 79941: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 79948: 48 8d 0d d8 24 0c 00 lea 0xc24d8(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 7994f: 48 8d 35 ec 21 0c 00 lea 0xc21ec(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79956: 48 8d 3d eb 5b 0c 00 lea 0xc5beb(%rip),%rdi # 13f548 <__PRETTY_FUNCTION__.11129+0x1b6f> 0.00 : 7995d: ba 26 12 00 00 mov $0x1226,%edx 0.00 : 79962: e8 59 ce ff ff callq 767c0 <__malloc_assert> 0.00 : 79967: e9 8c fc ff ff jmpq 795f8 <_int_malloc+0x7d8> 0.00 : 7996c: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 79971: c7 44 24 34 7e 00 00 movl $0x7e,0x34(%rsp) 0.00 : 79978: 00 0.00 : 79979: 48 c1 e8 12 shr $0x12,%rax 0.00 : 7997d: 8d 50 7c lea 0x7c(%rax),%edx 0.00 : 79980: 48 83 f8 03 cmp $0x3,%rax 0.00 : 79984: 0f 43 54 24 34 cmovae 0x34(%rsp),%edx 0.00 : 79989: 89 54 24 34 mov %edx,0x34(%rsp) 0.00 : 7998d: e9 3b f6 ff ff jmpq 78fcd <_int_malloc+0x1ad> 0.00 : 79992: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 79997: 31 d2 xor %edx,%edx 0.00 : 79999: 49 8d 6d 10 lea 0x10(%r13),%rbp 0.00 : 7999d: 49 8d 4c 05 00 lea 0x0(%r13,%rax,1),%rcx 0.00 : 799a2: 48 8d 05 f7 a4 2f 00 lea 0x2fa4f7(%rip),%rax # 373ea0 0.00 : 799a9: 48 89 4b 58 mov %rcx,0x58(%rbx) 0.00 : 799ad: 48 39 c3 cmp %rax,%rbx 0.00 : 799b0: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 799b5: 0f 95 c2 setne %dl 0.00 : 799b8: 48 89 eb mov %rbp,%rbx 0.00 : 799bb: 48 c1 e2 02 shl $0x2,%rdx 0.00 : 799bf: 48 83 c8 01 or $0x1,%rax 0.00 : 799c3: 48 09 d0 or %rdx,%rax 0.00 : 799c6: 49 89 45 08 mov %rax,0x8(%r13) 0.00 : 799ca: 4c 2b 74 24 28 sub 0x28(%rsp),%r14 0.00 : 799cf: 49 83 ce 01 or $0x1,%r14 0.00 : 799d3: 4c 89 71 08 mov %r14,0x8(%rcx) 0.00 : 799d7: 8b 05 a3 ad 2f 00 mov 0x2fada3(%rip),%eax # 374780 0.00 : 799dd: 85 c0 test %eax,%eax 0.00 : 799df: 0f 84 e8 f4 ff ff je 78ecd <_int_malloc+0xad> 0.00 : 799e5: e9 92 f5 ff ff jmpq 78f7c <_int_malloc+0x15c> 0.00 : 799ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 799f0: 8b 05 5a ad 2f 00 mov 0x2fad5a(%rip),%eax # 374750 0.00 : 799f6: 83 e8 01 sub $0x1,%eax 0.00 : 799f9: 48 89 44 24 40 mov %rax,0x40(%rsp) 0.00 : 799fe: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 79a03: 48 3b 05 26 ad 2f 00 cmp 0x2fad26(%rip),%rax # 374730 0.00 : 79a0a: 0f 82 db 02 00 00 jb 79ceb <_int_malloc+0xecb> 0.00 : 79a10: 8b 05 2a ad 2f 00 mov 0x2fad2a(%rip),%eax # 374740 0.00 : 79a16: 3b 05 28 ad 2f 00 cmp 0x2fad28(%rip),%eax # 374744 0.00 : 79a1c: 0f 8d c9 02 00 00 jge 79ceb <_int_malloc+0xecb> 0.00 : 79a22: 48 8b 4c 24 40 mov 0x40(%rsp),%rcx 0.00 : 79a27: 48 8b 54 24 28 mov 0x28(%rsp),%rdx 0.00 : 79a2c: 48 89 c8 mov %rcx,%rax 0.00 : 79a2f: 48 8d 6c 11 08 lea 0x8(%rcx,%rdx,1),%rbp 0.00 : 79a34: 48 f7 d0 not %rax 0.00 : 79a37: 48 21 c5 and %rax,%rbp 0.00 : 79a3a: 48 39 ea cmp %rbp,%rdx 0.00 : 79a3d: 0f 82 68 03 00 00 jb 79dab <_int_malloc+0xf8b> 0.00 : 79a43: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 79a48: 41 bf 01 00 00 00 mov $0x1,%r15d 0.00 : 79a4e: 4c 8b 6b 58 mov 0x58(%rbx),%r13 0.00 : 79a52: 49 8b 55 08 mov 0x8(%r13),%rdx 0.00 : 79a56: 49 89 d6 mov %rdx,%r14 0.00 : 79a59: 49 83 e6 f8 and $0xfffffffffffffff8,%r14 0.00 : 79a5d: 4d 85 f6 test %r14,%r14 0.00 : 79a60: 4b 8d 4c 35 00 lea 0x0(%r13,%r14,1),%rcx 0.00 : 79a65: 0f 95 44 24 5f setne 0x5f(%rsp) 0.00 : 79a6a: 4c 39 6c 24 60 cmp %r13,0x60(%rsp) 0.00 : 79a6f: 48 89 4c 24 50 mov %rcx,0x50(%rsp) 0.00 : 79a74: 0f 84 c6 07 00 00 je 7a240 <_int_malloc+0x1420> 0.00 : 79a7a: 49 83 fe 1f cmp $0x1f,%r14 0.00 : 79a7e: 76 11 jbe 79a91 <_int_malloc+0xc71> 0.00 : 79a80: 83 e2 01 and $0x1,%edx 0.00 : 79a83: 74 0c je 79a91 <_int_malloc+0xc71> 0.00 : 79a85: 48 8b 5c 24 40 mov 0x40(%rsp),%rbx 0.00 : 79a8a: 48 85 5c 24 50 test %rbx,0x50(%rsp) 0.00 : 79a8f: 74 1f je 79ab0 <_int_malloc+0xc90> 0.00 : 79a91: 48 8d 0d 9b 23 0c 00 lea 0xc239b(%rip),%rcx # 13be33 <__func__.13350> 0.00 : 79a98: 48 8d 35 a3 20 0c 00 lea 0xc20a3(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79a9f: 48 8d 3d a2 5b 0c 00 lea 0xc5ba2(%rip),%rdi # 13f648 <__PRETTY_FUNCTION__.11129+0x1c6f> 0.00 : 79aa6: ba 13 0c 00 00 mov $0xc13,%edx 0.00 : 79aab: e8 10 cd ff ff callq 767c0 <__malloc_assert> 0.00 : 79ab0: 4c 39 74 24 08 cmp %r14,0x8(%rsp) 0.00 : 79ab5: 77 1f ja 79ad6 <_int_malloc+0xcb6> 0.00 : 79ab7: 48 8d 0d 75 23 0c 00 lea 0xc2375(%rip),%rcx # 13be33 <__func__.13350> 0.00 : 79abe: 48 8d 35 7d 20 0c 00 lea 0xc207d(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79ac5: 48 8d 3d fc 5c 0c 00 lea 0xc5cfc(%rip),%rdi # 13f7c8 <__PRETTY_FUNCTION__.11129+0x1def> 0.00 : 79acc: ba 16 0c 00 00 mov $0xc16,%edx 0.00 : 79ad1: e8 ea cc ff ff callq 767c0 <__malloc_assert> 0.00 : 79ad6: 48 8b 44 24 20 mov 0x20(%rsp),%rax 0.00 : 79adb: f6 40 04 01 testb $0x1,0x4(%rax) 0.00 : 79adf: 75 1f jne 79b00 <_int_malloc+0xce0> 0.00 : 79ae1: 48 8d 0d 4b 23 0c 00 lea 0xc234b(%rip),%rcx # 13be33 <__func__.13350> 0.00 : 79ae8: 48 8d 35 53 20 0c 00 lea 0xc2053(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79aef: 48 8d 3d 8a 21 0c 00 lea 0xc218a(%rip),%rdi # 13bc80 <__PRETTY_FUNCTION__.14063+0x219> 0.00 : 79af6: ba 1a 0c 00 00 mov $0xc1a,%edx 0.00 : 79afb: e8 c0 cc ff ff callq 767c0 <__malloc_assert> 0.00 : 79b00: 48 8d 15 99 a3 2f 00 lea 0x2fa399(%rip),%rdx # 373ea0 0.00 : 79b07: 48 39 54 24 20 cmp %rdx,0x20(%rsp) 0.00 : 79b0c: 0f 84 58 03 00 00 je 79e6a <_int_malloc+0x104a> 0.00 : 79b12: 48 8b 5c 24 08 mov 0x8(%rsp),%rbx 0.00 : 79b17: 4c 89 ed mov %r13,%rbp 0.00 : 79b1a: 48 81 e5 00 00 00 fc and $0xfffffffffc000000,%rbp 0.00 : 79b21: 4c 8b 65 10 mov 0x10(%rbp),%r12 0.00 : 79b25: 4c 29 f3 sub %r14,%rbx 0.00 : 79b28: 48 85 db test %rbx,%rbx 0.00 : 79b2b: 0f 8e 31 01 00 00 jle 79c62 <_int_malloc+0xe42> 0.00 : 79b31: e8 4a a6 05 00 callq d4180 <__getpagesize> 0.00 : 79b36: 83 e8 01 sub $0x1,%eax 0.00 : 79b39: 48 98 cltq 0.00 : 79b3b: 48 8d 14 03 lea (%rbx,%rax,1),%rdx 0.00 : 79b3f: 48 f7 d0 not %rax 0.00 : 79b42: 48 21 c2 and %rax,%rdx 0.00 : 79b45: 4a 8d 1c 22 lea (%rdx,%r12,1),%rbx 0.00 : 79b49: 48 81 fb 00 00 00 04 cmp $0x4000000,%rbx 0.00 : 79b50: 0f 87 0c 01 00 00 ja 79c62 <_int_malloc+0xe42> 0.00 : 79b56: 48 8b 45 18 mov 0x18(%rbp),%rax 0.00 : 79b5a: 48 39 c3 cmp %rax,%rbx 0.00 : 79b5d: 0f 87 22 02 00 00 ja 79d85 <_int_malloc+0xf65> 0.00 : 79b63: 48 89 5d 10 mov %rbx,0x10(%rbp) 0.00 : 79b67: 48 8b 4c 24 20 mov 0x20(%rsp),%rcx 0.00 : 79b6c: 4c 29 e3 sub %r12,%rbx 0.00 : 79b6f: 48 01 99 70 08 00 00 add %rbx,0x870(%rcx) 0.00 : 79b76: 48 8b 05 13 ac 2f 00 mov 0x2fac13(%rip),%rax # 374790 0.00 : 79b7d: 48 03 45 10 add 0x10(%rbp),%rax 0.00 : 79b81: 4c 29 e0 sub %r12,%rax 0.00 : 79b84: 48 89 05 05 ac 2f 00 mov %rax,0x2fac05(%rip) # 374790 0.00 : 79b8b: 48 03 6d 10 add 0x10(%rbp),%rbp 0.00 : 79b8f: 4c 29 ed sub %r13,%rbp 0.00 : 79b92: 48 83 cd 01 or $0x1,%rbp 0.00 : 79b96: 49 89 6d 08 mov %rbp,0x8(%r13) 0.00 : 79b9a: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 79b9f: 48 8b 83 70 08 00 00 mov 0x870(%rbx),%rax 0.00 : 79ba6: 48 3b 83 78 08 00 00 cmp 0x878(%rbx),%rax 0.00 : 79bad: 76 07 jbe 79bb6 <_int_malloc+0xd96> 0.00 : 79baf: 48 89 83 78 08 00 00 mov %rax,0x878(%rbx) 0.00 : 79bb6: 48 8b 44 24 20 mov 0x20(%rsp),%rax 0.00 : 79bbb: 48 8b 78 58 mov 0x58(%rax),%rdi 0.00 : 79bbf: 48 8b 77 08 mov 0x8(%rdi),%rsi 0.00 : 79bc3: 48 83 e6 f8 and $0xfffffffffffffff8,%rsi 0.00 : 79bc7: 48 39 74 24 08 cmp %rsi,0x8(%rsp) 0.00 : 79bcc: 0f 87 2d fc ff ff ja 797ff <_int_malloc+0x9df> 0.00 : 79bd2: 48 8b 54 24 28 mov 0x28(%rsp),%rdx 0.00 : 79bd7: 48 8d 1d c2 a2 2f 00 lea 0x2fa2c2(%rip),%rbx # 373ea0 0.00 : 79bde: 48 8d 0c 17 lea (%rdi,%rdx,1),%rcx 0.00 : 79be2: 31 d2 xor %edx,%edx 0.00 : 79be4: 48 39 d8 cmp %rbx,%rax 0.00 : 79be7: 0f 95 c2 setne %dl 0.00 : 79bea: 48 8d 5f 10 lea 0x10(%rdi),%rbx 0.00 : 79bee: 48 89 48 58 mov %rcx,0x58(%rax) 0.00 : 79bf2: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 79bf7: 48 c1 e2 02 shl $0x2,%rdx 0.00 : 79bfb: 48 83 c8 01 or $0x1,%rax 0.00 : 79bff: 48 09 d0 or %rdx,%rax 0.00 : 79c02: 48 89 47 08 mov %rax,0x8(%rdi) 0.00 : 79c06: 48 89 f0 mov %rsi,%rax 0.00 : 79c09: 48 2b 44 24 28 sub 0x28(%rsp),%rax 0.00 : 79c0e: 48 83 c8 01 or $0x1,%rax 0.00 : 79c12: 48 89 41 08 mov %rax,0x8(%rcx) 0.00 : 79c16: 48 85 db test %rbx,%rbx 0.00 : 79c19: 0f 84 ae f2 ff ff je 78ecd <_int_malloc+0xad> 0.00 : 79c1f: 8b 05 5b ab 2f 00 mov 0x2fab5b(%rip),%eax # 374780 0.00 : 79c25: 85 c0 test %eax,%eax 0.00 : 79c27: 0f 84 a0 f2 ff ff je 78ecd <_int_malloc+0xad> 0.00 : 79c2d: 48 8b 54 24 18 mov 0x18(%rsp),%rdx 0.00 : 79c32: f7 d0 not %eax 0.00 : 79c34: 48 89 df mov %rbx,%rdi 0.00 : 79c37: 0f b6 f0 movzbl %al,%esi 0.00 : 79c3a: e8 31 98 00 00 callq 83470 <__GI_memset> 0.00 : 79c3f: e9 89 f2 ff ff jmpq 78ecd <_int_malloc+0xad> 0.00 : 79c44: 48 8d 35 1d 58 0c 00 lea 0xc581d(%rip),%rsi # 13f468 <__PRETTY_FUNCTION__.11129+0x1a8f> 0.00 : 79c4b: 49 8d 5f 10 lea 0x10(%r15),%rbx 0.00 : 79c4f: 8b 3d b3 84 2f 00 mov 0x2f84b3(%rip),%edi # 372108 0.00 : 79c55: 48 89 da mov %rbx,%rdx 0.00 : 79c58: e8 03 c9 ff ff callq 76560 0.00 : 79c5d: e9 51 f2 ff ff jmpq 78eb3 <_int_malloc+0x93> 0.00 : 79c62: 48 8b 7c 24 28 mov 0x28(%rsp),%rdi 0.00 : 79c67: 48 8b 35 ba aa 2f 00 mov 0x2faaba(%rip),%rsi # 374728 0.00 : 79c6e: 48 83 c7 40 add $0x40,%rdi 0.00 : 79c72: e8 69 ec ff ff callq 788e0 0.00 : 79c77: 48 85 c0 test %rax,%rax 0.00 : 79c7a: 48 89 c1 mov %rax,%rcx 0.00 : 79c7d: 0f 84 dc 00 00 00 je 79d5f <_int_malloc+0xf3f> 0.00 : 79c83: 48 8b 5c 24 20 mov 0x20(%rsp),%rbx 0.00 : 79c88: 48 8d 51 20 lea 0x20(%rcx),%rdx 0.00 : 79c8c: 48 89 68 08 mov %rbp,0x8(%rax) 0.00 : 79c90: 48 89 18 mov %rbx,(%rax) 0.00 : 79c93: 48 8b 40 10 mov 0x10(%rax),%rax 0.00 : 79c97: 48 01 83 70 08 00 00 add %rax,0x870(%rbx) 0.00 : 79c9e: 48 8b 41 10 mov 0x10(%rcx),%rax 0.00 : 79ca2: 48 01 05 e7 aa 2f 00 add %rax,0x2faae7(%rip) # 374790 0.00 : 79ca9: 48 89 53 58 mov %rdx,0x58(%rbx) 0.00 : 79cad: 48 8b 41 10 mov 0x10(%rcx),%rax 0.00 : 79cb1: 48 83 e8 20 sub $0x20,%rax 0.00 : 79cb5: 48 83 c8 01 or $0x1,%rax 0.00 : 79cb9: 48 89 42 08 mov %rax,0x8(%rdx) 0.00 : 79cbd: 49 8d 46 e0 lea -0x20(%r14),%rax 0.00 : 79cc1: 48 8d 50 10 lea 0x10(%rax),%rdx 0.00 : 79cc5: 48 83 f8 1f cmp $0x1f,%rax 0.00 : 79cc9: 49 8d 4c 15 00 lea 0x0(%r13,%rdx,1),%rcx 0.00 : 79cce: 48 c7 41 08 01 00 00 movq $0x1,0x8(%rcx) 0.00 : 79cd5: 00 0.00 : 79cd6: 77 5f ja 79d37 <_int_malloc+0xf17> 0.00 : 79cd8: 48 89 d0 mov %rdx,%rax 0.00 : 79cdb: 48 83 c8 01 or $0x1,%rax 0.00 : 79cdf: 49 89 45 08 mov %rax,0x8(%r13) 0.00 : 79ce3: 48 89 11 mov %rdx,(%rcx) 0.00 : 79ce6: e9 af fe ff ff jmpq 79b9a <_int_malloc+0xd7a> 0.00 : 79ceb: 45 31 ff xor %r15d,%r15d 0.00 : 79cee: e9 6a fd ff ff jmpq 79a5d <_int_malloc+0xc3d> 0.00 : 79cf3: 8b 3d 0f 84 2f 00 mov 0x2f840f(%rip),%edi # 372108 0.00 : 79cf9: 48 8d 35 25 1e 0c 00 lea 0xc1e25(%rip),%rsi # 13bb25 <__PRETTY_FUNCTION__.14063+0xbe> 0.00 : 79d00: 4c 89 fa mov %r15,%rdx 0.00 : 79d03: e8 58 c8 ff ff callq 76560 0.00 : 79d08: e9 28 f9 ff ff jmpq 79635 <_int_malloc+0x815> 0.00 : 79d0d: 48 8b 45 20 mov 0x20(%rbp),%rax 0.00 : 79d11: 48 39 c5 cmp %rax,%rbp 0.00 : 79d14: 74 5f je 79d75 <_int_malloc+0xf55> 0.00 : 79d16: 48 89 43 20 mov %rax,0x20(%rbx) 0.00 : 79d1a: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 79d1e: 48 89 43 28 mov %rax,0x28(%rbx) 0.00 : 79d22: 48 8b 45 20 mov 0x20(%rbp),%rax 0.00 : 79d26: 48 89 58 28 mov %rbx,0x28(%rax) 0.00 : 79d2a: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 79d2e: 48 89 58 20 mov %rbx,0x20(%rax) 0.00 : 79d32: e9 fe f8 ff ff jmpq 79635 <_int_malloc+0x815> 0.00 : 79d37: 48 83 c8 05 or $0x5,%rax 0.00 : 79d3b: 4b c7 44 35 e8 11 00 movq $0x11,-0x18(%r13,%r14,1) 0.00 : 79d42: 00 00 0.00 : 79d44: 4c 89 ee mov %r13,%rsi 0.00 : 79d47: 48 c7 01 10 00 00 00 movq $0x10,(%rcx) 0.00 : 79d4e: 48 89 df mov %rbx,%rdi 0.00 : 79d51: 49 89 45 08 mov %rax,0x8(%r13) 0.00 : 79d55: e8 46 dd ff ff callq 77aa0 <_int_free> 0.00 : 79d5a: e9 3b fe ff ff jmpq 79b9a <_int_malloc+0xd7a> 0.00 : 79d5f: 45 84 ff test %r15b,%r15b 0.00 : 79d62: 0f 84 ba fc ff ff je 79a22 <_int_malloc+0xc02> 0.00 : 79d68: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 79d6f: 00 0.00 : 79d70: e9 25 fe ff ff jmpq 79b9a <_int_malloc+0xd7a> 0.00 : 79d75: 48 89 5b 28 mov %rbx,0x28(%rbx) 0.00 : 79d79: 48 89 5b 20 mov %rbx,0x20(%rbx) 0.00 : 79d7d: 0f 1f 00 nopl (%rax) 0.00 : 79d80: e9 b0 f8 ff ff jmpq 79635 <_int_malloc+0x815> 0.00 : 79d85: 48 89 de mov %rbx,%rsi 0.00 : 79d88: 48 8d 7c 05 00 lea 0x0(%rbp,%rax,1),%rdi 0.00 : 79d8d: ba 03 00 00 00 mov $0x3,%edx 0.00 : 79d92: 48 29 c6 sub %rax,%rsi 0.00 : 79d95: e8 16 df 05 00 callq d7cb0 0.00 : 79d9a: 85 c0 test %eax,%eax 0.00 : 79d9c: 0f 85 c0 fe ff ff jne 79c62 <_int_malloc+0xe42> 0.00 : 79da2: 48 89 5d 18 mov %rbx,0x18(%rbp) 0.00 : 79da6: e9 b8 fd ff ff jmpq 79b63 <_int_malloc+0xd43> 0.00 : 79dab: 45 31 c9 xor %r9d,%r9d 0.00 : 79dae: 31 ff xor %edi,%edi 0.00 : 79db0: 41 b8 ff ff ff ff mov $0xffffffff,%r8d 0.00 : 79db6: b9 22 00 00 00 mov $0x22,%ecx 0.00 : 79dbb: ba 03 00 00 00 mov $0x3,%edx 0.00 : 79dc0: 48 89 ee mov %rbp,%rsi 0.00 : 79dc3: e8 88 de 05 00 callq d7c50 0.00 : 79dc8: 48 83 f8 ff cmp $0xffffffffffffffff,%rax 0.00 : 79dcc: 48 89 c3 mov %rax,%rbx 0.00 : 79dcf: 74 7a je 79e4b <_int_malloc+0x102b> 0.00 : 79dd1: 4c 8d 60 10 lea 0x10(%rax),%r12 0.00 : 79dd5: 41 f6 c4 0f test $0xf,%r12b 0.00 : 79dd9: 74 1f je 79dfa <_int_malloc+0xfda> 0.00 : 79ddb: 48 8d 0d 51 20 0c 00 lea 0xc2051(%rip),%rcx # 13be33 <__func__.13350> 0.00 : 79de2: 48 8d 35 59 1d 0c 00 lea 0xc1d59(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79de9: 48 8d 3d f8 57 0c 00 lea 0xc57f8(%rip),%rdi # 13f5e8 <__PRETTY_FUNCTION__.11129+0x1c0f> 0.00 : 79df0: ba dd 0b 00 00 mov $0xbdd,%edx 0.00 : 79df5: e8 c6 c9 ff ff callq 767c0 <__malloc_assert> 0.00 : 79dfa: 48 89 e8 mov %rbp,%rax 0.00 : 79dfd: 48 83 c8 02 or $0x2,%rax 0.00 : 79e01: 48 89 43 08 mov %rax,0x8(%rbx) 0.00 : 79e05: 8b 05 35 a9 2f 00 mov 0x2fa935(%rip),%eax # 374740 0.00 : 79e0b: 83 c0 01 add $0x1,%eax 0.00 : 79e0e: 3b 05 34 a9 2f 00 cmp 0x2fa934(%rip),%eax # 374748 0.00 : 79e14: 89 05 26 a9 2f 00 mov %eax,0x2fa926(%rip) # 374740 0.00 : 79e1a: 7e 06 jle 79e22 <_int_malloc+0x1002> 0.00 : 79e1c: 89 05 26 a9 2f 00 mov %eax,0x2fa926(%rip) # 374748 0.00 : 79e22: 48 89 e8 mov %rbp,%rax 0.00 : 79e25: 48 03 05 2c a9 2f 00 add 0x2fa92c(%rip),%rax # 374758 0.00 : 79e2c: 48 3b 05 2d a9 2f 00 cmp 0x2fa92d(%rip),%rax # 374760 0.00 : 79e33: 48 89 05 1e a9 2f 00 mov %rax,0x2fa91e(%rip) # 374758 0.00 : 79e3a: 76 07 jbe 79e43 <_int_malloc+0x1023> 0.00 : 79e3c: 48 89 05 1d a9 2f 00 mov %rax,0x2fa91d(%rip) # 374760 0.00 : 79e43: 4c 89 e3 mov %r12,%rbx 0.00 : 79e46: e9 cb fd ff ff jmpq 79c16 <_int_malloc+0xdf6> 0.00 : 79e4b: 48 8b 44 24 20 mov 0x20(%rsp),%rax 0.00 : 79e50: 41 bf 01 00 00 00 mov $0x1,%r15d 0.00 : 79e56: 4c 8b 68 58 mov 0x58(%rax),%r13 0.00 : 79e5a: 49 8b 55 08 mov 0x8(%r13),%rdx 0.00 : 79e5e: 49 89 d6 mov %rdx,%r14 0.00 : 79e61: 49 83 e6 f8 and $0xfffffffffffffff8,%r14 0.00 : 79e65: e9 f3 fb ff ff jmpq 79a5d <_int_malloc+0xc3d> 0.00 : 79e6a: 48 8b 54 24 28 mov 0x28(%rsp),%rdx 0.00 : 79e6f: 48 8b 05 b2 a8 2f 00 mov 0x2fa8b2(%rip),%rax # 374728 0.00 : 79e76: 48 8b 5c 24 40 mov 0x40(%rsp),%rbx 0.00 : 79e7b: 48 8d 44 02 20 lea 0x20(%rdx,%rax,1),%rax 0.00 : 79e80: 8b 15 1e a0 2f 00 mov 0x2fa01e(%rip),%edx # 373ea4 0.00 : 79e86: 48 89 c1 mov %rax,%rcx 0.00 : 79e89: 4c 29 f1 sub %r14,%rcx 0.00 : 79e8c: 83 e2 02 and $0x2,%edx 0.00 : 79e8f: 48 0f 44 c1 cmove %rcx,%rax 0.00 : 79e93: 48 8b 4c 24 40 mov 0x40(%rsp),%rcx 0.00 : 79e98: 48 8d 2c 18 lea (%rax,%rbx,1),%rbp 0.00 : 79e9c: 48 f7 d1 not %rcx 0.00 : 79e9f: 48 21 cd and %rcx,%rbp 0.00 : 79ea2: 48 89 4c 24 70 mov %rcx,0x70(%rsp) 0.00 : 79ea7: 48 85 ed test %rbp,%rbp 0.00 : 79eaa: 49 89 ec mov %rbp,%r12 0.00 : 79ead: 0f 8e 13 03 00 00 jle 7a1c6 <_int_malloc+0x13a6> 0.00 : 79eb3: 48 8b 05 c6 7e 2f 00 mov 0x2f7ec6(%rip),%rax # 371d80 <_DYNAMIC+0x220> 0.00 : 79eba: 48 89 ef mov %rbp,%rdi 0.00 : 79ebd: ff 10 callq *(%rax) 0.00 : 79ebf: 48 85 c0 test %rax,%rax 0.00 : 79ec2: 48 89 c3 mov %rax,%rbx 0.00 : 79ec5: 0f 84 f2 02 00 00 je 7a1bd <_int_malloc+0x139d> 0.00 : 79ecb: 48 8b 05 9e 7f 2f 00 mov 0x2f7f9e(%rip),%rax # 371e70 <_DYNAMIC+0x310> 0.00 : 79ed2: 48 8b 00 mov (%rax),%rax 0.00 : 79ed5: 48 85 c0 test %rax,%rax 0.00 : 79ed8: 74 02 je 79edc <_int_malloc+0x10bc> 0.00 : 79eda: ff d0 callq *%rax 0.00 : 79edc: 45 31 e4 xor %r12d,%r12d 0.00 : 79edf: 41 bf 01 00 00 00 mov $0x1,%r15d 0.00 : 79ee5: 48 83 3d 83 a8 2f 00 cmpq $0x0,0x2fa883(%rip) # 374770 0.00 : 79eec: 00 0.00 : 79eed: 75 07 jne 79ef6 <_int_malloc+0x10d6> 0.00 : 79eef: 48 89 1d 7a a8 2f 00 mov %rbx,0x2fa87a(%rip) # 374770 0.00 : 79ef6: 48 89 ea mov %rbp,%rdx 0.00 : 79ef9: 48 03 15 10 a8 2f 00 add 0x2fa810(%rip),%rdx # 374710 0.00 : 79f00: 45 84 ff test %r15b,%r15b 0.00 : 79f03: 48 89 15 06 a8 2f 00 mov %rdx,0x2fa806(%rip) # 374710 0.00 : 79f0a: 74 0b je 79f17 <_int_malloc+0x10f7> 0.00 : 79f0c: 48 39 5c 24 50 cmp %rbx,0x50(%rsp) 0.00 : 79f11: 0f 84 39 03 00 00 je 7a250 <_int_malloc+0x1430> 0.00 : 79f17: 8b 05 87 9f 2f 00 mov 0x2f9f87(%rip),%eax # 373ea4 0.00 : 79f1d: d1 e8 shr %eax 0.00 : 79f1f: 83 f0 01 xor $0x1,%eax 0.00 : 79f22: 83 e0 01 and $0x1,%eax 0.00 : 79f25: 80 7c 24 5f 00 cmpb $0x0,0x5f(%rsp) 0.00 : 79f2a: 0f 84 5c 01 00 00 je 7a08c <_int_malloc+0x126c> 0.00 : 79f30: 84 c0 test %al,%al 0.00 : 79f32: 0f 84 5c 01 00 00 je 7a094 <_int_malloc+0x1274> 0.00 : 79f38: 48 39 5c 24 50 cmp %rbx,0x50(%rsp) 0.00 : 79f3d: 0f 87 30 01 00 00 ja 7a073 <_int_malloc+0x1253> 0.00 : 79f43: 48 89 d8 mov %rbx,%rax 0.00 : 79f46: 48 2b 44 24 50 sub 0x50(%rsp),%rax 0.00 : 79f4b: 48 01 d0 add %rdx,%rax 0.00 : 79f4e: 48 89 05 bb a7 2f 00 mov %rax,0x2fa7bb(%rip) # 374710 0.00 : 79f55: 48 89 da mov %rbx,%rdx 0.00 : 79f58: 31 c0 xor %eax,%eax 0.00 : 79f5a: 48 89 5c 24 48 mov %rbx,0x48(%rsp) 0.00 : 79f5f: 83 e2 0f and $0xf,%edx 0.00 : 79f62: 74 11 je 79f75 <_int_malloc+0x1155> 0.00 : 79f64: b8 10 00 00 00 mov $0x10,%eax 0.00 : 79f69: 48 29 d0 sub %rdx,%rax 0.00 : 79f6c: 48 8d 0c 03 lea (%rbx,%rax,1),%rcx 0.00 : 79f70: 48 89 4c 24 48 mov %rcx,0x48(%rsp) 0.00 : 79f75: 4a 8d 14 30 lea (%rax,%r14,1),%rdx 0.00 : 79f79: 48 8d 04 2a lea (%rdx,%rbp,1),%rax 0.00 : 79f7d: 48 8d 04 03 lea (%rbx,%rax,1),%rax 0.00 : 79f81: 48 29 c2 sub %rax,%rdx 0.00 : 79f84: 48 03 44 24 40 add 0x40(%rsp),%rax 0.00 : 79f89: 48 23 44 24 70 and 0x70(%rsp),%rax 0.00 : 79f8e: 48 89 d3 mov %rdx,%rbx 0.00 : 79f91: 48 01 c3 add %rax,%rbx 0.00 : 79f94: 79 1f jns 79fb5 <_int_malloc+0x1195> 0.00 : 79f96: 48 8d 0d 96 1e 0c 00 lea 0xc1e96(%rip),%rcx # 13be33 <__func__.13350> 0.00 : 79f9d: 48 8d 35 9e 1b 0c 00 lea 0xc1b9e(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 79fa4: 48 8d 3d f2 1c 0c 00 lea 0xc1cf2(%rip),%rdi # 13bc9d <__PRETTY_FUNCTION__.14063+0x236> 0.00 : 79fab: ba f6 0c 00 00 mov $0xcf6,%edx 0.00 : 79fb0: e8 0b c8 ff ff callq 767c0 <__malloc_assert> 0.00 : 79fb5: 48 8b 2d c4 7d 2f 00 mov 0x2f7dc4(%rip),%rbp # 371d80 <_DYNAMIC+0x220> 0.00 : 79fbc: 48 89 df mov %rbx,%rdi 0.00 : 79fbf: ff 55 00 callq *0x0(%rbp) 0.00 : 79fc2: 48 85 c0 test %rax,%rax 0.00 : 79fc5: 49 89 c4 mov %rax,%r12 0.00 : 79fc8: 0f 84 8b 00 00 00 je 7a059 <_int_malloc+0x1239> 0.00 : 79fce: 48 8b 05 9b 7e 2f 00 mov 0x2f7e9b(%rip),%rax # 371e70 <_DYNAMIC+0x310> 0.00 : 79fd5: 48 8b 00 mov (%rax),%rax 0.00 : 79fd8: 48 85 c0 test %rax,%rax 0.00 : 79fdb: 74 02 je 79fdf <_int_malloc+0x11bf> 0.00 : 79fdd: ff d0 callq *%rax 0.00 : 79fdf: 48 89 da mov %rbx,%rdx 0.00 : 79fe2: 48 8b 44 24 48 mov 0x48(%rsp),%rax 0.00 : 79fe7: 48 8b 4c 24 48 mov 0x48(%rsp),%rcx 0.00 : 79fec: 48 89 05 05 9f 2f 00 mov %rax,0x2f9f05(%rip) # 373ef8 0.00 : 79ff3: 49 8d 04 1c lea (%r12,%rbx,1),%rax 0.00 : 79ff7: 48 2b 44 24 48 sub 0x48(%rsp),%rax 0.00 : 79ffc: 48 83 c8 01 or $0x1,%rax 0.00 : 7a000: 48 89 41 08 mov %rax,0x8(%rcx) 0.00 : 7a004: 48 01 15 05 a7 2f 00 add %rdx,0x2fa705(%rip) # 374710 0.00 : 7a00b: 80 7c 24 5f 00 cmpb $0x0,0x5f(%rsp) 0.00 : 7a010: 0f 84 84 fb ff ff je 79b9a <_int_malloc+0xd7a> 0.00 : 7a016: 49 8d 46 e0 lea -0x20(%r14),%rax 0.00 : 7a01a: 48 83 e0 f0 and $0xfffffffffffffff0,%rax 0.00 : 7a01e: 48 89 c2 mov %rax,%rdx 0.00 : 7a021: 48 83 ca 01 or $0x1,%rdx 0.00 : 7a025: 48 83 f8 1f cmp $0x1f,%rax 0.00 : 7a029: 49 89 55 08 mov %rdx,0x8(%r13) 0.00 : 7a02d: 49 c7 44 05 08 11 00 movq $0x11,0x8(%r13,%rax,1) 0.00 : 7a034: 00 00 0.00 : 7a036: 49 c7 44 05 18 11 00 movq $0x11,0x18(%r13,%rax,1) 0.00 : 7a03d: 00 00 0.00 : 7a03f: 0f 86 55 fb ff ff jbe 79b9a <_int_malloc+0xd7a> 0.00 : 7a045: 48 8d 3d 54 9e 2f 00 lea 0x2f9e54(%rip),%rdi # 373ea0 0.00 : 7a04c: 4c 89 ee mov %r13,%rsi 0.00 : 7a04f: e8 4c da ff ff callq 77aa0 <_int_free> 0.00 : 7a054: e9 41 fb ff ff jmpq 79b9a <_int_malloc+0xd7a> 0.00 : 7a059: 31 ff xor %edi,%edi 0.00 : 7a05b: ff 55 00 callq *0x0(%rbp) 0.00 : 7a05e: 49 89 c4 mov %rax,%r12 0.00 : 7a061: 4d 85 e4 test %r12,%r12 0.00 : 7a064: 0f 84 30 fb ff ff je 79b9a <_int_malloc+0xd7a> 0.00 : 7a06a: 31 db xor %ebx,%ebx 0.00 : 7a06c: 31 d2 xor %edx,%edx 0.00 : 7a06e: e9 6f ff ff ff jmpq 79fe2 <_int_malloc+0x11c2> 0.00 : 7a073: 48 8d 35 0e 58 0c 00 lea 0xc580e(%rip),%rsi # 13f888 <__PRETTY_FUNCTION__.11129+0x1eaf> 0.00 : 7a07a: 48 89 da mov %rbx,%rdx 0.00 : 7a07d: bf 03 00 00 00 mov $0x3,%edi 0.00 : 7a082: e8 d9 c4 ff ff callq 76560 0.00 : 7a087: e9 0e fb ff ff jmpq 79b9a <_int_malloc+0xd7a> 0.00 : 7a08c: 84 c0 test %al,%al 0.00 : 7a08e: 0f 85 c1 fe ff ff jne 79f55 <_int_malloc+0x1135> 0.00 : 7a094: f6 c3 0f test $0xf,%bl 0.00 : 7a097: 90 nop 0.00 : 7a098: 74 1f je 7a0b9 <_int_malloc+0x1299> 0.00 : 7a09a: 48 8d 0d 92 1d 0c 00 lea 0xc1d92(%rip),%rcx # 13be33 <__func__.13350> 0.00 : 7a0a1: 48 8d 35 9a 1a 0c 00 lea 0xc1a9a(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 7a0a8: 48 8d 3d 01 58 0c 00 lea 0xc5801(%rip),%rdi # 13f8b0 <__PRETTY_FUNCTION__.11129+0x1ed7> 0.00 : 7a0af: ba 11 0d 00 00 mov $0xd11,%edx 0.00 : 7a0b4: e8 07 c7 ff ff callq 767c0 <__malloc_assert> 0.00 : 7a0b9: 45 84 ff test %r15b,%r15b 0.00 : 7a0bc: 48 89 5c 24 48 mov %rbx,0x48(%rsp) 0.00 : 7a0c1: 74 9e je 7a061 <_int_malloc+0x1241> 0.00 : 7a0c3: 48 8b 05 b6 7c 2f 00 mov 0x2f7cb6(%rip),%rax # 371d80 <_DYNAMIC+0x220> 0.00 : 7a0ca: 31 ff xor %edi,%edi 0.00 : 7a0cc: ff 10 callq *(%rax) 0.00 : 7a0ce: 48 89 5c 24 48 mov %rbx,0x48(%rsp) 0.00 : 7a0d3: 49 89 c4 mov %rax,%r12 0.00 : 7a0d6: eb 89 jmp 7a061 <_int_malloc+0x1241> 0.00 : 7a0d8: 49 8b 47 20 mov 0x20(%r15),%rax 0.00 : 7a0dc: 48 85 c0 test %rax,%rax 0.00 : 7a0df: 0f 84 72 f6 ff ff je 79757 <_int_malloc+0x937> 0.00 : 7a0e5: 4c 3b 78 28 cmp 0x28(%rax),%r15 0.00 : 7a0e9: 74 1f je 7a10a <_int_malloc+0x12ea> 0.00 : 7a0eb: 48 8d 0d 35 1d 0c 00 lea 0xc1d35(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 7a0f2: 48 8d 35 49 1a 0c 00 lea 0xc1a49(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 7a0f9: 48 8d 3d c0 53 0c 00 lea 0xc53c0(%rip),%rdi # 13f4c0 <__PRETTY_FUNCTION__.11129+0x1ae7> 0.00 : 7a100: ba c9 11 00 00 mov $0x11c9,%edx 0.00 : 7a105: e8 b6 c6 ff ff callq 767c0 <__malloc_assert> 0.00 : 7a10a: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 7a10e: 48 3b 68 20 cmp 0x20(%rax),%rbp 0.00 : 7a112: 74 1f je 7a133 <_int_malloc+0x1313> 0.00 : 7a114: 48 8d 0d 0c 1d 0c 00 lea 0xc1d0c(%rip),%rcx # 13be27 <__func__.14106> 0.00 : 7a11b: 48 8d 35 20 1a 0c 00 lea 0xc1a20(%rip),%rsi # 13bb42 <__PRETTY_FUNCTION__.14063+0xdb> 0.00 : 7a122: 48 8d 3d c7 53 0c 00 lea 0xc53c7(%rip),%rdi # 13f4f0 <__PRETTY_FUNCTION__.11129+0x1b17> 0.00 : 7a129: ba c9 11 00 00 mov $0x11c9,%edx 0.00 : 7a12e: e8 8d c6 ff ff callq 767c0 <__malloc_assert> 0.00 : 7a133: 48 83 7b 20 00 cmpq $0x0,0x20(%rbx) 0.00 : 7a138: 74 37 je 7a171 <_int_malloc+0x1351> 0.00 : 7a13a: 48 8b 55 20 mov 0x20(%rbp),%rdx 0.00 : 7a13e: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 7a142: 48 89 42 28 mov %rax,0x28(%rdx) 0.00 : 7a146: 48 8b 55 28 mov 0x28(%rbp),%rdx 0.00 : 7a14a: 48 8b 45 20 mov 0x20(%rbp),%rax 0.00 : 7a14e: 48 89 42 20 mov %rax,0x20(%rdx) 0.00 : 7a152: e9 00 f6 ff ff jmpq 79757 <_int_malloc+0x937> 0.00 : 7a157: 8b 3d ab 7f 2f 00 mov 0x2f7fab(%rip),%edi # 372108 0.00 : 7a15d: 48 8d 35 c1 19 0c 00 lea 0xc19c1(%rip),%rsi # 13bb25 <__PRETTY_FUNCTION__.14063+0xbe> 0.00 : 7a164: 4c 89 fa mov %r15,%rdx 0.00 : 7a167: e8 f4 c3 ff ff callq 76560 0.00 : 7a16c: e9 e6 f5 ff ff jmpq 79757 <_int_malloc+0x937> 0.00 : 7a171: 48 8b 45 20 mov 0x20(%rbp),%rax 0.00 : 7a175: 48 39 c5 cmp %rax,%rbp 0.00 : 7a178: 74 36 je 7a1b0 <_int_malloc+0x1390> 0.00 : 7a17a: 48 89 43 20 mov %rax,0x20(%rbx) 0.00 : 7a17e: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 7a182: 48 89 43 28 mov %rax,0x28(%rbx) 0.00 : 7a186: 48 8b 45 20 mov 0x20(%rbp),%rax 0.00 : 7a18a: 48 89 58 28 mov %rbx,0x28(%rax) 0.00 : 7a18e: 48 8b 45 28 mov 0x28(%rbp),%rax 0.00 : 7a192: 48 89 58 20 mov %rbx,0x20(%rax) 0.00 : 7a196: e9 bc f5 ff ff jmpq 79757 <_int_malloc+0x937> 0.00 : 7a19b: 49 8b 5f 10 mov 0x10(%r15),%rbx 0.00 : 7a19f: e9 7a f5 ff ff jmpq 7971e <_int_malloc+0x8fe> 0.00 : 7a1a4: 48 8b 58 10 mov 0x10(%rax),%rbx 0.00 : 7a1a8: 49 89 c7 mov %rax,%r15 0.00 : 7a1ab: e9 6e f5 ff ff jmpq 7971e <_int_malloc+0x8fe> 0.00 : 7a1b0: 48 89 5b 28 mov %rbx,0x28(%rbx) 0.00 : 7a1b4: 48 89 5b 20 mov %rbx,0x20(%rbx) 0.00 : 7a1b8: e9 9a f5 ff ff jmpq 79757 <_int_malloc+0x937> 0.00 : 7a1bd: 8b 15 e1 9c 2f 00 mov 0x2f9ce1(%rip),%edx # 373ea4 0.00 : 7a1c3: 83 e2 02 and $0x2,%edx 0.00 : 7a1c6: 85 d2 test %edx,%edx 0.00 : 7a1c8: 75 12 jne 7a1dc <_int_malloc+0x13bc> 0.00 : 7a1ca: 48 8b 54 24 40 mov 0x40(%rsp),%rdx 0.00 : 7a1cf: 49 8d 04 16 lea (%r14,%rdx,1),%rax 0.00 : 7a1d3: 4c 8d 24 28 lea (%rax,%rbp,1),%r12 0.00 : 7a1d7: 4c 23 64 24 70 and 0x70(%rsp),%r12 0.00 : 7a1dc: 49 81 fc ff ff 0f 00 cmp $0xfffff,%r12 0.00 : 7a1e3: bd 00 00 10 00 mov $0x100000,%ebp 0.00 : 7a1e8: 49 0f 47 ec cmova %r12,%rbp 0.00 : 7a1ec: 48 39 6c 24 28 cmp %rbp,0x28(%rsp) 0.00 : 7a1f1: 0f 83 a3 f9 ff ff jae 79b9a <_int_malloc+0xd7a> 0.00 : 7a1f7: 45 31 c9 xor %r9d,%r9d 0.00 : 7a1fa: 31 ff xor %edi,%edi 0.00 : 7a1fc: 41 b8 ff ff ff ff mov $0xffffffff,%r8d 0.00 : 7a202: b9 22 00 00 00 mov $0x22,%ecx 0.00 : 7a207: ba 03 00 00 00 mov $0x3,%edx 0.00 : 7a20c: 48 89 ee mov %rbp,%rsi 0.00 : 7a20f: e8 3c da 05 00 callq d7c50 0.00 : 7a214: 48 83 f8 ff cmp $0xffffffffffffffff,%rax 0.00 : 7a218: 48 89 c3 mov %rax,%rbx 0.00 : 7a21b: 0f 84 79 f9 ff ff je 79b9a <_int_malloc+0xd7a> 0.00 : 7a221: 83 0d 7c 9c 2f 00 02 orl $0x2,0x2f9c7c(%rip) # 373ea4 0.00 : 7a228: 48 85 c0 test %rax,%rax 0.00 : 7a22b: 0f 84 69 f9 ff ff je 79b9a <_int_malloc+0xd7a> 0.00 : 7a231: 49 89 c4 mov %rax,%r12 0.00 : 7a234: 49 01 ec add %rbp,%r12 0.00 : 7a237: 41 0f 94 c7 sete %r15b 0.00 : 7a23b: e9 a5 fc ff ff jmpq 79ee5 <_int_malloc+0x10c5> 0.00 : 7a240: 80 7c 24 5f 00 cmpb $0x0,0x5f(%rsp) 0.00 : 7a245: 0f 84 8b f8 ff ff je 79ad6 <_int_malloc+0xcb6> 0.00 : 7a24b: e9 2a f8 ff ff jmpq 79a7a <_int_malloc+0xc5a> 0.00 : 7a250: 4a 8d 44 35 00 lea 0x0(%rbp,%r14,1),%rax 0.00 : 7a255: 48 83 c8 01 or $0x1,%rax 0.00 : 7a259: 49 89 45 08 mov %rax,0x8(%r13) 0.00 : 7a25d: e9 38 f9 ff ff jmpq 79b9a <_int_malloc+0xd7a> Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000001129c0 <_dl_addr>: 0.00 : 1129c0: 41 57 push %r15 0.00 : 1129c2: 49 89 f7 mov %rsi,%r15 0.00 : 1129c5: 41 56 push %r14 0.00 : 1129c7: 41 55 push %r13 0.00 : 1129c9: 41 54 push %r12 0.00 : 1129cb: 55 push %rbp 0.00 : 1129cc: 48 89 fd mov %rdi,%rbp 0.00 : 1129cf: 53 push %rbx 0.00 : 1129d0: 48 83 ec 28 sub $0x28,%rsp 0.00 : 1129d4: 48 8b 05 dd f3 25 00 mov 0x25f3dd(%rip),%rax # 371db8 <_DYNAMIC+0x258> 0.00 : 1129db: 48 89 54 24 10 mov %rdx,0x10(%rsp) 0.00 : 1129e0: 48 89 4c 24 08 mov %rcx,0x8(%rsp) 0.00 : 1129e5: 48 8d b8 08 09 00 00 lea 0x908(%rax),%rdi 0.00 : 1129ec: ff 90 e0 0e 00 00 callq *0xee0(%rax) 0.00 : 1129f2: 48 8b 05 bf f3 25 00 mov 0x25f3bf(%rip),%rax # 371db8 <_DYNAMIC+0x258> 0.00 : 1129f9: 48 83 b8 00 09 00 00 cmpq $0x0,0x900(%rax) 0.00 : 112a00: 00 0.00 : 112a01: 74 63 je 112a66 <_dl_addr+0xa6> 0.00 : 112a03: 49 89 c4 mov %rax,%r12 0.00 : 112a06: 45 31 ed xor %r13d,%r13d 0.00 : 112a09: 49 8b 1c 24 mov (%r12),%rbx 0.00 : 112a0d: 48 85 db test %rbx,%rbx 0.00 : 112a10: 74 39 je 112a4b <_dl_addr+0x8b> 0.00 : 112a12: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 112a18: 48 3b ab 40 03 00 00 cmp 0x340(%rbx),%rbp 0.00 : 112a1f: 72 21 jb 112a42 <_dl_addr+0x82> 0.00 : 112a21: 48 3b ab 48 03 00 00 cmp 0x348(%rbx),%rbp 0.00 : 112a28: 73 18 jae 112a42 <_dl_addr+0x82> 0.00 : 112a2a: f6 83 15 03 00 00 40 testb $0x40,0x315(%rbx) 0.00 : 112a31: 75 3d jne 112a70 <_dl_addr+0xb0> 0.00 : 112a33: 48 89 ee mov %rbp,%rsi 0.00 : 112a36: 48 89 df mov %rbx,%rdi 0.00 : 112a39: e8 12 ff ff ff callq 112950 <_dl_addr_inside_object> 0.00 : 112a3e: 85 c0 test %eax,%eax 0.00 : 112a40: 75 2e jne 112a70 <_dl_addr+0xb0> 0.00 : 112a42: 48 8b 5b 18 mov 0x18(%rbx),%rbx 0.00 : 112a46: 48 85 db test %rbx,%rbx 0.00 : 112a49: 75 cd jne 112a18 <_dl_addr+0x58> 0.00 : 112a4b: 48 8b 05 66 f3 25 00 mov 0x25f366(%rip),%rax # 371db8 <_DYNAMIC+0x258> 0.00 : 112a52: 49 83 c5 01 add $0x1,%r13 0.00 : 112a56: 49 81 c4 90 00 00 00 add $0x90,%r12 0.00 : 112a5d: 4c 39 a8 00 09 00 00 cmp %r13,0x900(%rax) 0.00 : 112a64: 77 a3 ja 112a09 <_dl_addr+0x49> 0.00 : 112a66: 31 db xor %ebx,%ebx 0.00 : 112a68: e9 77 01 00 00 jmpq 112be4 <_dl_addr+0x224> 0.00 : 112a6d: 0f 1f 00 nopl (%rax) 0.00 : 112a70: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 112a74: 49 89 07 mov %rax,(%r15) 0.00 : 112a77: 48 8b 83 40 03 00 00 mov 0x340(%rbx),%rax 0.00 : 112a7e: 49 89 47 08 mov %rax,0x8(%r15) 0.00 : 112a82: 48 8b 43 08 mov 0x8(%rbx),%rax 0.00 : 112a86: 80 38 00 cmpb $0x0,(%rax) 0.00 : 112a89: 0f 84 7a 01 00 00 je 112c09 <_dl_addr+0x249> 0.00 : 112a8f: 48 8b 43 70 mov 0x70(%rbx),%rax 0.00 : 112a93: 4c 8b 60 08 mov 0x8(%rax),%r12 0.00 : 112a97: 48 8b 43 68 mov 0x68(%rbx),%rax 0.00 : 112a9b: 48 8b 40 08 mov 0x8(%rax),%rax 0.00 : 112a9f: 48 89 44 24 20 mov %rax,0x20(%rsp) 0.00 : 112aa4: 48 8b 83 90 00 00 00 mov 0x90(%rbx),%rax 0.00 : 112aab: 8b 40 08 mov 0x8(%rax),%eax 0.00 : 112aae: 89 44 24 1c mov %eax,0x1c(%rsp) 0.00 : 112ab2: 48 83 bb 98 02 00 00 cmpq $0x0,0x298(%rbx) 0.00 : 112ab9: 00 0.00 : 112aba: 0f 84 6b 01 00 00 je 112c2b <_dl_addr+0x26b> 0.00 : 112ac0: 44 8b ab ec 02 00 00 mov 0x2ec(%rbx),%r13d 0.00 : 112ac7: 45 85 ed test %r13d,%r13d 0.00 : 112aca: 0f 84 c9 00 00 00 je 112b99 <_dl_addr+0x1d9> 0.00 : 112ad0: 4c 8b b3 00 03 00 00 mov 0x300(%rbx),%r14 0.00 : 112ad7: 45 31 c9 xor %r9d,%r9d 0.00 : 112ada: 45 31 db xor %r11d,%r11d 0.00 : 112add: 0f 1f 00 nopl (%rax) 0.00 : 112ae0: 47 8b 04 9e mov (%r14,%r11,4),%r8d 0.00 : 112ae4: 4c 89 ca mov %r9,%rdx 0.00 : 112ae7: 45 85 c0 test %r8d,%r8d 0.00 : 112aea: 0f 84 98 00 00 00 je 112b88 <_dl_addr+0x1c8> 0.00 : 112af0: 44 89 c0 mov %r8d,%eax 0.00 : 112af3: 48 8d 3c 85 00 00 00 lea 0x0(,%rax,4),%rdi 0.00 : 112afa: 00 0.00 : 112afb: 48 03 bb 08 03 00 00 add 0x308(%rbx),%rdi 0.00 : 112b02: eb 12 jmp 112b16 <_dl_addr+0x156> 0.00 : 112b04: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 112b08: 41 83 c0 01 add $0x1,%r8d 0.00 : 112b0c: 48 83 c7 04 add $0x4,%rdi 0.00 : 112b10: 49 89 d1 mov %rdx,%r9 0.00 : 112b13: 44 89 c0 mov %r8d,%eax 0.00 : 112b16: 48 8d 04 40 lea (%rax,%rax,2),%rax 0.00 : 112b1a: 49 8d 14 c4 lea (%r12,%rax,8),%rdx 0.00 : 112b1e: 0f b7 72 06 movzwl 0x6(%rdx),%esi 0.00 : 112b22: 66 85 f6 test %si,%si 0.00 : 112b25: 75 07 jne 112b2e <_dl_addr+0x16e> 0.00 : 112b27: 48 83 7a 08 00 cmpq $0x0,0x8(%rdx) 0.00 : 112b2c: 74 52 je 112b80 <_dl_addr+0x1c0> 100.00 : 112b2e: 0f b6 42 04 movzbl 0x4(%rdx),%eax 0.00 : 112b32: 83 e0 0f and $0xf,%eax 0.00 : 112b35: 83 f8 06 cmp $0x6,%eax 0.00 : 112b38: 74 46 je 112b80 <_dl_addr+0x1c0> 0.00 : 112b3a: 4c 8b 52 08 mov 0x8(%rdx),%r10 0.00 : 112b3e: 4c 89 d1 mov %r10,%rcx 0.00 : 112b41: 48 03 0b add (%rbx),%rcx 0.00 : 112b44: 48 39 cd cmp %rcx,%rbp 0.00 : 112b47: 72 37 jb 112b80 <_dl_addr+0x1c0> 0.00 : 112b49: 66 85 f6 test %si,%si 0.00 : 112b4c: 74 09 je 112b57 <_dl_addr+0x197> 0.00 : 112b4e: 48 8b 42 10 mov 0x10(%rdx),%rax 0.00 : 112b52: 48 85 c0 test %rax,%rax 0.00 : 112b55: 75 09 jne 112b60 <_dl_addr+0x1a0> 0.00 : 112b57: 48 39 cd cmp %rcx,%rbp 0.00 : 112b5a: 74 0c je 112b68 <_dl_addr+0x1a8> 0.00 : 112b5c: 48 8b 42 10 mov 0x10(%rdx),%rax 0.00 : 112b60: 48 01 c8 add %rcx,%rax 0.00 : 112b63: 48 39 c5 cmp %rax,%rbp 0.00 : 112b66: 73 18 jae 112b80 <_dl_addr+0x1c0> 0.00 : 112b68: 4d 85 c9 test %r9,%r9 0.00 : 112b6b: 74 06 je 112b73 <_dl_addr+0x1b3> 0.00 : 112b6d: 4d 3b 51 08 cmp 0x8(%r9),%r10 0.00 : 112b71: 76 0d jbe 112b80 <_dl_addr+0x1c0> 0.00 : 112b73: 8b 44 24 1c mov 0x1c(%rsp),%eax 0.00 : 112b77: 3b 02 cmp (%rdx),%eax 0.00 : 112b79: 77 08 ja 112b83 <_dl_addr+0x1c3> 0.00 : 112b7b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 112b80: 4c 89 ca mov %r9,%rdx 0.00 : 112b83: f6 07 01 testb $0x1,(%rdi) 0.00 : 112b86: 74 80 je 112b08 <_dl_addr+0x148> 0.00 : 112b88: 49 83 c3 01 add $0x1,%r11 0.00 : 112b8c: 45 39 dd cmp %r11d,%r13d 0.00 : 112b8f: 76 0f jbe 112ba0 <_dl_addr+0x1e0> 0.00 : 112b91: 49 89 d1 mov %rdx,%r9 0.00 : 112b94: e9 47 ff ff ff jmpq 112ae0 <_dl_addr+0x120> 0.00 : 112b99: 31 d2 xor %edx,%edx 0.00 : 112b9b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 112ba0: 48 83 7c 24 10 00 cmpq $0x0,0x10(%rsp) 0.00 : 112ba6: 74 08 je 112bb0 <_dl_addr+0x1f0> 0.00 : 112ba8: 48 8b 44 24 10 mov 0x10(%rsp),%rax 0.00 : 112bad: 48 89 18 mov %rbx,(%rax) 0.00 : 112bb0: 48 83 7c 24 08 00 cmpq $0x0,0x8(%rsp) 0.00 : 112bb6: 74 08 je 112bc0 <_dl_addr+0x200> 0.00 : 112bb8: 48 8b 44 24 08 mov 0x8(%rsp),%rax 0.00 : 112bbd: 48 89 10 mov %rdx,(%rax) 0.00 : 112bc0: 48 85 d2 test %rdx,%rdx 0.00 : 112bc3: 0f 84 1f 01 00 00 je 112ce8 <_dl_addr+0x328> 0.00 : 112bc9: 8b 02 mov (%rdx),%eax 0.00 : 112bcb: 48 03 44 24 20 add 0x20(%rsp),%rax 0.00 : 112bd0: 49 89 47 10 mov %rax,0x10(%r15) 0.00 : 112bd4: 48 8b 42 08 mov 0x8(%rdx),%rax 0.00 : 112bd8: 48 03 03 add (%rbx),%rax 0.00 : 112bdb: bb 01 00 00 00 mov $0x1,%ebx 0.00 : 112be0: 49 89 47 18 mov %rax,0x18(%r15) 0.00 : 112be4: 48 8b 05 cd f1 25 00 mov 0x25f1cd(%rip),%rax # 371db8 <_DYNAMIC+0x258> 0.00 : 112beb: 48 8d b8 08 09 00 00 lea 0x908(%rax),%rdi 0.00 : 112bf2: ff 90 e8 0e 00 00 callq *0xee8(%rax) 0.00 : 112bf8: 48 83 c4 28 add $0x28,%rsp 0.00 : 112bfc: 89 d8 mov %ebx,%eax 0.00 : 112bfe: 5b pop %rbx 0.00 : 112bff: 5d pop %rbp 0.00 : 112c00: 41 5c pop %r12 0.00 : 112c02: 41 5d pop %r13 0.00 : 112c04: 41 5e pop %r14 0.00 : 112c06: 41 5f pop %r15 0.00 : 112c08: c3 retq 0.00 : 112c09: f6 83 14 03 00 00 03 testb $0x3,0x314(%rbx) 0.00 : 112c10: 0f 85 79 fe ff ff jne 112a8f <_dl_addr+0xcf> 0.00 : 112c16: 48 8b 05 b3 f3 25 00 mov 0x25f3b3(%rip),%rax # 371fd0 <_DYNAMIC+0x470> 0.00 : 112c1d: 48 8b 00 mov (%rax),%rax 0.00 : 112c20: 48 8b 00 mov (%rax),%rax 0.00 : 112c23: 49 89 07 mov %rax,(%r15) 0.00 : 112c26: e9 64 fe ff ff jmpq 112a8f <_dl_addr+0xcf> 0.00 : 112c2b: 48 8b 43 60 mov 0x60(%rbx),%rax 0.00 : 112c2f: 48 8b 74 24 20 mov 0x20(%rsp),%rsi 0.00 : 112c34: 48 85 c0 test %rax,%rax 0.00 : 112c37: 74 0f je 112c48 <_dl_addr+0x288> 0.00 : 112c39: 48 8b 40 08 mov 0x8(%rax),%rax 0.00 : 112c3d: 8b 40 04 mov 0x4(%rax),%eax 0.00 : 112c40: 48 8d 04 40 lea (%rax,%rax,2),%rax 0.00 : 112c44: 49 8d 34 c4 lea (%r12,%rax,8),%rsi 0.00 : 112c48: 31 d2 xor %edx,%edx 0.00 : 112c4a: 49 39 f4 cmp %rsi,%r12 0.00 : 112c4d: 72 16 jb 112c65 <_dl_addr+0x2a5> 0.00 : 112c4f: e9 45 ff ff ff jmpq 112b99 <_dl_addr+0x1d9> 0.00 : 112c54: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 112c58: 49 83 c4 18 add $0x18,%r12 0.00 : 112c5c: 49 39 f4 cmp %rsi,%r12 0.00 : 112c5f: 0f 83 3b ff ff ff jae 112ba0 <_dl_addr+0x1e0> 0.00 : 112c65: 41 0f b6 4c 24 04 movzbl 0x4(%r12),%ecx 0.00 : 112c6b: 89 c8 mov %ecx,%eax 0.00 : 112c6d: c0 e8 04 shr $0x4,%al 0.00 : 112c70: 83 e8 01 sub $0x1,%eax 0.00 : 112c73: 3c 01 cmp $0x1,%al 0.00 : 112c75: 77 e1 ja 112c58 <_dl_addr+0x298> 0.00 : 112c77: 89 c8 mov %ecx,%eax 0.00 : 112c79: 83 e0 0f and $0xf,%eax 0.00 : 112c7c: 83 f8 06 cmp $0x6,%eax 0.00 : 112c7f: 74 d7 je 112c58 <_dl_addr+0x298> 0.00 : 112c81: 41 0f b7 44 24 06 movzwl 0x6(%r12),%eax 0.00 : 112c87: 66 85 c0 test %ax,%ax 0.00 : 112c8a: 74 4c je 112cd8 <_dl_addr+0x318> 0.00 : 112c8c: 49 8b 7c 24 08 mov 0x8(%r12),%rdi 0.00 : 112c91: 48 89 f9 mov %rdi,%rcx 0.00 : 112c94: 48 03 0b add (%rbx),%rcx 0.00 : 112c97: 48 39 cd cmp %rcx,%rbp 0.00 : 112c9a: 72 bc jb 112c58 <_dl_addr+0x298> 0.00 : 112c9c: 66 85 c0 test %ax,%ax 0.00 : 112c9f: 74 2b je 112ccc <_dl_addr+0x30c> 0.00 : 112ca1: 49 8b 44 24 10 mov 0x10(%r12),%rax 0.00 : 112ca6: 48 85 c0 test %rax,%rax 0.00 : 112ca9: 74 21 je 112ccc <_dl_addr+0x30c> 0.00 : 112cab: 48 01 c8 add %rcx,%rax 0.00 : 112cae: 48 39 c5 cmp %rax,%rbp 0.00 : 112cb1: 73 a5 jae 112c58 <_dl_addr+0x298> 0.00 : 112cb3: 48 85 d2 test %rdx,%rdx 0.00 : 112cb6: 74 06 je 112cbe <_dl_addr+0x2fe> 0.00 : 112cb8: 48 39 7a 08 cmp %rdi,0x8(%rdx) 0.00 : 112cbc: 73 9a jae 112c58 <_dl_addr+0x298> 0.00 : 112cbe: 8b 44 24 1c mov 0x1c(%rsp),%eax 0.00 : 112cc2: 41 3b 04 24 cmp (%r12),%eax 0.00 : 112cc6: 49 0f 47 d4 cmova %r12,%rdx 0.00 : 112cca: eb 8c jmp 112c58 <_dl_addr+0x298> 0.00 : 112ccc: 48 39 cd cmp %rcx,%rbp 0.00 : 112ccf: 74 e2 je 112cb3 <_dl_addr+0x2f3> 0.00 : 112cd1: 49 8b 44 24 10 mov 0x10(%r12),%rax 0.00 : 112cd6: eb d3 jmp 112cab <_dl_addr+0x2eb> 0.00 : 112cd8: 49 8b 7c 24 08 mov 0x8(%r12),%rdi 0.00 : 112cdd: 48 85 ff test %rdi,%rdi 0.00 : 112ce0: 0f 84 72 ff ff ff je 112c58 <_dl_addr+0x298> 0.00 : 112ce6: eb a9 jmp 112c91 <_dl_addr+0x2d1> 0.00 : 112ce8: 49 c7 47 10 00 00 00 movq $0x0,0x10(%r15) 0.00 : 112cef: 00 0.00 : 112cf0: 49 c7 47 18 00 00 00 movq $0x0,0x18(%r15) 0.00 : 112cf7: 00 0.00 : 112cf8: bb 01 00 00 00 mov $0x1,%ebx 0.00 : 112cfd: e9 e2 fe ff ff jmpq 112be4 <_dl_addr+0x224> Sorted summary for file /bin/bash ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /bin/bash ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000043aab0 : 0.00 : 43aab0: 41 57 push %r15 0.00 : 43aab2: 41 56 push %r14 0.00 : 43aab4: 41 55 push %r13 0.00 : 43aab6: 41 54 push %r12 0.00 : 43aab8: 55 push %rbp 0.00 : 43aab9: 48 89 fd mov %rdi,%rbp 0.00 : 43aabc: 53 push %rbx 0.00 : 43aabd: 48 83 ec 18 sub $0x18,%rsp 0.00 : 43aac1: 80 3f 00 cmpb $0x0,(%rdi) 0.00 : 43aac4: 0f 84 d6 00 00 00 je 43aba0 0.00 : 43aaca: 48 c7 04 24 00 00 00 movq $0x0,(%rsp) 0.00 : 43aad1: 00 0.00 : 43aad2: e8 19 b9 fd ff callq 4163f0 0.00 : 43aad7: 4c 8d 64 05 00 lea 0x0(%rbp,%rax,1),%r12 0.00 : 43aadc: 48 8d 7c 00 01 lea 0x1(%rax,%rax,1),%rdi 0.00 : 43aae1: e8 da d7 01 00 callq 4582c0 0.00 : 43aae6: 4c 39 e5 cmp %r12,%rbp 0.00 : 43aae9: 49 89 c6 mov %rax,%r14 0.00 : 43aaec: 48 89 c3 mov %rax,%rbx 0.00 : 43aaef: 73 6b jae 43ab5c 0.00 : 43aaf1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 43aaf8: c6 03 01 movb $0x1,(%rbx) 0.00 : 43aafb: 48 83 c3 01 add $0x1,%rbx 0.00 : 43aaff: e8 5c b9 fd ff callq 416460 <__ctype_get_mb_cur_max@plt> 0.00 : 43ab04: 48 83 f8 01 cmp $0x1,%rax 0.00 : 43ab08: 76 6e jbe 43ab78 0.00 : 43ab0a: 4c 89 e2 mov %r12,%rdx 0.00 : 43ab0d: 48 89 e1 mov %rsp,%rcx 0.00 : 43ab10: 31 ff xor %edi,%edi 0.00 : 43ab12: 48 29 ea sub %rbp,%rdx 0.00 : 43ab15: 48 89 ee mov %rbp,%rsi 0.00 : 43ab18: 4c 8b 2c 24 mov (%rsp),%r13 0.00 : 43ab1c: e8 2f b3 fd ff callq 415e50 0.00 : 43ab21: 48 89 c1 mov %rax,%rcx 0.00 : 43ab24: 48 8d 40 02 lea 0x2(%rax),%rax 0.00 : 43ab28: 48 83 f8 01 cmp $0x1,%rax 0.00 : 43ab2c: 76 6a jbe 43ab98 100.00 : 43ab2e: 48 85 c9 test %rcx,%rcx 0.00 : 43ab31: 75 05 jne 43ab38 0.00 : 43ab33: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 43ab38: 31 d2 xor %edx,%edx 0.00 : 43ab3a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 43ab40: 0f b6 45 00 movzbl 0x0(%rbp),%eax 0.00 : 43ab44: 48 83 c2 01 add $0x1,%rdx 0.00 : 43ab48: 48 83 c5 01 add $0x1,%rbp 0.00 : 43ab4c: 88 03 mov %al,(%rbx) 0.00 : 43ab4e: 48 83 c3 01 add $0x1,%rbx 0.00 : 43ab52: 48 39 d1 cmp %rdx,%rcx 0.00 : 43ab55: 77 e9 ja 43ab40 0.00 : 43ab57: 49 39 ec cmp %rbp,%r12 0.00 : 43ab5a: 77 9c ja 43aaf8 0.00 : 43ab5c: c6 03 00 movb $0x0,(%rbx) 0.00 : 43ab5f: 48 83 c4 18 add $0x18,%rsp 0.00 : 43ab63: 4c 89 f0 mov %r14,%rax 0.00 : 43ab66: 5b pop %rbx 0.00 : 43ab67: 5d pop %rbp 0.00 : 43ab68: 41 5c pop %r12 0.00 : 43ab6a: 41 5d pop %r13 0.00 : 43ab6c: 41 5e pop %r14 0.00 : 43ab6e: 41 5f pop %r15 0.00 : 43ab70: c3 retq 0.00 : 43ab71: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 43ab78: 0f b6 45 00 movzbl 0x0(%rbp),%eax 0.00 : 43ab7c: 48 83 c5 01 add $0x1,%rbp 0.00 : 43ab80: 88 03 mov %al,(%rbx) 0.00 : 43ab82: 48 83 c3 01 add $0x1,%rbx 0.00 : 43ab86: 49 39 ec cmp %rbp,%r12 0.00 : 43ab89: 0f 87 69 ff ff ff ja 43aaf8 0.00 : 43ab8f: eb cb jmp 43ab5c 0.00 : 43ab91: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 43ab98: 4c 89 2c 24 mov %r13,(%rsp) 0.00 : 43ab9c: eb 95 jmp 43ab33 0.00 : 43ab9e: 66 90 xchg %ax,%ax 0.00 : 43aba0: bf 02 00 00 00 mov $0x2,%edi 0.00 : 43aba5: 0f 1f 00 nopl (%rax) 0.00 : 43aba8: e8 13 d7 01 00 callq 4582c0 0.00 : 43abad: 49 89 c6 mov %rax,%r14 0.00 : 43abb0: c6 00 7f movb $0x7f,(%rax) 0.00 : 43abb3: c6 40 01 00 movb $0x0,0x1(%rax) 0.00 : 43abb7: eb a6 jmp 43ab5f Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/access/transam/xlog.c:7339 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000004cd4c0 : : /* : * We check shared state each time only until we leave recovery mode. We : * can't re-enter recovery, so there's no need to keep checking after the : * shared variable has once been seen false. : */ : if (!LocalRecoveryInProgress) 0.00 : 4cd4c0: 31 c0 xor %eax,%eax 0.00 : 4cd4c2: 80 3d 97 a9 69 00 00 cmpb $0x0,0x69a997(%rip) # b67e60 : * As a side-effect, we initialize the local TimeLineID and RedoRecPtr : * variables the first time we see that recovery is finished. : */ : bool : RecoveryInProgress(void) : { /home/Computational/mark/src/postgres-andres/src/backend/access/transam/xlog.c:7339 100.00 : 4cd4c9: 55 push %rbp 0.00 : 4cd4ca: 48 89 e5 mov %rsp,%rbp : /* : * We check shared state each time only until we leave recovery mode. We : * can't re-enter recovery, so there's no need to keep checking after the : * shared variable has once been seen false. : */ : if (!LocalRecoveryInProgress) 0.00 : 4cd4cd: 74 1f je 4cd4ee : { : /* : * use volatile pointer to make sure we make a fresh read of the : * shared variable. : */ : volatile XLogCtlData *xlogctl = XLogCtl; 0.00 : 4cd4cf: 48 8b 05 c2 bc 6a 00 mov 0x6abcc2(%rip),%rax # b79198 : : LocalRecoveryInProgress = xlogctl->SharedRecoveryInProgress; 0.00 : 4cd4d6: 0f b6 80 5c 05 00 00 movzbl 0x55c(%rax),%eax : * Initialize TimeLineID and RedoRecPtr when we discover that recovery : * is finished. InitPostgres() relies upon this behaviour to ensure : * that InitXLOGAccess() is called at backend startup. (If you change : * this, see also LocalSetXLogInsertAllowed.) : */ : if (!LocalRecoveryInProgress) 0.00 : 4cd4dd: 84 c0 test %al,%al : * use volatile pointer to make sure we make a fresh read of the : * shared variable. : */ : volatile XLogCtlData *xlogctl = XLogCtl; : : LocalRecoveryInProgress = xlogctl->SharedRecoveryInProgress; 0.00 : 4cd4df: 88 05 7b a9 69 00 mov %al,0x69a97b(%rip) # b67e60 : * Initialize TimeLineID and RedoRecPtr when we discover that recovery : * is finished. InitPostgres() relies upon this behaviour to ensure : * that InitXLOGAccess() is called at backend startup. (If you change : * this, see also LocalSetXLogInsertAllowed.) : */ : if (!LocalRecoveryInProgress) 0.00 : 4cd4e5: 74 09 je 4cd4f0 : * Note: We don't need a memory barrier when we're still in recovery. : * We might exit recovery immediately after return, so the caller : * can't rely on 'true' meaning that we're still in recovery anyway. : */ : : return LocalRecoveryInProgress; 0.00 : 4cd4e7: 0f b6 05 72 a9 69 00 movzbl 0x69a972(%rip),%eax # b67e60 : } : } 0.00 : 4cd4ee: c9 leaveq 0.00 : 4cd4ef: c3 retq : /* : * If we just exited recovery, make sure we read TimeLineID and : * RedoRecPtr after SharedRecoveryInProgress (for machines with : * weak memory ordering). : */ : pg_memory_barrier(); 0.00 : 4cd4f0: f0 83 04 24 00 lock addl $0x0,(%rsp) : InitXLOGAccess(); 0.00 : 4cd4f5: e8 a6 ff ff ff callq 4cd4a0 : * Note: We don't need a memory barrier when we're still in recovery. : * We might exit recovery immediately after return, so the caller : * can't rely on 'true' meaning that we're still in recovery anyway. : */ : : return LocalRecoveryInProgress; 0.00 : 4cd4fa: 0f b6 05 5f a9 69 00 movzbl 0x69a95f(%rip),%eax # b67e60 0.00 : 4cd501: eb eb jmp 4cd4ee Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/catalog/catalog.c:90 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000004e2de0 : : * but this function returns true only for toast relations of system : * catalogs. : */ : bool : IsCatalogRelation(Relation relation) : { /home/Computational/mark/src/postgres-andres/src/backend/catalog/catalog.c:90 100.00 : 4e2de0: 55 push %rbp : return IsCatalogClass(RelationGetRelid(relation), relation->rd_rel); 0.00 : 4e2de1: 48 8b 77 30 mov 0x30(%rdi),%rsi 0.00 : 4e2de5: 8b 7f 40 mov 0x40(%rdi),%edi : * but this function returns true only for toast relations of system : * catalogs. : */ : bool : IsCatalogRelation(Relation relation) : { 0.00 : 4e2de8: 48 89 e5 mov %rsp,%rbp : return IsCatalogClass(RelationGetRelid(relation), relation->rd_rel); : } 0.00 : 4e2deb: c9 leaveq : * catalogs. : */ : bool : IsCatalogRelation(Relation relation) : { : return IsCatalogClass(RelationGetRelid(relation), relation->rd_rel); 0.00 : 4e2dec: e9 bf ff ff ff jmpq 4e2db0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/catalog/namespace.c:2992 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000004ec980 : : * namespace? : */ : bool : isTempToastNamespace(Oid namespaceId) : { : if (OidIsValid(myTempToastNamespace) && myTempToastNamespace == namespaceId) 0.00 : 4ec980: 8b 15 4a cd 68 00 mov 0x68cd4a(%rip),%edx # b796d0 : * isTempToastNamespace - is the given namespace my temporary-toast-table : * namespace? : */ : bool : isTempToastNamespace(Oid namespaceId) : { 0.00 : 4ec986: 55 push %rbp : if (OidIsValid(myTempToastNamespace) && myTempToastNamespace == namespaceId) 0.00 : 4ec987: 31 c0 xor %eax,%eax : * isTempToastNamespace - is the given namespace my temporary-toast-table : * namespace? : */ : bool : isTempToastNamespace(Oid namespaceId) : { 0.00 : 4ec989: 48 89 e5 mov %rsp,%rbp : if (OidIsValid(myTempToastNamespace) && myTempToastNamespace == namespaceId) 0.00 : 4ec98c: 85 d2 test %edx,%edx 0.00 : 4ec98e: 74 05 je 4ec995 0.00 : 4ec990: 39 fa cmp %edi,%edx 0.00 : 4ec992: 0f 94 c0 sete %al : return true; : return false; : } /home/Computational/mark/src/postgres-andres/src/backend/catalog/namespace.c:2992 100.00 : 4ec995: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/postmaster/bgwriter.c:351 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000063d690 : : * This is invoked from AuxiliaryProcessMain, which has already created the : * basic execution environment, but not enabled signals yet. : */ : void : BackgroundWriterMain(void) : { 0.00 : 63d690: 55 push %rbp 0.00 : 63d691: 48 89 e5 mov %rsp,%rbp 0.00 : 63d694: 41 55 push %r13 0.00 : 63d696: 41 54 push %r12 0.00 : 63d698: 53 push %rbx 0.00 : 63d699: 48 81 ec e8 00 00 00 sub $0xe8,%rsp : * can signal any child processes too. (bgwriter probably never has any : * child processes, but for consistency we make all postmaster child : * processes do this.) : */ : #ifdef HAVE_SETSID : if (setsid() < 0) 0.00 : 63d6a0: e8 bb bd e2 ff callq 469460 0.00 : 63d6a5: 85 c0 test %eax,%eax 0.00 : 63d6a7: 0f 88 68 03 00 00 js 63da15 : * Properly accept or ignore signals the postmaster might send us. : * : * bgwriter doesn't participate in ProcSignal signalling, but a SIGUSR1 : * handler is still needed for latch wakeups. : */ : pqsignal(SIGHUP, BgSigHupHandler); /* set flag to read config file */ 0.00 : 63d6ad: be f0 da 63 00 mov $0x63daf0,%esi 0.00 : 63d6b2: bf 01 00 00 00 mov $0x1,%edi 0.00 : 63d6b7: e8 44 f4 16 00 callq 7acb00 : pqsignal(SIGINT, SIG_IGN); 0.00 : 63d6bc: be 01 00 00 00 mov $0x1,%esi 0.00 : 63d6c1: bf 02 00 00 00 mov $0x2,%edi 0.00 : 63d6c6: e8 35 f4 16 00 callq 7acb00 : pqsignal(SIGTERM, ReqShutdownHandler); /* shutdown */ 0.00 : 63d6cb: be a0 da 63 00 mov $0x63daa0,%esi 0.00 : 63d6d0: bf 0f 00 00 00 mov $0xf,%edi 0.00 : 63d6d5: e8 26 f4 16 00 callq 7acb00 : pqsignal(SIGQUIT, bg_quickdie); /* hard crash time */ 0.00 : 63d6da: be 70 da 63 00 mov $0x63da70,%esi 0.00 : 63d6df: bf 03 00 00 00 mov $0x3,%edi 0.00 : 63d6e4: e8 17 f4 16 00 callq 7acb00 : pqsignal(SIGALRM, SIG_IGN); 0.00 : 63d6e9: be 01 00 00 00 mov $0x1,%esi 0.00 : 63d6ee: bf 0e 00 00 00 mov $0xe,%edi 0.00 : 63d6f3: e8 08 f4 16 00 callq 7acb00 : pqsignal(SIGPIPE, SIG_IGN); 0.00 : 63d6f8: be 01 00 00 00 mov $0x1,%esi 0.00 : 63d6fd: bf 0d 00 00 00 mov $0xd,%edi 0.00 : 63d702: e8 f9 f3 16 00 callq 7acb00 : pqsignal(SIGUSR1, bgwriter_sigusr1_handler); 0.00 : 63d707: be 40 da 63 00 mov $0x63da40,%esi 0.00 : 63d70c: bf 0a 00 00 00 mov $0xa,%edi 0.00 : 63d711: e8 ea f3 16 00 callq 7acb00 : pqsignal(SIGUSR2, SIG_IGN); 0.00 : 63d716: be 01 00 00 00 mov $0x1,%esi 0.00 : 63d71b: bf 0c 00 00 00 mov $0xc,%edi 0.00 : 63d720: e8 db f3 16 00 callq 7acb00 : : /* : * Reset some signals that are accepted by postmaster but not here : */ : pqsignal(SIGCHLD, SIG_DFL); 0.00 : 63d725: 31 f6 xor %esi,%esi 0.00 : 63d727: bf 11 00 00 00 mov $0x11,%edi 0.00 : 63d72c: e8 cf f3 16 00 callq 7acb00 : pqsignal(SIGTTIN, SIG_DFL); 0.00 : 63d731: 31 f6 xor %esi,%esi 0.00 : 63d733: bf 15 00 00 00 mov $0x15,%edi 0.00 : 63d738: e8 c3 f3 16 00 callq 7acb00 : pqsignal(SIGTTOU, SIG_DFL); 0.00 : 63d73d: 31 f6 xor %esi,%esi 0.00 : 63d73f: bf 16 00 00 00 mov $0x16,%edi 0.00 : 63d744: e8 b7 f3 16 00 callq 7acb00 : pqsignal(SIGCONT, SIG_DFL); 0.00 : 63d749: 31 f6 xor %esi,%esi 0.00 : 63d74b: bf 12 00 00 00 mov $0x12,%edi 0.00 : 63d750: e8 ab f3 16 00 callq 7acb00 : pqsignal(SIGWINCH, SIG_DFL); 0.00 : 63d755: 31 f6 xor %esi,%esi 0.00 : 63d757: bf 1c 00 00 00 mov $0x1c,%edi 0.00 : 63d75c: e8 9f f3 16 00 callq 7acb00 : : /* We allow SIGQUIT (quickdie) at all times */ : sigdelset(&BlockSig, SIGQUIT); 0.00 : 63d761: be 03 00 00 00 mov $0x3,%esi 0.00 : 63d766: bf c0 f8 bb 00 mov $0xbbf8c0,%edi 0.00 : 63d76b: e8 70 c8 e2 ff callq 469fe0 : : /* : * Create a resource owner to keep track of our resources (currently only : * buffer pins). : */ : CurrentResourceOwner = ResourceOwnerCreate(NULL, "Background Writer"); 0.00 : 63d770: 31 ff xor %edi,%edi 0.00 : 63d772: be 47 e8 89 00 mov $0x89e847,%esi 0.00 : 63d777: e8 14 de 15 00 callq 79b590 0.00 : 63d77c: 48 89 05 3d d1 57 00 mov %rax,0x57d13d(%rip) # bba8c0 : : /* : * We just started, assume there has been either a shutdown or : * end-of-recovery snapshot. : */ : last_snapshot_ts = GetCurrentTimestamp(); 0.00 : 63d783: e8 e8 8b 10 00 callq 746370 : * Create a memory context that we will do all our work in. We do this so : * that we can reset the context during error recovery and thereby avoid : * possible memory leaks. Formerly this code just ran in : * TopMemoryContext, but resetting that would be a really bad idea. : */ : bgwriter_context = AllocSetContextCreate(TopMemoryContext, 0.00 : 63d788: 48 8b 3d d9 d0 57 00 mov 0x57d0d9(%rip),%rdi # bba868 0.00 : 63d78f: 41 b8 00 00 80 00 mov $0x800000,%r8d 0.00 : 63d795: b9 00 20 00 00 mov $0x2000,%ecx 0.00 : 63d79a: 31 d2 xor %edx,%edx 0.00 : 63d79c: be 47 e8 89 00 mov $0x89e847,%esi : : /* : * We just started, assume there has been either a shutdown or : * end-of-recovery snapshot. : */ : last_snapshot_ts = GetCurrentTimestamp(); 0.00 : 63d7a1: 48 89 05 60 e3 53 00 mov %rax,0x53e360(%rip) # b7bb08 : * Create a memory context that we will do all our work in. We do this so : * that we can reset the context during error recovery and thereby avoid : * possible memory leaks. Formerly this code just ran in : * TopMemoryContext, but resetting that would be a really bad idea. : */ : bgwriter_context = AllocSetContextCreate(TopMemoryContext, 0.00 : 63d7a8: e8 e3 a7 15 00 callq 797f90 : /* : * If an exception is encountered, processing resumes here. : * : * See notes in postgres.c about the design of this coding. : */ : if (sigsetjmp(local_sigjmp_buf, 1) != 0) 0.00 : 63d7ad: 48 8d bd 10 ff ff ff lea -0xf0(%rbp),%rdi 0.00 : 63d7b4: be 01 00 00 00 mov $0x1,%esi : * Create a memory context that we will do all our work in. We do this so : * that we can reset the context during error recovery and thereby avoid : * possible memory leaks. Formerly this code just ran in : * TopMemoryContext, but resetting that would be a really bad idea. : */ : bgwriter_context = AllocSetContextCreate(TopMemoryContext, 0.00 : 63d7b9: 48 89 85 08 ff ff ff mov %rax,-0xf8(%rbp) : STATIC_IF_INLINE MemoryContext : MemoryContextSwitchTo(MemoryContext context) : { : MemoryContext old = CurrentMemoryContext; : : CurrentMemoryContext = context; 0.00 : 63d7c0: 48 89 05 99 d0 57 00 mov %rax,0x57d099(%rip) # bba860 : /* : * If an exception is encountered, processing resumes here. : * : * See notes in postgres.c about the design of this coding. : */ : if (sigsetjmp(local_sigjmp_buf, 1) != 0) 0.00 : 63d7c7: e8 84 c8 e2 ff callq 46a050 <__sigsetjmp@plt> 0.00 : 63d7cc: 85 c0 test %eax,%eax 0.00 : 63d7ce: 0f 85 a4 01 00 00 jne 63d978 : */ : smgrcloseall(); : } : : /* We can now handle ereport(ERROR) */ : PG_exception_stack = &local_sigjmp_buf; 0.00 : 63d7d4: 48 8d 85 10 ff ff ff lea -0xf0(%rbp),%rax : : /* : * Unblock signals (they were blocked when the postmaster forked us) : */ : PG_SETMASK(&UnBlockSig); 0.00 : 63d7db: 31 d2 xor %edx,%edx 0.00 : 63d7dd: be 40 f8 bb 00 mov $0xbbf840,%esi 0.00 : 63d7e2: bf 02 00 00 00 mov $0x2,%edi 0.00 : 63d7e7: 45 31 ed xor %r13d,%r13d : */ : smgrcloseall(); : } : : /* We can now handle ereport(ERROR) */ : PG_exception_stack = &local_sigjmp_buf; 0.00 : 63d7ea: 48 89 05 57 be 57 00 mov %rax,0x57be57(%rip) # bb9648 : : /* : * Unblock signals (they were blocked when the postmaster forked us) : */ : PG_SETMASK(&UnBlockSig); 0.00 : 63d7f1: e8 ca c2 e2 ff callq 469ac0 0.00 : 63d7f6: eb 75 jmp 63d86d 0.00 : 63d7f8: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 63d7ff: 00 : if (got_SIGHUP) : { : got_SIGHUP = false; : ProcessConfigFile(PGC_SIGHUP); : } : if (shutdown_requested) 0.00 : 63d800: 8b 05 f6 e2 53 00 mov 0x53e2f6(%rip),%eax # b7bafc 0.00 : 63d806: 85 c0 test %eax,%eax 0.00 : 63d808: 0f 85 9f 00 00 00 jne 63d8ad : } : : /* : * Do one cycle of dirty-buffer writing. : */ : can_hibernate = BgBufferSync(); 0.00 : 63d80e: e8 dd 7e 03 00 callq 6756f0 0.00 : 63d813: 41 89 c4 mov %eax,%r12d : : /* : * Send off activity statistics to the stats collector : */ : pgstat_send_bgwriter(); 0.00 : 63d816: e8 45 25 00 00 callq 63fd60 : : if (FirstCallSinceLastCheckpoint()) 0.00 : 63d81b: e8 20 03 00 00 callq 63db40 0.00 : 63d820: 84 c0 test %al,%al 0.00 : 63d822: 0f 85 98 00 00 00 jne 63d8c0 : * We do this logging in the bgwriter as its the only process thats : * run regularly and returns to its mainloop all the time. E.g. : * Checkpointer, when active, is barely ever in its mainloop and thus : * makes it hard to log regularly. : */ : if (XLogStandbyInfoActive() && !RecoveryInProgress()) 0.00 : 63d828: 83 3d 2d b9 53 00 01 cmpl $0x1,0x53b92d(%rip) # b7915c 0.00 : 63d82f: 7e 0d jle 63d83e 0.00 : 63d831: e8 8a fc e8 ff callq 4cd4c0 0.00 : 63d836: 84 c0 test %al,%al 0.00 : 63d838: 0f 84 f2 00 00 00 je 63d930 : * correctness that that be exact, the feedback loop might misbehave : * if we stray too far from that. Hence, avoid loading this process : * down with latch events that are likely to happen frequently during : * normal operation. : */ : rc = WaitLatch(&MyProc->procLatch, 0.00 : 63d83e: 48 8b 3d 03 01 54 00 mov 0x540103(%rip),%rdi # b7d948 0.00 : 63d845: 48 63 15 a4 ad 52 00 movslq 0x52ada4(%rip),%rdx # b685f0 0.00 : 63d84c: be 19 00 00 00 mov $0x19,%esi 0.00 : 63d851: 48 83 c7 1c add $0x1c,%rdi 0.00 : 63d855: e8 e6 bc ff ff callq 639540 : * critical that we not hibernate anyway, we try to reduce the odds of : * that by only hibernating when BgBufferSync says nothing's happening : * for two consecutive cycles. Also, we mitigate any possible : * consequences of a missed wakeup by not hibernating forever. : */ : if (rc == WL_TIMEOUT && can_hibernate && prev_hibernate) 0.00 : 63d85a: 83 f8 08 cmp $0x8,%eax : * correctness that that be exact, the feedback loop might misbehave : * if we stray too far from that. Hence, avoid loading this process : * down with latch events that are likely to happen frequently during : * normal operation. : */ : rc = WaitLatch(&MyProc->procLatch, /home/Computational/mark/src/postgres-andres/src/backend/postmaster/bgwriter.c:351 100.00 : 63d85d: 89 c3 mov %eax,%ebx : * critical that we not hibernate anyway, we try to reduce the odds of : * that by only hibernating when BgBufferSync says nothing's happening : * for two consecutive cycles. Also, we mitigate any possible : * consequences of a missed wakeup by not hibernating forever. : */ : if (rc == WL_TIMEOUT && can_hibernate && prev_hibernate) 0.00 : 63d85f: 74 6f je 63d8d0 : : /* : * Emergency bailout if postmaster has died. This is to avoid the : * necessity for manual cleanup of all postmaster children. : */ : if (rc & WL_POSTMASTER_DEATH) 0.00 : 63d861: 83 e3 10 and $0x10,%ebx 0.00 : 63d864: 0f 85 b8 00 00 00 jne 63d922 : PG_exception_stack = &local_sigjmp_buf; : : /* : * Unblock signals (they were blocked when the postmaster forked us) : */ : PG_SETMASK(&UnBlockSig); 0.00 : 63d86a: 45 89 e5 mov %r12d,%r13d : { : bool can_hibernate; : int rc; : : /* Clear any already-pending wakeups */ : ResetLatch(&MyProc->procLatch); 0.00 : 63d86d: 48 8b 3d d4 00 54 00 mov 0x5400d4(%rip),%rdi # b7d948 0.00 : 63d874: 48 83 c7 1c add $0x1c,%rdi 0.00 : 63d878: e8 c3 b7 ff ff callq 639040 : : if (got_SIGHUP) 0.00 : 63d87d: 8b 05 75 e2 53 00 mov 0x53e275(%rip),%eax # b7baf8 0.00 : 63d883: 85 c0 test %eax,%eax 0.00 : 63d885: 0f 84 75 ff ff ff je 63d800 : { : got_SIGHUP = false; : ProcessConfigFile(PGC_SIGHUP); 0.00 : 63d88b: bf 02 00 00 00 mov $0x2,%edi : /* Clear any already-pending wakeups */ : ResetLatch(&MyProc->procLatch); : : if (got_SIGHUP) : { : got_SIGHUP = false; 0.00 : 63d890: c7 05 5e e2 53 00 00 movl $0x0,0x53e25e(%rip) # b7baf8 0.00 : 63d897: 00 00 00 : ProcessConfigFile(PGC_SIGHUP); 0.00 : 63d89a: e8 61 6f 15 00 callq 794800 : } : if (shutdown_requested) 0.00 : 63d89f: 8b 05 57 e2 53 00 mov 0x53e257(%rip),%eax # b7bafc 0.00 : 63d8a5: 85 c0 test %eax,%eax 0.00 : 63d8a7: 0f 84 61 ff ff ff je 63d80e : * From here on, elog(ERROR) should end with exit(1), not send : * control back to the sigsetjmp block above : */ : ExitOnAnyError = true; : /* Normal exit from the bgwriter is here */ : proc_exit(0); /* done */ 0.00 : 63d8ad: 31 ff xor %edi,%edi : { : /* : * From here on, elog(ERROR) should end with exit(1), not send : * control back to the sigsetjmp block above : */ : ExitOnAnyError = true; 0.00 : 63d8af: c6 05 0a c8 57 00 01 movb $0x1,0x57c80a(%rip) # bba0c0 : /* Normal exit from the bgwriter is here */ : proc_exit(0); /* done */ 0.00 : 63d8b6: e8 65 14 04 00 callq 67ed20 0.00 : 63d8bb: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : { : /* : * After any checkpoint, close all smgr files. This is so we : * won't hang onto smgr references to deleted files indefinitely. : */ : smgrcloseall(); 0.00 : 63d8c0: e8 1b c1 05 00 callq 6999e0 0.00 : 63d8c5: e9 5e ff ff ff jmpq 63d828 0.00 : 63d8ca: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : * critical that we not hibernate anyway, we try to reduce the odds of : * that by only hibernating when BgBufferSync says nothing's happening : * for two consecutive cycles. Also, we mitigate any possible : * consequences of a missed wakeup by not hibernating forever. : */ : if (rc == WL_TIMEOUT && can_hibernate && prev_hibernate) 0.00 : 63d8d0: 45 84 e4 test %r12b,%r12b 0.00 : 63d8d3: 74 8c je 63d861 0.00 : 63d8d5: 45 84 ed test %r13b,%r13b 0.00 : 63d8d8: 74 90 je 63d86a : { : /* Ask for notification at next buffer allocation */ : StrategyNotifyBgWriter(&MyProc->procLatch); 0.00 : 63d8da: 48 8b 3d 67 00 54 00 mov 0x540067(%rip),%rdi # b7d948 0.00 : 63d8e1: 48 83 c7 1c add $0x1c,%rdi 0.00 : 63d8e5: e8 e6 9a 03 00 callq 6773d0 : /* Sleep ... */ : rc = WaitLatch(&MyProc->procLatch, 0.00 : 63d8ea: 8b 15 00 ad 52 00 mov 0x52ad00(%rip),%edx # b685f0 0.00 : 63d8f0: b8 32 00 00 00 mov $0x32,%eax 0.00 : 63d8f5: 48 8b 3d 4c 00 54 00 mov 0x54004c(%rip),%rdi # b7d948 0.00 : 63d8fc: be 19 00 00 00 mov $0x19,%esi 0.00 : 63d901: 0f af d0 imul %eax,%edx 0.00 : 63d904: 48 83 c7 1c add $0x1c,%rdi 0.00 : 63d908: 48 63 d2 movslq %edx,%rdx 0.00 : 63d90b: e8 30 bc ff ff callq 639540 : WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH, : BgWriterDelay * HIBERNATE_FACTOR); : /* Reset the notification request in case we timed out */ : StrategyNotifyBgWriter(NULL); 0.00 : 63d910: 31 ff xor %edi,%edi : if (rc == WL_TIMEOUT && can_hibernate && prev_hibernate) : { : /* Ask for notification at next buffer allocation */ : StrategyNotifyBgWriter(&MyProc->procLatch); : /* Sleep ... */ : rc = WaitLatch(&MyProc->procLatch, 0.00 : 63d912: 89 c3 mov %eax,%ebx : WL_LATCH_SET | WL_TIMEOUT | WL_POSTMASTER_DEATH, : BgWriterDelay * HIBERNATE_FACTOR); : /* Reset the notification request in case we timed out */ : StrategyNotifyBgWriter(NULL); 0.00 : 63d914: e8 b7 9a 03 00 callq 6773d0 : : /* : * Emergency bailout if postmaster has died. This is to avoid the : * necessity for manual cleanup of all postmaster children. : */ : if (rc & WL_POSTMASTER_DEATH) 0.00 : 63d919: 83 e3 10 and $0x10,%ebx 0.00 : 63d91c: 0f 84 48 ff ff ff je 63d86a : exit(1); 0.00 : 63d922: bf 01 00 00 00 mov $0x1,%edi 0.00 : 63d927: e8 64 bc e2 ff callq 469590 0.00 : 63d92c: 0f 1f 40 00 nopl 0x0(%rax) : * makes it hard to log regularly. : */ : if (XLogStandbyInfoActive() && !RecoveryInProgress()) : { : TimestampTz timeout = 0; : TimestampTz now = GetCurrentTimestamp(); 0.00 : 63d930: e8 3b 8a 10 00 callq 746370 0.00 : 63d935: 48 89 c3 mov %rax,%rbx : : /* : * only log if enough time has passed and some xlog record has : * been inserted. : */ : if (now >= timeout && 0.00 : 63d938: 48 8b 05 c9 e1 53 00 mov 0x53e1c9(%rip),%rax # b7bb08 0.00 : 63d93f: 48 05 c0 e1 e4 00 add $0xe4e1c0,%rax 0.00 : 63d945: 48 39 c3 cmp %rax,%rbx 0.00 : 63d948: 0f 8c f0 fe ff ff jl 63d83e 0.00 : 63d94e: e8 6d f8 e8 ff callq 4cd1c0 0.00 : 63d953: 48 3b 05 a6 e1 53 00 cmp 0x53e1a6(%rip),%rax # b7bb00 0.00 : 63d95a: 0f 84 de fe ff ff je 63d83e : last_snapshot_lsn != GetXLogInsertRecPtr()) : { : last_snapshot_lsn = LogStandbySnapshot(); 0.00 : 63d960: e8 fb 7c 04 00 callq 685660 : last_snapshot_ts = now; 0.00 : 63d965: 48 89 1d 9c e1 53 00 mov %rbx,0x53e19c(%rip) # b7bb08 : * been inserted. : */ : if (now >= timeout && : last_snapshot_lsn != GetXLogInsertRecPtr()) : { : last_snapshot_lsn = LogStandbySnapshot(); 0.00 : 63d96c: 48 89 05 8d e1 53 00 mov %rax,0x53e18d(%rip) # b7bb00 0.00 : 63d973: e9 c6 fe ff ff jmpq 63d83e : { : /* Since not using PG_TRY, must reset error stack by hand */ : error_context_stack = NULL; : : /* Prevent interrupts while cleaning up */ : HOLD_INTERRUPTS(); 0.00 : 63d978: 8b 05 1a c7 57 00 mov 0x57c71a(%rip),%eax # bba098 : * See notes in postgres.c about the design of this coding. : */ : if (sigsetjmp(local_sigjmp_buf, 1) != 0) : { : /* Since not using PG_TRY, must reset error stack by hand */ : error_context_stack = NULL; 0.00 : 63d97e: 48 c7 05 b7 bc 57 00 movq $0x0,0x57bcb7(%rip) # bb9640 0.00 : 63d985: 00 00 00 00 : : /* Prevent interrupts while cleaning up */ : HOLD_INTERRUPTS(); 0.00 : 63d989: 83 c0 01 add $0x1,%eax 0.00 : 63d98c: 89 05 06 c7 57 00 mov %eax,0x57c706(%rip) # bba098 : : /* Report the error to the server log */ : EmitErrorReport(); 0.00 : 63d992: e8 89 b2 13 00 callq 778c20 : /* : * These operations are really just a minimal subset of : * AbortTransaction(). We don't have very many resources to worry : * about in bgwriter, but we do have LWLocks, buffers, and temp files. : */ : LWLockReleaseAll(); 0.00 : 63d997: e8 e4 1c 05 00 callq 68f680 : AbortBufferIO(); 0.00 : 63d99c: e8 cf 68 03 00 callq 674270 : UnlockBuffers(); 0.00 : 63d9a1: e8 aa 67 03 00 callq 674150 : /* buffer pins are released here: */ : ResourceOwnerRelease(CurrentResourceOwner, 0.00 : 63d9a6: 48 8b 3d 13 cf 57 00 mov 0x57cf13(%rip),%rdi # bba8c0 0.00 : 63d9ad: b9 01 00 00 00 mov $0x1,%ecx 0.00 : 63d9b2: 31 d2 xor %edx,%edx 0.00 : 63d9b4: 31 f6 xor %esi,%esi 0.00 : 63d9b6: e8 e5 da 15 00 callq 79b4a0 : RESOURCE_RELEASE_BEFORE_LOCKS, : false, true); : /* we needn't bother with the other ResourceOwnerRelease phases */ : AtEOXact_Buffers(false); 0.00 : 63d9bb: 31 ff xor %edi,%edi 0.00 : 63d9bd: e8 ce 82 03 00 callq 675c90 : AtEOXact_SMgr(); 0.00 : 63d9c2: e8 a9 bf 05 00 callq 699970 : AtEOXact_Files(); 0.00 : 63d9c7: e8 54 bd 03 00 callq 679720 : AtEOXact_HashTables(false); 0.00 : 63d9cc: 31 ff xor %edi,%edi 0.00 : 63d9ce: e8 1d 5f 14 00 callq 7838f0 0.00 : 63d9d3: 48 8b 85 08 ff ff ff mov -0xf8(%rbp),%rax 0.00 : 63d9da: 48 89 05 7f ce 57 00 mov %rax,0x57ce7f(%rip) # bba860 : /* : * Now return to normal top-level context and clear ErrorContext for : * next time. : */ : MemoryContextSwitchTo(bgwriter_context); : FlushErrorState(); 0.00 : 63d9e1: e8 4a 9c 13 00 callq 777630 : : /* Flush any leaked data in the top-level context */ : MemoryContextResetAndDeleteChildren(bgwriter_context); 0.00 : 63d9e6: 48 8b bd 08 ff ff ff mov -0xf8(%rbp),%rdi 0.00 : 63d9ed: e8 1e b2 15 00 callq 798c10 : : /* Now we can allow interrupts again */ : RESUME_INTERRUPTS(); 0.00 : 63d9f2: 8b 05 a0 c6 57 00 mov 0x57c6a0(%rip),%eax # bba098 : /* : * Sleep at least 1 second after any error. A write error is likely : * to be repeated, and we don't want to be filling the error logs as : * fast as we can. : */ : pg_usleep(1000000L); 0.00 : 63d9f8: bf 40 42 0f 00 mov $0xf4240,%edi : : /* Flush any leaked data in the top-level context */ : MemoryContextResetAndDeleteChildren(bgwriter_context); : : /* Now we can allow interrupts again */ : RESUME_INTERRUPTS(); 0.00 : 63d9fd: 83 e8 01 sub $0x1,%eax 0.00 : 63da00: 89 05 92 c6 57 00 mov %eax,0x57c692(%rip) # bba098 : /* : * Sleep at least 1 second after any error. A write error is likely : * to be repeated, and we don't want to be filling the error logs as : * fast as we can. : */ : pg_usleep(1000000L); 0.00 : 63da06: e8 45 ed 16 00 callq 7ac750 : /* : * Close all open files after any error. This is helpful on Windows, : * where holding deleted files open causes various strange errors. : * It's not clear we need it elsewhere, but shouldn't hurt. : */ : smgrcloseall(); 0.00 : 63da0b: e8 d0 bf 05 00 callq 6999e0 0.00 : 63da10: e9 bf fd ff ff jmpq 63d7d4 : * child processes, but for consistency we make all postmaster child : * processes do this.) : */ : #ifdef HAVE_SETSID : if (setsid() < 0) : elog(FATAL, "setsid() failed: %m"); 0.00 : 63da15: ba 60 e8 89 00 mov $0x89e860,%edx 0.00 : 63da1a: be 7c 00 00 00 mov $0x7c,%esi 0.00 : 63da1f: bf 3c e8 89 00 mov $0x89e83c,%edi 0.00 : 63da24: e8 f7 d9 13 00 callq 77b420 0.00 : 63da29: be 83 fe 7b 00 mov $0x7bfe83,%esi 0.00 : 63da2e: bf 15 00 00 00 mov $0x15,%edi 0.00 : 63da33: 31 c0 xor %eax,%eax 0.00 : 63da35: e8 f6 d7 13 00 callq 77b230 0.00 : 63da3a: e8 91 ba e2 ff callq 4694d0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/buf_table.c:86 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000673de0 : : * BufTableLookup : * Lookup the given BufferTag; return buffer ID, or -1 if not found : */ : int : BufTableLookup(BufferTag *tagPtr) : { 0.00 : 673de0: 55 push %rbp 0.00 : 673de1: 48 89 e5 mov %rsp,%rbp 0.00 : 673de4: 48 83 ec 20 sub $0x20,%rsp : BufferLookupEnt ent; : : ent.key = *tagPtr; 0.00 : 673de8: 48 8b 07 mov (%rdi),%rax : if (!CHashSearch(SharedBufHash, &ent)) 0.00 : 673deb: 48 8d 75 e0 lea -0x20(%rbp),%rsi : int : BufTableLookup(BufferTag *tagPtr) : { : BufferLookupEnt ent; : : ent.key = *tagPtr; 0.00 : 673def: 48 89 45 e0 mov %rax,-0x20(%rbp) 0.00 : 673df3: 48 8b 47 08 mov 0x8(%rdi),%rax /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/buf_table.c:86 100.00 : 673df7: 48 89 45 e8 mov %rax,-0x18(%rbp) 0.00 : 673dfb: 8b 47 10 mov 0x10(%rdi),%eax : if (!CHashSearch(SharedBufHash, &ent)) 0.00 : 673dfe: 48 8b 3d 53 92 50 00 mov 0x509253(%rip),%rdi # b7d058 : int : BufTableLookup(BufferTag *tagPtr) : { : BufferLookupEnt ent; : : ent.key = *tagPtr; 0.00 : 673e05: 89 45 f0 mov %eax,-0x10(%rbp) : if (!CHashSearch(SharedBufHash, &ent)) 0.00 : 673e08: e8 e3 f4 10 00 callq 7832f0 0.00 : 673e0d: 89 c2 mov %eax,%edx 0.00 : 673e0f: b8 ff ff ff ff mov $0xffffffff,%eax 0.00 : 673e14: 84 d2 test %dl,%dl 0.00 : 673e16: 0f 45 45 f4 cmovne -0xc(%rbp),%eax : return -1; : : return ent.id; : } 0.00 : 673e1a: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:2825 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000674b60 : : * This function cannot be used on a buffer we do not have pinned, : * because it doesn't change the shared buffer state. : */ : void : IncrBufferRefCount(Buffer buffer) : { 0.00 : 674b60: 55 push %rbp 0.00 : 674b61: 48 89 e5 mov %rsp,%rbp 0.00 : 674b64: 53 push %rbx 0.00 : 674b65: 89 fb mov %edi,%ebx 0.00 : 674b67: 48 83 ec 08 sub $0x8,%rsp : Assert(BufferIsPinned(buffer)); : ResourceOwnerEnlargeBuffers(CurrentResourceOwner); 0.00 : 674b6b: 48 8b 3d 4e 5d 54 00 mov 0x545d4e(%rip),%rdi # bba8c0 0.00 : 674b72: e8 f9 62 12 00 callq 79ae70 : ResourceOwnerRememberBuffer(CurrentResourceOwner, buffer); 0.00 : 674b77: 48 8b 3d 42 5d 54 00 mov 0x545d42(%rip),%rdi # bba8c0 0.00 : 674b7e: 89 de mov %ebx,%esi 0.00 : 674b80: e8 1b 56 12 00 callq 79a1a0 : if (BufferIsLocal(buffer)) 0.00 : 674b85: 85 db test %ebx,%ebx 0.00 : 674b87: 78 1f js 674ba8 : LocalRefCount[-buffer - 1]++; : else : { : PrivateRefCountEntry *ref; : ref = GetPrivateRefCountEntry(buffer, false, true); 0.00 : 674b89: 89 df mov %ebx,%edi 0.00 : 674b8b: ba 01 00 00 00 mov $0x1,%edx 0.00 : 674b90: 31 f6 xor %esi,%esi 0.00 : 674b92: e8 89 f9 ff ff callq 674520 : Assert(ref != NULL); : ref->refcount++; 0.00 : 674b97: 83 40 04 01 addl $0x1,0x4(%rax) : } : } 0.00 : 674b9b: 48 83 c4 08 add $0x8,%rsp 0.00 : 674b9f: 5b pop %rbx 0.00 : 674ba0: c9 leaveq /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:2825 100.00 : 674ba1: c3 retq 0.00 : 674ba2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : { : Assert(BufferIsPinned(buffer)); : ResourceOwnerEnlargeBuffers(CurrentResourceOwner); : ResourceOwnerRememberBuffer(CurrentResourceOwner, buffer); : if (BufferIsLocal(buffer)) : LocalRefCount[-buffer - 1]++; 0.00 : 674ba8: f7 d3 not %ebx 0.00 : 674baa: 48 63 c3 movslq %ebx,%rax 0.00 : 674bad: 48 c1 e0 02 shl $0x2,%rax 0.00 : 674bb1: 48 03 05 68 85 50 00 add 0x508568(%rip),%rax # b7d120 0.00 : 674bb8: 83 00 01 addl $0x1,(%rax) : PrivateRefCountEntry *ref; : ref = GetPrivateRefCountEntry(buffer, false, true); : Assert(ref != NULL); : ref->refcount++; : } : } 0.00 : 674bbb: 48 83 c4 08 add $0x8,%rsp 0.00 : 674bbf: 5b pop %rbx 0.00 : 674bc0: c9 leaveq Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1781 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006756f0 : : * or if the bgwriter has been effectively disabled by setting : * bgwriter_lru_maxpages to 0.) : */ : bool : BgBufferSync(void) : { 0.00 : 6756f0: 55 push %rbp 0.00 : 6756f1: 48 89 e5 mov %rsp,%rbp 0.00 : 6756f4: 41 57 push %r15 : : /* : * Find out where the freelist clock sweep currently is, and how many : * buffer allocations have happened since our last call. : */ : strategy_buf_id = StrategySyncStart(&strategy_passes, &recent_alloc); 0.00 : 6756f6: 48 8d 75 d0 lea -0x30(%rbp),%rsi 0.00 : 6756fa: 48 8d 7d d4 lea -0x2c(%rbp),%rdi : * or if the bgwriter has been effectively disabled by setting : * bgwriter_lru_maxpages to 0.) : */ : bool : BgBufferSync(void) : { 0.00 : 6756fe: 41 56 push %r14 0.00 : 675700: 41 55 push %r13 0.00 : 675702: 41 54 push %r12 0.00 : 675704: 53 push %rbx 0.00 : 675705: 48 83 ec 18 sub $0x18,%rsp : : /* : * Find out where the freelist clock sweep currently is, and how many : * buffer allocations have happened since our last call. : */ : strategy_buf_id = StrategySyncStart(&strategy_passes, &recent_alloc); 0.00 : 675709: e8 22 1d 00 00 callq 677430 : : /* Report buffer alloc counts to pgstat */ : BgWriterStats.m_buf_alloc += recent_alloc; 0.00 : 67570e: 44 8b 55 d0 mov -0x30(%rbp),%r10d : /* : * If we're not running the LRU scan, just stop after doing the stats : * stuff. We mark the saved state invalid so that we can recover sanely : * if LRU scan is turned back on later. : */ : if (bgwriter_lru_maxpages <= 0) 0.00 : 675712: 44 8b 1d 77 2f 4f 00 mov 0x4f2f77(%rip),%r11d # b68690 : : /* : * Find out where the freelist clock sweep currently is, and how many : * buffer allocations have happened since our last call. : */ : strategy_buf_id = StrategySyncStart(&strategy_passes, &recent_alloc); 0.00 : 675719: 89 c6 mov %eax,%esi : : /* Report buffer alloc counts to pgstat */ : BgWriterStats.m_buf_alloc += recent_alloc; 0.00 : 67571b: 45 89 d1 mov %r10d,%r9d 0.00 : 67571e: 4c 01 0d 5b a3 54 00 add %r9,0x54a35b(%rip) # bbfa80 : /* : * If we're not running the LRU scan, just stop after doing the stats : * stuff. We mark the saved state invalid so that we can recover sanely : * if LRU scan is turned back on later. : */ : if (bgwriter_lru_maxpages <= 0) 0.00 : 675725: 45 85 db test %r11d,%r11d 0.00 : 675728: 0f 8e a2 02 00 00 jle 6759d0 : * see if we are still ahead of the clock sweep, and if so, how many : * buffers we could scan before we'd catch up with it and "lap" it. Note: : * weird-looking coding of xxx_passes comparisons are to avoid bogus : * behavior when the passes counts wrap around. : */ : if (saved_info_valid) 0.00 : 67572e: 80 3d 6f 79 50 00 00 cmpb $0x0,0x50796f(%rip) # b7d0a4 0.00 : 675735: 0f 85 4d 01 00 00 jne 675888 : } : : /* Update saved info for next time */ : prev_strategy_buf_id = strategy_buf_id; : prev_strategy_passes = strategy_passes; : saved_info_valid = true; 0.00 : 67573b: f3 49 0f 2a d1 cvtsi2ss %r9,%xmm2 : #ifdef BGW_DEBUG : elog(DEBUG2, "bgwriter initializing: strategy %u-%u", : strategy_passes, strategy_buf_id); : #endif : strategy_delta = 0; : next_to_clean = strategy_buf_id; 0.00 : 675740: 89 05 52 79 50 00 mov %eax,0x507952(%rip) # b7d098 : next_passes = strategy_passes; : bufs_to_lap = NBuffers; 0.00 : 675746: 8b 3d d4 33 4f 00 mov 0x4f33d4(%rip),%edi # b68b20 : elog(DEBUG2, "bgwriter initializing: strategy %u-%u", : strategy_passes, strategy_buf_id); : #endif : strategy_delta = 0; : next_to_clean = strategy_buf_id; : next_passes = strategy_passes; 0.00 : 67574c: 8b 45 d4 mov -0x2c(%rbp),%eax : bufs_to_lap = NBuffers; : } : : /* Update saved info for next time */ : prev_strategy_buf_id = strategy_buf_id; 0.00 : 67574f: 89 35 4b 79 50 00 mov %esi,0x50794b(%rip) # b7d0a0 : prev_strategy_passes = strategy_passes; : saved_info_valid = true; 0.00 : 675755: c6 05 48 79 50 00 01 movb $0x1,0x507948(%rip) # b7d0a4 : strategy_passes, strategy_buf_id); : #endif : strategy_delta = 0; : next_to_clean = strategy_buf_id; : next_passes = strategy_passes; : bufs_to_lap = NBuffers; 0.00 : 67575c: 89 7d c4 mov %edi,-0x3c(%rbp) : elog(DEBUG2, "bgwriter initializing: strategy %u-%u", : strategy_passes, strategy_buf_id); : #endif : strategy_delta = 0; : next_to_clean = strategy_buf_id; : next_passes = strategy_passes; 0.00 : 67575f: 89 05 2f 79 50 00 mov %eax,0x50792f(%rip) # b7d094 : bufs_to_lap = NBuffers; : } : : /* Update saved info for next time */ : prev_strategy_buf_id = strategy_buf_id; : prev_strategy_passes = strategy_passes; 0.00 : 675765: 89 05 31 79 50 00 mov %eax,0x507931(%rip) # b7d09c : * Estimate how many reusable buffers there are between the current : * strategy point and where we've scanned ahead to, based on the smoothed : * density estimate. : */ : bufs_ahead = NBuffers - bufs_to_lap; : reusable_buffers_est = (float) bufs_ahead / smoothed_density; 0.00 : 67576b: 89 f8 mov %edi,%eax 0.00 : 67576d: 2b 45 c4 sub -0x3c(%rbp),%eax 0.00 : 675770: f3 0f 2a c0 cvtsi2ss %eax,%xmm0 0.00 : 675774: f3 0f 5e 05 24 2f 4f divss 0x4f2f24(%rip),%xmm0 # b686a0 0.00 : 67577b: 00 0.00 : 67577c: f3 44 0f 2c f8 cvttss2si %xmm0,%r15d : /* : * Track a moving average of recent buffer allocations. Here, rather than : * a true average we want a fast-attack, slow-decline behavior: we : * immediately follow any increase. : */ : if (smoothed_alloc <= (float) recent_alloc) 0.00 : 675781: f3 0f 10 05 07 79 50 movss 0x507907(%rip),%xmm0 # b7d090 0.00 : 675788: 00 0.00 : 675789: 0f 2e d0 ucomiss %xmm0,%xmm2 0.00 : 67578c: 0f 82 1e 02 00 00 jb 6759b0 : smoothed_alloc = recent_alloc; 0.00 : 675792: f3 0f 11 15 f6 78 50 movss %xmm2,0x5078f6(%rip) # b7d090 0.00 : 675799: 00 : else : smoothed_alloc += ((float) recent_alloc - smoothed_alloc) / : smoothing_samples; : : /* Scale the estimate by a GUC to allow more aggressive tuning. */ : upcoming_alloc_est = (int) (smoothed_alloc * bgwriter_lru_multiplier); 0.00 : 67579a: f3 0f 10 05 ee 78 50 movss 0x5078ee(%rip),%xmm0 # b7d090 0.00 : 6757a1: 00 0.00 : 6757a2: 0f 5a c0 cvtps2pd %xmm0,%xmm0 0.00 : 6757a5: f2 0f 59 05 eb 2e 4f mulsd 0x4f2eeb(%rip),%xmm0 # b68698 0.00 : 6757ac: 00 0.00 : 6757ad: f2 0f 2c d0 cvttsd2si %xmm0,%edx : * kernel warnings on some platforms. Once upcoming_alloc_est has gone to : * zero, there's no point in tracking smaller and smaller values of : * smoothed_alloc, so just reset it to exactly zero to avoid this : * syndrome. It will pop back up as soon as recent_alloc increases. : */ : if (upcoming_alloc_est == 0) 0.00 : 6757b1: 85 d2 test %edx,%edx 0.00 : 6757b3: 75 0a jne 6757bf : smoothed_alloc = 0; 0.00 : 6757b5: c7 05 d1 78 50 00 00 movl $0x0,0x5078d1(%rip) # b7d090 0.00 : 6757bc: 00 00 00 0.00 : 6757bf: f3 0f 2a 15 29 2e 4f cvtsi2ssl 0x4f2e29(%rip),%xmm2 # b685f0 0.00 : 6757c6: 00 : * enough buffers to match our estimate of the next cycle's allocation : * requirements, or hit the bgwriter_lru_maxpages limit. : */ : : /* Make sure we can handle the pin inside SyncOneBuffer */ : ResourceOwnerEnlargeBuffers(CurrentResourceOwner); 0.00 : 6757c7: 45 89 fc mov %r15d,%r12d : * zero, there's no point in tracking smaller and smaller values of : * smoothed_alloc, so just reset it to exactly zero to avoid this : * syndrome. It will pop back up as soon as recent_alloc increases. : */ : if (upcoming_alloc_est == 0) : smoothed_alloc = 0; 0.00 : 6757ca: f3 0f 10 05 16 49 23 movss 0x234916(%rip),%xmm0 # 8aa0e8 <__func__.17063+0x15> 0.00 : 6757d1: 00 0.00 : 6757d2: f3 0f 2a cf cvtsi2ss %edi,%xmm1 : * enough buffers to match our estimate of the next cycle's allocation : * requirements, or hit the bgwriter_lru_maxpages limit. : */ : : /* Make sure we can handle the pin inside SyncOneBuffer */ : ResourceOwnerEnlargeBuffers(CurrentResourceOwner); 0.00 : 6757d6: 48 8b 3d e3 50 54 00 mov 0x5450e3(%rip),%rdi # bba8c0 : * zero, there's no point in tracking smaller and smaller values of : * smoothed_alloc, so just reset it to exactly zero to avoid this : * syndrome. It will pop back up as soon as recent_alloc increases. : */ : if (upcoming_alloc_est == 0) : smoothed_alloc = 0; 0.00 : 6757dd: f3 0f 5e c2 divss %xmm2,%xmm0 0.00 : 6757e1: f3 0f 5e c8 divss %xmm0,%xmm1 0.00 : 6757e5: f3 0f 2c c1 cvttss2si %xmm1,%eax 0.00 : 6757e9: 45 8d 34 07 lea (%r15,%rax,1),%r14d 0.00 : 6757ed: 41 39 d6 cmp %edx,%r14d 0.00 : 6757f0: 44 0f 4c f2 cmovl %edx,%r14d : * enough buffers to match our estimate of the next cycle's allocation : * requirements, or hit the bgwriter_lru_maxpages limit. : */ : : /* Make sure we can handle the pin inside SyncOneBuffer */ : ResourceOwnerEnlargeBuffers(CurrentResourceOwner); 0.00 : 6757f4: 45 31 ed xor %r13d,%r13d 0.00 : 6757f7: e8 74 56 12 00 callq 79ae70 0.00 : 6757fc: 8b 5d c4 mov -0x3c(%rbp),%ebx 0.00 : 6757ff: 90 nop : num_to_scan = bufs_to_lap; : num_written = 0; : reusable_buffers = reusable_buffers_est; : : /* Execute the LRU scan */ : while (num_to_scan > 0 && reusable_buffers < upcoming_alloc_est) 0.00 : 675800: 85 db test %ebx,%ebx 0.00 : 675802: 7e 09 jle 67580d 0.00 : 675804: 45 39 e6 cmp %r12d,%r14d 0.00 : 675807: 0f 8f 23 01 00 00 jg 675930 : } : else if (buffer_state & BUF_REUSABLE) : reusable_buffers++; : } : : BgWriterStats.m_buf_written_clean += num_written; 0.00 : 67580d: 49 63 c5 movslq %r13d,%rax 0.00 : 675810: 48 01 05 49 a2 54 00 add %rax,0x54a249(%rip) # bbfa60 : * effectively halves the moving average period in cases where both the : * strategy and the background writer are doing some useful scanning, : * which is helpful because a long memory isn't as desirable on the : * density estimates. : */ : new_strategy_delta = bufs_to_lap - num_to_scan; 0.00 : 675817: 8b 45 c4 mov -0x3c(%rbp),%eax : new_recent_alloc = reusable_buffers - reusable_buffers_est; 0.00 : 67581a: 44 89 e2 mov %r12d,%edx 0.00 : 67581d: 44 29 fa sub %r15d,%edx : * effectively halves the moving average period in cases where both the : * strategy and the background writer are doing some useful scanning, : * which is helpful because a long memory isn't as desirable on the : * density estimates. : */ : new_strategy_delta = bufs_to_lap - num_to_scan; 0.00 : 675820: 29 d8 sub %ebx,%eax 0.00 : 675822: 48 98 cltq : new_recent_alloc = reusable_buffers - reusable_buffers_est; : if (new_strategy_delta > 0 && new_recent_alloc > 0) 0.00 : 675824: 48 85 c0 test %rax,%rax 0.00 : 675827: 7e 34 jle 67585d 0.00 : 675829: 85 d2 test %edx,%edx 0.00 : 67582b: 74 30 je 67585d : { : scans_per_alloc = (float) new_strategy_delta / (float) new_recent_alloc; : smoothed_density += (scans_per_alloc - smoothed_density) / 0.00 : 67582d: f3 48 0f 2a c0 cvtsi2ss %rax,%xmm0 0.00 : 675832: 89 d0 mov %edx,%eax 0.00 : 675834: f3 48 0f 2a c8 cvtsi2ss %rax,%xmm1 0.00 : 675839: f3 0f 10 15 5f 2e 4f movss 0x4f2e5f(%rip),%xmm2 # b686a0 0.00 : 675840: 00 0.00 : 675841: f3 0f 5e c1 divss %xmm1,%xmm0 0.00 : 675845: f3 0f 5c c2 subss %xmm2,%xmm0 0.00 : 675849: f3 0f 59 05 93 48 23 mulss 0x234893(%rip),%xmm0 # 8aa0e4 <__func__.17063+0x11> 0.00 : 675850: 00 0.00 : 675851: f3 0f 58 d0 addss %xmm0,%xmm2 0.00 : 675855: f3 0f 11 15 43 2e 4f movss %xmm2,0x4f2e43(%rip) # b686a0 0.00 : 67585c: 00 : scans_per_alloc, smoothed_density); : #endif : } : : /* Return true if OK to hibernate */ : return (bufs_to_lap == 0 && recent_alloc == 0); 0.00 : 67585d: 44 8b 55 c4 mov -0x3c(%rbp),%r10d 0.00 : 675861: 31 c0 xor %eax,%eax 0.00 : 675863: 45 85 d2 test %r10d,%r10d 0.00 : 675866: 75 0a jne 675872 0.00 : 675868: 44 8b 4d d0 mov -0x30(%rbp),%r9d 0.00 : 67586c: 45 85 c9 test %r9d,%r9d 0.00 : 67586f: 0f 94 c0 sete %al : } 0.00 : 675872: 48 83 c4 18 add $0x18,%rsp 0.00 : 675876: 5b pop %rbx 0.00 : 675877: 41 5c pop %r12 0.00 : 675879: 41 5d pop %r13 0.00 : 67587b: 41 5e pop %r14 0.00 : 67587d: 41 5f pop %r15 0.00 : 67587f: c9 leaveq 0.00 : 675880: c3 retq 0.00 : 675881: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : * weird-looking coding of xxx_passes comparisons are to avoid bogus : * behavior when the passes counts wrap around. : */ : if (saved_info_valid) : { : int32 passes_delta = strategy_passes - prev_strategy_passes; 0.00 : 675888: 44 8b 45 d4 mov -0x2c(%rbp),%r8d : : strategy_delta = strategy_buf_id - prev_strategy_buf_id; 0.00 : 67588c: 89 c1 mov %eax,%ecx : strategy_delta += (long) passes_delta *NBuffers; 0.00 : 67588e: 8b 3d 8c 32 4f 00 mov 0x4f328c(%rip),%edi # b68b20 : */ : if (saved_info_valid) : { : int32 passes_delta = strategy_passes - prev_strategy_passes; : : strategy_delta = strategy_buf_id - prev_strategy_buf_id; 0.00 : 675894: 2b 0d 06 78 50 00 sub 0x507806(%rip),%ecx # b7d0a0 : strategy_delta += (long) passes_delta *NBuffers; 0.00 : 67589a: 44 89 c0 mov %r8d,%eax 0.00 : 67589d: 2b 05 f9 77 50 00 sub 0x5077f9(%rip),%eax # b7d09c 0.00 : 6758a3: 48 63 d7 movslq %edi,%rdx 0.00 : 6758a6: 89 7d c4 mov %edi,-0x3c(%rbp) : */ : if (saved_info_valid) : { : int32 passes_delta = strategy_passes - prev_strategy_passes; : : strategy_delta = strategy_buf_id - prev_strategy_buf_id; 0.00 : 6758a9: 48 63 c9 movslq %ecx,%rcx : strategy_delta += (long) passes_delta *NBuffers; 0.00 : 6758ac: 48 98 cltq 0.00 : 6758ae: 48 0f af c2 imul %rdx,%rax : : Assert(strategy_delta >= 0); : : if ((int32) (next_passes - strategy_passes) > 0) 0.00 : 6758b2: 8b 15 dc 77 50 00 mov 0x5077dc(%rip),%edx # b7d094 : if (saved_info_valid) : { : int32 passes_delta = strategy_passes - prev_strategy_passes; : : strategy_delta = strategy_buf_id - prev_strategy_buf_id; : strategy_delta += (long) passes_delta *NBuffers; 0.00 : 6758b8: 48 01 c1 add %rax,%rcx : : Assert(strategy_delta >= 0); : : if ((int32) (next_passes - strategy_passes) > 0) 0.00 : 6758bb: 89 d0 mov %edx,%eax 0.00 : 6758bd: 44 29 c0 sub %r8d,%eax 0.00 : 6758c0: 85 c0 test %eax,%eax 0.00 : 6758c2: 0f 8e 23 01 00 00 jle 6759eb : { : /* we're one pass ahead of the strategy point */ : bufs_to_lap = strategy_buf_id - next_to_clean; 0.00 : 6758c8: 89 f0 mov %esi,%eax 0.00 : 6758ca: 2b 05 c8 77 50 00 sub 0x5077c8(%rip),%eax # b7d098 0.00 : 6758d0: 89 45 c4 mov %eax,-0x3c(%rbp) : * Compute how many buffers had to be scanned for each new allocation, ie, : * 1/density of reusable buffers, and track a moving average of that. : * : * If the strategy point didn't move, we don't update the density estimate : */ : if (strategy_delta > 0 && recent_alloc > 0) 0.00 : 6758d3: 48 85 c9 test %rcx,%rcx : next_passes = strategy_passes; : bufs_to_lap = NBuffers; : } : : /* Update saved info for next time */ : prev_strategy_buf_id = strategy_buf_id; 0.00 : 6758d6: 89 35 c4 77 50 00 mov %esi,0x5077c4(%rip) # b7d0a0 : prev_strategy_passes = strategy_passes; 0.00 : 6758dc: 44 89 05 b9 77 50 00 mov %r8d,0x5077b9(%rip) # b7d09c : saved_info_valid = true; 0.00 : 6758e3: c6 05 ba 77 50 00 01 movb $0x1,0x5077ba(%rip) # b7d0a4 : * Compute how many buffers had to be scanned for each new allocation, ie, : * 1/density of reusable buffers, and track a moving average of that. : * : * If the strategy point didn't move, we don't update the density estimate : */ : if (strategy_delta > 0 && recent_alloc > 0) 0.00 : 6758ea: 0f 8e 2c 01 00 00 jle 675a1c 0.00 : 6758f0: 45 85 d2 test %r10d,%r10d 0.00 : 6758f3: 0f 57 d2 xorps %xmm2,%xmm2 0.00 : 6758f6: 0f 84 6f fe ff ff je 67576b : { : scans_per_alloc = (float) strategy_delta / (float) recent_alloc; 0.00 : 6758fc: f3 49 0f 2a d1 cvtsi2ss %r9,%xmm2 : smoothed_density += (scans_per_alloc - smoothed_density) / 0.00 : 675901: f3 48 0f 2a c1 cvtsi2ss %rcx,%xmm0 0.00 : 675906: f3 0f 10 0d 92 2d 4f movss 0x4f2d92(%rip),%xmm1 # b686a0 0.00 : 67590d: 00 0.00 : 67590e: f3 0f 5e c2 divss %xmm2,%xmm0 0.00 : 675912: f3 0f 5c c1 subss %xmm1,%xmm0 0.00 : 675916: f3 0f 59 05 c6 47 23 mulss 0x2347c6(%rip),%xmm0 # 8aa0e4 <__func__.17063+0x11> 0.00 : 67591d: 00 0.00 : 67591e: f3 0f 58 c8 addss %xmm0,%xmm1 0.00 : 675922: f3 0f 11 0d 76 2d 4f movss %xmm1,0x4f2d76(%rip) # b686a0 0.00 : 675929: 00 0.00 : 67592a: e9 3c fe ff ff jmpq 67576b 0.00 : 67592f: 90 nop : reusable_buffers = reusable_buffers_est; : : /* Execute the LRU scan */ : while (num_to_scan > 0 && reusable_buffers < upcoming_alloc_est) : { : int buffer_state = SyncOneBuffer(next_to_clean, true); 0.00 : 675930: 8b 3d 62 77 50 00 mov 0x507762(%rip),%edi # b7d098 0.00 : 675936: be 01 00 00 00 mov $0x1,%esi 0.00 : 67593b: e8 20 f9 ff ff callq 675260 0.00 : 675940: 89 c2 mov %eax,%edx : : if (++next_to_clean >= NBuffers) 0.00 : 675942: 8b 05 50 77 50 00 mov 0x507750(%rip),%eax # b7d098 0.00 : 675948: 83 c0 01 add $0x1,%eax 0.00 : 67594b: 3b 05 cf 31 4f 00 cmp 0x4f31cf(%rip),%eax # b68b20 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:1781 100.00 : 675951: 89 05 41 77 50 00 mov %eax,0x507741(%rip) # b7d098 0.00 : 675957: 7c 11 jl 67596a : { : next_to_clean = 0; : next_passes++; 0.00 : 675959: 83 05 34 77 50 00 01 addl $0x1,0x507734(%rip) # b7d094 : { : int buffer_state = SyncOneBuffer(next_to_clean, true); : : if (++next_to_clean >= NBuffers) : { : next_to_clean = 0; 0.00 : 675960: c7 05 2e 77 50 00 00 movl $0x0,0x50772e(%rip) # b7d098 0.00 : 675967: 00 00 00 : next_passes++; : } : num_to_scan--; 0.00 : 67596a: 83 eb 01 sub $0x1,%ebx : : if (buffer_state & BUF_WRITTEN) 0.00 : 67596d: f6 c2 01 test $0x1,%dl 0.00 : 675970: 74 26 je 675998 : { : reusable_buffers++; 0.00 : 675972: 41 83 c4 01 add $0x1,%r12d : if (++num_written >= bgwriter_lru_maxpages) 0.00 : 675976: 41 83 c5 01 add $0x1,%r13d 0.00 : 67597a: 44 3b 2d 0f 2d 4f 00 cmp 0x4f2d0f(%rip),%r13d # b68690 0.00 : 675981: 0f 8c 79 fe ff ff jl 675800 : { : BgWriterStats.m_maxwritten_clean++; 0.00 : 675987: 48 83 05 d9 a0 54 00 addq $0x1,0x54a0d9(%rip) # bbfa68 0.00 : 67598e: 01 : break; 0.00 : 67598f: e9 79 fe ff ff jmpq 67580d 0.00 : 675994: 0f 1f 40 00 nopl 0x0(%rax) : } : } : else if (buffer_state & BUF_REUSABLE) 0.00 : 675998: 83 e2 02 and $0x2,%edx : reusable_buffers++; 0.00 : 67599b: 83 fa 01 cmp $0x1,%edx 0.00 : 67599e: 41 83 dc ff sbb $0xffffffff,%r12d 0.00 : 6759a2: e9 59 fe ff ff jmpq 675800 0.00 : 6759a7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 6759ae: 00 00 : * immediately follow any increase. : */ : if (smoothed_alloc <= (float) recent_alloc) : smoothed_alloc = recent_alloc; : else : smoothed_alloc += ((float) recent_alloc - smoothed_alloc) / 0.00 : 6759b0: f3 0f 5c d0 subss %xmm0,%xmm2 0.00 : 6759b4: f3 0f 59 15 28 47 23 mulss 0x234728(%rip),%xmm2 # 8aa0e4 <__func__.17063+0x11> 0.00 : 6759bb: 00 0.00 : 6759bc: f3 0f 58 c2 addss %xmm2,%xmm0 0.00 : 6759c0: f3 0f 11 05 c8 76 50 movss %xmm0,0x5076c8(%rip) # b7d090 0.00 : 6759c7: 00 0.00 : 6759c8: e9 cd fd ff ff jmpq 67579a 0.00 : 6759cd: 0f 1f 00 nopl (%rax) : * stuff. We mark the saved state invalid so that we can recover sanely : * if LRU scan is turned back on later. : */ : if (bgwriter_lru_maxpages <= 0) : { : saved_info_valid = false; 0.00 : 6759d0: c6 05 cd 76 50 00 00 movb $0x0,0x5076cd(%rip) # b7d0a4 : #endif : } : : /* Return true if OK to hibernate */ : return (bufs_to_lap == 0 && recent_alloc == 0); : } 0.00 : 6759d7: 48 83 c4 18 add $0x18,%rsp : * stuff. We mark the saved state invalid so that we can recover sanely : * if LRU scan is turned back on later. : */ : if (bgwriter_lru_maxpages <= 0) : { : saved_info_valid = false; 0.00 : 6759db: b8 01 00 00 00 mov $0x1,%eax : #endif : } : : /* Return true if OK to hibernate */ : return (bufs_to_lap == 0 && recent_alloc == 0); : } 0.00 : 6759e0: 5b pop %rbx 0.00 : 6759e1: 41 5c pop %r12 0.00 : 6759e3: 41 5d pop %r13 0.00 : 6759e5: 41 5e pop %r14 0.00 : 6759e7: 41 5f pop %r15 0.00 : 6759e9: c9 leaveq 0.00 : 6759ea: c3 retq : next_passes, next_to_clean, : strategy_passes, strategy_buf_id, : strategy_delta, bufs_to_lap); : #endif : } : else if (next_passes == strategy_passes && 0.00 : 6759eb: 41 39 d0 cmp %edx,%r8d 0.00 : 6759ee: 74 12 je 675a02 : elog(DEBUG2, "bgwriter behind: bgw %u-%u strategy %u-%u delta=%ld", : next_passes, next_to_clean, : strategy_passes, strategy_buf_id, : strategy_delta); : #endif : next_to_clean = strategy_buf_id; 0.00 : 6759f0: 89 35 a2 76 50 00 mov %esi,0x5076a2(%rip) # b7d098 : next_passes = strategy_passes; 0.00 : 6759f6: 44 89 05 97 76 50 00 mov %r8d,0x507697(%rip) # b7d094 0.00 : 6759fd: e9 d1 fe ff ff jmpq 6758d3 : next_passes, next_to_clean, : strategy_passes, strategy_buf_id, : strategy_delta, bufs_to_lap); : #endif : } : else if (next_passes == strategy_passes && 0.00 : 675a02: 8b 05 90 76 50 00 mov 0x507690(%rip),%eax # b7d098 0.00 : 675a08: 39 c6 cmp %eax,%esi 0.00 : 675a0a: 7f e4 jg 6759f0 : next_to_clean >= strategy_buf_id) : { : /* on same pass, but ahead or at least not behind */ : bufs_to_lap = NBuffers - (next_to_clean - strategy_buf_id); 0.00 : 675a0c: 89 fa mov %edi,%edx 0.00 : 675a0e: 29 c2 sub %eax,%edx 0.00 : 675a10: 89 d0 mov %edx,%eax 0.00 : 675a12: 01 f0 add %esi,%eax 0.00 : 675a14: 89 45 c4 mov %eax,-0x3c(%rbp) : next_passes, next_to_clean, : strategy_passes, strategy_buf_id, : strategy_delta, bufs_to_lap); : #endif : } : else if (next_passes == strategy_passes && 0.00 : 675a17: e9 b7 fe ff ff jmpq 6758d3 : * Compute how many buffers had to be scanned for each new allocation, ie, : * 1/density of reusable buffers, and track a moving average of that. : * : * If the strategy point didn't move, we don't update the density estimate : */ : if (strategy_delta > 0 && recent_alloc > 0) 0.00 : 675a1c: f3 49 0f 2a d1 cvtsi2ss %r9,%xmm2 0.00 : 675a21: e9 45 fd ff ff jmpq 67576b Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:842 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000675ca0 : : */ : static Buffer : ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber forkNum, : BlockNumber blockNum, ReadBufferMode mode, : BufferAccessStrategy strategy, bool *hit) : { 0.00 : 675ca0: 55 push %rbp 0.00 : 675ca1: 48 89 e5 mov %rsp,%rbp 0.00 : 675ca4: 41 57 push %r15 0.00 : 675ca6: 4d 89 cf mov %r9,%r15 0.00 : 675ca9: 41 56 push %r14 0.00 : 675cab: 41 55 push %r13 0.00 : 675cad: 41 54 push %r12 0.00 : 675caf: 53 push %rbx 0.00 : 675cb0: 48 83 ec 68 sub $0x68,%rsp 0.00 : 675cb4: 48 89 7d 80 mov %rdi,-0x80(%rbp) 0.00 : 675cb8: 89 95 78 ff ff ff mov %edx,-0x88(%rbp) 0.00 : 675cbe: 89 8d 74 ff ff ff mov %ecx,-0x8c(%rbp) 0.00 : 675cc4: 44 89 85 70 ff ff ff mov %r8d,-0x90(%rbp) 0.00 : 675ccb: 40 88 b5 7f ff ff ff mov %sil,-0x81(%rbp) : volatile BufferDesc *bufHdr; : Block bufBlock; : bool found; : bool isExtend; : bool isLocalBuf = SmgrIsTemp(smgr); 0.00 : 675cd2: 83 7f 0c ff cmpl $0xffffffff,0xc(%rdi) : : *hit = false; 0.00 : 675cd6: 48 8b 45 10 mov 0x10(%rbp),%rax : { : volatile BufferDesc *bufHdr; : Block bufBlock; : bool found; : bool isExtend; : bool isLocalBuf = SmgrIsTemp(smgr); 0.00 : 675cda: 0f 95 45 8f setne -0x71(%rbp) : : *hit = false; 0.00 : 675cde: c6 00 00 movb $0x0,(%rax) : : /* Make sure we will have room to remember the buffer pin */ : ResourceOwnerEnlargeBuffers(CurrentResourceOwner); 0.00 : 675ce1: 48 8b 3d d8 4b 54 00 mov 0x544bd8(%rip),%rdi # bba8c0 0.00 : 675ce8: e8 83 51 12 00 callq 79ae70 : : isExtend = (blockNum == P_NEW); 0.00 : 675ced: 83 bd 74 ff ff ff ff cmpl $0xffffffff,-0x8c(%rbp) : smgr->smgr_rnode.node.relNode, : smgr->smgr_rnode.backend, : isExtend); : : /* Substitute proper block number if caller asked for P_NEW */ : if (isExtend) 0.00 : 675cf4: 0f 94 45 8e sete -0x72(%rbp) 0.00 : 675cf8: 0f 84 2f 05 00 00 je 67622d : blockNum = smgrnblocks(smgr, forkNum); : : if (isLocalBuf) 0.00 : 675cfe: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 675d02: 74 7b je 675d7f : { : bufHdr = LocalBufferAlloc(smgr, forkNum, blockNum, &found); 0.00 : 675d04: 8b 95 74 ff ff ff mov -0x8c(%rbp),%edx 0.00 : 675d0a: 8b b5 78 ff ff ff mov -0x88(%rbp),%esi 0.00 : 675d10: 48 8d 4d cf lea -0x31(%rbp),%rcx 0.00 : 675d14: 48 8b 7d 80 mov -0x80(%rbp),%rdi 0.00 : 675d18: e8 c3 20 00 00 callq 677de0 : if (found) 0.00 : 675d1d: 80 7d cf 00 cmpb $0x0,-0x31(%rbp) : if (isExtend) : blockNum = smgrnblocks(smgr, forkNum); : : if (isLocalBuf) : { : bufHdr = LocalBufferAlloc(smgr, forkNum, blockNum, &found); 0.00 : 675d21: 49 89 c6 mov %rax,%r14 : if (found) 0.00 : 675d24: 0f 85 1b 04 00 00 jne 676145 : pgBufferUsage.local_blks_hit++; : else : pgBufferUsage.local_blks_read++; 0.00 : 675d2a: 48 83 05 56 9a 54 00 addq $0x1,0x549a56(%rip) # bbf788 0.00 : 675d31: 01 : } : : /* At this point we do NOT hold any locks. */ : : /* if it was already in the buffer pool, we're done */ : if (found) 0.00 : 675d32: 80 7d cf 00 cmpb $0x0,-0x31(%rbp) 0.00 : 675d36: 0f 84 fa 00 00 00 je 675e36 : { : if (!isExtend) 0.00 : 675d3c: 80 7d 8e 00 cmpb $0x0,-0x72(%rbp) 0.00 : 675d40: 0f 85 01 05 00 00 jne 676247 : { : /* Just need to update stats before we exit */ : *hit = true; 0.00 : 675d46: 48 8b 45 10 mov 0x10(%rbp),%rax 0.00 : 675d4a: c6 00 01 movb $0x1,(%rax) : VacuumPageHit++; 0.00 : 675d4d: 83 05 80 43 54 00 01 addl $0x1,0x544380(%rip) # bba0d4 : : if (VacuumCostActive) 0.00 : 675d54: 80 3d 89 43 54 00 00 cmpb $0x0,0x544389(%rip) # bba0e4 0.00 : 675d5b: 74 0c je 675d69 : VacuumCostBalance += VacuumCostPageHit; 0.00 : 675d5d: 8b 05 c9 2d 4f 00 mov 0x4f2dc9(%rip),%eax # b68b2c 0.00 : 675d63: 01 05 77 43 54 00 add %eax,0x544377(%rip) # bba0e0 : smgr->smgr_rnode.node.relNode, : smgr->smgr_rnode.backend, : isExtend, : found); : : return BufferDescriptorGetBuffer(bufHdr); 0.00 : 675d69: 41 8b 46 24 mov 0x24(%r14),%eax : } 0.00 : 675d6d: 48 83 c4 68 add $0x68,%rsp 0.00 : 675d71: 5b pop %rbx 0.00 : 675d72: 41 5c pop %r12 0.00 : 675d74: 41 5d pop %r13 0.00 : 675d76: 41 5e pop %r14 : smgr->smgr_rnode.node.relNode, : smgr->smgr_rnode.backend, : isExtend, : found); : : return BufferDescriptorGetBuffer(bufHdr); 0.00 : 675d78: 83 c0 01 add $0x1,%eax : } 0.00 : 675d7b: 41 5f pop %r15 0.00 : 675d7d: c9 leaveq 0.00 : 675d7e: c3 retq : int buf_id; : volatile BufferDesc *buf; : bool valid; : : /* create a tag so we can lookup the buffer */ : INIT_BUFFERTAG(newTag, smgr->smgr_rnode.node, forkNum, blockNum); 0.00 : 675d7f: 48 8b 55 80 mov -0x80(%rbp),%rdx 0.00 : 675d83: 48 8b 02 mov (%rdx),%rax 0.00 : 675d86: 48 89 45 b0 mov %rax,-0x50(%rbp) 0.00 : 675d8a: 8b 42 08 mov 0x8(%rdx),%eax 0.00 : 675d8d: 8b 95 74 ff ff ff mov -0x8c(%rbp),%edx 0.00 : 675d93: 89 45 b8 mov %eax,-0x48(%rbp) 0.00 : 675d96: 8b 85 78 ff ff ff mov -0x88(%rbp),%eax 0.00 : 675d9c: 89 55 c0 mov %edx,-0x40(%rbp) 0.00 : 675d9f: 89 45 bc mov %eax,-0x44(%rbp) 0.00 : 675da2: eb 11 jmp 675db5 0.00 : 675da4: 0f 1f 40 00 nopl 0x0(%rax) : valid = PinBuffer(foundbuf, strategy); : : /* Check whether someone recycled the buffer before we pinned it. */ : if (!BUFFERTAGS_EQUAL(newTag, foundbuf->tag)) : { : UnpinBuffer(foundbuf, true); 0.00 : 675da8: be 01 00 00 00 mov $0x1,%esi 0.00 : 675dad: 48 89 df mov %rbx,%rdi 0.00 : 675db0: e8 7b ef ff ff callq 674d30 : /* create a tag so we can lookup the buffer */ : INIT_BUFFERTAG(newTag, smgr->smgr_rnode.node, forkNum, blockNum); : : /* see if the block is in the buffer pool already */ : start: : buf_id = BufTableLookup(&newTag); 0.00 : 675db5: 48 8d 7d b0 lea -0x50(%rbp),%rdi 0.00 : 675db9: e8 22 e0 ff ff callq 673de0 : if (buf_id >= 0) 0.00 : 675dbe: 85 c0 test %eax,%eax 0.00 : 675dc0: 0f 88 bb 01 00 00 js 675f81 : : /* : * Found it. Now, pin the buffer so no one can steal it from the : * buffer pool. : */ : foundbuf = &BufferDescriptors[buf_id]; 0.00 : 675dc6: 48 63 d8 movslq %eax,%rbx : : valid = PinBuffer(foundbuf, strategy); 0.00 : 675dc9: 4c 89 fe mov %r15,%rsi : : /* : * Found it. Now, pin the buffer so no one can steal it from the : * buffer pool. : */ : foundbuf = &BufferDescriptors[buf_id]; 0.00 : 675dcc: 48 c1 e3 06 shl $0x6,%rbx 0.00 : 675dd0: 48 03 1d 29 9d 54 00 add 0x549d29(%rip),%rbx # bbfb00 : : valid = PinBuffer(foundbuf, strategy); 0.00 : 675dd7: 48 89 df mov %rbx,%rdi 0.00 : 675dda: 49 89 dc mov %rbx,%r12 0.00 : 675ddd: e8 4e ee ff ff callq 674c30 0.00 : 675de2: 89 c2 mov %eax,%edx : : /* Check whether someone recycled the buffer before we pinned it. */ : if (!BUFFERTAGS_EQUAL(newTag, foundbuf->tag)) 0.00 : 675de4: 8b 45 b8 mov -0x48(%rbp),%eax 0.00 : 675de7: 3b 43 08 cmp 0x8(%rbx),%eax 0.00 : 675dea: 75 bc jne 675da8 0.00 : 675dec: 8b 45 b4 mov -0x4c(%rbp),%eax 0.00 : 675def: 3b 43 04 cmp 0x4(%rbx),%eax 0.00 : 675df2: 75 b4 jne 675da8 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:842 100.00 : 675df4: 8b 45 b0 mov -0x50(%rbp),%eax 0.00 : 675df7: 3b 03 cmp (%rbx),%eax 0.00 : 675df9: 75 ad jne 675da8 0.00 : 675dfb: 8b 45 c0 mov -0x40(%rbp),%eax 0.00 : 675dfe: 3b 43 10 cmp 0x10(%rbx),%eax 0.00 : 675e01: 75 a5 jne 675da8 0.00 : 675e03: 8b 45 bc mov -0x44(%rbp),%eax 0.00 : 675e06: 3b 43 0c cmp 0xc(%rbx),%eax 0.00 : 675e09: 75 9d jne 675da8 : } : : *foundPtr = TRUE; : : /* Check to see if the correct data has been loaded into the buffer. */ : if (!valid) 0.00 : 675e0b: 84 d2 test %dl,%dl : { : UnpinBuffer(foundbuf, true); : goto start; : } : : *foundPtr = TRUE; 0.00 : 675e0d: c6 45 cf 01 movb $0x1,-0x31(%rbp) : : /* Check to see if the correct data has been loaded into the buffer. */ : if (!valid) 0.00 : 675e11: 0f 84 33 02 00 00 je 67604a : * lookup the buffer. IO_IN_PROGRESS is set if the requested block is : * not currently in memory. : */ : bufHdr = BufferAlloc(smgr, relpersistence, forkNum, blockNum, : strategy, &found); : if (found) 0.00 : 675e17: 80 7d cf 00 cmpb $0x0,-0x31(%rbp) : pgBufferUsage.shared_blks_hit++; 0.00 : 675e1b: 4d 89 e6 mov %r12,%r14 : * lookup the buffer. IO_IN_PROGRESS is set if the requested block is : * not currently in memory. : */ : bufHdr = BufferAlloc(smgr, relpersistence, forkNum, blockNum, : strategy, &found); : if (found) 0.00 : 675e1e: 0f 84 9a 03 00 00 je 6761be : pgBufferUsage.shared_blks_hit++; 0.00 : 675e24: 48 83 05 34 99 54 00 addq $0x1,0x549934(%rip) # bbf760 0.00 : 675e2b: 01 : } : : /* At this point we do NOT hold any locks. */ : : /* if it was already in the buffer pool, we're done */ : if (found) 0.00 : 675e2c: 80 7d cf 00 cmpb $0x0,-0x31(%rbp) 0.00 : 675e30: 0f 85 06 ff ff ff jne 675d3c : * it's not been recycled) but come right back here to try smgrextend : * again. : */ : Assert(!(bufHdr->flags & BM_VALID)); /* spinlock not needed */ : : bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) : BufHdrGetBlock(bufHdr); 0.00 : 675e36: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 675e3a: 0f 84 8b 03 00 00 je 6761cb 0.00 : 675e40: 41 8b 46 24 mov 0x24(%r14),%eax 0.00 : 675e44: ba fe ff ff ff mov $0xfffffffe,%edx 0.00 : 675e49: 29 c2 sub %eax,%edx : : if (isExtend) 0.00 : 675e4b: 80 7d 8e 00 cmpb $0x0,-0x72(%rbp) : * it's not been recycled) but come right back here to try smgrextend : * again. : */ : Assert(!(bufHdr->flags & BM_VALID)); /* spinlock not needed */ : : bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) : BufHdrGetBlock(bufHdr); 0.00 : 675e4f: 48 8b 05 c2 72 50 00 mov 0x5072c2(%rip),%rax # b7d118 0.00 : 675e56: 48 63 d2 movslq %edx,%rdx 0.00 : 675e59: 4c 8b 24 d0 mov (%rax,%rdx,8),%r12 : : if (isExtend) 0.00 : 675e5d: 0f 85 84 03 00 00 jne 6761e7 : { : /* : * Read in the page, unless the caller intends to overwrite it and : * just wants us to allocate a buffer. : */ : if (mode == RBM_ZERO) 0.00 : 675e63: 83 bd 70 ff ff ff 01 cmpl $0x1,-0x90(%rbp) 0.00 : 675e6a: 74 7e je 675eea : else : { : instr_time io_start, : io_time; : : if (track_io_timing) 0.00 : 675e6c: 80 3d ee 71 50 00 00 cmpb $0x0,0x5071ee(%rip) # b7d061 0.00 : 675e73: 0f 85 d1 04 00 00 jne 67634a : INSTR_TIME_SET_CURRENT(io_start); : : smgrread(smgr, forkNum, blockNum, (char *) bufBlock); 0.00 : 675e79: 8b 95 74 ff ff ff mov -0x8c(%rbp),%edx 0.00 : 675e7f: 8b b5 78 ff ff ff mov -0x88(%rbp),%esi 0.00 : 675e85: 4c 89 e1 mov %r12,%rcx 0.00 : 675e88: 48 8b 7d 80 mov -0x80(%rbp),%rdi 0.00 : 675e8c: e8 7f 35 02 00 callq 699410 : : if (track_io_timing) 0.00 : 675e91: 80 3d c9 71 50 00 00 cmpb $0x0,0x5071c9(%rip) # b7d061 0.00 : 675e98: 0f 85 bc 04 00 00 jne 67635a : pgstat_count_buffer_read_time(INSTR_TIME_GET_MICROSEC(io_time)); : INSTR_TIME_ADD(pgBufferUsage.blk_read_time, io_time); : } : : /* check for garbage data */ : if (!PageIsVerified((Page) bufBlock, blockNum)) 0.00 : 675e9e: 8b b5 74 ff ff ff mov -0x8c(%rbp),%esi 0.00 : 675ea4: 4c 89 e7 mov %r12,%rdi 0.00 : 675ea7: e8 24 f0 01 00 callq 694ed0 0.00 : 675eac: 84 c0 test %al,%al 0.00 : 675eae: 75 47 jne 675ef7 : { : if (mode == RBM_ZERO_ON_ERROR || zero_damaged_pages) 0.00 : 675eb0: 83 bd 70 ff ff ff 02 cmpl $0x2,-0x90(%rbp) 0.00 : 675eb7: 74 0d je 675ec6 0.00 : 675eb9: 80 3d a0 71 50 00 00 cmpb $0x0,0x5071a0(%rip) # b7d060 0.00 : 675ec0: 0f 84 51 05 00 00 je 676417 : { : ereport(WARNING, 0.00 : 675ec6: 45 31 c0 xor %r8d,%r8d 0.00 : 675ec9: b9 a0 a0 8a 00 mov $0x8aa0a0,%ecx 0.00 : 675ece: ba f0 02 00 00 mov $0x2f0,%edx 0.00 : 675ed3: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 675ed8: bf 13 00 00 00 mov $0x13,%edi 0.00 : 675edd: e8 de 4b 10 00 callq 77aac0 0.00 : 675ee2: 84 c0 test %al,%al 0.00 : 675ee4: 0f 85 11 04 00 00 jne 6762fb : (errcode(ERRCODE_DATA_CORRUPTED), : errmsg("invalid page in block %u of relation %s; zeroing out page", : blockNum, : relpath(smgr->smgr_rnode, forkNum)))); : MemSet((char *) bufBlock, 0, BLCKSZ); 0.00 : 675eea: b9 00 04 00 00 mov $0x400,%ecx 0.00 : 675eef: 31 c0 xor %eax,%eax 0.00 : 675ef1: 4c 89 e7 mov %r12,%rdi 0.00 : 675ef4: f3 48 ab rep stos %rax,%es:(%rdi) : relpath(smgr->smgr_rnode, forkNum)))); : } : } : } : : if (isLocalBuf) 0.00 : 675ef7: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 675efb: 0f 84 18 03 00 00 je 676219 : { : /* Only need to adjust flags */ : bufHdr->flags |= BM_VALID; 0.00 : 675f01: 41 0f b7 46 14 movzwl 0x14(%r14),%eax 0.00 : 675f06: 83 c8 02 or $0x2,%eax 0.00 : 675f09: 66 41 89 46 14 mov %ax,0x14(%r14) : { : /* Set BM_VALID, terminate IO, and wake up any waiters */ : TerminateBufferIO(bufHdr, false, BM_VALID); : } : : VacuumPageMiss++; 0.00 : 675f0e: 83 05 c3 41 54 00 01 addl $0x1,0x5441c3(%rip) # bba0d8 : if (VacuumCostActive) 0.00 : 675f15: 80 3d c8 41 54 00 00 cmpb $0x0,0x5441c8(%rip) # bba0e4 0.00 : 675f1c: 0f 84 47 fe ff ff je 675d69 : VacuumCostBalance += VacuumCostPageMiss; 0.00 : 675f22: 8b 05 08 2c 4f 00 mov 0x4f2c08(%rip),%eax # b68b30 0.00 : 675f28: 01 05 b2 41 54 00 add %eax,0x5441b2(%rip) # bba0e0 0.00 : 675f2e: e9 36 fe ff ff jmpq 675d69 0.00 : 675f33: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : } : : /* : * Need to lock the buffer header too in order to change its tag. : */ : LockBufHdr(buf); 0.00 : 675f38: 49 8d 5e 20 lea 0x20(%r14),%rbx : static __inline__ int : tas(volatile slock_t *lock) : { : register slock_t _res = 1; : : __asm__ __volatile__( 0.00 : 675f3c: b8 01 00 00 00 mov $0x1,%eax 0.00 : 675f41: f0 86 03 lock xchg %al,(%rbx) 0.00 : 675f44: 84 c0 test %al,%al 0.00 : 675f46: 0f 85 a4 01 00 00 jne 6760f0 : * Somebody could have pinned or re-dirtied the buffer while we were : * doing the I/O and making the new hashtable entry. If so, we can't : * recycle this buffer; we must undo everything we've done and start : * over with a new victim buffer. : */ : oldFlags = buf->flags; 0.00 : 675f4c: 41 0f b7 56 14 movzwl 0x14(%r14),%edx : if (buf->refcount == 1 && !(oldFlags & BM_DIRTY)) 0.00 : 675f51: 41 8b 46 18 mov 0x18(%r14),%eax 0.00 : 675f55: 83 e8 01 sub $0x1,%eax 0.00 : 675f58: 75 0c jne 675f66 0.00 : 675f5a: 0f b7 d2 movzwl %dx,%edx 0.00 : 675f5d: f6 c2 01 test $0x1,%dl 0.00 : 675f60: 0f 84 ec 01 00 00 je 676152 : break; : : UnlockBufHdr(buf); : BufTableDelete(&newTag); 0.00 : 675f66: 48 8d 7d b0 lea -0x50(%rbp),%rdi : */ : oldFlags = buf->flags; : if (buf->refcount == 1 && !(oldFlags & BM_DIRTY)) : break; : : UnlockBufHdr(buf); 0.00 : 675f6a: 41 c6 46 20 00 movb $0x0,0x20(%r14) : BufTableDelete(&newTag); 0.00 : 675f6f: e8 dc dd ff ff callq 673d50 : UnpinBuffer(buf, true); 0.00 : 675f74: be 01 00 00 00 mov $0x1,%esi 0.00 : 675f79: 4c 89 f7 mov %r14,%rdi 0.00 : 675f7c: e8 af ed ff ff callq 674d30 : { : /* : * Select a victim buffer. The buffer is returned with its header : * spinlock still held! : */ : buf = StrategyGetBuffer(strategy); 0.00 : 675f81: 4c 89 ff mov %r15,%rdi 0.00 : 675f84: e8 d7 15 00 00 callq 677560 : : Assert(buf->refcount == 0); : : /* Must copy buffer flags while we still hold the spinlock */ : oldFlags = buf->flags; 0.00 : 675f89: 0f b7 58 14 movzwl 0x14(%rax),%ebx : : /* Pin the buffer and then release the buffer spinlock */ : PinBuffer_Locked(buf); 0.00 : 675f8d: 48 89 c7 mov %rax,%rdi : { : /* : * Select a victim buffer. The buffer is returned with its header : * spinlock still held! : */ : buf = StrategyGetBuffer(strategy); 0.00 : 675f90: 49 89 c6 mov %rax,%r14 : : /* Must copy buffer flags while we still hold the spinlock */ : oldFlags = buf->flags; : : /* Pin the buffer and then release the buffer spinlock */ : PinBuffer_Locked(buf); 0.00 : 675f93: e8 38 ec ff ff callq 674bd0 : * condition here, in that someone might dirty it after we released it : * above, or even while we are writing it out (since our share-lock : * won't prevent hint-bit updates). We will recheck the dirty bit : * after re-locking the buffer header. : */ : if (oldFlags & BM_DIRTY) 0.00 : 675f98: 0f b7 db movzwl %bx,%ebx 0.00 : 675f9b: f6 c3 01 test $0x1,%bl 0.00 : 675f9e: 0f 85 cc 00 00 00 jne 676070 : : /* : * To change the association of a valid buffer, we'll need to have : * exclusive lock on both the old and new mapping partitions. : */ : if (oldFlags & BM_TAG_VALID) 0.00 : 675fa4: 83 e3 04 and $0x4,%ebx 0.00 : 675fa7: 74 2c je 675fd5 : { : /* Save old tag. */ : oldTag = buf->tag; 0.00 : 675fa9: 49 8b 06 mov (%r14),%rax 0.00 : 675fac: 48 89 45 90 mov %rax,-0x70(%rbp) 0.00 : 675fb0: 49 8b 46 08 mov 0x8(%r14),%rax 0.00 : 675fb4: 48 89 45 98 mov %rax,-0x68(%rbp) 0.00 : 675fb8: 41 8b 46 10 mov 0x10(%r14),%eax 0.00 : 675fbc: 89 45 a0 mov %eax,-0x60(%rbp) 0.00 : 675fbf: eb 14 jmp 675fd5 0.00 : 675fc1: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : */ : foundbuf = &BufferDescriptors[buf_id]; : valid = PinBuffer(foundbuf, strategy); : if (!BUFFERTAGS_EQUAL(newTag, foundbuf->tag)) : { : UnpinBuffer(foundbuf, true); 0.00 : 675fc8: be 01 00 00 00 mov $0x1,%esi 0.00 : 675fcd: 48 89 df mov %rbx,%rdi 0.00 : 675fd0: e8 5b ed ff ff callq 674d30 : * allocated another buffer for the same block we want to read in. : * Note that we have not yet removed the hashtable entry for the old : * tag. : */ : enter: : buf_id = BufTableInsert(&newTag, buf->buf_id); 0.00 : 675fd5: 41 8b 76 24 mov 0x24(%r14),%esi 0.00 : 675fd9: 48 8d 7d b0 lea -0x50(%rbp),%rdi 0.00 : 675fdd: e8 be dd ff ff callq 673da0 : : if (buf_id >= 0) 0.00 : 675fe2: 85 c0 test %eax,%eax 0.00 : 675fe4: 0f 88 4e ff ff ff js 675f38 : * did what we were about to do. We can handle this as if we had : * found the buffer in the pool in the first place, but we must : * recheck the buffer tag after pinning it, because it could still : * get renamed under us. : */ : foundbuf = &BufferDescriptors[buf_id]; 0.00 : 675fea: 48 63 d8 movslq %eax,%rbx : valid = PinBuffer(foundbuf, strategy); 0.00 : 675fed: 4c 89 fe mov %r15,%rsi : * did what we were about to do. We can handle this as if we had : * found the buffer in the pool in the first place, but we must : * recheck the buffer tag after pinning it, because it could still : * get renamed under us. : */ : foundbuf = &BufferDescriptors[buf_id]; 0.00 : 675ff0: 48 c1 e3 06 shl $0x6,%rbx 0.00 : 675ff4: 48 03 1d 05 9b 54 00 add 0x549b05(%rip),%rbx # bbfb00 : valid = PinBuffer(foundbuf, strategy); 0.00 : 675ffb: 48 89 df mov %rbx,%rdi 0.00 : 675ffe: 49 89 dc mov %rbx,%r12 0.00 : 676001: e8 2a ec ff ff callq 674c30 0.00 : 676006: 41 89 c5 mov %eax,%r13d : if (!BUFFERTAGS_EQUAL(newTag, foundbuf->tag)) 0.00 : 676009: 8b 45 b8 mov -0x48(%rbp),%eax 0.00 : 67600c: 3b 43 08 cmp 0x8(%rbx),%eax 0.00 : 67600f: 75 b7 jne 675fc8 0.00 : 676011: 8b 45 b4 mov -0x4c(%rbp),%eax 0.00 : 676014: 3b 43 04 cmp 0x4(%rbx),%eax 0.00 : 676017: 75 af jne 675fc8 0.00 : 676019: 8b 45 b0 mov -0x50(%rbp),%eax 0.00 : 67601c: 3b 03 cmp (%rbx),%eax 0.00 : 67601e: 75 a8 jne 675fc8 0.00 : 676020: 8b 45 c0 mov -0x40(%rbp),%eax 0.00 : 676023: 3b 43 10 cmp 0x10(%rbx),%eax 0.00 : 676026: 75 a0 jne 675fc8 0.00 : 676028: 8b 45 bc mov -0x44(%rbp),%eax 0.00 : 67602b: 3b 43 0c cmp 0xc(%rbx),%eax 0.00 : 67602e: 75 98 jne 675fc8 : : /* : * Collision confirmed. Give up the buffer we were planning to : * use. : */ : UnpinBuffer(buf, true); 0.00 : 676030: be 01 00 00 00 mov $0x1,%esi 0.00 : 676035: 4c 89 f7 mov %r14,%rdi 0.00 : 676038: e8 f3 ec ff ff callq 674d30 : : *foundPtr = TRUE; : : if (!valid) 0.00 : 67603d: 45 84 ed test %r13b,%r13b : * Collision confirmed. Give up the buffer we were planning to : * use. : */ : UnpinBuffer(buf, true); : : *foundPtr = TRUE; 0.00 : 676040: c6 45 cf 01 movb $0x1,-0x31(%rbp) : : if (!valid) 0.00 : 676044: 0f 85 cd fd ff ff jne 675e17 : * in the page, or (b) a previous read attempt failed. We : * have to wait for any active read attempt to finish, and : * then set up our own read attempt if the page is still not : * BM_VALID. StartBufferIO does it all. : */ : if (StartBufferIO(foundbuf, true)) 0.00 : 67604a: be 01 00 00 00 mov $0x1,%esi 0.00 : 67604f: 4c 89 e7 mov %r12,%rdi 0.00 : 676052: e8 e9 e3 ff ff callq 674440 0.00 : 676057: 84 c0 test %al,%al 0.00 : 676059: 0f 84 b8 fd ff ff je 675e17 : { : /* : * If we get here, previous attempts to read the buffer : * must have failed ... but we shall bravely try again. : */ : *foundPtr = FALSE; 0.00 : 67605f: c6 45 cf 00 movb $0x0,-0x31(%rbp) 0.00 : 676063: e9 af fd ff ff jmpq 675e17 0.00 : 676068: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 67606f: 00 : * (This has been observed to happen when two backends are both : * trying to split btree index pages, and the second one just : * happens to be trying to split the page the first one got from : * StrategyGetBuffer.) : */ : if (LWLockConditionalAcquire(buf->content_lock, LW_SHARED)) 0.00 : 676070: 49 8b 7e 38 mov 0x38(%r14),%rdi 0.00 : 676074: be 01 00 00 00 mov $0x1,%esi 0.00 : 676079: e8 22 8f 01 00 callq 68efa0 0.00 : 67607e: 84 c0 test %al,%al 0.00 : 676080: 0f 84 ee fe ff ff je 675f74 : * would require a WAL flush, let the strategy decide whether : * to go ahead and write/reuse the buffer or to choose another : * victim. We need lock to inspect the page LSN, so this : * can't be done inside StrategyGetBuffer. : */ : if (strategy != NULL) 0.00 : 676086: 4d 85 ff test %r15,%r15 0.00 : 676089: 74 4c je 6760d7 : { : XLogRecPtr lsn; : : /* Read the LSN while holding buffer header lock */ : LockBufHdr(buf); 0.00 : 67608b: 49 8d 7e 20 lea 0x20(%r14),%rdi 0.00 : 67608f: b8 01 00 00 00 mov $0x1,%eax 0.00 : 676094: f0 86 07 lock xchg %al,(%rdi) 0.00 : 676097: 84 c0 test %al,%al 0.00 : 676099: 0f 85 92 00 00 00 jne 676131 : lsn = BufferGetLSN(buf); 0.00 : 67609f: 41 8b 46 24 mov 0x24(%r14),%eax 0.00 : 6760a3: 41 8b 56 24 mov 0x24(%r14),%edx 0.00 : 6760a7: 48 8b 0d 4a 9a 54 00 mov 0x549a4a(%rip),%rcx # bbfaf8 0.00 : 6760ae: 48 98 cltq 0.00 : 6760b0: 48 63 d2 movslq %edx,%rdx 0.00 : 6760b3: 48 c1 e0 0d shl $0xd,%rax 0.00 : 6760b7: 48 c1 e2 0d shl $0xd,%rdx 0.00 : 6760bb: 8b 3c 01 mov (%rcx,%rax,1),%edi 0.00 : 6760be: 8b 44 11 04 mov 0x4(%rcx,%rdx,1),%eax 0.00 : 6760c2: 48 c1 e7 20 shl $0x20,%rdi 0.00 : 6760c6: 48 09 c7 or %rax,%rdi : UnlockBufHdr(buf); 0.00 : 6760c9: 41 c6 46 20 00 movb $0x0,0x20(%r14) : : if (XLogNeedsFlush(lsn) && 0.00 : 6760ce: e8 dd dc e5 ff callq 4d3db0 0.00 : 6760d3: 84 c0 test %al,%al 0.00 : 6760d5: 75 30 jne 676107 : TRACE_POSTGRESQL_BUFFER_WRITE_DIRTY_START(forkNum, blockNum, : smgr->smgr_rnode.node.spcNode, : smgr->smgr_rnode.node.dbNode, : smgr->smgr_rnode.node.relNode); : : FlushBuffer(buf, NULL); 0.00 : 6760d7: 4c 89 f7 mov %r14,%rdi 0.00 : 6760da: 31 f6 xor %esi,%esi 0.00 : 6760dc: e8 6f ee ff ff callq 674f50 : LWLockRelease(buf->content_lock); 0.00 : 6760e1: 49 8b 7e 38 mov 0x38(%r14),%rdi 0.00 : 6760e5: e8 b6 92 01 00 callq 68f3a0 0.00 : 6760ea: e9 b5 fe ff ff jmpq 675fa4 0.00 : 6760ef: 90 nop : } : : /* : * Need to lock the buffer header too in order to change its tag. : */ : LockBufHdr(buf); 0.00 : 6760f0: ba 0f 04 00 00 mov $0x40f,%edx 0.00 : 6760f5: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 6760fa: 48 89 df mov %rbx,%rdi 0.00 : 6760fd: e8 3e 9f 01 00 callq 690040 0.00 : 676102: e9 45 fe ff ff jmpq 675f4c : /* Read the LSN while holding buffer header lock */ : LockBufHdr(buf); : lsn = BufferGetLSN(buf); : UnlockBufHdr(buf); : : if (XLogNeedsFlush(lsn) && 0.00 : 676107: 4c 89 f6 mov %r14,%rsi 0.00 : 67610a: 4c 89 ff mov %r15,%rdi 0.00 : 67610d: e8 0e 11 00 00 callq 677220 0.00 : 676112: 84 c0 test %al,%al 0.00 : 676114: 74 c1 je 6760d7 : StrategyRejectBuffer(strategy, buf)) : { : /* Drop lock/pin and loop around for another buffer */ : LWLockRelease(buf->content_lock); 0.00 : 676116: 49 8b 7e 38 mov 0x38(%r14),%rdi 0.00 : 67611a: e8 81 92 01 00 callq 68f3a0 : UnpinBuffer(buf, true); 0.00 : 67611f: be 01 00 00 00 mov $0x1,%esi 0.00 : 676124: 4c 89 f7 mov %r14,%rdi 0.00 : 676127: e8 04 ec ff ff callq 674d30 0.00 : 67612c: e9 50 fe ff ff jmpq 675f81 : if (strategy != NULL) : { : XLogRecPtr lsn; : : /* Read the LSN while holding buffer header lock */ : LockBufHdr(buf); 0.00 : 676131: ba a0 03 00 00 mov $0x3a0,%edx 0.00 : 676136: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 67613b: e8 00 9f 01 00 callq 690040 0.00 : 676140: e9 5a ff ff ff jmpq 67609f : : if (isLocalBuf) : { : bufHdr = LocalBufferAlloc(smgr, forkNum, blockNum, &found); : if (found) : pgBufferUsage.local_blks_hit++; 0.00 : 676145: 48 83 05 33 96 54 00 addq $0x1,0x549633(%rip) # bbf780 0.00 : 67614c: 01 0.00 : 67614d: e9 e0 fb ff ff jmpq 675d32 : * Clearing BM_VALID here is necessary, clearing the dirtybits is just : * paranoia. We also reset the usage_count since any recency of use of : * the old content is no longer relevant. (The usage_count starts out at : * 1 so that the buffer can survive one clock-sweep pass.) : */ : buf->tag = newTag; 0.00 : 676152: 48 8b 45 b0 mov -0x50(%rbp),%rax 0.00 : 676156: 49 89 06 mov %rax,(%r14) 0.00 : 676159: 48 8b 45 b8 mov -0x48(%rbp),%rax 0.00 : 67615d: 49 89 46 08 mov %rax,0x8(%r14) 0.00 : 676161: 8b 45 c0 mov -0x40(%rbp),%eax 0.00 : 676164: 41 89 46 10 mov %eax,0x10(%r14) : buf->flags &= ~(BM_VALID | BM_DIRTY | BM_JUST_DIRTIED | BM_CHECKPOINT_NEEDED | BM_IO_ERROR | BM_PERMANENT); 0.00 : 676168: 41 0f b7 46 14 movzwl 0x14(%r14),%eax 0.00 : 67616d: 66 25 4c fe and $0xfe4c,%ax 0.00 : 676171: 66 41 89 46 14 mov %ax,0x14(%r14) : if (relpersistence == RELPERSISTENCE_PERMANENT) 0.00 : 676176: 80 bd 7f ff ff ff 70 cmpb $0x70,-0x81(%rbp) 0.00 : 67617d: 0f 84 73 02 00 00 je 6763f6 : buf->flags |= BM_TAG_VALID | BM_PERMANENT; : else : buf->flags |= BM_TAG_VALID; 0.00 : 676183: 41 0f b7 46 14 movzwl 0x14(%r14),%eax 0.00 : 676188: 83 c8 04 or $0x4,%eax 0.00 : 67618b: 66 41 89 46 14 mov %ax,0x14(%r14) : buf->usage_count = 1; 0.00 : 676190: 66 41 c7 46 16 01 00 movw $0x1,0x16(%r14) : : UnlockBufHdr(buf); : : if (oldFlags & BM_TAG_VALID) 0.00 : 676197: 83 e2 04 and $0x4,%edx : buf->flags |= BM_TAG_VALID | BM_PERMANENT; : else : buf->flags |= BM_TAG_VALID; : buf->usage_count = 1; : : UnlockBufHdr(buf); 0.00 : 67619a: 41 c6 46 20 00 movb $0x0,0x20(%r14) : : if (oldFlags & BM_TAG_VALID) 0.00 : 67619f: 0f 85 64 02 00 00 jne 676409 : /* : * Buffer contents are currently invalid. Try to get the io_in_progress : * lock. If StartBufferIO returns false, then someone else managed to : * read it before we did, so there's nothing left for BufferAlloc() to do. : */ : if (StartBufferIO(buf, true)) 0.00 : 6761a5: be 01 00 00 00 mov $0x1,%esi 0.00 : 6761aa: 4c 89 f7 mov %r14,%rdi 0.00 : 6761ad: e8 8e e2 ff ff callq 674440 0.00 : 6761b2: 84 c0 test %al,%al 0.00 : 6761b4: 0f 84 d5 00 00 00 je 67628f : *foundPtr = FALSE; 0.00 : 6761ba: c6 45 cf 00 movb $0x0,-0x31(%rbp) : bufHdr = BufferAlloc(smgr, relpersistence, forkNum, blockNum, : strategy, &found); : if (found) : pgBufferUsage.shared_blks_hit++; : else : pgBufferUsage.shared_blks_read++; 0.00 : 6761be: 48 83 05 a2 95 54 00 addq $0x1,0x5495a2(%rip) # bbf768 0.00 : 6761c5: 01 0.00 : 6761c6: e9 67 fb ff ff jmpq 675d32 : * it's not been recycled) but come right back here to try smgrextend : * again. : */ : Assert(!(bufHdr->flags & BM_VALID)); /* spinlock not needed */ : : bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) : BufHdrGetBlock(bufHdr); 0.00 : 6761cb: 41 8b 46 24 mov 0x24(%r14),%eax 0.00 : 6761cf: 4c 63 e0 movslq %eax,%r12 0.00 : 6761d2: 49 c1 e4 0d shl $0xd,%r12 0.00 : 6761d6: 4c 03 25 1b 99 54 00 add 0x54991b(%rip),%r12 # bbfaf8 : : if (isExtend) 0.00 : 6761dd: 80 7d 8e 00 cmpb $0x0,-0x72(%rbp) 0.00 : 6761e1: 0f 84 7c fc ff ff je 675e63 : { : /* new buffers are zero-filled */ : MemSet((char *) bufBlock, 0, BLCKSZ); 0.00 : 6761e7: 31 c0 xor %eax,%eax 0.00 : 6761e9: b9 00 04 00 00 mov $0x400,%ecx 0.00 : 6761ee: 4c 89 e7 mov %r12,%rdi 0.00 : 6761f1: f3 48 ab rep stos %rax,%es:(%rdi) : /* don't set checksum for all-zero page */ : smgrextend(smgr, forkNum, blockNum, (char *) bufBlock, false); 0.00 : 6761f4: 45 31 c0 xor %r8d,%r8d 0.00 : 6761f7: 4c 89 e1 mov %r12,%rcx 0.00 : 6761fa: 8b 95 74 ff ff ff mov -0x8c(%rbp),%edx 0.00 : 676200: 8b b5 78 ff ff ff mov -0x88(%rbp),%esi 0.00 : 676206: 48 8b 7d 80 mov -0x80(%rbp),%rdi 0.00 : 67620a: e8 c1 31 02 00 callq 6993d0 : relpath(smgr->smgr_rnode, forkNum)))); : } : } : } : : if (isLocalBuf) 0.00 : 67620f: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 676213: 0f 85 e8 fc ff ff jne 675f01 : bufHdr->flags |= BM_VALID; : } : else : { : /* Set BM_VALID, terminate IO, and wake up any waiters */ : TerminateBufferIO(bufHdr, false, BM_VALID); 0.00 : 676219: ba 02 00 00 00 mov $0x2,%edx 0.00 : 67621e: 31 f6 xor %esi,%esi 0.00 : 676220: 4c 89 f7 mov %r14,%rdi 0.00 : 676223: e8 a8 df ff ff callq 6741d0 0.00 : 676228: e9 e1 fc ff ff jmpq 675f0e : smgr->smgr_rnode.backend, : isExtend); : : /* Substitute proper block number if caller asked for P_NEW */ : if (isExtend) : blockNum = smgrnblocks(smgr, forkNum); 0.00 : 67622d: 8b b5 78 ff ff ff mov -0x88(%rbp),%esi 0.00 : 676233: 48 8b 7d 80 mov -0x80(%rbp),%rdi 0.00 : 676237: e8 14 32 02 00 callq 699450 0.00 : 67623c: 89 85 74 ff ff ff mov %eax,-0x8c(%rbp) 0.00 : 676242: e9 b7 fa ff ff jmpq 675cfe : * lseek(SEEK_END) result that doesn't account for a recent write. In : * that situation, the pre-existing buffer would contain valid data : * that we don't want to overwrite. Since the legitimate case should : * always have left a zero-filled buffer, complain if not PageIsNew. : */ : bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) : BufHdrGetBlock(bufHdr); 0.00 : 676247: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 67624b: 0f 85 8c 00 00 00 jne 6762dd 0.00 : 676251: 41 8b 46 24 mov 0x24(%r14),%eax 0.00 : 676255: 48 98 cltq 0.00 : 676257: 48 c1 e0 0d shl $0xd,%rax 0.00 : 67625b: 48 03 05 96 98 54 00 add 0x549896(%rip),%rax # bbfaf8 : if (!PageIsNew((Page) bufBlock)) 0.00 : 676262: 66 83 78 0e 00 cmpw $0x0,0xe(%rax) 0.00 : 676267: 0f 85 19 02 00 00 jne 676486 : * We *must* do smgrextend before succeeding, else the page will not : * be reserved by the kernel, and the next P_NEW call will decide to : * return the same page. Clear the BM_VALID bit, do the StartBufferIO : * call that BufferAlloc didn't, and proceed. : */ : if (isLocalBuf) 0.00 : 67626d: 80 7d 8f 00 cmpb $0x0,-0x71(%rbp) 0.00 : 676271: 49 8d 5e 20 lea 0x20(%r14),%rbx 0.00 : 676275: 41 bc 01 00 00 00 mov $0x1,%r12d 0.00 : 67627b: 74 54 je 6762d1 : { : /* Only need to adjust flags */ : Assert(bufHdr->flags & BM_VALID); : bufHdr->flags &= ~BM_VALID; 0.00 : 67627d: 41 0f b7 46 14 movzwl 0x14(%r14),%eax 0.00 : 676282: 83 e0 fd and $0xfffffffd,%eax 0.00 : 676285: 66 41 89 46 14 mov %ax,0x14(%r14) 0.00 : 67628a: e9 b1 fb ff ff jmpq 675e40 : * read it before we did, so there's nothing left for BufferAlloc() to do. : */ : if (StartBufferIO(buf, true)) : *foundPtr = FALSE; : else : *foundPtr = TRUE; 0.00 : 67628f: c6 45 cf 01 movb $0x1,-0x31(%rbp) 0.00 : 676293: e9 8c fb ff ff jmpq 675e24 : * BM_VALID between our clearing it and StartBufferIO inspecting : * it. : */ : do : { : LockBufHdr(bufHdr); 0.00 : 676298: ba ae 02 00 00 mov $0x2ae,%edx 0.00 : 67629d: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 6762a2: 48 89 df mov %rbx,%rdi 0.00 : 6762a5: e8 96 9d 01 00 callq 690040 : Assert(bufHdr->flags & BM_VALID); : bufHdr->flags &= ~BM_VALID; 0.00 : 6762aa: 41 0f b7 46 14 movzwl 0x14(%r14),%eax 0.00 : 6762af: 83 e0 fd and $0xfffffffd,%eax 0.00 : 6762b2: 66 41 89 46 14 mov %ax,0x14(%r14) : UnlockBufHdr(bufHdr); : } while (!StartBufferIO(bufHdr, true)); 0.00 : 6762b7: be 01 00 00 00 mov $0x1,%esi : do : { : LockBufHdr(bufHdr); : Assert(bufHdr->flags & BM_VALID); : bufHdr->flags &= ~BM_VALID; : UnlockBufHdr(bufHdr); 0.00 : 6762bc: 41 c6 46 20 00 movb $0x0,0x20(%r14) : } while (!StartBufferIO(bufHdr, true)); 0.00 : 6762c1: 4c 89 f7 mov %r14,%rdi 0.00 : 6762c4: e8 77 e1 ff ff callq 674440 0.00 : 6762c9: 84 c0 test %al,%al 0.00 : 6762cb: 0f 85 fa fe ff ff jne 6761cb 0.00 : 6762d1: 44 89 e0 mov %r12d,%eax 0.00 : 6762d4: f0 86 03 lock xchg %al,(%rbx) : * BM_VALID between our clearing it and StartBufferIO inspecting : * it. : */ : do : { : LockBufHdr(bufHdr); 0.00 : 6762d7: 84 c0 test %al,%al 0.00 : 6762d9: 74 cf je 6762aa 0.00 : 6762db: eb bb jmp 676298 : * lseek(SEEK_END) result that doesn't account for a recent write. In : * that situation, the pre-existing buffer would contain valid data : * that we don't want to overwrite. Since the legitimate case should : * always have left a zero-filled buffer, complain if not PageIsNew. : */ : bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) : BufHdrGetBlock(bufHdr); 0.00 : 6762dd: 41 8b 46 24 mov 0x24(%r14),%eax 0.00 : 6762e1: ba fe ff ff ff mov $0xfffffffe,%edx 0.00 : 6762e6: 29 c2 sub %eax,%edx 0.00 : 6762e8: 48 8b 05 29 6e 50 00 mov 0x506e29(%rip),%rax # b7d118 0.00 : 6762ef: 48 63 d2 movslq %edx,%rdx 0.00 : 6762f2: 48 8b 04 d0 mov (%rax,%rdx,8),%rax 0.00 : 6762f6: e9 67 ff ff ff jmpq 676262 : /* check for garbage data */ : if (!PageIsVerified((Page) bufBlock, blockNum)) : { : if (mode == RBM_ZERO_ON_ERROR || zero_damaged_pages) : { : ereport(WARNING, 0.00 : 6762fb: 48 8b 55 80 mov -0x80(%rbp),%rdx 0.00 : 6762ff: 44 8b 85 78 ff ff ff mov -0x88(%rbp),%r8d 0.00 : 676306: 48 89 d0 mov %rdx,%rax 0.00 : 676309: 8b 4a 0c mov 0xc(%rdx),%ecx 0.00 : 67630c: 8b 52 08 mov 0x8(%rdx),%edx 0.00 : 67630f: 8b 78 04 mov 0x4(%rax),%edi 0.00 : 676312: 8b 30 mov (%rax),%esi 0.00 : 676314: e8 b7 82 13 00 callq 7ae5d0 0.00 : 676319: 8b b5 74 ff ff ff mov -0x8c(%rbp),%esi 0.00 : 67631f: 48 89 c2 mov %rax,%rdx 0.00 : 676322: bf c8 9e 8a 00 mov $0x8a9ec8,%edi 0.00 : 676327: 31 c0 xor %eax,%eax 0.00 : 676329: e8 72 65 10 00 callq 77c8a0 0.00 : 67632e: bf 28 0a 00 01 mov $0x1000a28,%edi 0.00 : 676333: 89 c3 mov %eax,%ebx 0.00 : 676335: e8 16 6a 10 00 callq 77cd50 0.00 : 67633a: 89 de mov %ebx,%esi 0.00 : 67633c: 89 c7 mov %eax,%edi 0.00 : 67633e: 31 c0 xor %eax,%eax 0.00 : 676340: e8 9b 42 10 00 callq 77a5e0 0.00 : 676345: e9 a0 fb ff ff jmpq 675eea : { : instr_time io_start, : io_time; : : if (track_io_timing) : INSTR_TIME_SET_CURRENT(io_start); 0.00 : 67634a: 48 8d 7d 90 lea -0x70(%rbp),%rdi 0.00 : 67634e: 31 f6 xor %esi,%esi 0.00 : 676350: e8 6b 32 df ff callq 4695c0 0.00 : 676355: e9 1f fb ff ff jmpq 675e79 : : smgrread(smgr, forkNum, blockNum, (char *) bufBlock); : : if (track_io_timing) : { : INSTR_TIME_SET_CURRENT(io_time); 0.00 : 67635a: 48 8d 7d b0 lea -0x50(%rbp),%rdi 0.00 : 67635e: 31 f6 xor %esi,%esi 0.00 : 676360: e8 5b 32 df ff callq 4695c0 : INSTR_TIME_SUBTRACT(io_time, io_start); 0.00 : 676365: 48 8b 55 b8 mov -0x48(%rbp),%rdx 0.00 : 676369: 48 2b 55 98 sub -0x68(%rbp),%rdx 0.00 : 67636d: 48 8b 45 b0 mov -0x50(%rbp),%rax 0.00 : 676371: 48 2b 45 90 sub -0x70(%rbp),%rax 0.00 : 676375: 48 85 d2 test %rdx,%rdx 0.00 : 676378: 48 89 55 b8 mov %rdx,-0x48(%rbp) 0.00 : 67637c: 48 89 c1 mov %rax,%rcx 0.00 : 67637f: 48 89 45 b0 mov %rax,-0x50(%rbp) 0.00 : 676383: 79 18 jns 67639d : */ : static Buffer : ReadBuffer_common(SMgrRelation smgr, char relpersistence, ForkNumber forkNum, : BlockNumber blockNum, ReadBufferMode mode, : BufferAccessStrategy strategy, bool *hit) : { 0.00 : 676385: 48 83 e8 01 sub $0x1,%rax : smgrread(smgr, forkNum, blockNum, (char *) bufBlock); : : if (track_io_timing) : { : INSTR_TIME_SET_CURRENT(io_time); : INSTR_TIME_SUBTRACT(io_time, io_start); 0.00 : 676389: 48 81 c2 40 42 0f 00 add $0xf4240,%rdx 0.00 : 676390: 78 f3 js 676385 0.00 : 676392: 48 89 45 b0 mov %rax,-0x50(%rbp) 0.00 : 676396: 48 89 55 b8 mov %rdx,-0x48(%rbp) 0.00 : 67639a: 48 89 c1 mov %rax,%rcx : pgstat_count_buffer_read_time(INSTR_TIME_GET_MICROSEC(io_time)); 0.00 : 67639d: 48 69 c1 40 42 0f 00 imul $0xf4240,%rcx,%rax : INSTR_TIME_ADD(pgBufferUsage.blk_read_time, io_time); 0.00 : 6763a4: 48 01 0d 05 94 54 00 add %rcx,0x549405(%rip) # bbf7b0 : : if (track_io_timing) : { : INSTR_TIME_SET_CURRENT(io_time); : INSTR_TIME_SUBTRACT(io_time, io_start); : pgstat_count_buffer_read_time(INSTR_TIME_GET_MICROSEC(io_time)); 0.00 : 6763ab: 48 8d 04 02 lea (%rdx,%rax,1),%rax 0.00 : 6763af: 48 01 05 0a 58 50 00 add %rax,0x50580a(%rip) # b7bbc0 : INSTR_TIME_ADD(pgBufferUsage.blk_read_time, io_time); 0.00 : 6763b6: 48 8b 05 fb 93 54 00 mov 0x5493fb(%rip),%rax # bbf7b8 0.00 : 6763bd: 48 03 45 b8 add -0x48(%rbp),%rax 0.00 : 6763c1: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 6763c7: 48 89 05 ea 93 54 00 mov %rax,0x5493ea(%rip) # bbf7b8 0.00 : 6763ce: 0f 8e ca fa ff ff jle 675e9e 0.00 : 6763d4: 48 2d 40 42 0f 00 sub $0xf4240,%rax 0.00 : 6763da: 48 83 05 ce 93 54 00 addq $0x1,0x5493ce(%rip) # bbf7b0 0.00 : 6763e1: 01 0.00 : 6763e2: 48 3d 3f 42 0f 00 cmp $0xf423f,%rax 0.00 : 6763e8: 48 89 05 c9 93 54 00 mov %rax,0x5493c9(%rip) # bbf7b8 0.00 : 6763ef: 7f e3 jg 6763d4 0.00 : 6763f1: e9 a8 fa ff ff jmpq 675e9e : * 1 so that the buffer can survive one clock-sweep pass.) : */ : buf->tag = newTag; : buf->flags &= ~(BM_VALID | BM_DIRTY | BM_JUST_DIRTIED | BM_CHECKPOINT_NEEDED | BM_IO_ERROR | BM_PERMANENT); : if (relpersistence == RELPERSISTENCE_PERMANENT) : buf->flags |= BM_TAG_VALID | BM_PERMANENT; 0.00 : 6763f6: 41 0f b7 46 14 movzwl 0x14(%r14),%eax 0.00 : 6763fb: 66 0d 04 01 or $0x104,%ax 0.00 : 6763ff: 66 41 89 46 14 mov %ax,0x14(%r14) 0.00 : 676404: e9 87 fd ff ff jmpq 676190 : buf->usage_count = 1; : : UnlockBufHdr(buf); : : if (oldFlags & BM_TAG_VALID) : BufTableDelete(&oldTag); 0.00 : 676409: 48 8d 7d 90 lea -0x70(%rbp),%rdi 0.00 : 67640d: e8 3e d9 ff ff callq 673d50 0.00 : 676412: e9 8e fd ff ff jmpq 6761a5 : blockNum, : relpath(smgr->smgr_rnode, forkNum)))); : MemSet((char *) bufBlock, 0, BLCKSZ); : } : else : ereport(ERROR, 0.00 : 676417: 45 31 c0 xor %r8d,%r8d 0.00 : 67641a: b9 a0 a0 8a 00 mov $0x8aa0a0,%ecx 0.00 : 67641f: ba f8 02 00 00 mov $0x2f8,%edx 0.00 : 676424: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 676429: bf 14 00 00 00 mov $0x14,%edi 0.00 : 67642e: e8 8d 46 10 00 callq 77aac0 0.00 : 676433: 84 c0 test %al,%al 0.00 : 676435: 74 4a je 676481 0.00 : 676437: 48 8b 55 80 mov -0x80(%rbp),%rdx 0.00 : 67643b: 44 8b 85 78 ff ff ff mov -0x88(%rbp),%r8d 0.00 : 676442: 48 89 d0 mov %rdx,%rax 0.00 : 676445: 8b 4a 0c mov 0xc(%rdx),%ecx 0.00 : 676448: 8b 52 08 mov 0x8(%rdx),%edx 0.00 : 67644b: 8b 78 04 mov 0x4(%rax),%edi 0.00 : 67644e: 8b 30 mov (%rax),%esi 0.00 : 676450: e8 7b 81 13 00 callq 7ae5d0 0.00 : 676455: 8b b5 74 ff ff ff mov -0x8c(%rbp),%esi 0.00 : 67645b: 48 89 c2 mov %rax,%rdx 0.00 : 67645e: bf 48 28 88 00 mov $0x882848,%edi 0.00 : 676463: 31 c0 xor %eax,%eax 0.00 : 676465: e8 36 64 10 00 callq 77c8a0 0.00 : 67646a: bf 28 0a 00 01 mov $0x1000a28,%edi 0.00 : 67646f: 89 c3 mov %eax,%ebx 0.00 : 676471: e8 da 68 10 00 callq 77cd50 0.00 : 676476: 89 de mov %ebx,%esi 0.00 : 676478: 89 c7 mov %eax,%edi 0.00 : 67647a: 31 c0 xor %eax,%eax 0.00 : 67647c: e8 5f 41 10 00 callq 77a5e0 0.00 : 676481: e8 4a 30 df ff callq 4694d0 : * that we don't want to overwrite. Since the legitimate case should : * always have left a zero-filled buffer, complain if not PageIsNew. : */ : bufBlock = isLocalBuf ? LocalBufHdrGetBlock(bufHdr) : BufHdrGetBlock(bufHdr); : if (!PageIsNew((Page) bufBlock)) : ereport(ERROR, 0.00 : 676486: 45 31 c0 xor %r8d,%r8d 0.00 : 676489: b9 a0 a0 8a 00 mov $0x8aa0a0,%ecx 0.00 : 67648e: ba 97 02 00 00 mov $0x297,%edx 0.00 : 676493: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 676498: bf 14 00 00 00 mov $0x14,%edi 0.00 : 67649d: e8 1e 46 10 00 callq 77aac0 0.00 : 6764a2: 84 c0 test %al,%al 0.00 : 6764a4: 74 db je 676481 0.00 : 6764a6: bf 40 9e 8a 00 mov $0x8a9e40,%edi 0.00 : 6764ab: 31 c0 xor %eax,%eax 0.00 : 6764ad: e8 ee 57 10 00 callq 77bca0 0.00 : 6764b2: 48 8b 55 80 mov -0x80(%rbp),%rdx 0.00 : 6764b6: 89 c3 mov %eax,%ebx 0.00 : 6764b8: 44 8b 85 78 ff ff ff mov -0x88(%rbp),%r8d 0.00 : 6764bf: 48 89 d0 mov %rdx,%rax 0.00 : 6764c2: 8b 4a 0c mov 0xc(%rdx),%ecx 0.00 : 6764c5: 8b 52 08 mov 0x8(%rdx),%edx 0.00 : 6764c8: 8b 78 04 mov 0x4(%rax),%edi 0.00 : 6764cb: 8b 30 mov (%rax),%esi 0.00 : 6764cd: e8 fe 80 13 00 callq 7ae5d0 0.00 : 6764d2: 8b b5 74 ff ff ff mov -0x8c(%rbp),%esi 0.00 : 6764d8: 48 89 c2 mov %rax,%rdx 0.00 : 6764db: bf 90 9e 8a 00 mov $0x8a9e90,%edi 0.00 : 6764e0: 31 c0 xor %eax,%eax 0.00 : 6764e2: e8 b9 63 10 00 callq 77c8a0 0.00 : 6764e7: 89 de mov %ebx,%esi 0.00 : 6764e9: 89 c7 mov %eax,%edi 0.00 : 6764eb: 31 c0 xor %eax,%eax 0.00 : 6764ed: e8 ee 40 10 00 callq 77a5e0 0.00 : 6764f2: eb 8d jmp 676481 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:536 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000676570 : : * See buffer/README for details. : */ : Buffer : ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, : ReadBufferMode mode, BufferAccessStrategy strategy) : { 0.00 : 676570: 55 push %rbp 0.00 : 676571: 48 89 e5 mov %rsp,%rbp 0.00 : 676574: 48 89 5d d8 mov %rbx,-0x28(%rbp) 0.00 : 676578: 4c 89 65 e0 mov %r12,-0x20(%rbp) 0.00 : 67657c: 48 89 fb mov %rdi,%rbx 0.00 : 67657f: 4c 89 6d e8 mov %r13,-0x18(%rbp) 0.00 : 676583: 4c 89 75 f0 mov %r14,-0x10(%rbp) 0.00 : 676587: 41 89 cd mov %ecx,%r13d 0.00 : 67658a: 4c 89 7d f8 mov %r15,-0x8(%rbp) 0.00 : 67658e: 48 83 ec 40 sub $0x40,%rsp : bool hit; : Buffer buf; : : /* Open it at the smgr level if not already done */ : RelationOpenSmgr(reln); 0.00 : 676592: 48 83 7f 10 00 cmpq $0x0,0x10(%rdi) : * See buffer/README for details. : */ : Buffer : ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, : ReadBufferMode mode, BufferAccessStrategy strategy) : { 0.00 : 676597: 41 89 f7 mov %esi,%r15d 0.00 : 67659a: 41 89 d6 mov %edx,%r14d 0.00 : 67659d: 4d 89 c4 mov %r8,%r12 : bool hit; : Buffer buf; : : /* Open it at the smgr level if not already done */ : RelationOpenSmgr(reln); 0.00 : 6765a0: 0f 84 aa 00 00 00 je 676650 : /* : * Reject attempts to read non-local temporary relations; we would be : * likely to get wrong data since we have no visibility into the owning : * session's local buffers. : */ : if (RELATION_IS_OTHER_TEMP(reln)) 0.00 : 6765a6: 48 8b 43 30 mov 0x30(%rbx),%rax 0.00 : 6765aa: 0f b6 50 6e movzbl 0x6e(%rax),%edx 0.00 : 6765ae: 80 fa 74 cmp $0x74,%dl 0.00 : 6765b1: 74 6d je 676620 : : /* : * Read the buffer, and update pgstat counters to reflect a cache hit or : * miss. : */ : pgstat_count_buffer_read(reln); 0.00 : 6765b3: 48 8b 83 38 01 00 00 mov 0x138(%rbx),%rax 0.00 : 6765ba: 48 85 c0 test %rax,%rax 0.00 : 6765bd: 74 0d je 6765cc 0.00 : 6765bf: 48 83 40 60 01 addq $0x1,0x60(%rax) 0.00 : 6765c4: 48 8b 43 30 mov 0x30(%rbx),%rax 0.00 : 6765c8: 0f b6 50 6e movzbl 0x6e(%rax),%edx : buf = ReadBuffer_common(reln->rd_smgr, reln->rd_rel->relpersistence, 0.00 : 6765cc: 48 8b 7b 10 mov 0x10(%rbx),%rdi 0.00 : 6765d0: 48 8d 45 d7 lea -0x29(%rbp),%rax 0.00 : 6765d4: 0f be f2 movsbl %dl,%esi 0.00 : 6765d7: 4d 89 e1 mov %r12,%r9 0.00 : 6765da: 45 89 e8 mov %r13d,%r8d 0.00 : 6765dd: 44 89 f1 mov %r14d,%ecx 0.00 : 6765e0: 44 89 fa mov %r15d,%edx 0.00 : 6765e3: 48 89 04 24 mov %rax,(%rsp) 0.00 : 6765e7: e8 b4 f6 ff ff callq 675ca0 : forkNum, blockNum, mode, strategy, &hit); : if (hit) 0.00 : 6765ec: 80 7d d7 00 cmpb $0x0,-0x29(%rbp) 0.00 : 6765f0: 74 11 je 676603 : pgstat_count_buffer_hit(reln); 0.00 : 6765f2: 48 8b 93 38 01 00 00 mov 0x138(%rbx),%rdx 0.00 : 6765f9: 48 85 d2 test %rdx,%rdx 0.00 : 6765fc: 74 05 je 676603 0.00 : 6765fe: 48 83 42 68 01 addq $0x1,0x68(%rdx) : return buf; : } /home/Computational/mark/src/postgres-andres/src/backend/storage/buffer/bufmgr.c:536 100.00 : 676603: 48 8b 5d d8 mov -0x28(%rbp),%rbx 0.00 : 676607: 4c 8b 65 e0 mov -0x20(%rbp),%r12 0.00 : 67660b: 4c 8b 6d e8 mov -0x18(%rbp),%r13 0.00 : 67660f: 4c 8b 75 f0 mov -0x10(%rbp),%r14 0.00 : 676613: 4c 8b 7d f8 mov -0x8(%rbp),%r15 0.00 : 676617: c9 leaveq 0.00 : 676618: c3 retq 0.00 : 676619: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) : /* : * Reject attempts to read non-local temporary relations; we would be : * likely to get wrong data since we have no visibility into the owning : * session's local buffers. : */ : if (RELATION_IS_OTHER_TEMP(reln)) 0.00 : 676620: 80 7b 20 00 cmpb $0x0,0x20(%rbx) 0.00 : 676624: 75 8d jne 6765b3 : ereport(ERROR, 0.00 : 676626: 45 31 c0 xor %r8d,%r8d 0.00 : 676629: b9 c0 a0 8a 00 mov $0x8aa0c0,%ecx 0.00 : 67662e: ba 0c 02 00 00 mov $0x20c,%edx 0.00 : 676633: be 53 9d 8a 00 mov $0x8a9d53,%esi 0.00 : 676638: bf 14 00 00 00 mov $0x14,%edi 0.00 : 67663d: e8 7e 44 10 00 callq 77aac0 0.00 : 676642: 84 c0 test %al,%al 0.00 : 676644: 75 29 jne 67666f 0.00 : 676646: e8 85 2e df ff callq 4694d0 0.00 : 67664b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) : { : bool hit; : Buffer buf; : : /* Open it at the smgr level if not already done */ : RelationOpenSmgr(reln); 0.00 : 676650: 8b 57 1c mov 0x1c(%rdi),%edx 0.00 : 676653: 8b 73 08 mov 0x8(%rbx),%esi 0.00 : 676656: 48 8b 3f mov (%rdi),%rdi 0.00 : 676659: e8 d2 33 02 00 callq 699a30 0.00 : 67665e: 48 8d 7b 10 lea 0x10(%rbx),%rdi 0.00 : 676662: 48 89 c6 mov %rax,%rsi 0.00 : 676665: e8 96 2c 02 00 callq 699300 0.00 : 67666a: e9 37 ff ff ff jmpq 6765a6 : * Reject attempts to read non-local temporary relations; we would be : * likely to get wrong data since we have no visibility into the owning : * session's local buffers. : */ : if (RELATION_IS_OTHER_TEMP(reln)) : ereport(ERROR, 0.00 : 67666f: bf 08 9f 8a 00 mov $0x8a9f08,%edi 0.00 : 676674: 31 c0 xor %eax,%eax 0.00 : 676676: e8 25 62 10 00 callq 77c8a0 0.00 : 67667b: bf 40 04 00 00 mov $0x440,%edi 0.00 : 676680: 89 c3 mov %eax,%ebx 0.00 : 676682: e8 c9 66 10 00 callq 77cd50 0.00 : 676687: 89 de mov %ebx,%esi 0.00 : 676689: 89 c7 mov %eax,%edi 0.00 : 67668b: 31 c0 xor %eax,%eax 0.00 : 67668d: e8 4e 3f 10 00 callq 77a5e0 0.00 : 676692: eb b2 jmp 676646 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/storage/smgr/md.c:1785 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000006983d0 <_mdfd_getseg>: : * EXTENSION_CREATE case. : */ : static MdfdVec * : _mdfd_getseg(SMgrRelation reln, ForkNumber forknum, BlockNumber blkno, : bool skipFsync, ExtensionBehavior behavior) : { 0.00 : 6983d0: 55 push %rbp 0.00 : 6983d1: 48 89 e5 mov %rsp,%rbp 0.00 : 6983d4: 41 57 push %r15 0.00 : 6983d6: 41 56 push %r14 0.00 : 6983d8: 41 55 push %r13 0.00 : 6983da: 41 54 push %r12 0.00 : 6983dc: 53 push %rbx 0.00 : 6983dd: 89 cb mov %ecx,%ebx 0.00 : 6983df: 48 83 ec 18 sub $0x18,%rsp 0.00 : 6983e3: 89 55 c8 mov %edx,-0x38(%rbp) : MdfdVec *v = mdopen(reln, forknum, behavior); 0.00 : 6983e6: 44 89 c2 mov %r8d,%edx : * EXTENSION_CREATE case. : */ : static MdfdVec * : _mdfd_getseg(SMgrRelation reln, ForkNumber forknum, BlockNumber blkno, : bool skipFsync, ExtensionBehavior behavior) : { 0.00 : 6983e9: 48 89 7d d0 mov %rdi,-0x30(%rbp) 0.00 : 6983ed: 89 75 cc mov %esi,-0x34(%rbp) 0.00 : 6983f0: 44 89 45 c4 mov %r8d,-0x3c(%rbp) : MdfdVec *v = mdopen(reln, forknum, behavior); 0.00 : 6983f4: e8 47 f5 ff ff callq 697940 : BlockNumber targetseg; : BlockNumber nextsegno; : : if (!v) 0.00 : 6983f9: 48 85 c0 test %rax,%rax : */ : static MdfdVec * : _mdfd_getseg(SMgrRelation reln, ForkNumber forknum, BlockNumber blkno, : bool skipFsync, ExtensionBehavior behavior) : { : MdfdVec *v = mdopen(reln, forknum, behavior); 0.00 : 6983fc: 49 89 c4 mov %rax,%r12 : BlockNumber targetseg; : BlockNumber nextsegno; : : if (!v) 0.00 : 6983ff: 0f 84 d3 00 00 00 je 6984d8 <_mdfd_getseg+0x108> : return NULL; /* only possible if EXTENSION_RETURN_NULL */ : : targetseg = blkno / ((BlockNumber) RELSEG_SIZE); 0.00 : 698405: 44 8b 7d c8 mov -0x38(%rbp),%r15d 0.00 : 698409: 41 c1 ef 11 shr $0x11,%r15d : for (nextsegno = 1; nextsegno <= targetseg; nextsegno++) 0.00 : 69840d: 45 85 ff test %r15d,%r15d 0.00 : 698410: 0f 84 c2 00 00 00 je 6984d8 <_mdfd_getseg+0x108> : { : if (_mdnblocks(reln, forknum, v) < RELSEG_SIZE) : { : char *zerobuf = palloc0(BLCKSZ); : : mdextend(reln, forknum, 0.00 : 698416: 0f be db movsbl %bl,%ebx : : if (!v) : return NULL; /* only possible if EXTENSION_RETURN_NULL */ : : targetseg = blkno / ((BlockNumber) RELSEG_SIZE); : for (nextsegno = 1; nextsegno <= targetseg; nextsegno++) 0.00 : 698419: 41 bd 01 00 00 00 mov $0x1,%r13d 0.00 : 69841f: 41 be ff ff 01 00 mov $0x1ffff,%r14d : { : if (_mdnblocks(reln, forknum, v) < RELSEG_SIZE) : { : char *zerobuf = palloc0(BLCKSZ); : : mdextend(reln, forknum, 0.00 : 698425: 89 5d c0 mov %ebx,-0x40(%rbp) 0.00 : 698428: eb 1d jmp 698447 <_mdfd_getseg+0x77> 0.00 : 69842a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : if (v->mdfd_chain == NULL) : { : if (behavior == EXTENSION_RETURN_NULL && : FILE_POSSIBLY_DELETED(errno)) : return NULL; : ereport(ERROR, 0.00 : 698430: 49 89 c4 mov %rax,%r12 : : if (!v) : return NULL; /* only possible if EXTENSION_RETURN_NULL */ : : targetseg = blkno / ((BlockNumber) RELSEG_SIZE); : for (nextsegno = 1; nextsegno <= targetseg; nextsegno++) 0.00 : 698433: 41 83 c5 01 add $0x1,%r13d 0.00 : 698437: 41 81 c6 00 00 02 00 add $0x20000,%r14d 0.00 : 69843e: 45 39 ef cmp %r13d,%r15d 0.00 : 698441: 0f 82 91 00 00 00 jb 6984d8 <_mdfd_getseg+0x108> : { : Assert(nextsegno == v->mdfd_segno + 1); : : if (v->mdfd_chain == NULL) 0.00 : 698447: 49 8b 44 24 08 mov 0x8(%r12),%rax 0.00 : 69844c: 48 85 c0 test %rax,%rax 0.00 : 69844f: 75 df jne 698430 <_mdfd_getseg+0x60> : * active segment are of size RELSEG_SIZE; therefore, pad them out : * with zeroes if needed. (This only matters if caller is : * extending the relation discontiguously, but that can happen in : * hash indexes.) : */ : if (behavior == EXTENSION_CREATE || InRecovery) 0.00 : 698451: 83 7d c4 02 cmpl $0x2,-0x3c(%rbp) 0.00 : 698455: 74 0d je 698464 <_mdfd_getseg+0x94> 0.00 : 698457: 80 3d 0a 0d 4e 00 00 cmpb $0x0,0x4e0d0a(%rip) # b79168 0.00 : 69845e: 0f 84 8c 00 00 00 je 6984f0 <_mdfd_getseg+0x120> : { : if (_mdnblocks(reln, forknum, v) < RELSEG_SIZE) 0.00 : 698464: 8b 75 cc mov -0x34(%rbp),%esi 0.00 : 698467: 48 8b 7d d0 mov -0x30(%rbp),%rdi 0.00 : 69846b: 4c 89 e2 mov %r12,%rdx 0.00 : 69846e: e8 9d f7 ff ff callq 697c10 <_mdnblocks> 0.00 : 698473: 3d ff ff 01 00 cmp $0x1ffff,%eax 0.00 : 698478: 76 7e jbe 6984f8 <_mdfd_getseg+0x128> : mdextend(reln, forknum, : nextsegno * ((BlockNumber) RELSEG_SIZE) - 1, : zerobuf, skipFsync); : pfree(zerobuf); : } : v->mdfd_chain = _mdfd_openseg(reln, forknum, +nextsegno, O_CREAT); 0.00 : 69847a: b9 40 00 00 00 mov $0x40,%ecx : } : else : { : /* We won't create segment if not existent */ : v->mdfd_chain = _mdfd_openseg(reln, forknum, nextsegno, 0); 0.00 : 69847f: 8b 75 cc mov -0x34(%rbp),%esi 0.00 : 698482: 48 8b 7d d0 mov -0x30(%rbp),%rdi 0.00 : 698486: 44 89 ea mov %r13d,%edx 0.00 : 698489: e8 72 f8 ff ff callq 697d00 <_mdfd_openseg> 0.00 : 69848e: 49 89 44 24 08 mov %rax,0x8(%r12) : } : if (v->mdfd_chain == NULL) 0.00 : 698493: 4d 8b 64 24 08 mov 0x8(%r12),%r12 0.00 : 698498: 4d 85 e4 test %r12,%r12 0.00 : 69849b: 75 96 jne 698433 <_mdfd_getseg+0x63> : { : if (behavior == EXTENSION_RETURN_NULL && 0.00 : 69849d: 83 7d c4 01 cmpl $0x1,-0x3c(%rbp) 0.00 : 6984a1: 75 0a jne 6984ad <_mdfd_getseg+0xdd> 0.00 : 6984a3: e8 18 18 dd ff callq 469cc0 <__errno_location@plt> 0.00 : 6984a8: 83 38 02 cmpl $0x2,(%rax) 0.00 : 6984ab: 74 2b je 6984d8 <_mdfd_getseg+0x108> : FILE_POSSIBLY_DELETED(errno)) : return NULL; : ereport(ERROR, 0.00 : 6984ad: 45 31 c0 xor %r8d,%r8d 0.00 : 6984b0: b9 72 e3 8a 00 mov $0x8ae372,%ecx 0.00 : 6984b5: ba f3 06 00 00 mov $0x6f3,%edx 0.00 : 6984ba: be db 5b 87 00 mov $0x875bdb,%esi 0.00 : 6984bf: bf 14 00 00 00 mov $0x14,%edi 0.00 : 6984c4: e8 f7 25 0e 00 callq 77aac0 0.00 : 6984c9: 84 c0 test %al,%al 0.00 : 6984cb: 75 5b jne 698528 <_mdfd_getseg+0x158> 0.00 : 6984cd: e8 fe 0f dd ff callq 4694d0 0.00 : 6984d2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : } : } : v = v->mdfd_chain; : } : return v; : } 0.00 : 6984d8: 48 83 c4 18 add $0x18,%rsp 0.00 : 6984dc: 4c 89 e0 mov %r12,%rax 0.00 : 6984df: 5b pop %rbx /home/Computational/mark/src/postgres-andres/src/backend/storage/smgr/md.c:1785 100.00 : 6984e0: 41 5c pop %r12 0.00 : 6984e2: 41 5d pop %r13 0.00 : 6984e4: 41 5e pop %r14 0.00 : 6984e6: 41 5f pop %r15 0.00 : 6984e8: c9 leaveq 0.00 : 6984e9: c3 retq 0.00 : 6984ea: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) : v->mdfd_chain = _mdfd_openseg(reln, forknum, +nextsegno, O_CREAT); : } : else : { : /* We won't create segment if not existent */ : v->mdfd_chain = _mdfd_openseg(reln, forknum, nextsegno, 0); 0.00 : 6984f0: 31 c9 xor %ecx,%ecx 0.00 : 6984f2: eb 8b jmp 69847f <_mdfd_getseg+0xaf> 0.00 : 6984f4: 0f 1f 40 00 nopl 0x0(%rax) : */ : if (behavior == EXTENSION_CREATE || InRecovery) : { : if (_mdnblocks(reln, forknum, v) < RELSEG_SIZE) : { : char *zerobuf = palloc0(BLCKSZ); 0.00 : 6984f8: bf 00 20 00 00 mov $0x2000,%edi 0.00 : 6984fd: e8 6e 0a 10 00 callq 798f70 : : mdextend(reln, forknum, 0.00 : 698502: 48 8b 7d d0 mov -0x30(%rbp),%rdi 0.00 : 698506: 44 8b 45 c0 mov -0x40(%rbp),%r8d : */ : if (behavior == EXTENSION_CREATE || InRecovery) : { : if (_mdnblocks(reln, forknum, v) < RELSEG_SIZE) : { : char *zerobuf = palloc0(BLCKSZ); 0.00 : 69850a: 48 89 c3 mov %rax,%rbx : : mdextend(reln, forknum, 0.00 : 69850d: 8b 75 cc mov -0x34(%rbp),%esi 0.00 : 698510: 48 89 c1 mov %rax,%rcx 0.00 : 698513: 44 89 f2 mov %r14d,%edx 0.00 : 698516: e8 35 fc ff ff callq 698150 : nextsegno * ((BlockNumber) RELSEG_SIZE) - 1, : zerobuf, skipFsync); : pfree(zerobuf); 0.00 : 69851b: 48 89 df mov %rbx,%rdi 0.00 : 69851e: e8 5d 06 10 00 callq 798b80 0.00 : 698523: e9 52 ff ff ff jmpq 69847a <_mdfd_getseg+0xaa> : if (v->mdfd_chain == NULL) : { : if (behavior == EXTENSION_RETURN_NULL && : FILE_POSSIBLY_DELETED(errno)) : return NULL; : ereport(ERROR, 0.00 : 698528: 8b 75 cc mov -0x34(%rbp),%esi 0.00 : 69852b: 48 8b 7d d0 mov -0x30(%rbp),%rdi 0.00 : 69852f: 44 89 ea mov %r13d,%edx 0.00 : 698532: e8 59 f7 ff ff callq 697c90 <_mdfd_segpath> 0.00 : 698537: 8b 55 c8 mov -0x38(%rbp),%edx 0.00 : 69853a: 48 89 c6 mov %rax,%rsi 0.00 : 69853d: bf b0 e1 8a 00 mov $0x8ae1b0,%edi 0.00 : 698542: 31 c0 xor %eax,%eax 0.00 : 698544: e8 57 43 0e 00 callq 77c8a0 0.00 : 698549: 89 c3 mov %eax,%ebx 0.00 : 69854b: e8 a0 45 0e 00 callq 77caf0 0.00 : 698550: 89 de mov %ebx,%esi 0.00 : 698552: 89 c7 mov %eax,%edi 0.00 : 698554: 31 c0 xor %eax,%eax 0.00 : 698556: e8 85 20 0e 00 callq 77a5e0 0.00 : 69855b: e9 6d ff ff ff jmpq 6984cd <_mdfd_getseg+0xfd> Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:701 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000798d50 : : return ret; : } : : void * : palloc(Size size) : { 0.00 : 798d50: 55 push %rbp 0.00 : 798d51: 48 89 e5 mov %rsp,%rbp 0.00 : 798d54: 53 push %rbx 0.00 : 798d55: 48 89 fb mov %rdi,%rbx 0.00 : 798d58: 48 83 ec 08 sub $0x8,%rsp : void *ret; : : AssertArg(MemoryContextIsValid(CurrentMemoryContext)); : AssertNotInCriticalSection(CurrentMemoryContext); : : if (!AllocSizeIsValid(size)) 0.00 : 798d5c: 48 81 ff ff ff ff 3f cmp $0x3fffffff,%rdi 0.00 : 798d63: 77 25 ja 798d8a : elog(ERROR, "invalid memory alloc request size %zu", size); : : CurrentMemoryContext->isReset = false; 0.00 : 798d65: 48 8b 05 f4 1a 42 00 mov 0x421af4(%rip),%rax # bba860 : : ret = (*CurrentMemoryContext->methods->alloc) (CurrentMemoryContext, size); 0.00 : 798d6c: 48 89 de mov %rbx,%rsi : AssertNotInCriticalSection(CurrentMemoryContext); : : if (!AllocSizeIsValid(size)) : elog(ERROR, "invalid memory alloc request size %zu", size); : : CurrentMemoryContext->isReset = false; 0.00 : 798d6f: c6 40 30 00 movb $0x0,0x30(%rax) : : ret = (*CurrentMemoryContext->methods->alloc) (CurrentMemoryContext, size); 0.00 : 798d73: 48 8b 3d e6 1a 42 00 mov 0x421ae6(%rip),%rdi # bba860 0.00 : 798d7a: 48 8b 47 08 mov 0x8(%rdi),%rax 0.00 : 798d7e: 4c 8b 18 mov (%rax),%r11 : VALGRIND_MEMPOOL_ALLOC(CurrentMemoryContext, ret, size); : : return ret; : } 0.00 : 798d81: 48 83 c4 08 add $0x8,%rsp 0.00 : 798d85: 5b pop %rbx 0.00 : 798d86: c9 leaveq : if (!AllocSizeIsValid(size)) : elog(ERROR, "invalid memory alloc request size %zu", size); : : CurrentMemoryContext->isReset = false; : : ret = (*CurrentMemoryContext->methods->alloc) (CurrentMemoryContext, size); /home/Computational/mark/src/postgres-andres/src/backend/utils/mmgr/mcxt.c:701 100.00 : 798d87: 41 ff e3 jmpq *%r11 : : AssertArg(MemoryContextIsValid(CurrentMemoryContext)); : AssertNotInCriticalSection(CurrentMemoryContext); : : if (!AllocSizeIsValid(size)) : elog(ERROR, "invalid memory alloc request size %zu", size); 0.00 : 798d8a: ba 18 20 8e 00 mov $0x8e2018,%edx 0.00 : 798d8f: be b9 02 00 00 mov $0x2b9,%esi 0.00 : 798d94: bf 8e 1f 8e 00 mov $0x8e1f8e,%edi 0.00 : 798d99: e8 82 26 fe ff callq 77b420 0.00 : 798d9e: 48 89 da mov %rbx,%rdx 0.00 : 798da1: be b8 1f 8e 00 mov $0x8e1fb8,%esi 0.00 : 798da6: bf 14 00 00 00 mov $0x14,%edi 0.00 : 798dab: 31 c0 xor %eax,%eax 0.00 : 798dad: e8 7e 24 fe ff callq 77b230 0.00 : 798db2: e8 19 07 cd ff callq 4694d0 Sorted summary for file /home/Computational/mark/andres/bin/postgres ---------------------------------------------- 100.00 /home/Computational/mark/src/postgres-andres/src/backend/utils/resowner/resowner.c:611 Percent | Source code & Disassembly of /home/Computational/mark/andres/bin/postgres ------------------------------------------------ : : : : Disassembly of section .text: : : 000000000079a1a0 : : * We allow the case owner == NULL because the bufmgr is sometimes invoked : * outside any transaction (for example, during WAL recovery). : */ : void : ResourceOwnerRememberBuffer(ResourceOwner owner, Buffer buffer) : { 0.00 : 79a1a0: 55 push %rbp : if (owner != NULL) 100.00 : 79a1a1: 48 85 ff test %rdi,%rdi : * We allow the case owner == NULL because the bufmgr is sometimes invoked : * outside any transaction (for example, during WAL recovery). : */ : void : ResourceOwnerRememberBuffer(ResourceOwner owner, Buffer buffer) : { 0.00 : 79a1a4: 48 89 e5 mov %rsp,%rbp : if (owner != NULL) 0.00 : 79a1a7: 74 0f je 79a1b8 : { : Assert(owner->nbuffers < owner->maxbuffers); : owner->buffers[owner->nbuffers] = buffer; 0.00 : 79a1a9: 48 63 57 20 movslq 0x20(%rdi),%rdx 0.00 : 79a1ad: 48 8b 47 28 mov 0x28(%rdi),%rax 0.00 : 79a1b1: 89 34 90 mov %esi,(%rax,%rdx,4) : owner->nbuffers++; 0.00 : 79a1b4: 83 47 20 01 addl $0x1,0x20(%rdi) : } : } 0.00 : 79a1b8: c9 leaveq Sorted summary for file /lib64/libc-2.11.3.so ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib64/libc-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000000672f0 <_IO_fread>: 0.00 : 672f0: 4c 89 64 24 e8 mov %r12,-0x18(%rsp) 0.00 : 672f5: 49 89 d4 mov %rdx,%r12 0.00 : 672f8: 48 89 5c 24 d8 mov %rbx,-0x28(%rsp) 0.00 : 672fd: 4c 0f af e6 imul %rsi,%r12 0.00 : 67301: 48 89 6c 24 e0 mov %rbp,-0x20(%rsp) 0.00 : 67306: 4c 89 6c 24 f0 mov %r13,-0x10(%rsp) 0.00 : 6730b: 4c 89 74 24 f8 mov %r14,-0x8(%rsp) ??:0 100.00 : 67310: 48 83 ec 28 sub $0x28,%rsp 0.00 : 67314: 49 89 fe mov %rdi,%r14 0.00 : 67317: 49 89 f5 mov %rsi,%r13 0.00 : 6731a: 48 89 d5 mov %rdx,%rbp 0.00 : 6731d: 48 89 cb mov %rcx,%rbx 0.00 : 67320: 4d 85 e4 test %r12,%r12 0.00 : 67323: 0f 84 f7 00 00 00 je 67420 <_IO_fread+0x130> 0.00 : 67329: 66 83 39 00 cmpw $0x0,(%rcx) 0.00 : 6732d: 78 56 js 67385 <_IO_fread+0x95> 0.00 : 6732f: 4c 8b 91 88 00 00 00 mov 0x88(%rcx),%r10 0.00 : 67336: 64 4c 8b 04 25 10 00 mov %fs:0x10,%r8 0.00 : 6733d: 00 00 0.00 : 6733f: 4d 3b 42 08 cmp 0x8(%r10),%r8 0.00 : 67343: 74 3b je 67380 <_IO_fread+0x90> 0.00 : 67345: 31 d2 xor %edx,%edx 0.00 : 67347: be 01 00 00 00 mov $0x1,%esi 0.00 : 6734c: 89 d0 mov %edx,%eax 0.00 : 6734e: 83 3d 5f 03 31 00 00 cmpl $0x0,0x31035f(%rip) # 3776b4 <__libc_multiple_threads> 0.00 : 67355: 74 0d je 67364 <_IO_fread+0x74> 0.00 : 67357: f0 41 0f b1 32 lock cmpxchg %esi,(%r10) 0.00 : 6735c: 0f 85 11 01 00 00 jne 67473 <_L_lock_51> 0.00 : 67362: eb 0a jmp 6736e <_IO_fread+0x7e> 0.00 : 67364: 41 0f b1 32 cmpxchg %esi,(%r10) 0.00 : 67368: 0f 85 05 01 00 00 jne 67473 <_L_lock_51> 0.00 : 6736e: 48 8b 83 88 00 00 00 mov 0x88(%rbx),%rax 0.00 : 67375: 4c 89 40 08 mov %r8,0x8(%rax) 0.00 : 67379: 4c 8b 93 88 00 00 00 mov 0x88(%rbx),%r10 0.00 : 67380: 41 83 42 04 01 addl $0x1,0x4(%r10) 0.00 : 67385: 4c 89 e2 mov %r12,%rdx 0.00 : 67388: 4c 89 f6 mov %r14,%rsi 0.00 : 6738b: 48 89 df mov %rbx,%rdi 0.00 : 6738e: e8 cd ca 00 00 callq 73e60 <_IO_sgetn> 0.00 : 67393: 66 83 3b 00 cmpw $0x0,(%rbx) 0.00 : 67397: 48 89 c6 mov %rax,%rsi 0.00 : 6739a: 78 4c js 673e8 <_IO_fread+0xf8> 0.00 : 6739c: 48 8b 93 88 00 00 00 mov 0x88(%rbx),%rdx 0.00 : 673a3: 8b 42 04 mov 0x4(%rdx),%eax 0.00 : 673a6: 83 e8 01 sub $0x1,%eax 0.00 : 673a9: 85 c0 test %eax,%eax 0.00 : 673ab: 89 42 04 mov %eax,0x4(%rdx) 0.00 : 673ae: 75 38 jne 673e8 <_IO_fread+0xf8> 0.00 : 673b0: 48 8b 83 88 00 00 00 mov 0x88(%rbx),%rax 0.00 : 673b7: 48 c7 40 08 00 00 00 movq $0x0,0x8(%rax) 0.00 : 673be: 00 0.00 : 673bf: 48 8b 93 88 00 00 00 mov 0x88(%rbx),%rdx 0.00 : 673c6: 83 3d e7 02 31 00 00 cmpl $0x0,0x3102e7(%rip) # 3776b4 <__libc_multiple_threads> 0.00 : 673cd: 74 0b je 673da <_IO_fread+0xea> 0.00 : 673cf: f0 ff 0a lock decl (%rdx) 0.00 : 673d2: 0f 85 b6 00 00 00 jne 6748e <_L_unlock_103> 0.00 : 673d8: eb 08 jmp 673e2 <_IO_fread+0xf2> 0.00 : 673da: ff 0a decl (%rdx) 0.00 : 673dc: 0f 85 ac 00 00 00 jne 6748e <_L_unlock_103> 0.00 : 673e2: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 673e8: 49 39 f4 cmp %rsi,%r12 0.00 : 673eb: 74 0b je 673f8 <_IO_fread+0x108> 0.00 : 673ed: 48 89 f0 mov %rsi,%rax 0.00 : 673f0: 31 d2 xor %edx,%edx 0.00 : 673f2: 49 f7 f5 div %r13 0.00 : 673f5: 48 89 c5 mov %rax,%rbp 0.00 : 673f8: 48 89 e8 mov %rbp,%rax 0.00 : 673fb: 48 8b 1c 24 mov (%rsp),%rbx 0.00 : 673ff: 48 8b 6c 24 08 mov 0x8(%rsp),%rbp 0.00 : 67404: 4c 8b 64 24 10 mov 0x10(%rsp),%r12 0.00 : 67409: 4c 8b 6c 24 18 mov 0x18(%rsp),%r13 0.00 : 6740e: 4c 8b 74 24 20 mov 0x20(%rsp),%r14 0.00 : 67413: 48 83 c4 28 add $0x28,%rsp 0.00 : 67417: c3 retq 0.00 : 67418: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 6741f: 00 0.00 : 67420: 31 ed xor %ebp,%ebp 0.00 : 67422: eb d4 jmp 673f8 <_IO_fread+0x108> 0.00 : 67424: 66 83 3b 00 cmpw $0x0,(%rbx) 0.00 : 67428: 49 89 c0 mov %rax,%r8 0.00 : 6742b: 78 3e js 6746b <_IO_fread+0x17b> 0.00 : 6742d: 48 8b 93 88 00 00 00 mov 0x88(%rbx),%rdx 0.00 : 67434: 8b 42 04 mov 0x4(%rdx),%eax 0.00 : 67437: 83 e8 01 sub $0x1,%eax 0.00 : 6743a: 85 c0 test %eax,%eax 0.00 : 6743c: 89 42 04 mov %eax,0x4(%rdx) 0.00 : 6743f: 75 2a jne 6746b <_IO_fread+0x17b> 0.00 : 67441: 48 8b 83 88 00 00 00 mov 0x88(%rbx),%rax 0.00 : 67448: 48 c7 40 08 00 00 00 movq $0x0,0x8(%rax) 0.00 : 6744f: 00 0.00 : 67450: 48 8b 93 88 00 00 00 mov 0x88(%rbx),%rdx 0.00 : 67457: 83 3d 56 02 31 00 00 cmpl $0x0,0x310256(%rip) # 3776b4 <__libc_multiple_threads> 0.00 : 6745e: 74 07 je 67467 <_IO_fread+0x177> 0.00 : 67460: f0 ff 0a lock decl (%rdx) 0.00 : 67463: 75 44 jne 674a9 <_L_unlock_178> 0.00 : 67465: eb 04 jmp 6746b <_IO_fread+0x17b> 0.00 : 67467: ff 0a decl (%rdx) 0.00 : 67469: 75 3e jne 674a9 <_L_unlock_178> 0.00 : 6746b: 4c 89 c7 mov %r8,%rdi 0.00 : 6746e: e8 ed 7a fb ff callq 1ef60 <_Unwind_Resume> Sorted summary for file /lib64/ld-2.11.3.so ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib64/ld-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000000092c0 : 0.00 : 92c0: 41 57 push %r15 0.00 : 92c2: 49 89 f3 mov %rsi,%r11 0.00 : 92c5: 41 56 push %r14 0.00 : 92c7: 41 55 push %r13 0.00 : 92c9: 41 54 push %r12 0.00 : 92cb: 55 push %rbp 0.00 : 92cc: 53 push %rbx 0.00 : 92cd: 48 81 ec a8 00 00 00 sub $0xa8,%rsp 0.00 : 92d4: 48 8b 84 24 e8 00 00 mov 0xe8(%rsp),%rax 0.00 : 92db: 00 0.00 : 92dc: 48 89 54 24 30 mov %rdx,0x30(%rsp) 0.00 : 92e1: 4c 89 44 24 28 mov %r8,0x28(%rsp) 0.00 : 92e6: 48 89 7c 24 78 mov %rdi,0x78(%rsp) 0.00 : 92eb: 48 89 8c 24 88 00 00 mov %rcx,0x88(%rsp) 0.00 : 92f2: 00 0.00 : 92f3: 48 8b ac 24 e0 00 00 mov 0xe0(%rsp),%rbp 0.00 : 92fa: 00 0.00 : 92fb: 48 89 44 24 68 mov %rax,0x68(%rsp) 0.00 : 9300: 8b 84 24 f0 00 00 00 mov 0xf0(%rsp),%eax 0.00 : 9307: 4c 8b ac 24 f8 00 00 mov 0xf8(%rsp),%r13 0.00 : 930e: 00 0.00 : 930f: 89 84 24 94 00 00 00 mov %eax,0x94(%rsp) 0.00 : 9316: 8b 84 24 00 01 00 00 mov 0x100(%rsp),%eax 0.00 : 931d: 89 84 24 9c 00 00 00 mov %eax,0x9c(%rsp) 0.00 : 9324: 45 8b 61 08 mov 0x8(%r9),%r12d 0.00 : 9328: 48 8d 44 24 60 lea 0x60(%rsp),%rax 0.00 : 932d: 49 89 f6 mov %rsi,%r14 0.00 : 9330: 41 89 f7 mov %esi,%r15d 0.00 : 9333: 48 8d 1c ed 00 00 00 lea 0x0(,%rbp,8),%rbx 0.00 : 933a: 00 0.00 : 933b: 49 c1 ee 06 shr $0x6,%r14 0.00 : 933f: 49 03 19 add (%r9),%rbx 0.00 : 9342: 41 83 e7 3f and $0x3f,%r15d 0.00 : 9346: 48 89 44 24 20 mov %rax,0x20(%rsp) 0.00 : 934b: eb 14 jmp 9361 0.00 : 934d: 0f 1f 00 nopl (%rax) 0.00 : 9350: 48 83 c5 01 add $0x1,%rbp 0.00 : 9354: 48 83 c3 08 add $0x8,%rbx 0.00 : 9358: 49 39 ec cmp %rbp,%r12 0.00 : 935b: 0f 86 1f 01 00 00 jbe 9480 0.00 : 9361: c7 84 24 90 00 00 00 movl $0x0,0x90(%rsp) 0.00 : 9368: 00 00 00 00 0.00 : 936c: 48 c7 44 24 60 00 00 movq $0x0,0x60(%rsp) 0.00 : 9373: 00 00 0.00 : 9375: 48 8b 03 mov (%rbx),%rax 0.00 : 9378: 48 8b 40 28 mov 0x28(%rax),%rax 0.00 : 937c: 4c 39 e8 cmp %r13,%rax 0.00 : 937f: 48 89 44 24 70 mov %rax,0x70(%rsp) 0.00 : 9384: 74 ca je 9350 0.00 : 9386: f6 84 24 9c 00 00 00 testb $0x2,0x9c(%rsp) 0.00 : 938d: 02 0.00 : 938e: 74 09 je 9399 0.00 : 9390: f6 80 14 03 00 00 03 testb $0x3,0x314(%rax) 0.00 : 9397: 74 b7 je 9350 0.00 : 9399: f6 80 15 03 00 00 20 testb $0x20,0x315(%rax) ??:0 100.00 : 93a0: 75 ae jne 9350 0.00 : 93a2: f6 05 77 58 21 00 08 testb $0x8,0x215877(%rip) # 21ec20 <_rtld_global_ro> 0.00 : 93a9: 0f 85 bf 04 00 00 jne 986e 0.00 : 93af: 48 8b 74 24 70 mov 0x70(%rsp),%rsi 0.00 : 93b4: 8b be ec 02 00 00 mov 0x2ec(%rsi),%edi 0.00 : 93ba: 85 ff test %edi,%edi 0.00 : 93bc: 74 92 je 9350 0.00 : 93be: 48 8b 46 70 mov 0x70(%rsi),%rax 0.00 : 93c2: 4c 8b 48 08 mov 0x8(%rax),%r9 0.00 : 93c6: 48 8b 46 68 mov 0x68(%rsi),%rax 0.00 : 93ca: 48 8b 40 08 mov 0x8(%rax),%rax 0.00 : 93ce: 48 89 84 24 80 00 00 mov %rax,0x80(%rsp) 0.00 : 93d5: 00 0.00 : 93d6: 48 8b 96 f8 02 00 00 mov 0x2f8(%rsi),%rdx 0.00 : 93dd: 48 85 d2 test %rdx,%rdx 0.00 : 93e0: 0f 84 0e 05 00 00 je 98f4 0.00 : 93e6: 8b 86 f0 02 00 00 mov 0x2f0(%rsi),%eax 0.00 : 93ec: 8b 8e f4 02 00 00 mov 0x2f4(%rsi),%ecx 0.00 : 93f2: 44 21 f0 and %r14d,%eax 0.00 : 93f5: 48 8b 14 c2 mov (%rdx,%rax,8),%rdx 0.00 : 93f9: 4c 89 d8 mov %r11,%rax 0.00 : 93fc: 48 d3 e8 shr %cl,%rax 0.00 : 93ff: 48 89 c1 mov %rax,%rcx 0.00 : 9402: 83 e1 3f and $0x3f,%ecx 0.00 : 9405: 48 89 d0 mov %rdx,%rax 0.00 : 9408: 48 d3 e8 shr %cl,%rax 0.00 : 940b: 44 89 f9 mov %r15d,%ecx 0.00 : 940e: 48 d3 ea shr %cl,%rdx 0.00 : 9411: 48 21 d0 and %rdx,%rax 0.00 : 9414: a8 01 test $0x1,%al 0.00 : 9416: 0f 85 78 05 00 00 jne 9994 0.00 : 941c: c7 84 24 98 00 00 00 movl $0x0,0x98(%rsp) 0.00 : 9423: 00 00 00 00 0.00 : 9427: 83 bc 24 90 00 00 00 cmpl $0x1,0x90(%rsp) 0.00 : 942e: 01 0.00 : 942f: 74 67 je 9498 0.00 : 9431: 8b 94 24 98 00 00 00 mov 0x98(%rsp),%edx 0.00 : 9438: 85 d2 test %edx,%edx 0.00 : 943a: 0f 85 10 ff ff ff jne 9350 0.00 : 9440: 48 8b 44 24 68 mov 0x68(%rsp),%rax 0.00 : 9445: 48 85 c0 test %rax,%rax 0.00 : 9448: 0f 84 02 ff ff ff je 9350 0.00 : 944e: 48 8b 78 10 mov 0x10(%rax),%rdi 0.00 : 9452: 48 85 ff test %rdi,%rdi 0.00 : 9455: 0f 84 f5 fe ff ff je 9350 0.00 : 945b: 48 8b 74 24 70 mov 0x70(%rsp),%rsi 0.00 : 9460: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 9465: e8 16 57 00 00 callq eb80 <_dl_name_match_p> 0.00 : 946a: 85 c0 test %eax,%eax 0.00 : 946c: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 9471: 0f 84 d9 fe ff ff je 9350 0.00 : 9477: b8 ff ff ff ff mov $0xffffffff,%eax 0.00 : 947c: eb 04 jmp 9482 0.00 : 947e: 66 90 xchg %ax,%ax 0.00 : 9480: 31 c0 xor %eax,%eax 0.00 : 9482: 48 81 c4 a8 00 00 00 add $0xa8,%rsp 0.00 : 9489: 5b pop %rbx 0.00 : 948a: 5d pop %rbp 0.00 : 948b: 41 5c pop %r12 0.00 : 948d: 41 5d pop %r13 0.00 : 948f: 41 5e pop %r14 0.00 : 9491: 41 5f pop %r15 0.00 : 9493: c3 retq 0.00 : 9494: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 9498: 48 8b 54 24 60 mov 0x60(%rsp),%rdx 0.00 : 949d: 48 85 d2 test %rdx,%rdx 0.00 : 94a0: 48 89 54 24 48 mov %rdx,0x48(%rsp) 0.00 : 94a5: 74 8a je 9431 0.00 : 94a7: 48 8b 4c 24 48 mov 0x48(%rsp),%rcx 0.00 : 94ac: 0f b6 41 04 movzbl 0x4(%rcx),%eax 0.00 : 94b0: c0 e8 04 shr $0x4,%al 0.00 : 94b3: 3c 02 cmp $0x2,%al 0.00 : 94b5: 0f 84 75 01 00 00 je 9630 0.00 : 94bb: 3c 0a cmp $0xa,%al 0.00 : 94bd: 74 31 je 94f0 0.00 : 94bf: 2c 01 sub $0x1,%al 0.00 : 94c1: 0f 85 6a ff ff ff jne 9431 0.00 : 94c7: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 94cc: 48 8b 54 24 48 mov 0x48(%rsp),%rdx 0.00 : 94d1: 48 89 10 mov %rdx,(%rax) 0.00 : 94d4: 48 8b 44 24 70 mov 0x70(%rsp),%rax 0.00 : 94d9: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx 0.00 : 94de: 48 89 41 08 mov %rax,0x8(%rcx) 0.00 : 94e2: b8 01 00 00 00 mov $0x1,%eax 0.00 : 94e7: eb 99 jmp 9482 0.00 : 94e9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax) 0.00 : 94f0: 48 8b 44 24 70 mov 0x70(%rsp),%rax 0.00 : 94f5: 48 8d 2d 6c 5b 21 00 lea 0x215b6c(%rip),%rbp # 21f068 <_rtld_global+0x8> 0.00 : 94fc: 48 8b 40 30 mov 0x30(%rax),%rax 0.00 : 9500: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 9505: 48 8d 1c c0 lea (%rax,%rax,8),%rbx 0.00 : 9509: 48 89 44 24 58 mov %rax,0x58(%rsp) 0.00 : 950e: 48 8d 05 4b 5b 21 00 lea 0x215b4b(%rip),%rax # 21f060 <_rtld_global> 0.00 : 9515: 48 c1 e3 04 shl $0x4,%rbx 0.00 : 9519: 48 8d 44 18 20 lea 0x20(%rax,%rbx,1),%rax 0.00 : 951e: 48 01 dd add %rbx,%rbp 0.00 : 9521: 48 89 44 24 40 mov %rax,0x40(%rsp) 0.00 : 9526: 48 89 c7 mov %rax,%rdi 0.00 : 9529: ff 15 11 6a 21 00 callq *0x216a11(%rip) # 21ff40 <_rtld_global+0xee0> 0.00 : 952f: 48 8b 55 40 mov 0x40(%rbp),%rdx 0.00 : 9533: 48 8d 0d 26 5b 21 00 lea 0x215b26(%rip),%rcx # 21f060 <_rtld_global> 0.00 : 953a: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 953f: 48 8d 1c 19 lea (%rcx,%rbx,1),%rbx 0.00 : 9543: 48 85 d2 test %rdx,%rdx 0.00 : 9546: 48 89 54 24 50 mov %rdx,0x50(%rsp) 0.00 : 954b: 4c 8b 73 50 mov 0x50(%rbx),%r14 0.00 : 954f: 0f 84 bb 02 00 00 je 9810 0.00 : 9555: 4c 89 d8 mov %r11,%rax 0.00 : 9558: 31 d2 xor %edx,%edx 0.00 : 955a: 49 8d 76 fe lea -0x2(%r14),%rsi 0.00 : 955e: 49 f7 f6 div %r14 0.00 : 9561: 4c 89 d8 mov %r11,%rax 0.00 : 9564: 48 89 d1 mov %rdx,%rcx 0.00 : 9567: 31 d2 xor %edx,%edx 0.00 : 9569: 48 f7 f6 div %rsi 0.00 : 956c: 4c 8d 6a 01 lea 0x1(%rdx),%r13 0.00 : 9570: 48 8b 54 24 78 mov 0x78(%rsp),%rdx 0.00 : 9575: 4d 89 ef mov %r13,%r15 0.00 : 9578: 48 89 54 24 38 mov %rdx,0x38(%rsp) 0.00 : 957d: 49 c1 e7 05 shl $0x5,%r15 0.00 : 9581: 48 8b 6c 24 50 mov 0x50(%rsp),%rbp 0.00 : 9586: 4d 8d 64 0d 00 lea 0x0(%r13,%rcx,1),%r12 0.00 : 958b: 48 c1 e1 05 shl $0x5,%rcx 0.00 : 958f: 48 01 cd add %rcx,%rbp 0.00 : 9592: eb 26 jmp 95ba 0.00 : 9594: 0f 1f 40 00 nopl 0x0(%rax) 0.00 : 9598: 48 8b 5d 08 mov 0x8(%rbp),%rbx 0.00 : 959c: 48 85 db test %rbx,%rbx 0.00 : 959f: 0f 84 cb 00 00 00 je 9670 0.00 : 95a5: 4b 8d 14 2c lea (%r12,%r13,1),%rdx 0.00 : 95a9: 4c 01 fd add %r15,%rbp 0.00 : 95ac: 48 89 d0 mov %rdx,%rax 0.00 : 95af: 4c 29 e8 sub %r13,%rax 0.00 : 95b2: 49 39 c6 cmp %rax,%r14 0.00 : 95b5: 76 69 jbe 9620 0.00 : 95b7: 49 89 d4 mov %rdx,%r12 0.00 : 95ba: 8b 45 00 mov 0x0(%rbp),%eax 0.00 : 95bd: 4c 39 d8 cmp %r11,%rax 0.00 : 95c0: 75 d6 jne 9598 0.00 : 95c2: 48 8b 5d 08 mov 0x8(%rbp),%rbx 0.00 : 95c6: 48 8b 74 24 38 mov 0x38(%rsp),%rsi 0.00 : 95cb: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 95d0: 48 89 df mov %rbx,%rdi 0.00 : 95d3: e8 88 d0 00 00 callq 16660 0.00 : 95d8: 85 c0 test %eax,%eax 0.00 : 95da: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 95df: 75 bb jne 959c 0.00 : 95e1: f6 84 24 9c 00 00 00 testb $0x2,0x9c(%rsp) 0.00 : 95e8: 02 0.00 : 95e9: 0f 84 ec 02 00 00 je 98db 0.00 : 95ef: 48 8b 44 24 48 mov 0x48(%rsp),%rax 0.00 : 95f4: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx 0.00 : 95f9: 48 89 01 mov %rax,(%rcx) 0.00 : 95fc: 48 8b 44 24 70 mov 0x70(%rsp),%rax 0.00 : 9601: 48 89 41 08 mov %rax,0x8(%rcx) 0.00 : 9605: 48 8b 7c 24 40 mov 0x40(%rsp),%rdi 0.00 : 960a: ff 15 38 69 21 00 callq *0x216938(%rip) # 21ff48 <_rtld_global+0xee8> 0.00 : 9610: b8 01 00 00 00 mov $0x1,%eax 0.00 : 9615: e9 68 fe ff ff jmpq 9482 0.00 : 961a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 9620: 4c 89 e1 mov %r12,%rcx 0.00 : 9623: 4c 29 f1 sub %r14,%rcx 0.00 : 9626: e9 56 ff ff ff jmpq 9581 0.00 : 962b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 9630: 8b 0d 32 56 21 00 mov 0x215632(%rip),%ecx # 21ec68 <_rtld_global_ro+0x48> 0.00 : 9636: 85 c9 test %ecx,%ecx 0.00 : 9638: 0f 84 89 fe ff ff je 94c7 0.00 : 963e: 48 8b 44 24 28 mov 0x28(%rsp),%rax 0.00 : 9643: 48 83 38 00 cmpq $0x0,(%rax) 0.00 : 9647: 0f 85 e4 fd ff ff jne 9431 0.00 : 964d: 48 8b 54 24 48 mov 0x48(%rsp),%rdx 0.00 : 9652: 48 89 10 mov %rdx,(%rax) 0.00 : 9655: 48 8b 44 24 70 mov 0x70(%rsp),%rax 0.00 : 965a: 48 8b 4c 24 28 mov 0x28(%rsp),%rcx 0.00 : 965f: 48 89 41 08 mov %rax,0x8(%rcx) 0.00 : 9663: e9 c9 fd ff ff jmpq 9431 0.00 : 9668: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 0.00 : 966f: 00 0.00 : 9670: 48 8b 4c 24 58 mov 0x58(%rsp),%rcx 0.00 : 9675: 4b 8d 04 76 lea (%r14,%r14,2),%rax 0.00 : 9679: 48 8d 14 c9 lea (%rcx,%rcx,8),%rdx 0.00 : 967d: 48 8d 0d e4 59 21 00 lea 0x2159e4(%rip),%rcx # 21f068 <_rtld_global+0x8> 0.00 : 9684: 48 c1 e2 04 shl $0x4,%rdx 0.00 : 9688: 48 8b 54 11 50 mov 0x50(%rcx,%rdx,1),%rdx 0.00 : 968d: 48 c1 e2 02 shl $0x2,%rdx 0.00 : 9691: 48 39 d0 cmp %rdx,%rax 0.00 : 9694: 0f 87 d3 00 00 00 ja 976d 0.00 : 969a: 64 8b 04 25 4c 00 00 mov %fs:0x4c,%eax 0.00 : 96a1: 00 0.00 : 96a2: 85 c0 test %eax,%eax 0.00 : 96a4: 0f 85 9e 04 00 00 jne 9b48 0.00 : 96aa: 49 8d 7e 01 lea 0x1(%r14),%rdi 0.00 : 96ae: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 96b3: e8 48 54 00 00 callq eb00 <_dl_higher_prime_number> 0.00 : 96b8: bf 20 00 00 00 mov $0x20,%edi 0.00 : 96bd: 48 89 c6 mov %rax,%rsi 0.00 : 96c0: 49 89 c7 mov %rax,%r15 0.00 : 96c3: e8 08 74 ff ff callq ad0 0.00 : 96c8: 48 85 c0 test %rax,%rax 0.00 : 96cb: 49 89 c5 mov %rax,%r13 0.00 : 96ce: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 96d3: 0f 84 da 01 00 00 je 98b3 0.00 : 96d9: 31 ed xor %ebp,%ebp 0.00 : 96db: 4d 85 f6 test %r14,%r14 0.00 : 96de: 48 8b 5c 24 50 mov 0x50(%rsp),%rbx 0.00 : 96e3: 74 38 je 971d 0.00 : 96e5: 0f 1f 00 nopl (%rax) 0.00 : 96e8: 48 8b 4b 08 mov 0x8(%rbx),%rcx 0.00 : 96ec: 48 85 c9 test %rcx,%rcx 0.00 : 96ef: 74 1f je 9710 0.00 : 96f1: 4c 8b 4b 18 mov 0x18(%rbx),%r9 0.00 : 96f5: 4c 8b 43 10 mov 0x10(%rbx),%r8 0.00 : 96f9: 4c 89 fe mov %r15,%rsi 0.00 : 96fc: 8b 13 mov (%rbx),%edx 0.00 : 96fe: 4c 89 ef mov %r13,%rdi 0.00 : 9701: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 9706: e8 a5 f8 ff ff callq 8fb0 0.00 : 970b: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 9710: 48 83 c5 01 add $0x1,%rbp 0.00 : 9714: 48 83 c3 20 add $0x20,%rbx 0.00 : 9718: 49 39 ee cmp %rbp,%r14 0.00 : 971b: 77 cb ja 96e8 0.00 : 971d: 48 8b 44 24 58 mov 0x58(%rsp),%rax 0.00 : 9722: 4c 8d 25 37 59 21 00 lea 0x215937(%rip),%r12 # 21f060 <_rtld_global> 0.00 : 9729: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 972e: 48 8b 7c 24 50 mov 0x50(%rsp),%rdi 0.00 : 9733: 4d 89 fe mov %r15,%r14 0.00 : 9736: 48 8d 1c c0 lea (%rax,%rax,8),%rbx 0.00 : 973a: 48 c1 e3 04 shl $0x4,%rbx 0.00 : 973e: 49 01 dc add %rbx,%r12 0.00 : 9741: 41 ff 54 24 60 callq *0x60(%r12) 0.00 : 9746: 48 8b 05 ab 58 21 00 mov 0x2158ab(%rip),%rax # 21eff8 <_DYNAMIC+0x188> 0.00 : 974d: 48 8d 15 14 59 21 00 lea 0x215914(%rip),%rdx # 21f068 <_rtld_global+0x8> 0.00 : 9754: 4d 89 7c 24 50 mov %r15,0x50(%r12) 0.00 : 9759: 4c 89 6c 1a 40 mov %r13,0x40(%rdx,%rbx,1) 0.00 : 975e: 49 89 44 24 60 mov %rax,0x60(%r12) 0.00 : 9763: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 9768: 4c 89 6c 24 50 mov %r13,0x50(%rsp) 0.00 : 976d: f6 84 24 9c 00 00 00 testb $0x2,0x9c(%rsp) 0.00 : 9774: 02 0.00 : 9775: 75 68 jne 97df 0.00 : 9777: 48 8b 54 24 48 mov 0x48(%rsp),%rdx 0.00 : 977c: 4c 8b 4c 24 70 mov 0x70(%rsp),%r9 0.00 : 9781: 4c 89 f6 mov %r14,%rsi 0.00 : 9784: 48 8b 7c 24 50 mov 0x50(%rsp),%rdi 0.00 : 9789: 8b 0a mov (%rdx),%ecx 0.00 : 978b: 49 89 d0 mov %rdx,%r8 0.00 : 978e: 44 89 da mov %r11d,%edx 0.00 : 9791: 48 03 8c 24 80 00 00 add 0x80(%rsp),%rcx 0.00 : 9798: 00 0.00 : 9799: e8 12 f8 ff ff callq 8fb0 0.00 : 979e: 48 8b 54 24 70 mov 0x70(%rsp),%rdx 0.00 : 97a3: 0f b6 82 14 03 00 00 movzbl 0x314(%rdx),%eax 0.00 : 97aa: 83 e0 03 and $0x3,%eax 0.00 : 97ad: 3c 02 cmp $0x2,%al 0.00 : 97af: 0f 84 f2 00 00 00 je 98a7 0.00 : 97b5: 48 8b 4c 24 58 mov 0x58(%rsp),%rcx 0.00 : 97ba: 48 8d 15 a7 58 21 00 lea 0x2158a7(%rip),%rdx # 21f068 <_rtld_global+0x8> 0.00 : 97c1: 48 8d 04 c9 lea (%rcx,%rcx,8),%rax 0.00 : 97c5: 48 c1 e0 04 shl $0x4,%rax 0.00 : 97c9: 48 83 44 02 50 01 addq $0x1,0x50(%rdx,%rax,1) 0.00 : 97cf: 48 8b 7c 24 40 mov 0x40(%rsp),%rdi 0.00 : 97d4: ff 15 6e 67 21 00 callq *0x21676e(%rip) # 21ff48 <_rtld_global+0xee8> 0.00 : 97da: e9 e8 fc ff ff jmpq 94c7 0.00 : 97df: 48 8b 44 24 48 mov 0x48(%rsp),%rax 0.00 : 97e4: 4c 8b 8c 24 08 01 00 mov 0x108(%rsp),%r9 0.00 : 97eb: 00 0.00 : 97ec: 44 89 da mov %r11d,%edx 0.00 : 97ef: 4c 8b 84 24 88 00 00 mov 0x88(%rsp),%r8 0.00 : 97f6: 00 0.00 : 97f7: 48 8b 7c 24 50 mov 0x50(%rsp),%rdi 0.00 : 97fc: 4c 89 f6 mov %r14,%rsi 0.00 : 97ff: 8b 08 mov (%rax),%ecx 0.00 : 9801: 48 03 8c 24 80 00 00 add 0x80(%rsp),%rcx 0.00 : 9808: 00 0.00 : 9809: e8 a2 f7 ff ff callq 8fb0 0.00 : 980e: eb a5 jmp 97b5 0.00 : 9810: 64 8b 04 25 4c 00 00 mov %fs:0x4c,%eax 0.00 : 9817: 00 0.00 : 9818: 85 c0 test %eax,%eax 0.00 : 981a: 0f 85 09 03 00 00 jne 9b29 0.00 : 9820: 4d 85 f6 test %r14,%r14 0.00 : 9823: 0f 85 d4 02 00 00 jne 9afd 0.00 : 9829: be 1f 00 00 00 mov $0x1f,%esi 0.00 : 982e: bf 20 00 00 00 mov $0x20,%edi 0.00 : 9833: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 9838: e8 93 72 ff ff callq ad0 0.00 : 983d: 48 85 c0 test %rax,%rax 0.00 : 9840: 48 89 44 24 50 mov %rax,0x50(%rsp) 0.00 : 9845: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 984a: 74 67 je 98b3 0.00 : 984c: 48 89 45 40 mov %rax,0x40(%rbp) 0.00 : 9850: 48 8b 05 a1 57 21 00 mov 0x2157a1(%rip),%rax # 21eff8 <_DYNAMIC+0x188> 0.00 : 9857: 41 be 1f 00 00 00 mov $0x1f,%r14d 0.00 : 985d: 48 c7 43 50 1f 00 00 movq $0x1f,0x50(%rbx) 0.00 : 9864: 00 0.00 : 9865: 48 89 43 60 mov %rax,0x60(%rbx) 0.00 : 9869: e9 ff fe ff ff jmpq 976d 0.00 : 986e: 48 8b 50 08 mov 0x8(%rax),%rdx 0.00 : 9872: 48 8b 48 30 mov 0x30(%rax),%rcx 0.00 : 9876: 80 3a 00 cmpb $0x0,(%rdx) 0.00 : 9879: 75 0a jne 9885 0.00 : 987b: 48 8b 05 86 53 21 00 mov 0x215386(%rip),%rax # 21ec08 <_dl_argv> 0.00 : 9882: 48 8b 10 mov (%rax),%rdx 0.00 : 9885: 48 8b 74 24 78 mov 0x78(%rsp),%rsi 0.00 : 988a: 48 8d 3d cf 1d 01 00 lea 0x11dcf(%rip),%rdi # 1b660 <__PRETTY_FUNCTION__.3644+0x12ef> 0.00 : 9891: 31 c0 xor %eax,%eax 0.00 : 9893: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 9898: e8 b3 5a 00 00 callq f350 <_dl_debug_printf> 0.00 : 989d: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 98a2: e9 08 fb ff ff jmpq 93af 0.00 : 98a7: 83 8a dc 03 00 00 08 orl $0x8,0x3dc(%rdx) 0.00 : 98ae: e9 02 ff ff ff jmpq 97b5 0.00 : 98b3: 48 8b 7c 24 40 mov 0x40(%rsp),%rdi 0.00 : 98b8: ff 15 8a 66 21 00 callq *0x21668a(%rip) # 21ff48 <_rtld_global+0xee8> 0.00 : 98be: 48 8d 35 7f fe 00 00 lea 0xfe7f(%rip),%rsi # 19744 0.00 : 98c5: bf 02 00 00 00 mov $0x2,%edi 0.00 : 98ca: 31 c0 xor %eax,%eax 0.00 : 98cc: e8 2f 59 00 00 callq f200 <_dl_dprintf> 0.00 : 98d1: bf 7f 00 00 00 mov $0x7f,%edi 0.00 : 98d6: e8 e5 c9 00 00 callq 162c0 <_Exit> 0.00 : 98db: 48 8b 45 10 mov 0x10(%rbp),%rax 0.00 : 98df: 48 8b 54 24 28 mov 0x28(%rsp),%rdx 0.00 : 98e4: 48 89 02 mov %rax,(%rdx) 0.00 : 98e7: 48 8b 45 18 mov 0x18(%rbp),%rax 0.00 : 98eb: 48 89 42 08 mov %rax,0x8(%rdx) 0.00 : 98ef: e9 11 fd ff ff jmpq 9605 0.00 : 98f4: 48 8b 54 24 30 mov 0x30(%rsp),%rdx 0.00 : 98f9: b9 ff ff ff ff mov $0xffffffff,%ecx 0.00 : 98fe: 48 8b 3a mov (%rdx),%rdi 0.00 : 9901: 48 39 cf cmp %rcx,%rdi 0.00 : 9904: 0f 84 41 01 00 00 je 9a4b 0.00 : 990a: 8b 8e ec 02 00 00 mov 0x2ec(%rsi),%ecx 0.00 : 9910: 31 d2 xor %edx,%edx 0.00 : 9912: 48 89 f8 mov %rdi,%rax 0.00 : 9915: 48 f7 f1 div %rcx 0.00 : 9918: 48 8b 86 08 03 00 00 mov 0x308(%rsi),%rax 0.00 : 991f: 8b 04 90 mov (%rax,%rdx,4),%eax 0.00 : 9922: 85 c0 test %eax,%eax 0.00 : 9924: 89 84 24 98 00 00 00 mov %eax,0x98(%rsp) 0.00 : 992b: 75 30 jne 995d 0.00 : 992d: e9 f5 fa ff ff jmpq 9427 0.00 : 9932: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1) 0.00 : 9938: 48 8b 54 24 70 mov 0x70(%rsp),%rdx 0.00 : 993d: 8b 84 24 98 00 00 00 mov 0x98(%rsp),%eax 0.00 : 9944: 48 8b 92 00 03 00 00 mov 0x300(%rdx),%rdx 0.00 : 994b: 8b 04 82 mov (%rdx,%rax,4),%eax 0.00 : 994e: 85 c0 test %eax,%eax 0.00 : 9950: 89 84 24 98 00 00 00 mov %eax,0x98(%rsp) 0.00 : 9957: 0f 84 ca fa ff ff je 9427 0.00 : 995d: 89 c7 mov %eax,%edi 0.00 : 995f: 4c 8b 54 24 20 mov 0x20(%rsp),%r10 0.00 : 9964: 4c 89 4c 24 10 mov %r9,0x10(%rsp) 0.00 : 9969: 48 8d 3c 7f lea (%rdi,%rdi,2),%rdi 0.00 : 996d: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 9972: 49 8d 3c f9 lea (%r9,%rdi,8),%rdi 0.00 : 9976: e8 85 f7 ff ff callq 9100 0.00 : 997b: 48 85 c0 test %rax,%rax 0.00 : 997e: 48 89 44 24 48 mov %rax,0x48(%rsp) 0.00 : 9983: 4c 8b 4c 24 10 mov 0x10(%rsp),%r9 0.00 : 9988: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 998d: 74 a9 je 9938 0.00 : 998f: e9 13 fb ff ff jmpq 94a7 0.00 : 9994: 8b 8e ec 02 00 00 mov 0x2ec(%rsi),%ecx 0.00 : 999a: 31 d2 xor %edx,%edx 0.00 : 999c: 4c 89 d8 mov %r11,%rax 0.00 : 999f: 48 f7 f1 div %rcx 0.00 : 99a2: 48 8b 86 00 03 00 00 mov 0x300(%rsi),%rax 0.00 : 99a9: 8b 04 90 mov (%rax,%rdx,4),%eax 0.00 : 99ac: 85 c0 test %eax,%eax 0.00 : 99ae: 0f 84 68 fa ff ff je 941c 0.00 : 99b4: 89 c0 mov %eax,%eax 0.00 : 99b6: 4c 8d 04 85 00 00 00 lea 0x0(,%rax,4),%r8 0.00 : 99bd: 00 0.00 : 99be: 4c 03 86 08 03 00 00 add 0x308(%rsi),%r8 0.00 : 99c5: 41 8b 10 mov (%r8),%edx 0.00 : 99c8: 89 d0 mov %edx,%eax 0.00 : 99ca: 4c 31 d8 xor %r11,%rax 0.00 : 99cd: 48 d1 e8 shr %rax 0.00 : 99d0: 74 1a je 99ec 0.00 : 99d2: 83 e2 01 and $0x1,%edx 0.00 : 99d5: 0f 85 41 fa ff ff jne 941c 0.00 : 99db: 49 83 c0 04 add $0x4,%r8 0.00 : 99df: 41 8b 10 mov (%r8),%edx 0.00 : 99e2: 89 d0 mov %edx,%eax 0.00 : 99e4: 4c 31 d8 xor %r11,%rax 0.00 : 99e7: 48 d1 e8 shr %rax 0.00 : 99ea: 75 e6 jne 99d2 0.00 : 99ec: 48 8b 44 24 70 mov 0x70(%rsp),%rax 0.00 : 99f1: 4c 89 c7 mov %r8,%rdi 0.00 : 99f4: 4c 8b 54 24 20 mov 0x20(%rsp),%r10 0.00 : 99f9: 48 2b b8 08 03 00 00 sub 0x308(%rax),%rdi 0.00 : 9a00: 4c 89 44 24 18 mov %r8,0x18(%rsp) 0.00 : 9a05: 4c 89 4c 24 10 mov %r9,0x10(%rsp) 0.00 : 9a0a: 4c 89 5c 24 08 mov %r11,0x8(%rsp) 0.00 : 9a0f: 48 c1 ff 02 sar $0x2,%rdi 0.00 : 9a13: 89 bc 24 98 00 00 00 mov %edi,0x98(%rsp) 0.00 : 9a1a: 89 ff mov %edi,%edi 0.00 : 9a1c: 48 8d 3c 7f lea (%rdi,%rdi,2),%rdi 0.00 : 9a20: 49 8d 3c f9 lea (%r9,%rdi,8),%rdi 0.00 : 9a24: e8 d7 f6 ff ff callq 9100 0.00 : 9a29: 48 85 c0 test %rax,%rax 0.00 : 9a2c: 48 89 44 24 48 mov %rax,0x48(%rsp) 0.00 : 9a31: 4c 8b 44 24 18 mov 0x18(%rsp),%r8 0.00 : 9a36: 4c 8b 4c 24 10 mov 0x10(%rsp),%r9 0.00 : 9a3b: 4c 8b 5c 24 08 mov 0x8(%rsp),%r11 0.00 : 9a40: 0f 85 61 fa ff ff jne 94a7 0.00 : 9a46: 41 8b 10 mov (%r8),%edx 0.00 : 9a49: eb 87 jmp 99d2 0.00 : 9a4b: 48 8b 54 24 78 mov 0x78(%rsp),%rdx 0.00 : 9a50: 31 ff xor %edi,%edi 0.00 : 9a52: 0f b6 02 movzbl (%rdx),%eax 0.00 : 9a55: 84 c0 test %al,%al 0.00 : 9a57: 0f 84 93 00 00 00 je 9af0 0.00 : 9a5d: 0f b6 c8 movzbl %al,%ecx 0.00 : 9a60: 0f b6 42 01 movzbl 0x1(%rdx),%eax 0.00 : 9a64: 89 cf mov %ecx,%edi 0.00 : 9a66: 84 c0 test %al,%al 0.00 : 9a68: 0f 84 82 00 00 00 je 9af0 0.00 : 9a6e: 48 c1 e1 04 shl $0x4,%rcx 0.00 : 9a72: 0f b6 c0 movzbl %al,%eax 0.00 : 9a75: 48 8d 0c 08 lea (%rax,%rcx,1),%rcx 0.00 : 9a79: 0f b6 42 02 movzbl 0x2(%rdx),%eax 0.00 : 9a7d: 89 cf mov %ecx,%edi 0.00 : 9a7f: 84 c0 test %al,%al 0.00 : 9a81: 74 6d je 9af0 0.00 : 9a83: 48 c1 e1 04 shl $0x4,%rcx 0.00 : 9a87: 0f b6 c0 movzbl %al,%eax 0.00 : 9a8a: 48 01 c1 add %rax,%rcx 0.00 : 9a8d: 0f b6 42 03 movzbl 0x3(%rdx),%eax 0.00 : 9a91: 89 cf mov %ecx,%edi 0.00 : 9a93: 84 c0 test %al,%al 0.00 : 9a95: 74 59 je 9af0 0.00 : 9a97: 48 c1 e1 04 shl $0x4,%rcx 0.00 : 9a9b: 0f b6 c0 movzbl %al,%eax 0.00 : 9a9e: 48 01 c1 add %rax,%rcx 0.00 : 9aa1: 0f b6 42 04 movzbl 0x4(%rdx),%eax 0.00 : 9aa5: 89 cf mov %ecx,%edi 0.00 : 9aa7: 84 c0 test %al,%al 0.00 : 9aa9: 74 45 je 9af0 0.00 : 9aab: 48 c1 e1 04 shl $0x4,%rcx 0.00 : 9aaf: 0f b6 c0 movzbl %al,%eax 0.00 : 9ab2: 4c 8d 42 05 lea 0x5(%rdx),%r8 0.00 : 9ab6: 48 01 c1 add %rax,%rcx 0.00 : 9ab9: 0f b6 42 05 movzbl 0x5(%rdx),%eax 0.00 : 9abd: 89 cf mov %ecx,%edi 0.00 : 9abf: 84 c0 test %al,%al 0.00 : 9ac1: 74 2d je 9af0 0.00 : 9ac3: 48 c1 e1 04 shl $0x4,%rcx 0.00 : 9ac7: 0f b6 d0 movzbl %al,%edx 0.00 : 9aca: 49 83 c0 01 add $0x1,%r8 0.00 : 9ace: 48 01 ca add %rcx,%rdx 0.00 : 9ad1: 48 89 d0 mov %rdx,%rax 0.00 : 9ad4: 25 00 00 00 f0 and $0xf0000000,%eax 0.00 : 9ad9: 48 89 c1 mov %rax,%rcx 0.00 : 9adc: 48 c1 e8 18 shr $0x18,%rax 0.00 : 9ae0: 48 31 d1 xor %rdx,%rcx 0.00 : 9ae3: 48 31 c1 xor %rax,%rcx 0.00 : 9ae6: 41 0f b6 00 movzbl (%r8),%eax 0.00 : 9aea: 84 c0 test %al,%al 0.00 : 9aec: 75 d5 jne 9ac3 0.00 : 9aee: 89 cf mov %ecx,%edi 0.00 : 9af0: 48 8b 44 24 30 mov 0x30(%rsp),%rax 0.00 : 9af5: 48 89 38 mov %rdi,(%rax) 0.00 : 9af8: e9 0d fe ff ff jmpq 990a 0.00 : 9afd: f6 05 1d 51 21 00 04 testb $0x4,0x21511d(%rip) # 21ec21 <_rtld_global_ro+0x1> 0.00 : 9b04: 0f 85 c5 fc ff ff jne 97cf 0.00 : 9b0a: 48 8d 0d b6 01 01 00 lea 0x101b6(%rip),%rcx # 19cc7 <__PRETTY_FUNCTION__.12172> 0.00 : 9b11: 48 8d 35 bc 00 01 00 lea 0x100bc(%rip),%rsi # 19bd4 <__PRETTY_FUNCTION__.12287+0x73> 0.00 : 9b18: 48 8d 3d 21 1e 01 00 lea 0x11e21(%rip),%rdi # 1b940 <__PRETTY_FUNCTION__.3644+0x15cf> 0.00 : 9b1f: ba a2 01 00 00 mov $0x1a2,%edx 0.00 : 9b24: e8 47 b2 00 00 callq 14d70 <__GI___assert_fail> 0.00 : 9b29: 48 8d 0d 97 01 01 00 lea 0x10197(%rip),%rcx # 19cc7 <__PRETTY_FUNCTION__.12172> 0.00 : 9b30: 48 8d 35 9d 00 01 00 lea 0x1009d(%rip),%rsi # 19bd4 <__PRETTY_FUNCTION__.12287+0x73> 0.00 : 9b37: 48 8d 3d 4a 1b 01 00 lea 0x11b4a(%rip),%rdi # 1b688 <__PRETTY_FUNCTION__.3644+0x1317> 0.00 : 9b3e: ba 97 01 00 00 mov $0x197,%edx 0.00 : 9b43: e8 28 b2 00 00 callq 14d70 <__GI___assert_fail> 0.00 : 9b48: 48 8d 0d 78 01 01 00 lea 0x10178(%rip),%rcx # 19cc7 <__PRETTY_FUNCTION__.12172> 0.00 : 9b4f: 48 8d 35 7e 00 01 00 lea 0x1007e(%rip),%rsi # 19bd4 <__PRETTY_FUNCTION__.12287+0x73> 0.00 : 9b56: 48 8d 3d 2b 1b 01 00 lea 0x11b2b(%rip),%rdi # 1b688 <__PRETTY_FUNCTION__.3644+0x1317> 0.00 : 9b5d: ba 7a 01 00 00 mov $0x17a,%edx 0.00 : 9b62: e8 09 b2 00 00 callq 14d70 <__GI___assert_fail> Sorted summary for file /lib64/ld-2.11.3.so ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib64/ld-2.11.3.so ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000016660 : ??:0 100.00 : 16660: 8a 07 mov (%rdi),%al 0.00 : 16662: 3a 06 cmp (%rsi),%al 0.00 : 16664: 75 0d jne 16673 0.00 : 16666: 48 ff c7 inc %rdi 0.00 : 16669: 48 ff c6 inc %rsi 0.00 : 1666c: 84 c0 test %al,%al 0.00 : 1666e: 75 f0 jne 16660 0.00 : 16670: 31 c0 xor %eax,%eax 0.00 : 16672: c3 retq 0.00 : 16673: b8 01 00 00 00 mov $0x1,%eax 0.00 : 16678: b9 ff ff ff ff mov $0xffffffff,%ecx 0.00 : 1667d: 0f 42 c1 cmovb %ecx,%eax Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/fs/ext3/ext3.ko ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/fs/ext3/ext3.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000005b40 : 0.00 : 5b40: 41 57 push %r15 0.00 : 5b72: 41 56 or %al,(%rax) 0.00 : 5b74: 49 89 add %al,(%rax) 0.00 : 5b76: fe 41 add %al,%bh 0.00 : 5b78: 55 4c 8d rex.R and $0xc,%al 0.00 : 5b7b: ae 20 add %al,(%rax) 0.00 : 5b7d: ff ff add %al,(%rax) 0.00 : 5b7f: ff 41 54 49 8d jmpq 5ced 0.00 : 5b84: 45 58 49 89 nopl 0x0(%rax) 0.00 : 5b88: f4 55 53 48 83 mov 0x4(%r12),%eax 0.00 : 5b8d: ec 18 4c 8b mov %ax,0x2(%rbx) 0.00 : 5b91: 3a 49 8b 5f 28 mov 0x8(%r12),%eax 0.00 : 5b96: 48 03 5a 08 mov %ax,0x18(%rbx) 0.00 : 5b9a: 48 89 44 24 mov 0x4c(%r13),%edi 0.00 : 5b9e: 10 c7 test %edi,%edi 0.00 : 5ba0: 44 24 08 00 00 00 jne 5d61 0.00 : 5ba6: 00 c7 44 24 0c 00 movzwl 0x6(%r12),%eax 0.00 : 5bac: 00 00 00 e9 mov %ax,0x78(%rbx) 0.00 : 5bb0: 69 01 00 00 0f 1f movzwl 0xa(%r12),%eax 0.00 : 5bb6: 40 00 41 8b mov %ax,0x7a(%rbx) 0.00 : 5bba: 44 24 04 66 89 43 02 mov 0xbc(%r12),%eax 0.00 : 5bc1: 41 0.00 : 5bc2: 8b 44 24 08 mov %ax,0x1a(%rbx) 0.00 : 5bc6: 66 89 43 18 41 8b 7d mov 0xa8(%r13),%rax 0.00 : 5bcd: 4c 85 ff cmp %eax,0x4(%rbx) 0.00 : 5bd0: 0f 85 je 5bdd 0.00 : 5bd2: bb 01 00 mov %eax,0x4(%rbx) 0.00 : 5bd5: 00 41 0f b7 44 24 06 movl $0x1,0xc(%rsp) 0.00 : 5bdc: 66 0.00 : 5bdd: 89 43 78 41 0f b7 44 mov 0xd8(%r12),%rax 0.00 : 5be4: 24 0.00 : 5be5: 0a 66 89 mov %eax,0x8(%rbx) 0.00 : 5be8: 43 7a 41 8b 84 24 bc mov 0xf8(%r12),%rax 0.00 : 5bef: 00 0.00 : 5bf0: 00 00 66 mov %eax,0xc(%rbx) 0.00 : 5bf3: 89 43 1a 49 8b 85 a8 mov 0xe8(%r12),%rax 0.00 : 5bfa: 00 0.00 : 5bfb: 00 00 39 mov %eax,0x10(%rbx) 0.00 : 5bfe: 43 04 74 0b 89 43 04 mov 0x108(%r12),%rax 0.00 : 5c05: c7 0.00 : 5c06: 44 24 0c mov %eax,0x1c(%rbx) 0.00 : 5c09: 01 00 00 00 mov 0x4c(%r13),%eax 0.00 : 5c0d: 49 8b 84 mov %eax,0x14(%rbx) 0.00 : 5c10: 24 d8 00 00 mov 0x3c(%r13),%eax 0.00 : 5c14: 00 89 43 mov %eax,0x20(%rbx) 0.00 : 5c17: 08 49 8b 84 mov 0x40(%r13),%rax 0.00 : 5c1b: 24 f8 00 mov %eax,0x68(%rbx) 0.00 : 5c1e: 00 00 89 43 0c movzwl (%r12),%eax 0.00 : 5c23: 49 8b 84 24 e8 and $0xf000,%eax 0.00 : 5c28: 00 00 00 89 43 cmp $0x8000,%eax 0.00 : 5c2d: 10 49 8b 84 24 08 jne 5db0 0.00 : 5c33: 01 00 00 89 43 1c 41 mov 0xa8(%r13),%rax 0.00 : 5c3a: 8b 45 4c mov %rax,%rdx 0.00 : 5c3d: 89 43 14 41 sar $0x20,%rdx 0.00 : 5c41: 8b 45 3c cmp %edx,0x6c(%rbx) 0.00 : 5c44: 89 43 je 5c58 0.00 : 5c46: 20 49 8b mov %edx,0x6c(%rbx) 0.00 : 5c49: 45 40 89 43 68 41 0f mov 0xa8(%r13),%rax 0.00 : 5c50: b7 04 24 25 00 f0 00 movl $0x1,0xc(%rsp) 0.00 : 5c57: 00 0.00 : 5c58: 3d 00 80 00 00 0f cmp $0x7fffffff,%rax 0.00 : 5c5e: 85 7d 01 00 00 49 jbe 5dbb 0.00 : 5c64: 8b 85 a8 00 00 mov 0x18(%r12),%rbp 0.00 : 5c69: 00 48 89 c2 48 c1 fa mov 0x338(%rbp),%rax 0.00 : 5c70: 20 39 53 6c mov 0x68(%rax),%rax 0.00 : 5c74: 74 12 89 53 testb $0x2,0x64(%rax) 0.00 : 5c78: 6c 49 je 5c85 0.00 : 5c7a: 8b 85 a8 mov 0x4c(%rax),%esi 0.00 : 5c7d: 00 00 test %esi,%esi 0.00 : 5c7f: 00 c7 44 24 0c 01 jne 5dbb 0.00 : 5c85: 00 00 00 mov %r15,%rdi 0.00 : 5c88: 48 3d ff ff ff callq 5c8d 0.00 : 5c8d: 7f 0f 86 57 01 00 00 mov 0x338(%rbp),%rax 0.00 : 5c94: 49 8b 6c mov %r14,%rsi 0.00 : 5c97: 24 18 48 8b 85 38 03 mov $0x0,%rdi 0.00 : 5c9e: 00 00 48 8b mov 0x60(%rax),%rdx 0.00 : 5ca2: 40 68 f6 40 64 callq 5ca7 0.00 : 5ca7: 02 74 test %eax,%eax 0.00 : 5ca9: 0b 8b 70 4c mov %eax,0x8(%rsp) 0.00 : 5cad: 85 f6 0f 85 36 01 jne 5e90 0.00 : 5cb3: 00 00 4c mov %rbp,%rdi 0.00 : 5cb6: 89 ff e8 00 00 callq 5cbb 0.00 : 5cbb: 00 00 48 8b 85 38 03 mov 0x338(%rbp),%rax 0.00 : 5cc2: 00 00 4c mov %r14,%rsi 0.00 : 5cc5: 89 f6 48 c7 c7 00 00 mov $0x0,%rdi 0.00 : 5ccc: 00 00 48 8b mov 0x68(%rax),%rax 0.00 : 5cd0: 50 60 e8 00 orl $0x2,0x64(%rax) 0.00 : 5cd4: 00 00 00 85 c0 orb $0x1,0x14(%r14) 0.00 : 5cd9: 89 44 24 08 0f 85 dd mov 0x338(%rbp),%rax 0.00 : 5ce0: 01 00 00 48 mov 0x60(%rax),%rdx 0.00 : 5ce4: 89 ef e8 00 00 callq 5ce9 0.00 : 5ce9: 00 00 48 8b mov %eax,0x8(%rsp) ??:0 100.00 : 5ced: 85 38 03 00 00 4c lock btsl $0x2,(%r15) 0.00 : 5cf3: 89 f6 sbb %eax,%eax 0.00 : 5cf5: 48 c7 test %eax,%eax 0.00 : 5cf7: c7 00 00 00 00 48 jne 5da0 0.00 : 5cfd: 8b 40 68 83 48 mov 0x10(%rsp),%rdx 0.00 : 5d02: 64 02 41 mov (%rdx),%rax 0.00 : 5d05: 80 4e test $0x2,%al 0.00 : 5d07: 14 01 jne 5d78 0.00 : 5d09: 48 8b 85 mov %r13,%rdi 0.00 : 5d0c: 38 03 00 00 48 callq 5d11 0.00 : 5d11: 8b 50 60 e8 00 movzwl (%r12),%eax 0.00 : 5d16: 00 00 00 mov %ax,(%rbx) 0.00 : 5d19: 89 44 24 08 f0 mov 0x18(%r12),%rax 0.00 : 5d1e: 41 0f ba 2f 02 19 c0 mov 0x338(%rax),%rax 0.00 : 5d25: 85 c0 0f 85 testb $0x20,0x79(%rax) 0.00 : 5d29: a3 00 00 00 48 8b je 5b88 0.00 : 5d2f: 54 24 10 48 8b mov 0x4(%r12),%eax 0.00 : 5d34: 02 a8 02 75 6f test $0xffff0000,%eax 0.00 : 5d39: 4c 89 mov %eax,%edx 0.00 : 5d3b: ef e8 je 5d44 0.00 : 5d3d: 00 00 00 00 41 0f b7 movzwl 0x0(%rip),%edx # 5d44 0.00 : 5d44: 04 24 66 89 mov %dx,0x2(%rbx) 0.00 : 5d48: 03 49 8b 44 24 mov 0x8(%r12),%eax 0.00 : 5d4d: 18 48 8b 80 38 test $0xffff0000,%eax 0.00 : 5d52: 03 00 mov %eax,%edx 0.00 : 5d54: 00 f6 je 5d5d 0.00 : 5d56: 40 79 20 0f 84 59 fe movzwl 0x0(%rip),%edx # 5d5d 0.00 : 5d5d: ff ff 41 8b mov %dx,0x18(%rbx) 0.00 : 5d61: 44 24 04 a9 00 00 movw $0x0,0x78(%rbx) 0.00 : 5d67: ff ff 89 c2 74 07 movw $0x0,0x7a(%rbx) 0.00 : 5d6d: 0f b7 15 00 00 jmpq 5bba 0.00 : 5d72: 00 00 66 89 53 02 nopw 0x0(%rax,%rax,1) 0.00 : 5d78: 41 8b 44 24 08 mov 0x18(%r12),%rax 0.00 : 5d7d: a9 00 xor %esi,%esi 0.00 : 5d7f: 00 ff ff mov %rbx,%rdi 0.00 : 5d82: 89 c2 74 07 0f b7 15 mov 0x338(%rax),%rax 0.00 : 5d89: 00 00 00 00 66 89 53 movslq 0x9c(%rax),%rdx 0.00 : 5d90: 18 66 c7 43 78 callq 5d95 0.00 : 5d95: 00 00 66 c7 43 jmpq 5d09 0.00 : 5d9a: 7a 00 00 e9 48 fe nopw 0x0(%rax,%rax,1) 0.00 : 5da0: ff ff 66 mov %r15,%rdi 0.00 : 5da3: 0f 1f 44 00 00 callq 5da8 0.00 : 5da8: 49 8b 44 24 18 jmpq 5cfd 0.00 : 5dad: 31 f6 48 nopl (%rax) 0.00 : 5db0: 89 df 48 8b 80 38 03 mov -0x98(%r12),%eax 0.00 : 5db7: 00 0.00 : 5db8: 00 48 63 mov %eax,0x6c(%rbx) 0.00 : 5dbb: 90 9c 00 00 00 e8 00 mov 0x220(%r12),%eax 0.00 : 5dc2: 00 0.00 : 5dc3: 00 00 e9 mov %eax,0x64(%rbx) 0.00 : 5dc6: 6f ff ff ff 66 movzwl (%r12),%eax 0.00 : 5dcb: 0f 1f 44 00 00 and $0xf000,%eax 0.00 : 5dd0: 4c 89 ff e8 00 cmp $0x2000,%eax 0.00 : 5dd5: 00 00 je 5de4 0.00 : 5dd7: 00 e9 xor %edx,%edx 0.00 : 5dd9: 50 ff ff ff 0f cmp $0x6000,%eax 0.00 : 5dde: 1f 00 41 8b 84 24 jne 5ed0 0.00 : 5de4: 68 ff ff ff 89 43 6c mov 0xc0(%r12),%edx 0.00 : 5deb: 41 0.00 : 5dec: 8b 84 mov %edx,%ecx 0.00 : 5dee: 24 20 02 shr $0x14,%ecx 0.00 : 5df1: 00 00 89 43 64 41 cmp $0xff,%ecx 0.00 : 5df7: 0f b7 04 24 25 00 ja 5ef0 0.00 : 5dfd: f0 00 mov %edx,%eax 0.00 : 5dff: 00 3d 00 20 00 and $0xfffff,%eax 0.00 : 5e04: 00 74 0d 31 d2 cmp $0xff,%eax 0.00 : 5e09: 3d 00 60 00 00 0f ja 5ef0 0.00 : 5e0f: 85 ec mov %ecx,%eax 0.00 : 5e11: 00 00 00 41 8b 94 24 movl $0x0,0x2c(%rbx) 0.00 : 5e18: c0 00 00 shl $0x8,%eax 0.00 : 5e1b: 00 89 or %edx,%eax 0.00 : 5e1d: d1 c1 e9 movzwl %ax,%eax 0.00 : 5e20: 14 81 f9 mov %eax,0x28(%rbx) 0.00 : 5e23: ff 00 00 00 0f nopl 0x0(%rax,%rax,1) 0.00 : 5e28: 87 f3 00 00 00 89 movzwl -0x30(%r12),%eax 0.00 : 5e2e: d0 25 ff test %ax,%ax 0.00 : 5e31: ff 0f je 5e3a 0.00 : 5e33: 00 3d ff 00 00 00 0f mov %ax,0x80(%rbx) 0.00 : 5e3a: 87 e1 00 mov %r15,%rdi 0.00 : 5e3d: 00 00 89 c8 c7 callq 5e42 0.00 : 5e42: 43 2c 00 mov %r15,%rdx 0.00 : 5e45: 00 00 00 mov %r14,%rsi 0.00 : 5e48: c1 e0 08 09 d0 0f b7 mov $0x0,%rdi 0.00 : 5e4f: c0 89 43 28 0f callq 5e54 0.00 : 5e54: 1f 44 00 00 mov 0x8(%rsp),%ecx 0.00 : 5e58: 41 0f test %ecx,%ecx 0.00 : 5e5a: b7 44 24 d0 66 cmovne 0x8(%rsp),%eax 0.00 : 5e5f: 85 c0 74 07 mov %eax,0x8(%rsp) 0.00 : 5e63: 66 89 83 80 00 mov 0x10(%rsp),%rax 0.00 : 5e68: 00 00 4c 89 ff e8 00 lock andb $0xfd,-0x88(%r12) 0.00 : 5e6f: 00 00 00 0.00 : 5e72: 4c 89 fa mov (%r14),%rax 0.00 : 5e75: 4c 89 f6 48 mov 0xc(%rsp),%edx 0.00 : 5e79: c7 c7 00 mov 0x8(%rax),%eax 0.00 : 5e7c: 00 00 test %edx,%edx 0.00 : 5e7e: 00 e8 00 00 00 mov %eax,-0x8(%r12) 0.00 : 5e83: 00 8b je 5e90 0.00 : 5e85: 4c 24 08 mov (%r14),%rax 0.00 : 5e88: 85 c9 0f mov 0x8(%rax),%eax 0.00 : 5e8b: 45 44 24 08 89 mov %eax,-0x4(%r12) 0.00 : 5e90: 44 24 08 test %r15,%r15 0.00 : 5e93: 48 8b je 5e9d 0.00 : 5e95: 44 24 10 mov %r15,%rdi 0.00 : 5e98: f0 41 80 a4 24 callq 5e9d 0.00 : 5e9d: 78 ff ff ff mov 0x8(%rsp),%eax 0.00 : 5ea1: fd 49 test %eax,%eax 0.00 : 5ea3: 8b 06 je 5eba 0.00 : 5ea5: 8b 54 24 0c 8b mov 0x18(%r12),%rdi 0.00 : 5eaa: 40 08 85 d2 mov 0x8(%rsp),%edx 0.00 : 5eae: 41 89 44 24 f8 74 0b mov $0x0,%rsi 0.00 : 5eb5: 49 8b 06 8b 40 callq 5eba 0.00 : 5eba: 08 41 89 44 mov 0x8(%rsp),%eax 0.00 : 5ebe: 24 fc 4d 85 add $0x18,%rsp 0.00 : 5ec2: ff pop %rbx 0.00 : 5ec3: 74 pop %rbp 0.00 : 5ec4: 08 4c pop %r12 0.00 : 5ec6: 89 ff pop %r13 0.00 : 5ec8: e8 00 pop %r14 0.00 : 5eca: 00 00 pop %r15 0.00 : 5ecc: 00 retq 0.00 : 5ecd: 8b 44 24 nopl (%rax) 0.00 : 5ed0: 08 85 c0 74 15 mov 0x0(%r13,%rdx,1),%eax 0.00 : 5ed5: 49 8b 7c 24 mov %eax,0x28(%rbx,%rdx,1) 0.00 : 5ed9: 18 8b 54 24 add $0x4,%rdx 0.00 : 5edd: 08 48 c7 c6 cmp $0x3c,%rdx 0.00 : 5ee1: 00 00 jne 5ed0 0.00 : 5ee3: 00 00 e8 00 00 jmpq 5e28 0.00 : 5ee8: 00 00 8b 44 24 08 48 nopl 0x0(%rax,%rax,1) 0.00 : 5eef: 83 0.00 : 5ef0: c4 18 5b 5d 41 5c 41 movl $0x0,0x28(%rbx) 0.00 : 5ef7: 5d 41 5e 41 5f c3 0f mov 0xc0(%r12),%eax 0.00 : 5efe: 1f 0.00 : 5eff: 00 41 8b 44 15 00 89 movl $0x0,0x30(%rbx) 0.00 : 5f06: 44 13 mov %eax,%edx 0.00 : 5f08: 28 48 83 movzbl %al,%ecx 0.00 : 5f0b: c2 04 48 83 fa and $0xfff00,%eax 0.00 : 5f10: 3c 75 ed shr $0x14,%edx 0.00 : 5f13: e9 40 ff shl $0xc,%eax 0.00 : 5f16: ff ff 0f shl $0x8,%edx 0.00 : 5f19: 1f 84 or %ecx,%edx 0.00 : 5f1b: 00 00 or %eax,%edx 0.00 : 5f1d: 00 00 00 mov %edx,0x2c(%rbx) 0.00 : 5f20: c7 43 28 00 00 00 movzwl -0x30(%r12),%eax 0.00 : 5f26: 00 41 8b test %ax,%ax 0.00 : 5f29: 84 24 c0 00 00 00 je 5e3a 0.00 : 5f2f: c7 43 30 00 00 jmpq 5e33 : 5f34: 00 00 89 c2 0f b6 c8 data32 data32 nopw %cs:0x0(%rax,%rax,1) : 5f3b: 25 00 ff 0f 00 : 5f40: c1 push %rbx : 5f41: ea 14 c1 mov %rdx,%rbx : 5f44: e0 0c c1 mov (%rdx),%rax : 5f47: e2 08 09 ca lock incl 0x60(%rax) : 5f4b: 09 c2 89 53 2c callq 5b40 : 5f50: 41 0f b7 mov (%rbx),%rdx : 5f53: 44 24 d0 66 lock decl 0x60(%rdx) : 5f57: 85 pop %rbx : 5f58: c0 retq : 5f59: 0f 84 0b ff ff ff e9 nopl 0x0(%rax) : 5f60: ff fe ff ff sub $0x38,%rsp Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/fs/ext3/ext3.ko ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/fs/ext3/ext3.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 00000000000060b0 : ??:0 100.00 : 60b0: 48 83 ec 18 sub $0x18,%rsp 0.00 : 60e4: be 02 00 00 00 cmp $0xfffff000,%eax 0.00 : 60e9: 48 89 1c mov %rax,%rbx 0.00 : 60ec: 24 4c ja 6130 0.00 : 60ee: 89 64 24 test %rbp,%rbp 0.00 : 60f1: 10 49 je 60fc 0.00 : 60f3: 89 fc 48 mov (%rax),%rax 0.00 : 60f6: 89 6c 24 08 cmp %rax,0x0(%rbp) 0.00 : 60fa: 48 8b jne 6143 0.00 : 60fc: 7f 18 65 mov %r12,%rsi 0.00 : 60ff: 48 8b 04 mov %rbx,%rdi 0.00 : 6102: 25 00 00 00 00 callq 6107 0.00 : 6107: 48 8b a8 mov %rbx,%rsi 0.00 : 610a: 00 08 00 00 e8 mov 0x8(%rsp),%rbp 0.00 : 610f: 00 00 00 00 mov (%rsp),%rbx 0.00 : 6113: 48 3d 00 f0 ff mov 0x10(%rsp),%r12 0.00 : 6118: ff 48 89 c3 77 42 48 mov $0x0,%rdi 0.00 : 611f: 85 ed 74 09 add $0x18,%rsp 0.00 : 6123: 48 8b 00 48 39 jmpq 6128 0.00 : 6128: 45 00 75 47 4c 89 e6 nopl 0x0(%rax,%rax,1) 0.00 : 612f: 48 0.00 : 6130: 89 df e8 00 mov (%rsp),%rbx 0.00 : 6134: 00 00 00 48 89 mov 0x8(%rsp),%rbp 0.00 : 6139: de 48 8b 6c 24 mov 0x10(%rsp),%r12 0.00 : 613e: 08 48 8b 1c add $0x18,%rsp 0.00 : 6142: 24 retq 0.00 : 6143: 4c 8b 64 24 10 48 c7 mov $0x0,%rsi 0.00 : 614a: c7 00 00 00 00 48 83 mov $0x0,%rdi 0.00 : 6151: c4 18 xor %eax,%eax 0.00 : 6153: e9 00 00 00 00 callq 6158 0.00 : 6158: 0f 1f jmp 6107 : 615a: 84 00 00 00 00 00 nopw 0x0(%rax,%rax,1) : 6160: 48 8b 1c 24 sub $0x38,%rsp : 6164: 48 8b 6c 24 08 mov %rbx,0x8(%rsp) : 6169: 4c 8b 64 24 10 mov %r12,0x18(%rsp) : 616e: 48 83 c4 mov %rsi,%rbx : 6171: 18 c3 48 c7 c6 mov %rbp,0x10(%rsp) : 6176: 00 00 00 00 48 mov %r13,0x20(%rsp) : 617b: c7 c7 00 00 00 mov %r14,0x28(%rsp) : 6180: 00 31 c0 e8 00 mov %r15,0x30(%rsp) : 6185: 00 00 00 eb mov 0x30(%rdi),%rbp Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file /lib/modules/3.0.101-0.15-default/kernel/fs/jbd/jbd.ko ---------------------------------------------- 100.00 ??:0 Percent | Source code & Disassembly of /lib/modules/3.0.101-0.15-default/kernel/fs/jbd/jbd.ko ------------------------------------------------ : : : : Disassembly of section .text: : : 0000000000000040 <__journal_temp_unlink_buffer>: 0.00 : 40: 4c 8b 07 mov (%rdi),%r8 0.00 : 73: 49 8b 00 cmp $0x8,%eax 0.00 : 76: a9 00 ja da 0.00 : 78: 00 10 test %eax,%eax 0.00 : 7a: 00 74 jne 85 0.00 : 7c: 34 48 8b 77 nopl 0x0(%rax) 0.00 : 80: 28 retq 0.00 : 81: 48 85 ud2 0.00 : 83: f6 74 jmp 83 0.00 : 85: 1a 48 8b test %rsi,%rsi 0.00 : 88: 06 8b je d6 0.00 : 8a: 90 4c xor %ecx,%ecx 0.00 : 8c: 01 00 00 cmp $0x8,%eax 0.00 : 8f: 89 d0 ja 9e 0.00 : 91: c1 f8 mov %eax,%eax 0.00 : 93: 10 66 39 d0 75 07 0f jmpq *0x0(,%rax,8) 0.00 : 9a: 0b eb fe 0f lea 0x20(%rsi),%rcx 0.00 : 9e: 1f 00 8b cmp (%rcx),%rdi 0.00 : a1: 47 0c je de 0.00 : a3: 83 f8 08 77 mov 0x40(%rdi),%rdx 0.00 : a7: 62 85 c0 75 mov 0x38(%rdi),%rax 0.00 : ab: 09 0f 1f 40 mov %rax,0x38(%rdx) 0.00 : af: 00 c3 0f 0b mov 0x38(%rdi),%rdx 0.00 : b3: eb fe 48 85 mov 0x40(%rdi),%rax 0.00 : b7: f6 74 4c 31 mov %rax,0x40(%rdx) 0.00 : bb: c9 83 f8 08 77 0d 89 movl $0x0,0xc(%rdi) 0.00 : c2: c0 ff 24 c5 00 00 lock btrl $0x13,(%r8) ??:0 100.00 : c8: 00 00 sbb %eax,%eax 0.00 : ca: 48 8d test %eax,%eax 0.00 : cc: 4e 20 je 7c 0.00 : ce: 48 3b 39 mov %r8,%rdi 0.00 : d1: 74 3b 48 8b 57 jmpq d6 0.00 : d6: 40 48 ud2 0.00 : d8: 8b 47 jmp d8 0.00 : da: 38 48 ud2 0.00 : dc: 89 42 jmp dc 0.00 : de: 38 48 8b 57 mov 0x38(%rdi),%rdx 0.00 : e2: 38 48 xor %eax,%eax 0.00 : e4: 8b 47 40 cmp %rdx,%rdi 0.00 : e7: 48 89 42 40 cmovne %rdx,%rax 0.00 : eb: c7 47 0c mov %rax,(%rcx) 0.00 : ee: 00 00 jmp a3 0.00 : f0: 00 00 f0 41 lea 0x18(%rsi),%rcx 0.00 : f4: 0f ba jmp 9e 0.00 : f6: 30 13 19 c0 lea 0x60(%rsi),%rcx 0.00 : fa: 85 c0 jmp 9e 0.00 : fc: 74 ae 4c 89 lea 0x58(%rsi),%rcx 0.00 : 100: c7 e9 jmp 9e 0.00 : 102: 00 00 00 00 lea 0x50(%rsi),%rcx 0.00 : 106: 0f 0b jmp 9e 0.00 : 108: eb fe 0f 0b lea 0x38(%rsi),%rcx 0.00 : 10c: eb fe 48 8b nopl 0x0(%rax) 0.00 : 110: 57 38 jmp 9e 0.00 : 112: 31 c0 48 mov 0x14(%rsi),%eax 0.00 : 115: 39 d7 48 0f lea 0x28(%rsi),%rcx 0.00 : 119: 45 c2 48 sub $0x1,%eax 0.00 : 11c: 89 01 test %eax,%eax 0.00 : 11e: eb b3 48 mov %eax,0x14(%rsi) 0.00 : 121: 8d 4e 18 eb a8 48 jns 9e 0.00 : 127: 8d 4e ud2 0.00 : 129: 60 eb jmp 129 <__journal_temp_unlink_buffer+0xb9> 0.00 : 12b: a2 48 8d 4e lea 0x30(%rsi),%rcx 0.00 : 12f: 58 eb 9c 48 8d jmpq 9e : 134: 4e 50 eb 96 48 8d 4e data32 data32 nopw %cs:0x0(%rax,%rax,1) : 13b: 38 0f 1f 40 00 : 140: eb push %rbx : 141: 8c 8b 46 mov %rdi,%rbx : 144: 14 48 8d 4e 28 callq 40 : 149: 83 e8 01 85 c0 89 46 movq $0x0,0x28(%rbx) : 150: 14 : 151: 0f pop %rbx : 152: 89 retq : 153: 77 ff ff ff 0f 0b eb data32 data32 data32 nopw %cs:0x0(%rax,%rax,1) : 15a: fe 48 8d 4e 30 e9 : 160: 6a ff push %r14 : 162: ff ff 66 mov %edx,%r14d Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------ Sorted summary for file ---------------------------------------------- Nothing higher than 0.5% Percent | Source code & Disassembly of ------------------------------------------------