Skip to content

Commit 346af35

Browse files
committed
Revert VSD stubs changes
Extensive benchmarking has shown that the new model for VSD stubs is causing steady state performance degradation for code using a lot of virtual calls. It wasn't showing up in the plaintext benchmark I have used as the driver of the change. This change looses part of the startup perf improvements, but I am planning to add back the Lookup stubs in a follow up change. Those should not be perf critical and they are likely the ones where the startup improvements are gained from.
1 parent 118b427 commit 346af35

22 files changed

+2831
-1460
lines changed

src/coreclr/vm/amd64/asmconstants.h

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -590,39 +590,6 @@ ASMCONSTANTS_C_ASSERT(CallCountingStubData__TargetForMethod == offsetof(CallCoun
590590
#define CallCountingStubData__TargetForThresholdReached 0x10
591591
ASMCONSTANTS_C_ASSERT(CallCountingStubData__TargetForThresholdReached == offsetof(CallCountingStubData, TargetForThresholdReached))
592592

593-
#define LookupStubData__DispatchToken 0x00
594-
ASMCONSTANTS_C_ASSERT(LookupStubData__DispatchToken == offsetof(LookupStubData, DispatchToken))
595-
596-
#define LookupStubData__ResolveWorkerTarget 0x08
597-
ASMCONSTANTS_C_ASSERT(LookupStubData__ResolveWorkerTarget == offsetof(LookupStubData, ResolveWorkerTarget))
598-
599-
#define DispatchStubData__ExpectedMT 0x00
600-
ASMCONSTANTS_C_ASSERT(DispatchStubData__ExpectedMT == offsetof(DispatchStubData, ExpectedMT))
601-
602-
#define DispatchStubData__ImplTarget 0x08
603-
ASMCONSTANTS_C_ASSERT(DispatchStubData__ImplTarget == offsetof(DispatchStubData, ImplTarget))
604-
605-
#define DispatchStubData__FailTarget 0x10
606-
ASMCONSTANTS_C_ASSERT(DispatchStubData__FailTarget == offsetof(DispatchStubData, FailTarget))
607-
608-
#define ResolveStubData__HashedToken 0x08
609-
ASMCONSTANTS_C_ASSERT(ResolveStubData__HashedToken == offsetof(ResolveStubData, HashedToken))
610-
611-
#define ResolveStubData__CacheAddress 0x00
612-
ASMCONSTANTS_C_ASSERT(ResolveStubData__CacheAddress == offsetof(ResolveStubData, CacheAddress))
613-
614-
#define ResolveStubData__Token 0x10
615-
ASMCONSTANTS_C_ASSERT(ResolveStubData__Token == offsetof(ResolveStubData, Token))
616-
617-
#define ResolveStubData__Counter 0x0c
618-
ASMCONSTANTS_C_ASSERT(ResolveStubData__Counter == offsetof(ResolveStubData, Counter))
619-
620-
#define ResolveStubData__ResolveWorkerTarget 0x18
621-
ASMCONSTANTS_C_ASSERT(ResolveStubData__ResolveWorkerTarget == offsetof(ResolveStubData, ResolveWorkerTarget))
622-
623-
#define CALL_STUB_CACHE_MASK_ASM 0xfff
624-
ASMCONSTANTS_C_ASSERT(CALL_STUB_CACHE_MASK_ASM == CALL_STUB_CACHE_MASK)
625-
626593
#undef ASMCONSTANTS_RUNTIME_ASSERT
627594
#undef ASMCONSTANTS_C_ASSERT
628595
#ifndef UNIX_AMD64_ABI

src/coreclr/vm/amd64/thunktemplates.S

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -29,50 +29,3 @@ LEAF_ENTRY CallCountingStubCode, _TEXT
2929
LOCAL_LABEL(CountReachedZero):
3030
jmp QWORD PTR [rip + DATA_SLOT(CallCountingStub, TargetForThresholdReached)]
3131
LEAF_END_MARKED CallCountingStubCode, _TEXT
32-
33-
LEAF_ENTRY LookupStubCode, _TEXT
34-
push QWORD PTR [rip + DATA_SLOT(LookupStub, DispatchToken)]
35-
jmp QWORD PTR [rip + DATA_SLOT(LookupStub, ResolveWorkerTarget)]
36-
LEAF_END_MARKED LookupStubCode, _TEXT
37-
38-
LEAF_ENTRY DispatchStubCode, _TEXT
39-
mov rax,QWORD PTR [rip + DATA_SLOT(DispatchStub, ExpectedMT)]
40-
PATCH_LABEL DispatchStubCode_ThisDeref
41-
cmp QWORD PTR [rdi],rax;
42-
jne LOCAL_LABEL(Fail)
43-
jmp QWORD PTR [rip + DATA_SLOT(DispatchStub, ImplTarget)]
44-
LOCAL_LABEL(Fail):
45-
jmp QWORD PTR [rip + DATA_SLOT(DispatchStub, FailTarget)]
46-
LEAF_END_MARKED DispatchStubCode, _TEXT
47-
48-
LEAF_ENTRY ResolveStubCode, _TEXT
49-
PATCH_LABEL ResolveStubCode_ResolveEntry
50-
LOCAL_LABEL(Resolve):
51-
push rdx
52-
mov r10,QWORD PTR [rip + DATA_SLOT(ResolveStub, CacheAddress)]
53-
PATCH_LABEL ResolveStubCode_ThisDeref
54-
mov rax,QWORD PTR [rdi]
55-
mov rdx,rax
56-
shr rax,12
57-
add rax,rdx
58-
xor eax,DWORD PTR [rip + DATA_SLOT(ResolveStub, HashedToken)]
59-
and eax, CALL_STUB_CACHE_MASK_ASM * 8
60-
mov rax,QWORD PTR [r10+rax*1]
61-
mov r10,QWORD PTR [rip + DATA_SLOT(ResolveStub, Token)]
62-
cmp rdx,QWORD PTR [rax]
63-
jne LOCAL_LABEL(Miss)
64-
cmp r10,QWORD PTR [rax+8]
65-
jne LOCAL_LABEL(Miss)
66-
pop rdx
67-
jmp QWORD PTR [rax+0x10]
68-
PATCH_LABEL ResolveStubCode_FailEntry
69-
add DWORD PTR [rip + DATA_SLOT(ResolveStub, Counter)], -1
70-
jge LOCAL_LABEL(Resolve)
71-
or r11, 1 // SDF_ResolveBackPatch
72-
PATCH_LABEL ResolveStubCode_SlowEntry
73-
push rdx
74-
mov r10,QWORD PTR [rip + DATA_SLOT(ResolveStub, Token)]
75-
LOCAL_LABEL(Miss):
76-
push rax
77-
jmp QWORD PTR [rip + DATA_SLOT(ResolveStub, ResolveWorkerTarget)]
78-
LEAF_END_MARKED ResolveStubCode, _TEXT

src/coreclr/vm/amd64/thunktemplates.asm

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -31,50 +31,4 @@ LEAF_ENTRY CallCountingStubCode, _TEXT
3131
jmp QWORD PTR [DATA_SLOT(CallCountingStub, TargetForThresholdReached)]
3232
LEAF_END_MARKED CallCountingStubCode, _TEXT
3333

34-
LEAF_ENTRY LookupStubCode, _TEXT
35-
push QWORD PTR [DATA_SLOT(LookupStub, DispatchToken)]
36-
jmp QWORD PTR [DATA_SLOT(LookupStub, ResolveWorkerTarget)]
37-
LEAF_END_MARKED LookupStubCode, _TEXT
38-
39-
LEAF_ENTRY DispatchStubCode, _TEXT
40-
mov rax,QWORD PTR [DATA_SLOT(DispatchStub, ExpectedMT)]
41-
PATCH_LABEL DispatchStubCode_ThisDeref
42-
cmp QWORD PTR [rcx],rax;
43-
jne Fail
44-
jmp QWORD PTR [DATA_SLOT(DispatchStub, ImplTarget)]
45-
Fail:
46-
jmp QWORD PTR [DATA_SLOT(DispatchStub, FailTarget)]
47-
LEAF_END_MARKED DispatchStubCode, _TEXT
48-
49-
LEAF_ENTRY ResolveStubCode, _TEXT
50-
PATCH_LABEL ResolveStubCode_ResolveEntry
51-
push rdx
52-
mov r10,QWORD PTR [DATA_SLOT(ResolveStub, CacheAddress)]
53-
PATCH_LABEL ResolveStubCode_ThisDeref
54-
mov rax,QWORD PTR [rcx]
55-
mov rdx,rax
56-
shr rax,12
57-
add rax,rdx
58-
xor eax,DWORD PTR [DATA_SLOT(ResolveStub, HashedToken)]
59-
and eax, CALL_STUB_CACHE_MASK_ASM * 8
60-
mov rax,QWORD PTR [r10+rax*1]
61-
mov r10,QWORD PTR [DATA_SLOT(ResolveStub, Token)]
62-
cmp rdx,QWORD PTR [rax]
63-
jne Miss
64-
cmp r10,QWORD PTR [rax+8]
65-
jne Miss
66-
pop rdx
67-
jmp QWORD PTR [rax+10h]
68-
PATCH_LABEL ResolveStubCode_FailEntry
69-
add DWORD PTR [DATA_SLOT(ResolveStub, Counter)], -1
70-
jge ResolveStubCode
71-
or r11, 1; SDF_ResolveBackPatch
72-
PATCH_LABEL ResolveStubCode_SlowEntry
73-
push rdx
74-
mov r10,QWORD PTR [DATA_SLOT(ResolveStub, Token)]
75-
Miss:
76-
push rax
77-
jmp QWORD PTR [DATA_SLOT(ResolveStub, ResolveWorkerTarget)]
78-
LEAF_END_MARKED ResolveStubCode, _TEXT
79-
8034
end

0 commit comments

Comments
 (0)