\r
/* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */\r
.PROC MACRO name\r
- name PROC FRAME\r
- _name:\r
+__current_function_name EQU %name\r
+#ifdef _M_IX86\r
+ %name PROC\r
+#else\r
+ %name PROC FRAME\r
+#endif\r
ENDM\r
#define FUNC .PROC\r
\r
/* ... and .ENDP, replacing ENDP */\r
-.ENDP MACRO name\r
- name ENDP\r
+.ENDP MACRO\r
+ %__current_function_name ENDP\r
ENDM\r
#define ENDFUNC .ENDP\r
\r
+/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx\r
+ and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */\r
+FPO MACRO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame\r
+ .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame)\r
+ENDM\r
+\r
/* MASM doesn't have an ASCII macro */\r
.ASCII MACRO text:VARARG\r
DB text\r
DW segment\r
ENDM\r
\r
+data32 MACRO opcode:VARARG\r
+ DB 66h\r
+ opcode\r
+ENDM\r
+\r
UNIMPLEMENTED MACRO name\r
ENDM\r
\r
/* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */\r
.macro .PROC name\r
.func \name\r
+#ifdef _X86_\r
+ /* x86 gas expects a label with _ prefix */\r
+ _\name:\r
+#endif\r
\name:\r
.cfi_startproc\r
.equ cfa_current_offset, -8\r
.endm\r
+#define FUNC .PROC\r
\r
/* ... and .ENDP, replacing ENDP */\r
-.macro .ENDP name\r
+.macro .ENDP\r
.cfi_endproc\r
.endfunc\r
.endm\r
+#define ENDFUNC .ENDP\r
\r
/* MASM compatible PUBLIC */\r
.macro PUBLIC symbol\r
.text\r
.endm\r
\r
+/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx\r
+ and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */\r
+.macro FPO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame\r
+ /* dummy */\r
+.endm\r
+\r
/* Macros for x64 stack unwind OPs */\r
\r
.macro .allocstack size\r
#define NUL "\0"\r
\r
#endif\r
+\r
+/* Common definitions for FPO macro\r
+ see http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */\r
+#define FRAME_FPO 0\r
+#define FRAME_TRAP 1\r
+#define FRAME_TSS 2\r
+#define FRAME_NONFPO 3\r