@@ -47,16 +47,15 @@ This compiles to (variable names are shortened for readability):
4747 mov rdx, rsi
4848 mov rcx, qword ptr [rip + vptr_vector_vptrs]
4949 mov rdi, qword ptr [rcx + 8*rdi]
50- mov rcx, qword ptr [rip + fn+88]
50+ mov rcx, qword ptr [rip + postfix:: fn+88]
5151 mov rcx, qword ptr [rdi + 8*rcx]
5252 mov rsi, rax
5353 jmp rcx # TAILCALL
5454----
5555
5656This is quite a few instructions more. Upon closer examination, we see that many
57- are memory reads, independent of one another; they can be thus executed in
58- parallel. For example, the first three instructions would execute simultaneously
59- on a modern CPU.
57+ are memory reads, independent of one another; they can thus be executed in
58+ parallel. For example, the first three instructions can execute simultaneously.
6059
6160llvm-mca estimates a throughput of 4 cycles per dispatch. However, the
6261difference is amortized by the time spent passing the arguments and returning
@@ -97,9 +96,9 @@ jmp rax # TAILCALL
9796`virtual_ptr` arguments are passed through the method call, to the overrider,
9897which can use them to make further method calls.
9998
100- A program designed with open-methods in mind should use `virtual_ptr` {empty} ' s
99+ A program designed with open-methods in mind should use `virtual_ptr` {empty} s
101100in place of plain pointers or references, as much as possible. Here is the Node
102- example, rewritten to use `virtual_ptr`{empty}' s thoughout:
101+ example, rewritten to use `virtual_ptr` {empty} s thoughout:
103102
104103[source,c++]
105104----
0 commit comments