2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Runtime Library (RTL)
4 * FILE: lib/rtl/amd64/except_asm.S
5 * PURPOSE: Exception support for AMD64
6 * PROGRAMMERS: Timo Kreuzer (timo.kreuzer@reactos.org)
9 /* INCLUDES ******************************************************************/
12 .intel_syntax noprefix
14 /* FUNCTIONS *****************************************************************/
19 * PCONTEXT ContextRecord); <rcx>
21 .func RtlCaptureContext
22 .global _RtlCaptureContext
28 .cfi_adjust_cfa_offset 8
30 /* Save the basic register context */
31 mov [rcx + CONTEXT_Rax], rax
32 mov [rcx + CONTEXT_Rcx], rcx
33 mov [rcx + CONTEXT_Rdx], rdx
35 /* Load rflags into rax */
38 mov [rcx + CONTEXT_Rbx], rbx
39 mov [rcx + CONTEXT_Rsi], rsi
40 mov [rcx + CONTEXT_Rdi], rdi
43 mov [rcx + CONTEXT_EFlags], rax
45 mov [rcx + CONTEXT_Rbp], rbp
46 mov [rcx + CONTEXT_R8], r8
47 mov [rcx + CONTEXT_R9], r9
49 /* Load former stack pointer in rax */
52 mov [rcx + CONTEXT_R10], r10
53 mov [rcx + CONTEXT_R11], r11
54 mov [rcx + CONTEXT_R12], r12
56 /* Store stack pointer */
57 mov [rcx + CONTEXT_Rsp], rax
59 mov [rcx + CONTEXT_R13], r13
60 mov [rcx + CONTEXT_R14], r14
61 mov [rcx + CONTEXT_R15], r15
63 /* Load return address in rax */
66 /* Safe segment selectors */
67 mov [rcx + CONTEXT_SegCs], cs
68 mov [rcx + CONTEXT_SegDs], ds
69 mov [rcx + CONTEXT_SegEs], es
70 mov [rcx + CONTEXT_SegFs], fs
71 mov [rcx + CONTEXT_SegGs], gs
72 mov [rcx + CONTEXT_SegSs], ss
74 /* Store return address */
75 mov [rcx + CONTEXT_Rip], rax
77 /* Safe xmm registers */
78 movdqa [rcx + CONTEXT_Xmm0], xmm0
79 movdqa [rcx + CONTEXT_Xmm1], xmm1
80 movdqa [rcx + CONTEXT_Xmm2], xmm2
81 movdqa [rcx + CONTEXT_Xmm3], xmm3
82 movdqa [rcx + CONTEXT_Xmm4], xmm4
83 movdqa [rcx + CONTEXT_Xmm5], xmm5
84 movdqa [rcx + CONTEXT_Xmm6], xmm6
85 movdqa [rcx + CONTEXT_Xmm7], xmm7
86 movdqa [rcx + CONTEXT_Xmm8], xmm8
87 movdqa [rcx + CONTEXT_Xmm9], xmm9
88 movdqa [rcx + CONTEXT_Xmm10], xmm10
89 movdqa [rcx + CONTEXT_Xmm11], xmm11
90 movdqa [rcx + CONTEXT_Xmm12], xmm12
91 movdqa [rcx + CONTEXT_Xmm13], xmm13
92 movdqa [rcx + CONTEXT_Xmm14], xmm14
93 movdqa [rcx + CONTEXT_Xmm15], xmm15
95 /* Cleanup stack and return */