Sync with trunk r63502.
[reactos.git] / ntoskrnl / include / internal / amd64 / asmmacro.S
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel
4 * FILE: ntoskrnl/include/amd64/asmmacro.S
5 * PURPOSE: Macros for x64 assembly
6 * PROGRAMMERS: Timo Kreuzer (timo.kreuzer@reactos.org)
7 */
8
9 .intel_syntax noprefix
10 .code64
11
12 /* Macros for x64 stack unwind OPs */
13
14 .macro .proc name
15 .func name
16 .global _\name
17 _\name:
18 .cfi_startproc
19 .equ cfa_current_offset, -8
20 .endm
21
22 .macro .endproc
23 .cfi_endproc
24 .endfunc
25 .endm
26
27 .macro .allocstack size
28 .cfi_adjust_cfa_offset \size
29 .set cfa_current_offset, cfa_current_offset - \size
30 .endm
31
32 .macro .pushframe code
33 .if (\code == 0)
34 .cfi_adjust_cfa_offset 0x28
35 .set cfa_current_offset, cfa_current_offset - 0x28
36 .else
37 .cfi_adjust_cfa_offset 0x30
38 .set cfa_current_offset, cfa_current_offset - 0x30
39 .endif
40 .endm
41
42 .macro .pushreg reg
43 .cfi_adjust_cfa_offset 8
44 .equ cfa_current_offset, cfa_current_offset - 8
45 .cfi_offset \reg, cfa_current_offset
46 .endm
47
48 .macro .savereg reg, offset
49 // checkme!!!
50 .cfi_offset \reg, \offset
51 .endm
52
53 .macro .savexmm128 reg, offset
54 // checkme!!!
55 .cfi_offset \reg, \offset
56 .endm
57
58 .macro .setframe reg, offset
59 .cfi_def_cfa reg, \offset
60 .equ cfa_current_offset, \offset
61 .endm
62
63 .macro .endprolog
64 .endm
65
66 .macro UNIMPLEMENTED2 line, func
67 jmp 3f
68 .equ expr, 12
69 1: .asciz "\func"
70 2: .asciz __FILE__
71 3:
72 sub rsp, 0x20
73 lea rcx, _MsgUnimplemented[rip]
74 lea rdx, 1b[rip]
75 lea r8, 2b[rip]
76 mov r9, \line
77 call _DbgPrint
78 add rsp, 0x20
79 .endm
80 #define UNIMPLEMENTED UNIMPLEMENTED2 __LINE__,
81