Sorted summary for file /home/marxin/bin/gcc/lib/gcc/x86_64-pc-linux-gnu/11.0.1/cc1plus ---------------------------------------------- 46.19 ggc-page.c:1549 15.68 ggc-page.c:1554 15.12 ggc-page.c:1545 4.19 ggc-page.c:1551 3.16 ggc-page.c:1550 2.72 ggc-page.c:637 2.39 ggc-page.c:630 1.40 ggc-page.c:1537 1.13 ggc-page.c:1559 0.94 ggc-page.c:629 0.88 ggc-page.c:1564 0.77 ggc-page.c:628 0.71 ggc-page.c:1565 0.69 ggc-page.c:639 Percent | Source code & Disassembly of cc1plus for cycles:u (3623 samples, percent: local period) ------------------------------------------------------------------------------------------------------- : : : : Disassembly of section .text: : : 0000000000c697c0 <ggc_set_mark(void const*)>: : ggc_set_mark(void const*): : P must have been allocated by the GC allocator; it mustn't point to : static objects, stack variables, or memory allocated with malloc. */ : : int : ggc_set_mark (const void *p) : { ggc-page.c:1537 1.40 : c697c0: endbr64 : uintptr_t high_bits = (uintptr_t) p & ~ (uintptr_t) 0xffffffff; 0.25 : c697c4: movabs $0xffffffff00000000,%rdx : { 0.19 : c697ce: sub $0x8,%rsp : lookup_page_table_entry(): : page_table table = G.lookup; ggc-page.c:628 0.77 : c697d2: mov 0x1c05c47(%rip),%rax # 286f420 <G+0x540> : uintptr_t high_bits = (uintptr_t) p & ~ (uintptr_t) 0xffffffff; ggc-page.c:629 0.94 : c697d9: and %rdi,%rdx : while (table->high_bits != high_bits) 0.08 : c697dc: cmp %rdx,0x8(%rax) ggc-page.c:630 2.39 : c697e0: je c697f1 <ggc_set_mark(void const*)+0x31> 0.00 : c697e2: nopw 0x0(%rax,%rax,1) : table = table->next; 0.00 : c697e8: mov (%rax),%rax : while (table->high_bits != high_bits) 0.00 : c697eb: cmp 0x8(%rax),%rdx 0.00 : c697ef: jne c697e8 <ggc_set_mark(void const*)+0x28> : L2 = LOOKUP_L2 (p); 0.00 : c697f1: mov $0x18,%ecx : L1 = LOOKUP_L1 (p); 0.00 : c697f6: mov %rdi,%rsi : L2 = LOOKUP_L2 (p); 0.33 : c697f9: mov $0x1,%edx 0.28 : c697fe: mov %rdi,%r9 ggc-page.c:637 0.63 : c69801: mov 0x1c05c28(%rip),%r8 # 286f430 <G+0x550> : L1 = LOOKUP_L1 (p); 0.36 : c69808: shr $0x18,%rsi 0.14 : c6980c: movzbl %sil,%esi : L2 = LOOKUP_L2 (p); 0.00 : c69810: sub %r8d,%ecx : return base[L1][L2]; ggc-page.c:639 0.69 : c69813: mov 0x10(%rax,%rsi,8),%rax : L2 = LOOKUP_L2 (p); ggc-page.c:637 1.46 : c69818: shl %cl,%edx 0.19 : c6981a: mov %r8d,%ecx 0.11 : c6981d: sub $0x1,%edx 0.63 : c69820: shr %cl,%r9 0.25 : c69823: movslq %edx,%rdx 0.22 : c69826: and %r9,%rdx : return base[L1][L2]; 0.25 : c69829: mov (%rax,%rdx,8),%rax : ggc_set_mark(void const*): : unsigned long mask; : : /* Look up the page on which the object is alloced. If the object : wasn't allocated by the collector, we'll probably die. */ : entry = lookup_page_table_entry (p); : gcc_assert (entry); ggc-page.c:1545 15.12 : c6982d: test %rax,%rax 0.11 : c69830: je 74fddb <ggc_set_mark(void const*) [clone .cold]> : : /* Calculate the index of the object on the page; this is its bit : position in the in_use_p bitmap. */ : bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order); 0.00 : c69836: movzbl 0x2e(%rax),%edx ggc-page.c:1549 33.32 : c6983a: sub 0x18(%rax),%rdi : word = bit / HOST_BITS_PER_LONG; : mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG); ggc-page.c:1551 1.16 : c6983e: mov $0x1,%esi : : /* If the bit was previously set, skip it. */ : if (entry->in_use_p[word] & mask) : return 1; 0.14 : c69843: mov $0x1,%r8d : bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order); 0.03 : c69849: mov %rdx,%rcx 0.00 : c6984c: lea 0x1c061ed(%rip),%rdx # 286fa40 <inverse_table> 0.03 : c69853: shl $0x4,%rcx 0.11 : c69857: add %rcx,%rdx ggc-page.c:1549 1.73 : c6985a: imul (%rdx),%rdi ggc-page.c:1549 11.13 : c6985e: mov 0x8(%rdx),%ecx 0.19 : c69861: shr %cl,%rdi : word = bit / HOST_BITS_PER_LONG; ggc-page.c:1550 3.16 : c69864: mov %edi,%edx : bit = OFFSET_TO_BIT (((const char *) p) - entry->page, entry->order); 0.03 : c69866: mov %rdi,%rcx : word = bit / HOST_BITS_PER_LONG; 0.00 : c69869: shr $0x6,%edx : mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG); ggc-page.c:1551 1.70 : c6986c: shl %cl,%rsi : if (entry->in_use_p[word] & mask) ggc-page.c:1554 0.85 : c6986f: add $0x6,%rdx : mask = (unsigned long) 1 << (bit % HOST_BITS_PER_LONG); ggc-page.c:1551 1.33 : c69873: mov %rsi,%rcx : if (entry->in_use_p[word] & mask) 0.08 : c69876: mov (%rax,%rdx,8),%rsi ggc-page.c:1554 14.83 : c6987a: test %rcx,%rsi 0.25 : c6987d: jne c6988e <ggc_set_mark(void const*)+0xce> : : /* Otherwise set it, and decrement the free object count. */ : entry->in_use_p[word] |= mask; 0.00 : c6987f: or %rsi,%rcx : entry->num_free_objects -= 1; : : if (GGC_DEBUG_LEVEL >= 4) : fprintf (G.debug_file, "Marking %p\n", p); : : return 0; ggc-page.c:1564 0.88 : c69882: xor %r8d,%r8d : entry->in_use_p[word] |= mask; 0.00 : c69885: mov %rcx,(%rax,%rdx,8) : entry->num_free_objects -= 1; ggc-page.c:1559 1.13 : c69889: subw $0x1,0x2a(%rax) : } 0.22 : c6988e: mov %r8d,%eax ggc-page.c:1565 0.71 : c69891: add $0x8,%rsp 0.19 : c69895: ret Sorted summary for file /home/marxin/bin/gcc/lib/gcc/x86_64-pc-linux-gnu/11.0.1/cc1plus ---------------------------------------------- 60.52 c-common.h:1252 3.95 gt-cp-tree.h:104 2.55 gt-cp-tree.h:107 2.55 gt-cp-tree.h:692 1.86 c-common.h:1253 1.82 gt-cp-tree.h:109 1.52 gt-cp-tree.h:224 0.97 gt-cp-tree.h:346 0.94 gt-cp-tree.h:339 0.91 gt-cp-tree.h:460 0.64 gt-cp-tree.h:353 0.64 gt-cp-tree.h:474 0.61 gt-cp-tree.h:114 Percent | Source code & Disassembly of cc1plus for cycles:u (3289 samples, percent: local period) ------------------------------------------------------------------------------------------------------- : : : : Disassembly of section .text: : : 0000000000ba22a0 <gt_ggc_mx_lang_tree_node(void*)>: : gt_ggc_mx_lang_tree_node(void*): : } : } : : void : gt_ggc_mx_lang_tree_node (void *x_p) : { gt-cp-tree.h:104 1.25 : ba22a0: endbr64 : union lang_tree_node * x = (union lang_tree_node *)x_p; : union lang_tree_node * xlimit = x; : while (ggc_test_and_set_mark (xlimit)) gt-cp-tree.h:107 0.52 : ba22a4: cmp $0x1,%rdi 0.33 : ba22a8: jbe ba3daa <gt_ggc_mx_lang_tree_node(void*)+0x1b0a> : { 0.00 : ba22ae: push %r15 gt-cp-tree.h:104 1.49 : ba22b0: push %r14 0.27 : ba22b2: push %r13 0.40 : ba22b4: push %r12 0.49 : ba22b6: mov %rdi,%r12 0.06 : ba22b9: push %rbp : while (ggc_test_and_set_mark (xlimit)) 0.42 : ba22ba: mov %rdi,%rbp : { 0.18 : ba22bd: push %rbx 0.55 : ba22be: sub $0x18,%rsp 0.67 : ba22c2: nopw 0x0(%rax,%rax,1) : while (ggc_test_and_set_mark (xlimit)) 0.18 : ba22c8: mov %rbp,%rdi 0.18 : ba22cb: call c697c0 <ggc_set_mark(void const*)> gt-cp-tree.h:107 1.22 : ba22d0: test %eax,%eax 0.24 : ba22d2: jne ba2300 <gt_ggc_mx_lang_tree_node(void*)+0x60> : gt_ggc_mx_lang_tree_node(void*) [clone .localalias]: : c_tree_chain_next (tree t)