Author: tkreuzer
Date: Wed Nov 19 15:24:52 2008
New Revision: 37469
URL:
http://svn.reactos.org/svn/reactos?rev=37469&view=rev
Log:
Some asm macros for x64. They allow creating unwind info in a MASM like way, As a general
rule for all asm functions changing the stack pointer, use ".proc FunctionName"
(without '_' prefix) before the function and ".endproc" after the
function and use .allocstack, .pushreg, etc. after the corresponding opcode.
Added:
branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S (with
props)
Added: branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/ntosk…
==============================================================================
--- branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S (added)
+++ branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S
[iso-8859-1] Wed Nov 19 15:24:52 2008
@@ -1,0 +1,81 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Kernel
+ * FILE: ntoskrnl/include/amd64/asmmacro.S
+ * PURPOSE: Macros for x64 assembly
+ * PROGRAMMERS: Timo Kreuzer (timo.kreuzer(a)reactos.org)
+ */
+
+.intel_syntax noprefix
+.code64
+
+/* Macros for x64 stack unwind OPs */
+
+.macro .proc name
+ .func name
+ .global _\name
+ _\name:
+ .cfi_startproc
+ .equ cfa_current_offset, -8
+.endm
+
+.macro .endproc
+ .cfi_endproc
+ .endfunc
+.endm
+
+.macro .allocstack size
+ .cfi_adjust_cfa_offset \size
+ .set cfa_current_offset, cfa_current_offset - \size
+.endm
+
+.macro .pushframe code
+ .if (\code == 0)
+ .cfi_adjust_cfa_offset 0x28
+ .set cfa_current_offset, cfa_current_offset - 0x28
+ .else
+ .cfi_adjust_cfa_offset 0x30
+ .set cfa_current_offset, cfa_current_offset - 0x30
+ .endif
+.endm
+
+.macro .pushreg reg
+ .cfi_adjust_cfa_offset 8
+ .equ cfa_current_offset, cfa_current_offset - 8
+ .cfi_offset \reg, cfa_current_offset
+.endm
+
+.macro .savereg reg, offset
+ // checkme!!!
+ .cfi_offset \reg, \offset
+.endm
+
+.macro .savexmm128 reg, offset
+ // checkme!!!
+ .cfi_offset \reg, \offset
+.endm
+
+.macro .setframe reg, offset
+ .cfi_def_cfa reg, \offset
+ .equ cfa_current_offset, \offset
+.endm
+
+.macro .endprolog
+.endm
+
+.macro UNIMPLEMENTED2 line, func
+ jmp 3f
+ .equ expr, 12
+1: .asciz "\func"
+2: .asciz __FILE__
+3:
+ sub rsp, 0x20
+ lea rcx, _MsgUnimplemented[rip]
+ lea rdx, 1b[rip]
+ lea r8, 2b[rip]
+ mov r9, \line
+ call _DbgPrint
+ add rsp, 0x20
+.endm
+#define UNIMPLEMENTED UNIMPLEMENTED2 __LINE__,
+
Propchange: branches/ros-amd64-bringup/reactos/ntoskrnl/include/internal/amd64/asmmacro.S
------------------------------------------------------------------------------
svn:eol-style = native