| %imacro export 1+.nolist |
| [export %1] |
| %endmacro |
| |
| ; Raw exception handling operations |
| %imacro proc_frame 1+.nolist |
| %1: |
| [proc_frame %1] |
| %endmacro |
| |
| ; Disable these as they're too closely named to the macroized ones. |
| ; MASM needs a preceding . to use these, so it seems reasonable for |
| ; us to similarly require the []. |
| ; |
| ;%imacro pushreg 1.nolist |
| ;[pushreg %1] |
| ;%endmacro |
| ; |
| ;%imacro setframe 1-2.nolist |
| ;[setframe %1 %2] |
| ;%endmacro |
| ; |
| ;%imacro allocstack 1.nolist |
| ;[allocstack %1] |
| ;%endmacro |
| ; |
| ;%imacro savereg 2.nolist |
| ;[savereg %1 %2] |
| ;%endmacro |
| ; |
| ;%imacro savexmm128 2.nolist |
| ;[savexmm128 %1 %2] |
| ;%endmacro |
| ; |
| ;%imacro pushframe 0-1.nolist |
| ;[pushframe %1] |
| ;%endmacro |
| ; |
| ;%imacro endprolog 0.nolist |
| ;[endprolog] |
| ;%endmacro |
| ; |
| |
| %imacro endproc_frame 0.nolist |
| [endproc_frame] |
| %endmacro |
| |
| ; Complex (macro) exception handling operations |
| ; Mimics many macros provided by MASM's macamd64.inc |
| %imacro push_reg 1 |
| push %1 |
| [pushreg %1] |
| %endmacro |
| |
| %imacro rex_push_reg 1 |
| db 0x48 |
| push %1 |
| [pushreg %1] |
| %endmacro |
| |
| %imacro push_eflags 0 |
| pushfq |
| [allocstack 8] |
| %endmacro |
| |
| %imacro rex_push_eflags 0 |
| db 0x48 |
| pushfq |
| [allocstack 8] |
| %endmacro |
| |
| %imacro alloc_stack 1 |
| sub rsp, %1 |
| [allocstack %1] |
| %endmacro |
| |
| %imacro save_reg 2 |
| mov [rsp+%2], %1 |
| [savereg %1 %2] |
| %endmacro |
| |
| %imacro save_xmm128 2 |
| movdqa [rsp+%2], %1 |
| [savexmm128 %1 %2] |
| %endmacro |
| |
| %imacro push_frame 0-1.nolist |
| [pushframe %1] |
| %endmacro |
| |
| %imacro set_frame 1-2 |
| %if %0==1 |
| mov %1, rsp |
| %else |
| lea %1, [rsp+%2] |
| %endif |
| [setframe %1 %2] |
| %endmacro |
| |
| %imacro end_prolog 0.nolist |
| [endprolog] |
| %endmacro |
| |
| %imacro end_prologue 0.nolist |
| [endprolog] |
| %endmacro |