| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- ;; --------------------------------------------------------------------------
- ;;
- ;; Copyright 1996-2016 The NASM Authors - All Rights Reserved
- ;; See the file AUTHORS included with the NASM distribution for
- ;; the specific copyright holders.
- ;;
- ;; Redistribution and use in source and binary forms, with or without
- ;; modification, are permitted provided that the following
- ;; conditions are met:
- ;;
- ;; * Redistributions of source code must retain the above copyright
- ;; notice, this list of conditions and the following disclaimer.
- ;; * Redistributions in binary form must reproduce the above
- ;; copyright notice, this list of conditions and the following
- ;; disclaimer in the documentation and/or other materials provided
- ;; with the distribution.
- ;;
- ;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- ;; CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- ;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- ;; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- ;; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- ;; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- ;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- ;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- ;; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- ;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- ;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- ;; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- ;; EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- ;;
- ;; --------------------------------------------------------------------------
- ; Standard macro set for NASM -*- nasm -*-
- ; Macros to make NASM ignore some TASM directives
- STD: tasm
- %idefine IDEAL
- %idefine JUMPS
- %idefine P386
- %idefine P486
- %idefine P586
- %idefine END
- ; The normal standard macros
- STD: 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 three need to be defined, though the actual definitions will
- ; be constantly updated during preprocessing.
- %define __FILE__
- %define __LINE__
- %define __BITS__
- %define __SECT__ ; 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
- %define __SECTALIGN_ALIGN_UPDATES_SECTION__ 1
- %imacro sectalign 1.nolist
- %ifnum %1
- %if __SECTALIGN_ALIGN_UPDATES_SECTION__ = 1
- [sectalign %1]
- %endif
- %else
- %ifidni %1,off
- %define __SECTALIGN_ALIGN_UPDATES_SECTION__ 0
- %elifidni %1,on
- %define __SECTALIGN_ALIGN_UPDATES_SECTION__ 1
- %endif
- %endif
- %endmacro
- %imacro absolute 1+.nolist
- %define __SECT__ [absolute %1]
- __SECT__
- %endmacro
- %imacro struc 1-2.nolist 0
- %push
- %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
- %define %$strucname %1
- %$strucstart:
- %endmacro
- %imacro at 1-2+.nolist
- times (%1-%$strucname)-($-%$strucstart) db 0
- %2
- %endmacro
- %imacro iend 0.nolist
- times %{$strucname}_size-($-%$strucstart) db 0
- %pop
- %endmacro
- %imacro align 1-2+.nolist nop
- sectalign %1
- times (((%1) - (($-$$) % (%1))) % (%1)) %2
- %endmacro
- %imacro alignb 1-2+.nolist
- sectalign %1
- %ifempty %2
- resb (((%1) - (($-$$) % (%1))) % (%1))
- %else
- times (((%1) - (($-$$) % (%1))) % (%1)) %2
- %endif
- %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 extern 1-*.nolist
- %rep %0
- [extern %1]
- %rotate 1
- %endrep
- %endmacro
- %imacro static 1-*.nolist
- %rep %0
- [static %1]
- %rotate 1
- %endrep
- %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
- %define __FLOAT_DAZ__ nodaz
- %define __FLOAT_ROUND__ near
- ; __FLOAT__ contains the whole floating-point configuration so it can
- ; be saved and restored
- %define __FLOAT__ __FLOAT_DAZ__,__FLOAT_ROUND__
- %imacro float 1-*.nolist
- %rep %0
- [float %1]
- %ifidni %1,daz
- %define __FLOAT_DAZ__ daz
- %elifidni %1,nodaz
- %define __FLOAT_DAZ__ nodaz
- %elifidni %1,near
- %define __FLOAT_ROUND__ near
- %elifidni %1,up
- %define __FLOAT_ROUND__ up
- %elifidni %1,down
- %define __FLOAT_ROUND__ down
- %elifidni %1,zero
- %define __FLOAT_ROUND__ zero
- %elifidni %1,default
- %define __FLOAT_DAZ__ nodaz
- %define __FLOAT_ROUND__ near
- %endif
- %rotate 1
- %endrep
- %endmacro
- %imacro default 1+.nolist
- [default %1]
- %endmacro
- %imacro userel 0.nolist
- [default rel]
- %endmacro
- %imacro useabs 0.nolist
- [default abs]
- %endmacro
- %imacro usebnd 0.nolist
- [default bnd]
- %endmacro
- %imacro usenobnd 0.nolist
- [default nobnd]
- %endmacro
- %imacro incbin 1-2+.nolist 0
- %push
- %pathsearch %$dep %1
- %depend %$dep
- %? %$dep,%2
- %pop
- %endmacro
|