| ; Standard macro set for NASM -*- nasm -*- |
| |
| ; Note that although some user-level forms of directives are defined |
| ; here, not all of them are: the user-level form of a format-specific |
| ; directive should be defined in the module for that directive. |
| |
| ; These two need to be defined, though the actual definitions will |
| ; be constantly updated during preprocessing. |
| %define __FILE__ |
| %define __LINE__ |
| |
| %define __SECT__ [section .text] ; it ought to be defined, even if as nothing |
| |
| %imacro section 1+.nolist |
| %define __SECT__ [section %1] |
| __SECT__ |
| %endmacro |
| %imacro segment 1+.nolist |
| %define __SECT__ [segment %1] |
| __SECT__ |
| %endmacro |
| |
| %imacro absolute 1+.nolist |
| %define __SECT__ [absolute %1] |
| __SECT__ |
| %endmacro |
| |
| %imacro struc 1-2.nolist 0 |
| %push struc |
| %define %$strucname %1 |
| [absolute %2] |
| %$strucname: ; allow definition of `.member' to work sanely |
| %endmacro |
| %imacro endstruc 0.nolist |
| %{$strucname}_size EQU $ - %$strucname |
| %pop |
| __SECT__ |
| %endmacro |
| |
| %imacro istruc 1.nolist |
| %push istruc |
| %define %$strucname %1 |
| %$strucstart: |
| %endmacro |
| %imacro at 1-2+.nolist |
| times %1-($-%$strucstart) db 0 |
| %2 |
| %endmacro |
| %imacro iend 0.nolist |
| times %{$strucname}_size-($-%$strucstart) db 0 |
| %pop |
| %endmacro |
| |
| %imacro align 1-2+.nolist nop |
| %ifidni %2,nop |
| [align %1] |
| %else |
| times ($$-$) & ((%1)-1) %2 |
| %endif |
| %endmacro |
| %imacro alignb 1-2+.nolist resb 1 |
| times ($$-$) & ((%1)-1) %2 |
| %endmacro |
| |
| %imacro extern 1-*.nolist |
| %rep %0 |
| [extern %1] |
| %rotate 1 |
| %endrep |
| %endmacro |
| |
| %imacro bits 1+.nolist |
| [bits %1] |
| %endmacro |
| |
| %imacro use16 0.nolist |
| [bits 16] |
| %endmacro |
| %imacro use32 0.nolist |
| [bits 32] |
| %endmacro |
| %imacro use64 0.nolist |
| [bits 64] |
| %endmacro |
| |
| %imacro global 1-*.nolist |
| %rep %0 |
| [global %1] |
| %rotate 1 |
| %endrep |
| %endmacro |
| |
| %imacro common 1-*.nolist |
| %rep %0 |
| [common %1] |
| %rotate 1 |
| %endrep |
| %endmacro |
| |
| %imacro cpu 1+.nolist |
| [cpu %1] |
| %endmacro |
| |
| %imacro default 1+.nolist |
| [default %1] |
| %endmacro |
| |
| ; NASM compatibility shim |
| %define __OUTPUT_FORMAT__ __YASM_OBJFMT__ |