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/ntoskr... ============================================================================== --- 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@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