RtlCaptureContext:

- Don't safe the current rsp, but the one before calling the function.
- Try to optimize a bit by moving stuff around

svn path=/branches/ros-amd64-bringup/; revision=37330
This commit is contained in:
Timo Kreuzer
2008-11-13 04:05:06 +00:00
parent 1e2be3b9a7
commit fe2843026f
+36 -25
View File
@@ -23,6 +23,41 @@
_RtlCaptureContext:
.cfi_startproc
/* Push eflags */
pushfq
/* Save the basic register context */
mov [rcx + CONTEXT_Rax], rax
mov [rcx + CONTEXT_Rcx], rcx
mov [rcx + CONTEXT_Rdx], rdx
mov [rcx + CONTEXT_Rbx], rbx
/* pop eflags */
pop [rcx + CONTEXT_EFlags]
mov [rcx + CONTEXT_Rsi], rsi
mov [rcx + CONTEXT_Rdi], rdi
mov [rcx + CONTEXT_Rbp], rbp
/* Load former stack pointer in rax */
lea rax, [rsp + 8]
mov [rcx + CONTEXT_R8], r8
mov [rcx + CONTEXT_R9], r9
mov [rcx + CONTEXT_R10], r10
mov [rcx + CONTEXT_R11], r11
/* Store stack pointer */
mov [rcx + CONTEXT_Rsp], rax
mov [rcx + CONTEXT_R12], r12
mov [rcx + CONTEXT_R13], r13
mov [rcx + CONTEXT_R14], r14
mov [rcx + CONTEXT_R15], r15
/* Load return address in rax */
mov rax, [rsp]
/* Safe segment selectors */
mov [rcx + CONTEXT_SegCs], cs
mov [rcx + CONTEXT_SegDs], ds
@@ -31,31 +66,7 @@ _RtlCaptureContext:
mov [rcx + CONTEXT_SegGs], gs
mov [rcx + CONTEXT_SegSs], ss
/* Save the basic register context */
mov [rcx + CONTEXT_Rax], rax
mov [rcx + CONTEXT_Rcx], rcx
mov [rcx + CONTEXT_Rdx], rdx
mov [rcx + CONTEXT_Rbx], rbx
mov [rcx + CONTEXT_Rsp], rsp
mov [rcx + CONTEXT_Rbp], rbp
mov [rcx + CONTEXT_Rsi], rsi
mov [rcx + CONTEXT_Rdi], rdi
mov [rcx + CONTEXT_R8], r8
mov [rcx + CONTEXT_R9], r9
mov [rcx + CONTEXT_R10], r10
mov [rcx + CONTEXT_R11], r11
mov [rcx + CONTEXT_R12], r12
mov [rcx + CONTEXT_R13], r13
mov [rcx + CONTEXT_R14], r14
mov [rcx + CONTEXT_R15], r15
/* Capture eflags */
pushfq
pop rax
mov [rcx + CONTEXT_EFlags], rax
/* Put return address in rip member */
mov rax, [rsp]
/* Store return address */
mov [rcx + CONTEXT_Rip], rax
/* Safe mmx registers */