else()
set(VM_SOURCES_WKS_AMD64_ASM
+ ${AMD64_SOURCES_DIR}/calldescrworkeramd64.S
${AMD64_SOURCES_DIR}/crthelpers.S
+ ${AMD64_SOURCES_DIR}/externalmethodfixupthunk.S
+ ${AMD64_SOURCES_DIR}/getstate.S
+ ${AMD64_SOURCES_DIR}/jithelpers_fast.S
${AMD64_SOURCES_DIR}/jithelpers_fastwritebarriers.S
${AMD64_SOURCES_DIR}/jithelpers_slow.S
- ${AMD64_SOURCES_DIR}/jithelpers_fast.S
- ${AMD64_SOURCES_DIR}/getstate.S
- ${AMD64_SOURCES_DIR}/calldescrworkeramd64.S
- ${AMD64_SOURCES_DIR}/unixasmhelpers.S
${AMD64_SOURCES_DIR}/theprestubamd64.S
+ ${AMD64_SOURCES_DIR}/unixasmhelpers.S
${AMD64_SOURCES_DIR}/umthunkstub.S
${AMD64_SOURCES_DIR}/virtualcallstubamd64.S
)
--- /dev/null
+//
+// Copyright (c) Microsoft. All rights reserved.
+// Copyright (c) Geoff Norton. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+//
+;
+.intel_syntax noprefix
+#include "unixasmmacros.inc"
+#include "asmconstants.h"
+
+//============================================================================================
+// EXTERN_C VOID __stdcall ExternalMethodFixupStub()
+
+NESTED_ENTRY ExternalMethodFixupStub, _TEXT, ProcessCLRException
+
+ PROLOG_WITH_TRANSITION_BLOCK 0, 8, rdx, 0, 0
+
+ lea rdi, [rsp + __PWTB_TransitionBlock] // pTransitionBlock
+ sub rsi, 5 // pThunk
+ mov rdx, 0 // sectionIndex
+ mov rcx, 0 // pModule
+
+ call C_FUNC(ExternalMethodFixupWorker)
+
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
+PATCH_LABEL ExternalMethodFixupPatchLabel
+ TAILJMP_RAX
+
+NESTED_END ExternalMethodFixupStub, _TEXT
+
+
+//============================================================================================
+// EXTERN_C VOID __stdcall VirtualMethodFixupStub()
+
+NESTED_ENTRY VirtualMethodFixupStub, _TEXT, ProcessCLRException
+
+ PROLOG_WITH_TRANSITION_BLOCK 0, 8, rdx, 0, 0
+
+ lea rdi, [rsp + __PWTB_TransitionBlock] // pTransitionBlock
+ sub rsi, 5 // pThunk
+ call C_FUNC(VirtualMethodFixupWorker)
+
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
+PATCH_LABEL VirtualMethodFixupPatchLabel
+ TAILJMP_RAX
+
+NESTED_END VirtualMethodFixupStub, _TEXT
PORTABILITY_ASSERT("Implement for PAL");
}
- void ExternalMethodFixupPatchLabel()
- {
- PORTABILITY_ASSERT("Implement for PAL");
- }
-
- void ExternalMethodFixupStub()
- {
- PORTABILITY_ASSERT("Implement for PAL");
- }
-
void GenericPInvokeCalliHelper()
{
PORTABILITY_ASSERT("Implement for PAL");
PORTABILITY_ASSERT("Implement for PAL");
}
- void VirtualMethodFixupPatchLabel()
- {
- PORTABILITY_ASSERT("Implement for PAL");
- }
-
- void VirtualMethodFixupStub()
- {
- PORTABILITY_ASSERT("Implement for PAL");
- }
-
DWORD getcpuid(DWORD arg, unsigned char result[16])
{
DWORD eax;
void STDCALL JIT_ProfilerEnterLeaveTailcallStub(UINT_PTR ProfilerHandle)
{
}
-
-#ifdef FEATURE_PREJIT
- void StubDispatchFixupStub()
- {
- PORTABILITY_ASSERT("Implement for PAL");
- }
-#endif
-
- void StubDispatchFixupPatchLabel()
- {
- PORTABILITY_ASSERT("Implement for PAL");
- }
};
jmp C_FUNC(ResolveWorkerAsmStub)
LEAF_END ResolveWorkerChainLookupAsmStub, _TEXT
+
+#ifdef FEATURE_PREJIT
+NESTED_ENTRY StubDispatchFixupStub, _TEXT, ProcessCLRException
+
+ PROLOG_WITH_TRANSITION_BLOCK 0, 0, 0, 0, 0
+
+ lea rdi, [rsp + __PWTB_TransitionBlock] // pTransitionBlock
+ mov rsi, r11 // indirection cell address
+
+ mov rdx,0 // sectionIndex
+ mov rcx,0 // pModule
+
+ call C_FUNC(StubDispatchFixupWorker)
+
+ EPILOG_WITH_TRANSITION_BLOCK_TAILCALL
+PATCH_LABEL StubDispatchFixupPatchLabel
+ TAILJMP_RAX
+
+NESTED_END StubDispatchFixupStub, _TEXT
+#endif