summaryrefslogtreecommitdiff
path: root/src/pal/src/arch/i386/context2.S
diff options
context:
space:
mode:
Diffstat (limited to 'src/pal/src/arch/i386/context2.S')
-rw-r--r--src/pal/src/arch/i386/context2.S47
1 files changed, 15 insertions, 32 deletions
diff --git a/src/pal/src/arch/i386/context2.S b/src/pal/src/arch/i386/context2.S
index 16cbcc855c..11aba5e647 100644
--- a/src/pal/src/arch/i386/context2.S
+++ b/src/pal/src/arch/i386/context2.S
@@ -113,39 +113,22 @@ LOCAL_LABEL(Done_Restore_CONTEXT_FLOATING_POINT):
movdqu xmm7, [eax + CONTEXT_Xmm7]
LOCAL_LABEL(Done_Restore_CONTEXT_EXTENDED_REGISTERS):
- // Restore CONTROL register(s)
- mov ecx, [eax + CONTEXT_Eip]
- mov [esp], ecx
-
- mov ecx, [eax + CONTEXT_Esp]
- push ecx
- mov ecx, [eax + CONTEXT_Ebp]
- push ecx
-
- pop ebp
- pop esp
-
- // Restore INTEGER register(s)
- mov ecx, [eax + CONTEXT_Edi]
- push ecx
- mov ecx, [eax + CONTEXT_Esi]
- push ecx
- mov ecx, [eax + CONTEXT_Edx]
- push ecx
- mov ecx, [eax + CONTEXT_Ecx]
- push ecx
- mov ecx, [eax + CONTEXT_Ebx]
- push ecx
- mov ecx, [eax + CONTEXT_Eax]
- push ecx
+ // Restore Stack
+ mov esp, [eax + CONTEXT_Esp]
- pop eax
- pop ebx
- pop ecx
- pop edx
- pop esi
- pop edi
+ // Create a minimal frame
+ push DWORD PTR [eax + CONTEXT_Eip]
+
+ // Restore register(s)
+ mov ebp, [eax + CONTEXT_Ebp]
+ mov edi, [eax + CONTEXT_Edi]
+ mov esi, [eax + CONTEXT_Esi]
+ mov edx, [eax + CONTEXT_Edx]
+ mov ecx, [eax + CONTEXT_Ecx]
+ mov ebx, [eax + CONTEXT_Ebx]
+ mov eax, [eax + CONTEXT_Eax]
- ret 8
+ // Resume
+ ret
LEAF_END RtlRestoreContext, _TEXT