From: Fabian G. <fa...@ra...> - 2016-07-14 00:36:49
|
The sequence of files passed to macros.pl needs to be, in that order: 1. standard.mac 2. version.mac 3. <other macro files> If standard.mac isn't first, the "tasm_compatible_mode" logic in preproc.c (nasm_stdmac / nasm_stdmac_after_tasm) breaks badly. That means standard.mac is special and "macros/*.mac" doesn't work right (it depends on file name enumeration order); making the file name special seems like the cleanest way to accomplish that. Signed-off-by: Fabian Giesen <fa...@ra...> --- Makefile.in | 4 +- macros/_standard.mac | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++ macros/standard.mac | 227 --------------------------------------------------- 3 files changed, 229 insertions(+), 229 deletions(-) create mode 100644 macros/_standard.mac delete mode 100644 macros/standard.mac diff --git a/Makefile.in b/Makefile.in index 3fbf5a4..3ffb08e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -186,8 +186,8 @@ nsis/version.nsh: version version.pl # standard distribution. macros/macros.c: macros/macros.pl asm/pptok.ph version.mac \ $(srcdir)/macros/*.mac $(srcdir)/output/*.mac - $(RUNPERL) $(srcdir)/macros/macros.pl version.mac \ - $(srcdir)/macros/*.mac $(srcdir)/output/*.mac + $(RUNPERL) $(srcdir)/macros/macros.pl $(srcdir)/macros/_standard.mac version.mac \ + $(srcdir)/macros/[^_]*.mac $(srcdir)/output/*.mac # These source files are generated from regs.dat by yet another # perl script. diff --git a/macros/_standard.mac b/macros/_standard.mac new file mode 100644 index 0000000..60c0387 --- /dev/null +++ b/macros/_standard.mac @@ -0,0 +1,227 @@ +;; -------------------------------------------------------------------------- +;; +;; Copyright 1996-2009 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 before the first include +; directive. + + %idefine IDEAL + %idefine JUMPS + %idefine P386 + %idefine P486 + %idefine P586 + %idefine END + +; This is a magic token which indicates the end of the TASM macros +*END*TASM*MACROS* + +; 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 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 + +%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 diff --git a/macros/standard.mac b/macros/standard.mac deleted file mode 100644 index 60c0387..0000000 --- a/macros/standard.mac +++ /dev/null @@ -1,227 +0,0 @@ -;; -------------------------------------------------------------------------- -;; -;; Copyright 1996-2009 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 before the first include -; directive. - - %idefine IDEAL - %idefine JUMPS - %idefine P386 - %idefine P486 - %idefine P586 - %idefine END - -; This is a magic token which indicates the end of the TASM macros -*END*TASM*MACROS* - -; 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 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 - -%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 -- 2.8.1 |