Move the revision history into the documentation
authorH. Peter Anvin <hpa@zytor.com>
Mon, 14 Jul 2008 06:45:57 +0000 (02:45 -0400)
committerH. Peter Anvin <hpa@zytor.com>
Mon, 14 Jul 2008 06:45:57 +0000 (02:45 -0400)
Clumsily convert the revision history to nasmdoc format, so it can be
included in the documentation as Appendix C.

CHANGES
doc/Makefile.in
doc/changes.src [new file with mode: 0644]
doc/nasmdoc.src

diff --git a/CHANGES b/CHANGES
index 3646230..b89696f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
-2.04
-----
-* Sanitize macro handing in the %error directive.
-* New %warning preprocessor directive.
-* __utf16__ and __utf32__ operators to generate UTF-16 and UTF-32
-  strings.
-* Fix bug in case-insensitive matching when compiled on platforms that
-  don't use the "configure" script.  Of the official release binaries,
-  that only affects the OS/2 binary.
-* Correct the handling of nested %reps.
-* Support for x87 packed BCD constants.
-* New %warning directive to issue user-controlled warnings.
-* New %strcat directive to join strings together.
-* Correct the LTR instruction in 64-bit mode.
-* Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
-
-2.03.01
--------
-* Fix buffer overflow in the listing module.
-* Fix the handling of hexadecimal escape codes in `...` strings.
-* The Postscript/PDF documentation has been reformatted.
-* The -F option now implies -g.
-
-2.03
-----
-* Add support for Intel AVX, CLMUL and FMA instructions,
-  including YMM registers.
-* "dy", "resy" and "yword" for 32-byte operands.
-* Fix some SSE5 instructions.
-* Intel INVEPT, INVVPID and MOVBE instructions.
-* Fix checking for critical expressions when the optimizer is enabled.
-* Support the DWARF debugging format for ELF targets.
-* Fix optimizations of signed bytes.
-* Fix operation on bigendian machines.
-* Fix buffer overflow in the preprocessor.
-* SAFESEH support for Win32, IMAGEREL for Win64 (SEH).
-* %? and %?? to refer to the name of a macro itself.  In particular,
-  "%idefine keyword $%?" can be used to make a keyword "disappear".
-* New options for dependency generation: -MD, -MF, -MP, -MT, -MQ.
-* New preprocessor directives %pathsearch and %depend; INCBIN
-  reimplemented as a macro.
-* %include now resolves macros in a sane manner.
-* %substr can now be used to get other than one-character substrings.
-* New type of character/string constants, using backquotes (`...`),
-  which support C-style escape sequences.
-* %defstr and %idefstr to stringize macro definitions before creation.
-* Fix forward references used in EQU statements.
-
-2.02
-----
-* Additional fixes for MMX operands with explicit "qword", as well as
-  (hopefully) SSE operands with "oword".
-* Fix handling of truncated strings with DO.
-* Fix segfaults due to memory overwrites when floating-point constants
-  were used.
-* Fix segfaults due to missing include files.
-* Fix OpenWatcom Makefiles for DOS and OS/2.
-* Add autogenerated instruction list back into the documentation.
-* ELF: Fix segfault when generating stabs, and no symbols have been
-  defined.
-* ELF: Experimental support for DWARF debugging information.
-* New compile date and time standard macros.
-* %ifnum now returns true for negative numbers.
-* New %iftoken test for a single token.
-* New %ifempty test for empty expansion.
-* Add support for the XSAVE instruction group.
-* Makefile for Netware/gcc.
-* Fix issue with some warnings getting emitted way too many times.
-* Autogenerated instruction list added to the documentation.
-
-2.01
-----
-* Fix the handling of MMX registers with explicit "qword" tags on
-  memory (broken in 2.00 due to 64-bit changes.)
-* Fix the PREFETCH instructions.
-* Fix the documentation.
-* Fix debugging info when using "-f elf" (backwards alias for "-f
-  elf32").
-* Man pages for rdoff tools (from the Debian project.)
-* ELF: handle large numbers of sections.
-* Fix corrupt output when the optimizer runs out of passes.
-
-2.00
-----
-* Added c99 data-type compliance.
-* Added general x86-64 support.
-* Added win64 (x86-64 COFF) output format.
-* Added __BITS__ standard macro.
-* Renamed the elf output format to elf32 for clarity.
-* Added elf64 and macho (MacOS X) output formats.
-* Added Numeric constants in DQ directive.
-* Added oword, do and reso pseudo operands.
-* Allow underscores in numbers.
-* Added 8-, 16- and 128-bit floating-point formats.
-* Added binary, octal and hexadecimal floating-point.
-* Correct the generation of floating-point constants.
-* Added Floating-point option control.
-* Added Infinity and NaN floating point support.
-* Added ELF Symbol Visibility support.
-* Added Setting OSABI value in ELF header directive.
-* Added Generate Makefile Dependencies option.
-* Added Unlimited Optimization Passes option.
-* Added %IFN and %ELIFN support.
-* Added Logical Negation Operator.
-* Enhanced Stack Relative Preprocessor Directives.
-* Enhanced ELF Debug Formats.
-* Enhanced Send Errors to a File option.
-* Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
-* Added a large number of additional instructions.
-* Significant performance improvements.
-
-0.98.39
--------
-* fix buffer overflow
-* fix outas86's .bss handling
-* "make spotless" no longer deletes config.h.in.
-* %(el)if(n)idn insensitivity to string quotes difference (#809300).
-* (nasm.c) __OUTPUT_FORMAT__ changed to string value instead of symbol.
-
-0.98.38
--------
-* Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
-  mkdep.pl to be able to generate completely pathless dependencies, as
-  required by OpenWatcom wmake (it supports path searches, but not
-  explicit paths.)
-* Fix the STR instruction.
-* Fix the ELF output format, which was broken under certain
-  circumstances due to the addition of stabs support.
-* Quick-fix Borland format debug-info for -f obj  
-* Fix for %rep with no arguments (#560568)
-* Fix concatenation of preprocessor function call (#794686)
-* Fix long label causes coredump (#677841)
-* Use autoheader as well as autoconf to keep configure from generating
-  ridiculously long command lines.
-* Make sure that all of the formats which support debugging output
-  actually will suppress debugging output when -g not specified.
-
-0.98.37
--------
-* Paths given in "-I" switch searched for "incbin"ed as
-  well as "%include"ed files.
-* Added stabs debugging for the ELF output format, patch from
-  Martin Wawro.
-* Fix output/outbin.c to allow origin > 80000000h.
-* Make -U switch work.
-* Fix the use of relative offsets with explicit prefixes, e.g. "a32 loop foo".
-* Remove "backslash()".
-* Fix the SMSW and SLDT instructions.
-* -O2 and -O3 are no longer aliases for -O10 and -O15.  If you mean the
-  latter, please say so! :)
-
-0.98.36
--------
-* Update rdoff - librarian/archiver - common rec - docs!
-* Fix signed/unsigned problems.
-* Fix JMP FAR label and CALL FAR label.
-* Add new multisection support - map files - fix align bug
-* Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
-* "Q" or "O" suffixes indicate octal
-* Support Prescott new instructions (PNI).
-* Cyrix XSTORE instruction.
-
-0.98.35
--------
-* Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
-* Fix dependencies and compiler warnings.
-* Add "const" in a number of places.
-* Add -X option to specify error reporting format (use -Xvc to
-  integrate with Microsoft Visual Studio.)
-* Minor changes for code legibility.
-* Drop use of tmpnam() in rdoff (security fix.)
-
-0.98.34
--------
-* Correct additional address-size vs. operand-size confusions.
-* Generate dependencies for all Makefiles automatically.
-* Add support for unimplemented (but theoretically available)
-  registers such as tr0 and cr5.  Segment registers 6 and 7 are called
-  segr6 and segr7 for the operations which they can be represented.
-* Correct some disassembler bugs related to redundant address-size prefixes.
-  Some work still remains in this area.
-* Correctly generate an error for things like "SEG eax".
-* Add the JMPE instruction, enabled by "CPU IA64".
-* Correct compilation on newer gcc/glibc platforms.
-* Issue an error on things like "jmp far eax".
-
-
-0.98.33
--------
-
-* New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
-  round out the version-query macros.  version.pl now understands
-  X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
-  X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
-* New keyword "strict" to disable the optimization of specific
-  operands.
-* Fix the handing of size overrides with JMP instructions
-  (instructions such as "jmp dword foo".)
-* Fix the handling of "ABSOLUTE label", where "label" points into a
-  relocatable segment.
-* Fix OBJ output format with lots of externs.
-* More documentation updates.
-* Add -Ov option to get verbose information about optimizations.
-* Undo a braindead change which broke %elif directives.
-* Makefile updates.
-
-
-0.98.32
--------
-
-* Fix NASM crashing when %macro directives were left unterminated.
-* Lots of documentation updates.
-* Complete rewrite of the PostScript/PDF documentation generator.
-* The MS Visual C++ Makefile was updated and corrected.
-* Recognize .rodata as a standard section name in ELF.
-* Fix some obsolete Perl4-isms in Perl scripts.
-* Fix configure.in to work with autoconf 2.5x.
-* Fix a couple of "make cleaner" misses.
-* Make the normal "./configure && make" work with Cygwin.
-
-
-0.98.31
--------
-
-* Correctly build in a separate object directory again.
-* Derive all references to the version number from the version file.
-* New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
-* Lots of Makefile updates and bug fixes.
-* New %ifmacro directive to test for multiline macros.
-* Documentation updates.
-* Fixes for 16-bit OBJ format output.
-* Changed the NASM environment variable to NASMENV.
-
-
-0.98.30
--------
-
-* Changed doc files a lot: completely removed old READMExx and
-  Wishlist files, incorporating all information in CHANGES and TODO.
-* I waited a long time to rename zoutieee.c to (original) outieee.c
-* moved all output modules to output/ subdirectory.
-* Added 'make strip' target to strip debug info from nasm & ndisasm.
-* Added INSTALL file with installation instructions.
-* Added -v option description to nasm man.
-* Added dist makefile target to produce source distributions.
-* 16-bit support for ELF output format (GNU extension, but useful.)
-
-
-0.98.28
--------
-
-* Fastcooked this for Debian's Woody release:
-Frank applied the INCBIN bug patch to 0.98.25alt and called
-it 0.98.28 to not confuse poor little apt-get.
-
-
-0.98.26
--------
-
-* Reorganised files even better from 0.98.25alt
-
-
-0.98.25alt
-----------
-
-* Prettified the source tree. Moved files to more reasonable places.
-* Added findleak.pl script to misc/ directory.
-* Attempted to fix doc.
-
-0.98.25
--------
-
-* Line continuation character '\'
-* Docs inadvertantly reverted - "dos packaging".
-
-
-0.98.24p1
----------
-
-* FIXME: Someone, document this please.
-
-
-0.98.24
--------
-
-* Documentation - Ndisasm doc added to Nasm.doc.
-
-
-0.98.23
--------
-
-* Attempted to remove rdoff version1
-* Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
-
-
-0.98.22
--------
-
-* Update rdoff2 - attempt to remove v1.
-
-
-0.98.21
--------
-
-* Optimization fixes.
-
-
-0.98.20
--------
-
-* Optimization fixes.
-
-
-0.98.19
--------
-
-* H. J. Lu's patch back out.
-
-
-0.98.18
--------
-
-* Added ".rdata" to "-f win32".
-
-
-0.98.17
--------
-
-* H. J. Lu's "bogus elf" patch. (Red Hat problem?)
-
-
-0.98.16
--------
-
-* Fix whitespace before "[section ..." bug.
-
-0.98.15
--------
-
-* Rdoff changes (?).
-* Fix fixes to memory leaks.
-
-0.98.14
--------
-
-* Fix memory leaks.
-* (there was no '.13)
-
-0.98.12
--------
-
-* Update optimization (new function of "-O1")
-* Changes to test/bintest.asm (?).
-
-0.98.11
--------
-
-* Optimization changes.
-* Ndisasm fixed.
-* (there was no '.10)
-
-0.98.09
--------
-
-* Add multiple sections support to "-f bin".
-* Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
-* Add "-v" as an alias to the "-r" switch.
-* Remove "#ifdef" from Tasm compatibility options.
-* Remove redundant size-overrides on "mov ds, ex", etc.
-* Fixes to SSE2, other insns.dat (?).
-* Enable uppercase "I" and "P" switches.
-* Case insinsitive "seg" and "wrt".
-* Update install.sh (?).
-* Allocate tokens in blocks.
-* Improve "invalid effective address" messages.
-
-0.98.08
--------
-
-* Add "%strlen" and "%substr" macro operators
-* Fixed broken c16.mac.
-* Unterminated string error reported.
-* Fixed bugs as per 0.98bf
-
-
-0.98.09b with John Coffman patches released 28-Oct-2001
--------------------------------------------------------
-
-Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
-
-* More closely compatible with 0.98 when -O0 is implied
-or specified.  Not strictly identical, since backward 
-branches in range of short offsets are recognized, and signed
-byte values with no explicit size specification will be
-assembled as a single byte.
-
-* More forgiving with the PUSH instruction.  0.98 requires
-a size to be specified always.  0.98.09b will imply the size
-from the current BITS setting (16 or 32).
-
-* Changed definition of the optimization flag:
-
-       -O0     strict two-pass assembly, JMP and Jcc are
-               handled more like 0.98, except that back-
-               ward JMPs are short, if possible.
-
-       -O1     strict two-pass assembly, but forward
-               branches are assembled with code guaranteed
-               to reach; may produce larger code than
-               -O0, but will produce successful assembly
-               more often if branch offset sizes are not
-               specified.
-
-       -O2     multi-pass optimization, minimize branch
-               offsets; also will minimize signed immed-
-               iate bytes, overriding size specification.
-
-       -O3     like -O2, but more passes taken, if needed
-
-
-0.98.07 released 01/28/01
--------------------------
-
-*       Added Stepane Denis' SSE2 instructions to a *working*
-        version of the code - some earlier versions were based on
-        broken code - sorry 'bout that. version "0.98.07"
-
-
-01/28/01
---------
-
-*       Cosmetic modifications to nasm.c, nasm.h,
-        AUTHORS, MODIFIED
-
-
-0.98.06f released 01/18/01
---------------------------
-
-*       - Add "metalbrain"s jecxz bug fix in insns.dat
-        - alter nasmdoc.src to match - version "0.98.06f"
-
-
-0.98.06e released 01/09/01
---------------------------
-
-*       Removed the "outforms.h" file - it appears to be
-        someone's old backup of "outform.h". version "0.98.06e" 
-
-
-01/09/01
---------
-
-* fbk - finally added the fix for the "multiple %includes bug",
-        known since 7/27/99 - reported originally (?) and sent to
-        us by Austin Lunnen - he reports that John Fine had a fix
-        within the day. Here it is...
-
-* Nelson Rush resigns from the group. Big thanks to Nelson for
-  his leadership and enthusiasm in getting these changes
-  incorporated into Nasm!
-
-* fbk - [list +], [list -] directives - ineptly implemented, should
-        be re-written or removed, perhaps.
-
-* Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
-                       as well - testing might be desirable...
-
-
-08/07/00
---------
-
-* James Seter - -postfix, -prefix command line switches.
-* Yuri Zaporogets - rdoff utility changes.
-
-
-0.98p1
-------
-
-* GAS-like palign (Panos Minos)
-* FIXME: Someone, fill this in with details
-
-
-0.98bf (bug-fixed)
-----------------------------------
-
-* Fixed - elf and aoutb bug - shared libraries
-        - multiple "%include" bug in "-f obj"   
-        - jcxz, jecxz bug
-       - unrecognized option bug in ndisasm 
-
-0.98.03 with John Coffman's changes released 27-Jul-2000
---------------------------------------------------------
-
-* Added signed byte optimizations for the 0x81/0x83 class
-of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
-when used as 'ADD reg16,imm' or 'ADD reg32,imm.'  Also
-optimization of signed byte form of 'PUSH imm' and 'IMUL
-reg,imm'/'IMUL reg,reg,imm.'  No size specification is needed.
-
-* Added multi-pass JMP and Jcc offset optimization.  Offsets
-on forward references will preferentially use the short form,
-without the need to code a specific size (short or near) for
-the branch.  Added instructions for 'Jcc label' to use the
-form 'Jnotcc $+3/JMP label', in cases where a short offset
-is out of bounds.  If compiling for a 386 or higher CPU, then
-the 386 form of Jcc will be used instead.
-
-This feature is controlled by a new command-line switch: "O",
-(upper case letter O).  "-O0" reverts the assembler to no
-extra optimization passes, "-O1" allows up to 5 extra passes,
-and "-O2"(default), allows up to 10 extra optimization passes.
-
-* Added a new directive:  'cpu XXX', where XXX is any of: 
-8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
-Katmai.  All are case insensitive.  All instructions will
-be selected only if they apply to the selected cpu or lower.
-Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
-
-* Added to 'standard.mac', the "use16" and "use32" forms of
-the "bits 16/32" directive. This is nothing new, just conforms
-to a lot of other assemblers. (minor)
-
-* Changed label allocation from 320/32 (10000 labels @ 200K+) 
-to 32/37 (1000 labels); makes running under DOS much easier.
-Since additional label space is allocated dynamically, this
-should have no effect on large programs with lots of labels.
-The 37 is a prime, believed to be better for hashing. (minor)
-
-* Integrated patchfile 0.98-0.98.01.  I call this version
-0.98.03, for historical reasons:  0.98.02 was trashed.
-
---John Coffman <johninsd@san.rr.com>               27-Jul-2000
-
-
-Kendall Bennett's SciTech MGL changes
--------------------------------------
-Note that you must define "TASM_COMPAT" at compile-time
-to get the Tasm Ideal Mode compatibility.
-
-All changes can be compiled in and out using the TASM_COMPAT macros,
-and when compiled without TASM_COMPAT defined we get the exact same
-binary as the unmodified 0.98 sources.
-
-standard.mac, macros.c:
- . Added macros to ignore TASM directives before first include
-
-nasm.h:
- . Added extern declaration for tasm_compatible_mode
-
-nasm.c:
- . Added global variable tasm_compatible_mode
- . Added command line switch for TASM compatible mode (-t)
- . Changed version command line to reflect when compiled with TASM additions
- . Added response file processing to allow all arguments on a single
-   line (response file is @resp rather than -@resp for NASM format).
-
-labels.c:
- . Changes islocal() macro to support TASM style @@local labels.
- . Added islocalchar() macro to support TASM style @@local labels.
-
-parser.c:
- . Added support for TASM style memory references (ie: mov [DWORD eax],10
-   rather than the NASM style mov DWORD [eax],10).
-
-preproc.c:
- . Added new directives, %arg, %local, %stacksize to directives table
- . Added support for TASM style directives without a leading % symbol.
-
-Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
-
-* A new keyword %xdefine and its case-insensitive counterpart %ixdefine.
-    They work almost the same way as %define and %idefine but expand
-    the definition immediately, not on the invocation. Something like a cross
-    between %define and %assign. The "x" suffix stands for "eXpand", so
-    "xdefine" can be deciphered as "expand-and-define". Thus you can do
-    things like this:
-
-       %assign ofs     0
-       
-       %macro  arg     1
-               %xdefine %1 dword [esp+ofs]
-               %assign ofs ofs+4
-       %endmacro
-
-* Changed the place where the expansion of %$name macros are expanded.
-    Now they are converted into ..@ctxnum.name form when detokenizing, so
-    there are no quirks as before when using %$name arguments to macros,
-    in macros etc. For example:
-
-       %macro  abc     1
-               %define %1 hello
-       %endm
-
-       abc     %$here
-       %$here
-
-    Now last line will be expanded into "hello" as expected. This also allows
-    for lots of goodies, a good example are extended "proc" macros included
-    in this archive.
-
-* Added a check for "cstk" in smacro_defined() before calling get_ctx() -
-    this allows for things like:
-
-       %ifdef %$abc
-       %endif
-
-    to work without warnings even in no context.
-
-* Added a check for "cstk" in %if*ctx and %elif*ctx directives -
-    this allows to use %ifctx without excessive warnings. If there is
-    no active context, %ifctx goes through "false" branch.
-
-* Removed "user error: " prefix with %error directive: it just clobbers the
-    output and has absolutely no functionality. Besides, this allows to write
-    macros that does not differ from built-in functions in any way.
-
-* Added expansion of string that is output by %error directive. Now you
-    can do things like:
-
-       %define hello(x) Hello, x!
-
-       %define %$name andy
-       %error "hello(%$name)"
-
-    Same happened with %include directive.
-
-* Now all directives that expect an identifier will try to expand and
-    concatenate everything without whitespaces in between before usage.
-    For example, with "unfixed" nasm the commands
-
-       %define %$abc hello
-       %define __%$abc goodbye
-       __%$abc
-
-    would produce "incorrect" output: last line will expand to
-
-       hello goodbyehello
-
-    Not quite what you expected, eh? :-) The answer is that preprocessor
-    treats the %define construct as if it would be
-
-       %define __ %$abc goodbye
-
-    (note the white space between __ and %$abc). After my "fix" it
-    will "correctly" expand into
-
-       goodbye
-
-    as expected. Note that I use quotes around words "correct", "incorrect"
-    etc because this is rather a feature not a bug; however current behaviour
-    is more logical (and allows more advanced macro usage :-).
-
-    Same change was applied to:
-       %push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine,
-       %assign,%iassign,%undef
-
-* A new directive [WARNING {+|-}warning-id] have been added. It works only
-    if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
-
-* A new warning type: macro-selfref. By default this warning is disabled;
-    when enabled NASM warns when a macro self-references itself; for example
-    the following source:
-
-       [WARNING macro-selfref]
-
-       %macro          push    1-*
-               %rep    %0
-                       push    %1
-                       %rotate 1
-               %endrep
-       %endmacro
-
-                       push    eax,ebx,ecx
-
-    will produce a warning, but if we remove the first line we won't see it
-    anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
-    eats such constructs without warnings at all).
-
-* Added a "error" routine to preprocessor which always will set ERR_PASS1
-    bit in severity_code. This removes annoying repeated errors on first
-    and second passes from preprocessor.
-
-* Added the %+ operator in single-line macros for concatenating two
-    identifiers. Usage example:
-
-       %define _myfunc _otherfunc
-       %define cextern(x) _ %+ x
-       cextern (myfunc)
-
-    After first expansion, third line will become "_myfunc". After this
-    expansion is performed again so it becomes "_otherunc".
-
-* Now if preprocessor is in a non-emmitting state, no warning or error
-    will be emmitted. Example:
-
-       %if 1
-               mov     eax,ebx
-       %else
-               put anything you want between these two brackets,
-               even macro-parameter references %1 or local labels %$zz
-               or macro-local labels %%zz - no warning will be emmitted.
-       %endif
-
-* Context-local variables on expansion as a last resort are looked up
-    in outer contexts. For example, the following piece:
-
-       %push   outer
-       %define %$a [esp]
-
-               %push   inner
-               %$a
-               %pop
-       %pop
-
-    will expand correctly the fourth line to [esp]; if we'll define another
-    %$a inside the "inner" context, it will take precedence over outer
-    definition. However, this modification has been applied only to
-    expand_smacro and not to smacro_define: as a consequence expansion
-    looks in outer contexts, but %ifdef won't look in outer contexts.
-
-    This behaviour is needed because we don't want nested contexts to
-    act on already defined local macros. Example:
-
-       %define %$arg1  [esp+4]
-       test    eax,eax
-       if      nz
-               mov     eax,%$arg1
-       endif
-
-    In this example the "if" mmacro enters into the "if" context, so %$arg1
-    is not valid anymore inside "if". Of course it could be worked around
-    by using explicitely %$$arg1 but this is ugly IMHO.
-
-* Fixed memory leak in %undef. The origline wasn't freed before
-    exiting on success.
-
-* Fixed trap in preprocessor when line expanded to empty set of tokens.
-    This happens, for example, in the following case:
-
-       #define SOMETHING
-       SOMETHING
-
-
-0.98
-----
-
-All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
-
-* The documentation comment delimiter is \# not #.
-* Allow EQU definitions to refer to external labels; reported by
-  Pedro Gimeno.
-* Re-enable support for RDOFF v1; reported by Pedro Gimeno.
-* Updated License file per OK from Simon and Julian.
-
-
-0.98p9
-------
-
-* Update documentation (although the instruction set reference will
-  have to wait; I don't want to hold up the 0.98 release for it.)
-* Verified that the NASM implementation of the PEXTRW and PMOVMSKB
-  instructions is correct.  The encoding differs from what the Intel
-  manuals document, but the Pentium III behaviour matches NASM, not
-  the Intel manuals.
-* Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
-  Stefan Hoffmeister.
-* Resurrect the -s option, which was removed when changing the
-  diagnostic output to stdout.
-
-
-0.98p8
-------
-
-* Fix for "DB" when NASM is running on a bigendian machine.
-* Invoke insns.pl once for each output script, making Makefile.in
-  legal for "make -j".
-* Improve the Unix configure-based makefiles to make package
-  creation easier.
-* Included an RPM .spec file for building RPM (RedHat Package Manager)
-  packages on Linux or Unix systems.
-* Fix Makefile dependency problems.
-* Change src/rdsrc.pl to include sectioning information in info
-  output; required for install-info to work.
-* Updated the RDOFF distribution to version 2 from Jules; minor
-  massaging to make it compile in my environment.
-* Split doc files that can be built by anyone with a Perl interpreter off
-  into a separate archive.
-* "Dress rehearsal" release!
-
-
-0.98p7
-------
-
-* Fixed opcodes with a third byte-sized immediate argument to not
-  complain if given "byte" on the immediate.
-* Allow %undef to remove single-line macros with arguments.  This
-  matches the behaviour of #undef in the C preprocessor.
-* Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
-  compatibility with most C compilers and preprocessors.  This allows
-  Makefile options to be shared between cc and nasm, for example.
-* Minor cleanups.
-* Went through the list of Katmai instructions and hopefully fixed the
-  (rather few) mistakes in it.
-* (Hopefully) fixed a number of disassembler bugs related to ambiguous
-  instructions (disambiguated by -p) and SSE instructions with REP.
-* Fix for bug reported by Mark Junger: "call dword 0x12345678" should
-  work and may add an OSP (affected CALL, JMP, Jcc).
-* Fix for environments when "stderr" isn't a compile-time constant.
-
-
-0.98p6
-------
-
-* Took officially over coordination of the 0.98 release; so drop
-  the p3.x notation. Skipped p4 and p5 to avoid confusion with John
-  Fine's J4 and J5 releases.
-* Update the documentation; however, it still doesn't include
-  documentation for the various new instructions.  I somehow wonder if
-  it makes sense to have an instruction set reference in the assembler
-  manual when Intel et al have PDF versions of their manuals online.
-* Recognize "idt" or "centaur" for the -p option to ndisasm.
-* Changed error messages back to stderr where they belong, but add an
-  -E option to redirect them elsewhere (the DOS shell cannot redirect
-  stderr.)
-* -M option to generate Makefile dependencies (based on code from Alex
-  Verstak.)
-* %undef preprocessor directive, and -u option, that undefines a
-  single-line macro.
-* OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
-  Chuck Crayne.
-* Various minor bugfixes (reported by):
-  - Dangling %s in preproc.c (Martin Junker)
-* THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS.  I am
-  on a trip and didn't bring the Katmai instruction reference, so I
-  can't work on them right now.
-* Updated the License file per agreement with Simon and Jules to
-  include a GPL distribution clause.
-
-
-0.98p3.7
---------
-
-* (Hopefully) fixed the canned Makefiles to include the outrdf2 and
-  zoutieee modules.
-* Renamed changes.asm to changed.asm.
-
-
-0.98p3.6
---------
-
-* Fixed a bunch of instructions that were added in 0.98p3.5 which had
-  memory operands, and the address-size prefix was missing from the
-  instruction pattern.
-
-
-0.98p3.5
---------
-
-* Merged in changes from John S. Fine's 0.98-J5 release.  John's based
-  0.98-J5 on my 0.98p3.3 release; this merges the changes.
-* Expanded the instructions flag field to a long so we can fit more
-  flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
-  such.
-* Fix the "PRIV" flag on a bunch of instructions, and create new
-  "PROT" flag for protected-mode-only instructions (orthogonal to if
-  the instruction is privileged!) and new "SMM" flag for SMM-only
-  instructions.
-* Added AMD-only SYSCALL and SYSRET instructions.
-* Make SSE actually work, and add new Katmai MMX instructions.
-* Added a -p (preferred vendor) option to ndisasm so that it can
-  distinguish e.g. Cyrix opcodes also used in SSE.  For example:
-
-       ndisasm -p cyrix aliased.bin
-       00000000  670F514310        paddsiw mm0,[ebx+0x10]
-       00000005  670F514320        paddsiw mm0,[ebx+0x20]
-       ndisasm -p intel aliased.bin
-       00000000  670F514310        sqrtps xmm0,[ebx+0x10]
-       00000005  670F514320        sqrtps xmm0,[ebx+0x20]
-* Added a bunch of Cyrix-specific instructions.
-
-
-0.98p3.4
---------
-
-* Made at least an attempt to modify all the additional Makefiles (in
-  the Mkfiles directory).  I can't test it, but this was the best I
-  could do.
-* DOS DJGPP+"Opus Make" Makefile from John S. Fine.
-* changes.asm changes from John S. Fine.
-
-
-0.98p3.3
---------
-
-* Patch from Conan Brink to allow nesting of %rep directives.
-* If we're going to allow INT01 as an alias for INT1/ICEBP (one of
-  Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
-  as well.
-* Updated changes.asm to include the latest changes.
-* Tried to clean up the <CR>s that had snuck in from a DOS/Windows
-  environment into my Unix environment, and try to make sure than
-  DOS/Windows users get them back.
-* We would silently generate broken tools if insns.dat wasn't sorted
-  properly.  Change insns.pl so that the order doesn't matter.
-* Fix bug in insns.pl (introduced by me) which would cause conditional
-  instructions to have an extra "cc" in disassembly, e.g. "jnz"
-  disassembled as "jccnz".
-
-
-0.98p3.2
---------
-
-* Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
-  http://www.csoft.net/cz/johnfine/
-* Changed previous "spotless" Makefile target (appropriate for distribution)
-  to "distclean", and added "cleaner" target which is same as "clean"
-  except deletes files generated by Perl scripts; "spotless" is union.
-* Removed BASIC programs from distribution.  Get a Perl interpreter
-  instead (see below.)
-* Calling this "pre-release 3.2" rather than "p3-hpa2" because of
-  John's contributions.
-* Actually link in the IEEE output format (zoutieee.c); fix a bunch of
-  compiler warnings in that file.  Note I don't know what IEEE output
-  is supposed to look like, so these changes were made "blind".
-
-
-0.98p3-hpa
-----------
-
-* Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
-  buildable version for Unix systems (Makefile.in updates, etc.)
-* Changed insns.pl to create the instruction tables in nasm.h and
-  names.c, so that a new instruction can be added by adding it *only*
-  to insns.dat.
-* Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
-  FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
-  guarantee will never be used; one of them is documented as UD2 in
-  Intel documentation, the other one just as "Undefined Opcode" --
-  calling it UD1 seemed to make sense.)
-* MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
-  characters long.  Now MAX_SYMBOL is derived from insns.dat.
-* A note on the BASIC programs included: forget them.  insns.bas is
-  already out of date.  Get yourself a Perl interpreter for your
-  platform of choice at:
-
-       http://www.cpan.org/ports/index.html
-
-
-0.98 pre-release 3
--------------------
-
-added response file support, improved command line handling, new layout
-help screen
-
-fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
-related bugs, updated Wishlist; 0.98 Prerelease 3.
-
-
-0.98 pre-release 2
--------------------
-
-fixed bug in outcoff.c to do with truncating section names longer
-than 8 characters, referencing beyond end of string; 0.98 pre-release 2
-
-
-0.98 pre-released May 1999
---------------------------
-
-Fixed a bug whereby STRUC didn't work at all in RDF.
-
-Fixed a problem with group specification in PUBDEFs in OBJ.
-
-Improved ease of adding new output formats. Contribution due to
-Fox Cutter.
-
-Fixed a bug in relocations in the `bin' format: was showing up when
-a relocatable reference crossed an 8192-byte boundary in any output
-section.
-
-Fixed a bug in local labels: local-label lookups were inconsistent
-between passes one and two if an EQU occurred between the definition
-of a global label and the subsequent use of a local label local to
-that global.
-
-Fixed a seg-fault in the preprocessor (again) which happened when
-you use a blank line as the first line of a multi-line macro
-definition and then defined a label on the same line as a call to
-that macro.
-
-Fixed a stale-pointer bug in the handling of the NASM environment
-variable. Thanks to Thomas McWilliams.
-
-ELF had a hard limit on the number of sections which caused
-segfaults when transgressed. Fixed.
-
-Added ability for ndisasm to read from stdin by using `-' as the
-filename.
-
-ndisasm wasn't outputting the TO keyword. Fixed.
-
-Fixed error cascade on bogus expression in %if - an error in
-evaluation was causing the entire %if to be discarded, thus creating
-trouble later when the %else or %endif was encountered.
-
-Forward reference tracking was instruction-granular not operand-
-granular, which was causing 286-specific code to be generated
-needlessly on code of the form `shr word [forwardref],1'. Thanks to
-Jim Hague for sending a patch.
-
-All messages now appear on stdout, as sending them to stderr serves
-no useful purpose other than to make redirection difficult.
-
-Fixed the problem with EQUs pointing to an external symbol - this
-now generates an error message.
-
-Allowed multiple size prefixes to an operand, of which only the first
-is taken into account.
-
-Incorporated John Fine's changes, including fixes of a large number
-of preprocessor bugs, some small problems in OBJ, and a reworking of
-label handling to define labels before their line is assembled, rather
-than after.
-
-Reformatted a lot of the source code to be more readable. Included
-'coding.txt' as a guideline for how to format code for contributors.
-
-Stopped nested %reps causing a panic - they now cause a slightly more
-friendly error message instead.
-
-Fixed floating point constant problems (patch by Pedro Gimeno)
-
-Fixed the return value of insn_size() not being checked for -1, indicating
-an error.
-
-Incorporated 3D now instructions.
-
-Fixed the 'mov eax, eax + ebx' bug.
-
-Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
-
-Incorporated John Fine's command line parsing changes
-
-Incorporated David Lindauer's OMF debug support
-
-Made changes for LCC 4.0 support (__NASM_CDecl__, removed register size
-specification warning when sizes agree).
-
-Released NASM 0.98 Pre-release 1
-
-
-0.97 released December 1997
----------------------------
-
-This was entirely a bug-fix release to 0.96, which seems to have got
-cursed. Silly me.
-
-Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
-fail. Caused by an error in the `MOV EAX,<segment>' support.
-
-ndisasm hung at EOF when compiled with lcc on Linux because lcc on
-Linux somehow breaks feof(). ndisasm now does not rely on feof().
-
-A heading in the documentation was missing due to a markup error in
-the indexing. Fixed.
-
-Fixed failure to update all pointers on realloc() within extended-
-operand code in parser.c. Was causing wrong behaviour and seg faults
-on lines such as `dd 0.0,0.0,0.0,0.0,...'
-
-Fixed a subtle preprocessor bug whereby invoking one multi-line
-macro on the first line of the expansion of another, when the second
-had been invoked with a label defined before it, didn't expand the
-inner macro. 
-
-Added internal.doc back in to the distribution archives - it was
-missing in 0.96 *blush*
-
-Fixed bug causing 0.96 to be unable to assemble its own test files,
-specifically objtest.asm. *blush again*
-
-Fixed seg-faults and bogus error messages caused by mismatching
-%rep and %endrep within multi-line macro definitions.
-
-Fixed a problem with buffer overrun in OBJ, which was causing
-corruption at ends of long PUBDEF records.
-
-Separated DOS archives into main-program and documentation to reduce
-download size.
-
-
-0.96 released November 1997
----------------------------
-
-Fixed a bug whereby, if `nasm sourcefile' would cause a filename
-collision warning and put output into `nasm.out', then `nasm
-sourcefile -o outputfile' still gave the warning even though the
-`-o' was honoured.
-
-Fixed name pollution under Digital UNIX: one of its header files
-defined R_SP, which broke the enum in nasm.h.
-
-Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
-two-operand forms; NDISASM didn't recognise the longer register
-forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
-flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
-size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
-undocumented because the Intel Architecture reference documents
-them.
-
-Fixed a problem with the local-label mechanism, whereby strange
-types of symbol (EQUs, auto-defined OBJ segment base symbols)
-interfered with the `previous global label' value and screwed up
-local labels.
-
-Fixed a bug whereby the stub preprocessor didn't communicate with
-the listing file generator, so that the -a and -l options in
-conjunction would produce a useless listing file.
-
-Merged `os2' object file format back into `obj', after discovering
-that `obj' _also_ shouldn't have a link pass separator in a module
-containing a non-trivial MODEND. Flat segments are now declared
-using the FLAT attribute. `os2' is no longer a valid object format
-name: use `obj'.
-
-Removed the fixed-size temporary storage in the evaluator. Very very
-long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
-so) should now no longer crash NASM.
-
-Fixed a bug involving segfaults on disassembly of MMX instructions,
-by changing the meaning of one of the operand-type flags in nasm.h.
-This may cause other apparently unrelated MMX problems; it needs to
-be tested thoroughly.
-
-Fixed some buffer overrun problems with large OBJ output files.
-Thanks to DJ Delorie for the bug report and fix.
-
-Made preprocess-only mode actually listen to the %line markers as it
-prints them, so that it can report errors more sanely.
-
-Re-designed the evaluator to keep more sensible track of expressions
-involving forward references: can now cope with previously-nightmare
-situations such as
-   mov ax,foo | bar
-   foo equ 1
-   bar equ 2
-
-Added the ALIGN and ALIGNB standard macros.
-
-Added PIC support in ELF: use of WRT to obtain the four extra
-relocation types needed.
-
-Added the ability for output file formats to define their own
-extensions to the GLOBAL, COMMON and EXTERN directives.
-
-Implemented common-variable alignment, and global-symbol type and
-size declarations, in ELF.
-
-Implemented NEAR and FAR keywords for common variables, plus
-far-common element size specification, in OBJ.
-
-Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
-default WRT specification (either a segment or a group).
-
-Transformed the Unix NASM archive into an auto-configuring package.
-
-Added a sanity-check for people applying SEG to things which are
-already segment bases: this previously went unnoticed by the SEG
-processing and caused OBJ-driver panics later.
-
-Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
-type references: OBJ doesn't directly support dword-size segment
-base fixups, but as long as the low two bytes of the constant term
-are zero, a word-size fixup can be generated instead and it will
-work.
-
-Added the ability to specify sections' alignment requirements in
-Win32 object files and pure binary files.
-
-Added preprocess-time expression evaluation: the %assign (and
-%iassign) directive and the bare %if (and %elif) conditional. Added
-relational operators to the evaluator, for use only in %if
-constructs: the standard relationals = < > <= >= <> (and C-like
-synonyms == and !=) plus low-precedence logical operators &&, ^^ and
-||.
-
-Added a preprocessor repeat construct: %rep / %exitrep / %endrep.
-
-Added the __FILE__ and __LINE__ standard macros.
-
-Added a sanity check for number constants being greater than
-0xFFFFFFFF. The warning can be disabled.
-
-Added the %0 token whereby a variadic multi-line macro can tell how
-many parameters it's been given in a specific invocation.
-
-Added %rotate, allowing multi-line macro parameters to be cycled.
-
-Added the `*' option for the maximum parameter count on multi-line
-macros, allowing them to take arbitrarily many parameters.
-
-Added the ability for the user-level forms of EXTERN, GLOBAL and
-COMMON to take more than one argument.
-
-Added the IMPORT and EXPORT directives in OBJ format, to deal with
-Windows DLLs.
-
-Added some more preprocessor %if constructs: %ifidn / %ifidni (exact
-textual identity), and %ifid / %ifnum / %ifstr (token type testing).
-
-Added the ability to distinguish SHL AX,1 (the 8086 version) from
-SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
-be 1).
-
-Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
-with PIC shared library features.
-
-Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
-FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
-otherwise accepted standard. The previous behaviour, though it was a
-deliberate feature, was a deliberate feature based on a
-misunderstanding. Apologies for the inconvenience.
-
-Improved the flexibility of ABSOLUTE: you can now give it an
-expression rather than being restricted to a constant, and it can
-take relocatable arguments as well.
-
-Added the ability for a variable to be declared as EXTERN multiple
-times, and the subsequent definitions are just ignored.
-
-We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
-alone on a line (without a following instruction).
-
-Improved sanity checks on whether the arguments to EXTERN, GLOBAL
-and COMMON are valid identifiers.
-
-Added misc/exebin.mac to allow direct generation of .EXE files by
-hacking up an EXE header using DB and DW; also added test/binexe.asm
-to demonstrate the use of this. Thanks to Yann Guidon for
-contributing the EXE header code.
-
-ndisasm forgot to check whether the input file had been successfully
-opened. Now it does. Doh!
-
-Added the Cyrix extensions to the MMX instruction set.
-
-Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
-assembled differently. This is important since [ESI+EBP] and
-[EBP+ESI] have different default base segment registers.
-
-Added support for the PharLap OMF extension for 4096-byte segment
-alignment.
-
-
-0.95 released July 1997
------------------------
-
-Fixed yet another ELF bug. This one manifested if the user relied on
-the default segment, and attempted to define global symbols without
-first explicitly declaring the target segment.
-
-Added makefiles (for NASM and the RDF tools) to build Win32 console
-apps under Symantec C++. Donated by Mark Junker.
-
-Added `macros.bas' and `insns.bas', QBasic versions of the Perl
-scripts that convert `standard.mac' to `macros.c' and convert
-`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
-Junker.
-
-Changed the diassembled forms of the conditional instructions so
-that JB is now emitted as JC, and other similar changes. Suggested
-list by Ulrich Doewich.
-
-Added `@' to the list of valid characters to begin an identifier
-with.
-
-Documentary changes, notably the addition of the `Common Problems'
-section in nasm.doc.
-
-Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
-
-Fixed a bug in perm_copy() in labels.c which was causing exceptions
-in cleanup_labels() on some systems.
-
-Positivity sanity check in TIMES argument changed from a warning to
-an error following a further complaint.
-
-Changed the acceptable limits on byte and word operands to allow
-things like `~10111001b' to work.
-
-Fixed a major problem in the preprocessor which caused seg-faults if
-macro definitions contained blank lines or comment-only lines.
-
-Fixed inadequate error checking on the commas separating the
-arguments to `db', `dw' etc.
-
-Fixed a crippling bug in the handling of macros with operand counts
-defined with a `+' modifier.
-
-Fixed a bug whereby object file formats which stored the input file
-name in the output file (such as OBJ and COFF) weren't doing so
-correctly when the output file name was specified on the command
-line.
-
-Removed [INC] and [INCLUDE] support for good, since they were
-obsolete anyway.
-
-Fixed a bug in OBJ which caused all fixups to be output in 16-bit
-(old-format) FIXUPP records, rather than putting the 32-bit ones in
-FIXUPP32 (new-format) records.
-
-Added, tentatively, OS/2 object file support (as a minor variant on
-OBJ).
-
-Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
-
-Removed a spurious second fclose() on the output file.
-
-Added the `-s' command line option to redirect all messages which
-would go to stderr (errors, help text) to stdout instead.
-
-Added the `-w' command line option to selectively suppress some
-classes of assembly warning messages.
-
-Added the `-p' pre-include and `-d' pre-define command-line options.
-
-Added an include file search path: the `-i' command line option.
-
-Fixed a silly little preprocessor bug whereby starting a line with a
-`%!' environment-variable reference caused an `unknown directive'
-error.
-
-Added the long-awaited listing file support: the `-l' command line
-option.
-
-Fixed a problem with OBJ format whereby, in the absence of any
-explicit segment definition, non-global symbols declared in the
-implicit default segment generated spurious EXTDEF records in the
-output.
-
-Added the NASM environment variable.
-
-From this version forward, Win32 console-mode binaries will be
-included in the DOS distribution in addition to the 16-bit binaries.
-Added Makefile.vc for this purpose.
-
-Added `return 0;' to test/objlink.c to prevent compiler warnings.
-
-Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
-
-Added an alternative memory-reference syntax in which prefixing an
-operand with `&' is equivalent to enclosing it in square brackets,
-at the request of Fox Cutter.
-
-Errors in pass two now cause the program to return a non-zero error
-code, which they didn't before.
-
-Fixed the single-line macro cycle detection, which didn't work at
-all on macros with no parameters (caused an infinite loop). Also
-changed the behaviour of single-line macro cycle detection to work
-like cpp, so that macros like `extrn' as given in the documentation
-can be implemented.
-
-Fixed the implementation of WRT, which was too restrictive in that
-you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
-a relocatable reference.
-
-
-0.94 released April 1997
-------------------------
-
-Major item: added the macro processor.
-
-Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
-reorganised CMPXCHG instruction into early-486 and Pentium forms.
-Thanks to Thobias Jones for the information.
-
-Fixed two more stupid bugs in ELF, which were causing `ld' to
-continue to seg-fault in a lot of non-trivial cases.
-
-Fixed a seg-fault in the label manager.
-
-Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
-the only option for BCD loads/stores in any case.
-
-Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
-anyone bothers to provide it. Previously they complained unless no
-keyword at all was present.
-
-Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
-vestige of a bug that I thought had been fixed in 0.92. This was
-fixed, hopefully for good this time...
-
-Another minor phase error (insofar as a phase error can _ever_ be
-minor) fixed, this one occurring in code of the form
-   rol ax,forward_reference
-   forward_reference equ 1
-
-The number supplied to TIMES is now sanity-checked for positivity,
-and also may be greater than 64K (which previously didn't work on
-16-bit systems).
-
-Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
-
-Added the INCBIN pseudo-opcode.
-
-Due to the advent of the preprocessor, the [INCLUDE] and [INC]
-directives have become obsolete. They are still supported in this
-version, with a warning, but won't be in the next.
-
-Fixed a bug in OBJ format, which caused incorrect object records to
-be output when absolute labels were made global.
-
-Updates to RDOFF subdirectory, and changes to outrdf.c.
-
-
-0.93 released January 1997
---------------------------
-
-This release went out in a great hurry after semi-crippling bugs
-were found in 0.92.
-
-Really _did_ fix the stack overflows this time. *blush*
-
-Had problems with EA instruction sizes changing between passes, when
-an offset contained a forward reference and so 4 bytes were
-allocated for the offset in pass one; by pass two the symbol had
-been defined and happened to be a small absolute value, so only 1
-byte got allocated, causing instruction size mismatch between passes
-and hence incorrect address calculations. Fixed.
-
-Stupid bug in the revised ELF section generation fixed (associated
-string-table section for .symtab was hard-coded as 7, even when this
-didn't fit with the real section table). Was causing `ld' to
-seg-fault under Linux.
-
-Included a new Borland C makefile, Makefile.bc2, donated by Fox
-Cutter <lmb@comtch.iea.com>.
-
-
-0.92 released January 1997
---------------------------
-
-The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
-fixed. This also affected the LCC driver.
-
-Fixed a bug regarding 32-bit effective addresses of the form
-[other_register+ESP].
-
-Documentary changes, notably documentation of the fact that Borland
-Win32 compilers use `obj' rather than `win32' object format.
-
-Fixed the COMENT record in OBJ files, which was formatted
-incorrectly.
-
-Fixed a bug causing segfaults in large RDF files.
-
-OBJ format now strips initial periods from segment and group
-definitions, in order to avoid complications with the local label
-syntax.
-
-Fixed a bug in disassembling far calls and jumps in NDISASM.
-
-Added support for user-defined sections in COFF and ELF files.
-
-Compiled the DOS binaries with a sensible amount of stack, to
-prevent stack overflows on any arithmetic expression containing
-parentheses.
-
-Fixed a bug in handling of files that do not terminate in a newline.
-
-
-0.91 released November 1996
----------------------------
-
-Loads of bug fixes.
-Support for RDF added.
-Support for DBG debugging format added.
-Support for 32-bit extensions to Microsoft OBJ format added.
-Revised for Borland C: some variable names changed, makefile added.
-LCC support revised to actually work.
-JMP/CALL NEAR/FAR notation added.
-`a16', `o16', `a32' and `o32' prefixes added.
-Range checking on short jumps implemented.
-MMX instruction support added.
-Negative floating point constant support added.
-Memory handling improved to bypass 64K barrier under DOS.
-$ prefix to force treatment of reserved words as identifiers added.
-Default-size mechanism for object formats added.
-Compile-time configurability added.
-`#', `@', `~' and `?' are now valid characters in labels.
-`-e' and `-k' options in NDISASM added.
-
-
-0.90 released October 1996
---------------------------
-
-First release version. First support for object file output. Other
-changes from previous version (0.3x) too numerous to document.
+The revision history has moved to the file doc/changes.src, and
+is now included in the documentation as Appendix C.
index a7d24d9..f704f03 100644 (file)
@@ -26,7 +26,7 @@ ACRODIST      = @ACRODIST@            # Acrobat Distiller
 PSTOPDF                = @PSTOPDF@             # BSD/MacOS X utility
 PS2PDF          = @PS2PDF@             # Part of GhostScript
 
-SRCS           = nasmdoc.src
+SRCS           = nasmdoc.src inslist.src changes.src
 OUT            = info html nasmdoc.txt nasmdoc.ps nasmdoc.pdf
 
 # exports
@@ -43,18 +43,18 @@ inslist.src: inslist.pl ../insns.dat
 .PHONY: html
 html: html/nasmdoc0.html
 
-html/nasmdoc0.html: nasmdoc.src rdsrc.pl inslist.src
+html/nasmdoc0.html: $(SRCS) rdsrc.pl
        mkdir -p html
        $(PERL) $(srcdir)/rdsrc.pl html < $<
        mv -f *.html html
 
-nasmdoc.dip: nasmdoc.src rdsrc.pl inslist.src
+nasmdoc.dip: $(SRCS) rdsrc.pl
        $(PERL) $(srcdir)/rdsrc.pl dip < $<
 
-nasmdoc.texi: nasmdoc.src rdsrc.pl inslist.src
+nasmdoc.texi: $(SRCS) rdsrc.pl
        $(PERL) $(srcdir)/rdsrc.pl texi < $<
 
-nasmdoc.txt: nasmdoc.src rdsrc.pl inslist.src
+nasmdoc.txt: $(SRCS) rdsrc.pl
        $(PERL) $(srcdir)/rdsrc.pl txt < $<
 
 nasmdoc.ps: nasmdoc.dip nasmlogo.eps $(srcdir)/../version genpsdriver.pl \
diff --git a/doc/changes.src b/doc/changes.src
new file mode 100644 (file)
index 0000000..029ae93
--- /dev/null
@@ -0,0 +1,1727 @@
+\#
+\# NASM revision history in nasmdoc format
+\#
+
+\H{cl-2.xx} NASM 2 Series
+
+The NASM 2 series support x86-64, and is the production version of NASM
+since 2007.
+
+
+\S{cl-2.04} Version 2.04
+
+\b Sanitize macro handing in the %error directive.
+
+\b New \c{%warning} preprocessor directive.
+
+\b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32
+  strings.
+
+\b Fix bug in case-insensitive matching when compiled on platforms that
+  don't use the \c{configure} script.  Of the official release binaries,
+  that only affects the OS/2 binary.
+
+\b Correct the handling of nested %reps.
+
+\b Support for x87 packed BCD constants.
+
+\b New %warning directive to issue user-controlled warnings.
+
+\b New %strcat directive to join strings together.
+
+\b Correct the \c{LTR} instruction in 64-bit mode.
+
+\b Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
+
+
+\S{cl-2.03.01} Version 2.03.01
+
+\b Fix buffer overflow in the listing module.
+
+\b Fix the handling of hexadecimal escape codes in `...` strings.
+
+\b The Postscript/PDF documentation has been reformatted.
+
+\b The \c{-F} option now implies \c{-g}.
+
+
+\S{cl-2.03} Version 2.03
+
+\b Add support for Intel AVX, CLMUL and FMA instructions,
+including YMM registers.
+
+\b \c{dy}, \c{resy} and \c{yword} for 32-byte operands.
+
+\b Fix some SSE5 instructions.
+
+\b Intel \c{INVEPT}, \c{INVVPID} and \c{MOVBE} instructions.
+
+\b Fix checking for critical expressions when the optimizer is enabled.
+
+\b Support the DWARF debugging format for ELF targets.
+
+\b Fix optimizations of signed bytes.
+
+\b Fix operation on bigendian machines.
+
+\b Fix buffer overflow in the preprocessor.
+
+\b \c{SAFESEH} support for Win32, \c{IMAGEREL} for Win64 (SEH).
+
+\b \c{%?} and \c{%??} to refer to the name of a macro itself.  In particular,
+\c{%idefine keyword $%?} can be used to make a keyword "disappear".
+
+\b New options for dependency generation: \c{-MD}, \c{-MF},
+\c{-MP}, \c{-MT}, \c{-MQ}.
+
+\b New preprocessor directives \c{%pathsearch} and \c{%depend}; INCBIN
+reimplemented as a macro.
+
+\b \c{%include} now resolves macros in a sane manner.
+
+\b \c{%substr} can now be used to get other than one-character substrings.
+
+\b New type of character/string constants, using backquotes (\c{`...`}),
+which support C-style escape sequences.
+
+\b \c{%defstr} and \c{%idefstr} to stringize macro definitions before
+creation.
+
+\b Fix forward references used in \c{EQU} statements.
+
+\S{cl-2.02} Version 2.02
+
+
+\b Additional fixes for MMX operands with explicit \c{qword}, as well as
+  (hopefully) SSE operands with \c{oword}.
+
+\b Fix handling of truncated strings with \c{DO}.
+
+\b Fix segfaults due to memory overwrites when floating-point constants
+  were used.
+
+\b Fix segfaults due to missing include files.
+
+\b Fix OpenWatcom Makefiles for DOS and OS/2.
+
+\b Add autogenerated instruction list back into the documentation.
+
+\b ELF: Fix segfault when generating stabs, and no symbols have been
+  defined.
+
+\b ELF: Experimental support for DWARF debugging information.
+
+\b New compile date and time standard macros.
+
+\b %ifnum now returns true for negative numbers.
+
+\b New %iftoken test for a single token.
+
+\b New %ifempty test for empty expansion.
+
+\b Add support for the \c{XSAVE} instruction group.
+
+\b Makefile for Netware/gcc.
+
+\b Fix issue with some warnings getting emitted way too many times.
+
+\b Autogenerated instruction list added to the documentation.
+
+\S{cl-2.01} Version 2.01
+
+
+\b Fix the handling of MMX registers with explicit \c{qword} tags on
+  memory (broken in 2.00 due to 64-bit changes.)
+
+\b Fix the PREFETCH instructions.
+
+\b Fix the documentation.
+
+\b Fix debugging info when using \c{-f elf}
+(backwards compatibility alias for \c{-f elf32}).
+
+\b Man pages for rdoff tools (from the Debian project.)
+
+\b ELF: handle large numbers of sections.
+
+\b Fix corrupt output when the optimizer runs out of passes.
+
+
+\S{cl-2.00} Version 2.00
+
+\b Added c99 data-type compliance.
+
+\b Added general x86-64 support.
+
+\b Added win64 (x86-64 COFF) output format.
+
+\b Added \c{__BITS__} standard macro.
+
+\b Renamed the \c{elf} output format to \c{elf32} for clarity.
+
+\b Added \c{elf64} and \c{macho} (MacOS X) output formats.
+
+\b Added Numeric constants in \c{dq} directive.
+
+\b Added \c{oword}, \c{do} and \c{reso} pseudo operands.
+
+\b Allow underscores in numbers.
+
+\b Added 8-, 16- and 128-bit floating-point formats.
+
+\b Added binary, octal and hexadecimal floating-point.
+
+\b Correct the generation of floating-point constants.
+
+\b Added floating-point option control.
+
+\b Added Infinity and NaN floating point support.
+
+\b Added ELF Symbol Visibility support.
+
+\b Added setting OSABI value in ELF header directive.
+
+\b Added Generate Makefile Dependencies option.
+
+\b Added Unlimited Optimization Passes option.
+
+\b Added \c{%IFN} and \c{%ELIFN} support.
+
+\b Added Logical Negation Operator.
+
+\b Enhanced Stack Relative Preprocessor Directives.
+
+\b Enhanced ELF Debug Formats.
+
+\b Enhanced Send Errors to a File option.
+
+\b Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
+
+\b Added a large number of additional instructions.
+
+\b Significant performance improvements.
+
+
+\H{cl-0.98.xx} NASM 0.98 Series
+
+The 0.98 series was the production versions of NASM from 1999 to 2007.
+
+
+\S{cl-0.98.39} Version 0.98.39
+
+\b fix buffer overflow
+
+\b fix outas86's \c{.bss} handling
+
+\b "make spotless" no longer deletes config.h.in.
+
+\b \c{%(el)if(n)idn} insensitivity to string quotes difference (#809300).
+
+\b (nasm.c)\c{__OUTPUT_FORMAT__} changed to string value instead of symbol.
+
+\S{cl-0.98.38} Version 0.98.38
+
+
+\b Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
+  \c{mkdep.pl} to be able to generate completely pathless dependencies, as
+  required by OpenWatcom wmake (it supports path searches, but not
+  explicit paths.)
+
+\b Fix the \c{STR} instruction.
+
+\b Fix the ELF output format, which was broken under certain
+  circumstances due to the addition of stabs support.
+
+\b Quick-fix Borland format debug-info for \c{-f obj}
+
+\b Fix for \c{%rep} with no arguments (#560568)
+
+\b Fix concatenation of preprocessor function call (#794686)
+
+\b Fix long label causes coredump (#677841)
+
+\b Use autoheader as well as autoconf to keep configure from generating
+  ridiculously long command lines.
+
+\b Make sure that all of the formats which support debugging output
+  actually will suppress debugging output when \c{-g} not specified.
+
+\S{cl-0.98.37} Version 0.98.37
+
+
+\b Paths given in \c{-I} switch searched for \c{incbin}-ed as
+  well as \c{%include}-ed files.
+
+\b Added stabs debugging for the ELF output format, patch from
+  Martin Wawro.
+
+\b Fix \c{output/outbin.c} to allow origin > 80000000h.
+
+\b Make \c{-U} switch work.
+
+\b Fix the use of relative offsets with explicit prefixes, e.g.
+\c{a32 loop foo}.
+
+\b Remove \c{backslash()}.
+
+\b Fix the \c{SMSW} and \c{SLDT} instructions.
+
+\b \c{-O2} and \c{-O3} are no longer aliases for \c{-O10} and \c{-O15}.
+If you mean the latter, please say so! :)
+
+\S{cl-0.98.36} Version 0.98.36
+
+
+\b Update rdoff - librarian/archiver - common rec - docs!
+
+\b Fix signed/unsigned problems.
+
+\b Fix \c{JMP FAR label} and \c{CALL FAR label}.
+
+\b Add new multisection support - map files - fix align bug
+
+\b Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
+
+\b \c{Q} or \c{O} suffixes indicate octal
+
+\b Support Prescott new instructions (PNI).
+
+\b Cyrix \c{XSTORE} instruction.
+
+
+\S{cl-0.98.35} Version 0.98.35
+
+\b Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
+
+\b Fix dependencies and compiler warnings.
+
+\b Add "const" in a number of places.
+
+\b Add -X option to specify error reporting format (use -Xvc to
+  integrate with Microsoft Visual Studio.)
+
+\b Minor changes for code legibility.
+
+\b Drop use of tmpnam() in rdoff (security fix.)
+
+
+\S{cl-0.98.34} Version 0.98.34
+
+\b Correct additional address-size vs. operand-size confusions.
+
+\b Generate dependencies for all Makefiles automatically.
+
+\b Add support for unimplemented (but theoretically available)
+  registers such as tr0 and cr5.  Segment registers 6 and 7 are called
+  segr6 and segr7 for the operations which they can be represented.
+
+\b Correct some disassembler bugs related to redundant address-size prefixes.
+  Some work still remains in this area.
+
+\b Correctly generate an error for things like "SEG eax".
+
+\b Add the JMPE instruction, enabled by "CPU IA64".
+
+\b Correct compilation on newer gcc/glibc platforms.
+
+\b Issue an error on things like "jmp far eax".
+
+
+\S{cl-0.98.33} Version 0.98.33
+
+\b New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
+  round out the version-query macros.  version.pl now understands
+  X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
+  X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
+
+\b New keyword "strict" to disable the optimization of specific
+  operands.
+
+\b Fix the handing of size overrides with JMP instructions
+  (instructions such as "jmp dword foo".)
+
+\b Fix the handling of "ABSOLUTE label", where "label" points into a
+  relocatable segment.
+
+\b Fix OBJ output format with lots of externs.
+
+\b More documentation updates.
+
+\b Add -Ov option to get verbose information about optimizations.
+
+\b Undo a braindead change which broke %elif directives.
+
+\b Makefile updates.
+
+
+\S{cl-0.98.32} Version 0.98.32
+
+\b Fix NASM crashing when %macro directives were left unterminated.
+
+\b Lots of documentation updates.
+
+\b Complete rewrite of the PostScript/PDF documentation generator.
+
+\b The MS Visual C++ Makefile was updated and corrected.
+
+\b Recognize .rodata as a standard section name in ELF.
+
+\b Fix some obsolete Perl4-isms in Perl scripts.
+
+\b Fix configure.in to work with autoconf 2.5x.
+
+\b Fix a couple of "make cleaner" misses.
+
+\b Make the normal "./configure && make" work with Cygwin.
+
+
+\S{cl-0.98.31} Version 0.98.31
+
+\b Correctly build in a separate object directory again.
+
+\b Derive all references to the version number from the version file.
+
+\b New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
+
+\b Lots of Makefile updates and bug fixes.
+
+\b New %ifmacro directive to test for multiline macros.
+
+\b Documentation updates.
+
+\b Fixes for 16-bit OBJ format output.
+
+\b Changed the NASM environment variable to NASMENV.
+
+
+\S{cl-0.98.30} Version 0.98.30
+
+\b Changed doc files a lot: completely removed old READMExx and
+  Wishlist files, incorporating all information in CHANGES and TODO.
+
+\b I waited a long time to rename zoutieee.c to (original) outieee.c
+
+\b moved all output modules to output/ subdirectory.
+
+\b Added 'make strip' target to strip debug info from nasm & ndisasm.
+
+\b Added INSTALL file with installation instructions.
+
+\b Added -v option description to nasm man.
+
+\b Added dist makefile target to produce source distributions.
+
+\b 16-bit support for ELF output format (GNU extension, but useful.)
+
+
+\S{cl-0.98.28} Version 0.98.28
+
+\b Fastcooked this for Debian's Woody release:
+Frank applied the INCBIN bug patch to 0.98.25alt and called
+it 0.98.28 to not confuse poor little apt-get.
+
+
+\S{cl-0.98.26} Version 0.98.26
+
+\b Reorganised files even better from 0.98.25alt
+
+
+\S{cl-0.98.25alt} Version 0.98.25alt
+
+\b Prettified the source tree. Moved files to more reasonable places.
+
+\b Added findleak.pl script to misc/ directory.
+
+\b Attempted to fix doc.
+
+
+\S{cl-0.98.25} Version 0.98.25
+
+\b Line continuation character \c{\\}.
+
+\b Docs inadvertantly reverted - "dos packaging".
+
+
+\S{cl-0.98.24p1} Version 0.98.24p1
+
+\b FIXME: Someone, document this please.
+
+
+\S{cl-0.98.24} Version 0.98.24
+
+\b Documentation - Ndisasm doc added to Nasm.doc.
+
+
+\S{cl-0.98.23} Version 0.98.23
+
+\b Attempted to remove rdoff version1
+
+\b Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
+
+
+\S{cl-0.98.22} Version 0.98.22
+
+\b Update rdoff2 - attempt to remove v1.
+
+
+\S{cl-0.98.21} Version 0.98.21
+
+\b Optimization fixes.
+
+
+\S{cl-0.98.20} Version 0.98.20
+
+\b Optimization fixes.
+
+
+\S{cl-0.98.19} Version 0.98.19
+
+\b H. J. Lu's patch back out.
+
+
+\S{cl-0.98.18} Version 0.98.18
+
+\b Added ".rdata" to "-f win32".
+
+
+\S{cl-0.98.17} Version 0.98.17
+
+\b H. J. Lu's "bogus elf" patch. (Red Hat problem?)
+
+
+\S{cl-0.98.16} Version 0.98.16
+
+\b Fix whitespace before "[section ..." bug.
+
+
+\S{cl-0.98.15} Version 0.98.15
+
+\b Rdoff changes (?).
+
+\b Fix fixes to memory leaks.
+
+
+\S{cl-0.98.14} Version 0.98.14
+
+\b Fix memory leaks.
+
+
+\S{cl-0.98.13} Version 0.98.13
+
+\b There was no 0.98.13
+
+
+\S{cl-0.98.12} Version 0.98.12
+
+\b Update optimization (new function of "-O1")
+
+\b Changes to test/bintest.asm (?).
+
+
+\S{cl-0.98.11} Version 0.98.11
+
+\b Optimization changes.
+
+\b Ndisasm fixed.
+
+
+\S{cl-0.98.10} Version 0.98.10
+
+\b There was no 0.98.10
+
+
+\S{cl-0.98.09} Version 0.98.09
+
+\b Add multiple sections support to "-f bin".
+
+\b Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
+
+\b Add "-v" as an alias to the "-r" switch.
+
+\b Remove "#ifdef" from Tasm compatibility options.
+
+\b Remove redundant size-overrides on "mov ds, ex", etc.
+
+\b Fixes to SSE2, other insns.dat (?).
+
+\b Enable uppercase "I" and "P" switches.
+
+\b Case insinsitive "seg" and "wrt".
+
+\b Update install.sh (?).
+
+\b Allocate tokens in blocks.
+
+\b Improve "invalid effective address" messages.
+
+
+\S{cl-0.98.08} Version 0.98.08
+
+\b Add "%strlen" and "%substr" macro operators
+
+\b Fixed broken c16.mac.
+
+\b Unterminated string error reported.
+
+\b Fixed bugs as per 0.98bf
+
+
+\S{cl-0.98.09b with John Coffman patches released 28-Oct-2001} Version 0.98.09b with John Coffman patches released 28-Oct-2001
+
+Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
+
+\b More closely compatible with 0.98 when -O0 is implied
+or specified.  Not strictly identical, since backward 
+branches in range of short offsets are recognized, and signed
+byte values with no explicit size specification will be
+assembled as a single byte.
+
+\b More forgiving with the PUSH instruction.  0.98 requires
+a size to be specified always.  0.98.09b will imply the size
+from the current BITS setting (16 or 32).
+
+\b Changed definition of the optimization flag:
+
+        -O0     strict two-pass assembly, JMP and Jcc are
+                handled more like 0.98, except that back-
+                ward JMPs are short, if possible.
+
+        -O1     strict two-pass assembly, but forward
+                branches are assembled with code guaranteed
+                to reach; may produce larger code than
+                -O0, but will produce successful assembly
+                more often if branch offset sizes are not
+                specified.
+
+        -O2     multi-pass optimization, minimize branch
+                offsets; also will minimize signed immed-
+                iate bytes, overriding size specification.
+
+        -O3     like -O2, but more passes taken, if needed
+
+
+\S{cl-0.98.07 released 01/28/01} Version 0.98.07 released 01/28/01
+
+\b       Added Stepane Denis' SSE2 instructions to a *working*
+        version of the code - some earlier versions were based on
+        broken code - sorry 'bout that. version "0.98.07"
+
+
+01/28/01
+
+
+\b       Cosmetic modifications to nasm.c, nasm.h,
+        AUTHORS, MODIFIED
+
+
+\S{cl-0.98.06f released 01/18/01} Version 0.98.06f released 01/18/01
+
+
+\b       - Add "metalbrain"s jecxz bug fix in insns.dat
+        - alter nasmdoc.src to match - version "0.98.06f"
+
+
+\S{cl-0.98.06e released 01/09/01} Version 0.98.06e released 01/09/01
+
+
+\b       Removed the "outforms.h" file - it appears to be
+        someone's old backup of "outform.h". version "0.98.06e" 
+
+01/09/01
+
+\b fbk - finally added the fix for the "multiple %includes bug",
+        known since 7/27/99 - reported originally (?) and sent to
+        us by Austin Lunnen - he reports that John Fine had a fix
+        within the day. Here it is...
+
+\b Nelson Rush resigns from the group. Big thanks to Nelson for
+  his leadership and enthusiasm in getting these changes
+  incorporated into Nasm!
+
+\b fbk - [list +], [list -] directives - ineptly implemented, should
+        be re-written or removed, perhaps.
+
+\b Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
+                       as well - testing might be desirable...
+
+08/07/00
+
+\b James Seter - -postfix, -prefix command line switches.
+
+\b Yuri Zaporogets - rdoff utility changes.
+
+
+\S{cl-0.98p1} Version 0.98p1
+
+\b GAS-like palign (Panos Minos)
+
+\b FIXME: Someone, fill this in with details
+
+
+\S{cl-0.98bf (bug-fixed)} Version 0.98bf (bug-fixed)
+
+\b Fixed - elf and aoutb bug - shared libraries
+        - multiple "%include" bug in "-f obj"   
+        - jcxz, jecxz bug
+        - unrecognized option bug in ndisasm 
+
+\S{cl-0.98.03 with John Coffman's changes released 27-Jul-2000} Version 0.98.03 with John Coffman's changes released 27-Jul-2000
+
+\b Added signed byte optimizations for the 0x81/0x83 class
+of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
+when used as 'ADD reg16,imm' or 'ADD reg32,imm.'  Also
+optimization of signed byte form of 'PUSH imm' and 'IMUL
+reg,imm'/'IMUL reg,reg,imm.'  No size specification is needed.
+
+\b Added multi-pass JMP and Jcc offset optimization.  Offsets
+on forward references will preferentially use the short form,
+without the need to code a specific size (short or near) for
+the branch.  Added instructions for 'Jcc label' to use the
+form 'Jnotcc $+3/JMP label', in cases where a short offset
+is out of bounds.  If compiling for a 386 or higher CPU, then
+the 386 form of Jcc will be used instead.
+
+This feature is controlled by a new command-line switch: "O",
+(upper case letter O).  "-O0" reverts the assembler to no
+extra optimization passes, "-O1" allows up to 5 extra passes,
+and "-O2"(default), allows up to 10 extra optimization passes.
+
+\b Added a new directive:  'cpu XXX', where XXX is any of: 
+8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
+Katmai.  All are case insensitive.  All instructions will
+be selected only if they apply to the selected cpu or lower.
+Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
+
+\b Added to 'standard.mac', the "use16" and "use32" forms of
+the "bits 16/32" directive. This is nothing new, just conforms
+to a lot of other assemblers. (minor)
+
+\b Changed label allocation from 320/32 (10000 labels @ 200K+) 
+to 32/37 (1000 labels); makes running under DOS much easier.
+Since additional label space is allocated dynamically, this
+should have no effect on large programs with lots of labels.
+The 37 is a prime, believed to be better for hashing. (minor)
+
+
+\S{cl-0.98.03} Version 0.98.03
+
+"Integrated patchfile 0.98-0.98.01.  I call this version 0.98.03 for
+historical reasons: 0.98.02 was trashed." --John Coffman
+<johninsd@san.rr.com>, 27-Jul-2000
+
+\b Kendall Bennett's SciTech MGL changes
+
+\b Note that you must define "TASM_COMPAT" at compile-time
+to get the Tasm Ideal Mode compatibility.
+
+\b All changes can be compiled in and out using the TASM_COMPAT macros,
+and when compiled without TASM_COMPAT defined we get the exact same
+binary as the unmodified 0.98 sources.
+
+\b standard.mac, macros.c: Added macros to ignore TASM directives before
+first include
+
+\b nasm.h: Added extern declaration for tasm_compatible_mode
+
+\b nasm.c: Added global variable tasm_compatible_mode
+
+\b Added command line switch for TASM compatible mode (-t)
+
+\b Changed version command line to reflect when compiled with TASM additions
+
+\b Added response file processing to allow all arguments on a single
+line (response file is @resp rather than -@resp for NASM format).
+
+\b labels.c: Changes islocal() macro to support TASM style @@local labels.
+
+\b Added islocalchar() macro to support TASM style @@local labels.
+
+\b parser.c: Added support for TASM style memory references (ie: mov
+[DWORD eax],10 rather than the NASM style mov DWORD [eax],10).
+
+\b preproc.c: Added new directives, %arg, %local, %stacksize to directives
+table
+
+\b Added support for TASM style directives without a leading % symbol.
+
+\b Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
+
+\b A new keyword %xdefine and its case-insensitive counterpart %ixdefine.
+They work almost the same way as %define and %idefine but expand
+the definition immediately, not on the invocation. Something like a cross
+between %define and %assign. The "x" suffix stands for "eXpand", so
+"xdefine" can be deciphered as "expand-and-define". Thus you can do
+things like this:
+
+\c      %assign ofs     0
+\c
+\c      %macro  arg     1
+\c              %xdefine %1 dword [esp+ofs]
+\c              %assign ofs ofs+4
+\c      %endmacro
+
+\b Changed the place where the expansion of %$name macros are expanded.
+Now they are converted into ..@ctxnum.name form when detokenizing, so
+there are no quirks as before when using %$name arguments to macros,
+in macros etc. For example:
+
+\c      %macro  abc     1
+\c              %define %1 hello
+\c      %endm
+\c
+\c      abc     %$here
+\c      %$here
+
+    Now last line will be expanded into "hello" as expected. This also allows
+    for lots of goodies, a good example are extended "proc" macros included
+    in this archive.
+
+\b Added a check for "cstk" in smacro_defined() before calling get_ctx() -
+    this allows for things like:
+
+\c      %ifdef %$abc
+\c      %endif
+
+    to work without warnings even in no context.
+
+\b Added a check for "cstk" in %if*ctx and %elif*ctx directives -
+    this allows to use %ifctx without excessive warnings. If there is
+    no active context, %ifctx goes through "false" branch.
+
+\b Removed "user error: " prefix with %error directive: it just clobbers the
+    output and has absolutely no functionality. Besides, this allows to write
+    macros that does not differ from built-in functions in any way.
+
+\b Added expansion of string that is output by %error directive. Now you
+    can do things like:
+
+\c      %define hello(x) Hello, x!
+\c
+\c      %define %$name andy
+\c      %error "hello(%$name)"
+
+    Same happened with %include directive.
+
+\b Now all directives that expect an identifier will try to expand and
+    concatenate everything without whitespaces in between before usage.
+    For example, with "unfixed" nasm the commands
+
+\c      %define %$abc hello
+\c      %define __%$abc goodbye
+\c      __%$abc
+
+    would produce "incorrect" output: last line will expand to
+
+\c      hello goodbyehello
+
+    Not quite what you expected, eh? :-) The answer is that preprocessor
+    treats the %define construct as if it would be
+
+\c      %define __ %$abc goodbye
+
+    (note the white space between __ and %$abc). After my "fix" it
+    will "correctly" expand into
+
+\c      goodbye
+
+    as expected. Note that I use quotes around words "correct", "incorrect"
+    etc because this is rather a feature not a bug; however current behaviour
+    is more logical (and allows more advanced macro usage :-).
+
+    Same change was applied to:
+        %push,%macro,%imacro,%define,%idefine,%xdefine,%ixdefine,
+        %assign,%iassign,%undef
+
+\b A new directive [WARNING {+|-}warning-id] have been added. It works only
+    if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
+
+\b A new warning type: macro-selfref. By default this warning is disabled;
+    when enabled NASM warns when a macro self-references itself; for example
+    the following source:
+
+\c        [WARNING macro-selfref]
+\c
+\c        %macro          push    1-*
+\c                %rep    %0
+\c                        push    %1
+\c                        %rotate 1
+\c                %endrep
+\c        %endmacro
+\c
+\c                        push    eax,ebx,ecx
+
+    will produce a warning, but if we remove the first line we won't see it
+    anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
+    eats such constructs without warnings at all).
+
+\b Added a "error" routine to preprocessor which always will set ERR_PASS1
+    bit in severity_code. This removes annoying repeated errors on first
+    and second passes from preprocessor.
+
+\b Added the %+ operator in single-line macros for concatenating two
+    identifiers. Usage example:
+
+\c        %define _myfunc _otherfunc
+\c        %define cextern(x) _ %+ x
+\c        cextern (myfunc)
+
+    After first expansion, third line will become "_myfunc". After this
+    expansion is performed again so it becomes "_otherunc".
+
+\b Now if preprocessor is in a non-emitting state, no warning or error
+    will be emitted. Example:
+
+\c        %if 1
+\c                mov     eax,ebx
+\c        %else
+\c                put anything you want between these two brackets,
+\c                even macro-parameter references %1 or local
+\c                labels %$zz or macro-local labels %%zz - no
+\c                warning will be emitted.
+\c        %endif
+
+\b Context-local variables on expansion as a last resort are looked up
+    in outer contexts. For example, the following piece:
+
+\c        %push   outer
+\c        %define %$a [esp]
+\c
+\c                %push   inner
+\c                %$a
+\c                %pop
+\c        %pop
+
+    will expand correctly the fourth line to [esp]; if we'll define another
+    %$a inside the "inner" context, it will take precedence over outer
+    definition. However, this modification has been applied only to
+    expand_smacro and not to smacro_define: as a consequence expansion
+    looks in outer contexts, but %ifdef won't look in outer contexts.
+
+    This behaviour is needed because we don't want nested contexts to
+    act on already defined local macros. Example:
+
+\c        %define %$arg1  [esp+4]
+\c        test    eax,eax
+\c        if      nz
+\c                mov     eax,%$arg1
+\c        endif
+
+    In this example the "if" mmacro enters into the "if" context, so %$arg1
+    is not valid anymore inside "if". Of course it could be worked around
+    by using explicitely %$$arg1 but this is ugly IMHO.
+
+\b Fixed memory leak in %undef. The origline wasn't freed before
+    exiting on success.
+
+\b Fixed trap in preprocessor when line expanded to empty set of tokens.
+    This happens, for example, in the following case:
+
+\c        #define SOMETHING
+\c        SOMETHING
+
+
+\S{cl-0.98} Version 0.98
+
+All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
+
+\b The documentation comment delimiter is \# not #.
+
+\b Allow EQU definitions to refer to external labels; reported by
+  Pedro Gimeno.
+
+\b Re-enable support for RDOFF v1; reported by Pedro Gimeno.
+
+\b Updated License file per OK from Simon and Julian.
+
+
+\S{cl-0.98p9} Version 0.98p9
+
+\b Update documentation (although the instruction set reference will
+  have to wait; I don't want to hold up the 0.98 release for it.)
+
+\b Verified that the NASM implementation of the PEXTRW and PMOVMSKB
+  instructions is correct.  The encoding differs from what the Intel
+  manuals document, but the Pentium III behaviour matches NASM, not
+  the Intel manuals.
+
+\b Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
+  Stefan Hoffmeister.
+
+\b Resurrect the -s option, which was removed when changing the
+  diagnostic output to stdout.
+
+
+\S{cl-0.98p8} Version 0.98p8
+
+\b Fix for "DB" when NASM is running on a bigendian machine.
+
+\b Invoke insns.pl once for each output script, making Makefile.in
+  legal for "make -j".
+
+\b Improve the Unix configure-based makefiles to make package
+  creation easier.
+
+\b Included an RPM .spec file for building RPM (RedHat Package Manager)
+  packages on Linux or Unix systems.
+
+\b Fix Makefile dependency problems.
+
+\b Change src/rdsrc.pl to include sectioning information in info
+  output; required for install-info to work.
+
+\b Updated the RDOFF distribution to version 2 from Jules; minor
+  massaging to make it compile in my environment.
+
+\b Split doc files that can be built by anyone with a Perl interpreter off
+  into a separate archive.
+
+\b "Dress rehearsal" release!
+
+
+\S{cl-0.98p7} Version 0.98p7
+
+\b Fixed opcodes with a third byte-sized immediate argument to not
+  complain if given "byte" on the immediate.
+
+\b Allow %undef to remove single-line macros with arguments.  This
+  matches the behaviour of #undef in the C preprocessor.
+
+\b Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
+  compatibility with most C compilers and preprocessors.  This allows
+  Makefile options to be shared between cc and nasm, for example.
+
+\b Minor cleanups.
+
+\b Went through the list of Katmai instructions and hopefully fixed the
+  (rather few) mistakes in it.
+
+\b (Hopefully) fixed a number of disassembler bugs related to ambiguous
+  instructions (disambiguated by -p) and SSE instructions with REP.
+
+\b Fix for bug reported by Mark Junger: "call dword 0x12345678" should
+  work and may add an OSP (affected CALL, JMP, Jcc).
+
+\b Fix for environments when "stderr" isn't a compile-time constant.
+
+
+\S{cl-0.98p6} Version 0.98p6
+
+
+\b Took officially over coordination of the 0.98 release; so drop
+  the p3.x notation. Skipped p4 and p5 to avoid confusion with John
+  Fine's J4 and J5 releases.
+
+\b Update the documentation; however, it still doesn't include
+  documentation for the various new instructions.  I somehow wonder if
+  it makes sense to have an instruction set reference in the assembler
+  manual when Intel et al have PDF versions of their manuals online.
+
+\b Recognize "idt" or "centaur" for the -p option to ndisasm.
+
+\b Changed error messages back to stderr where they belong, but add an
+  -E option to redirect them elsewhere (the DOS shell cannot redirect
+  stderr.)
+
+\b -M option to generate Makefile dependencies (based on code from Alex
+  Verstak.)
+
+\b %undef preprocessor directive, and -u option, that undefines a
+  single-line macro.
+
+\b OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
+  Chuck Crayne.
+
+\b Various minor bugfixes (reported by):
+  - Dangling %s in preproc.c (Martin Junker)
+
+\b THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS.  I am
+  on a trip and didn't bring the Katmai instruction reference, so I
+  can't work on them right now.
+
+\b Updated the License file per agreement with Simon and Jules to
+  include a GPL distribution clause.
+
+
+\S{cl-0.98p3.7} Version 0.98p3.7
+
+\b (Hopefully) fixed the canned Makefiles to include the outrdf2 and
+  zoutieee modules.
+
+\b Renamed changes.asm to changed.asm.
+
+
+\S{cl-0.98p3.6} Version 0.98p3.6
+
+\b Fixed a bunch of instructions that were added in 0.98p3.5 which had
+  memory operands, and the address-size prefix was missing from the
+  instruction pattern.
+
+
+\S{cl-0.98p3.5} Version 0.98p3.5
+
+\b Merged in changes from John S. Fine's 0.98-J5 release.  John's based
+  0.98-J5 on my 0.98p3.3 release; this merges the changes.
+
+\b Expanded the instructions flag field to a long so we can fit more
+  flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
+  such.
+
+\b Fix the "PRIV" flag on a bunch of instructions, and create new
+  "PROT" flag for protected-mode-only instructions (orthogonal to if
+  the instruction is privileged!) and new "SMM" flag for SMM-only
+  instructions.
+
+\b Added AMD-only SYSCALL and SYSRET instructions.
+
+\b Make SSE actually work, and add new Katmai MMX instructions.
+
+\b Added a -p (preferred vendor) option to ndisasm so that it can
+  distinguish e.g. Cyrix opcodes also used in SSE.  For example:
+
+\c      ndisasm -p cyrix aliased.bin
+\c      00000000  670F514310        paddsiw mm0,[ebx+0x10]
+\c      00000005  670F514320        paddsiw mm0,[ebx+0x20]
+\c      ndisasm -p intel aliased.bin
+\c      00000000  670F514310        sqrtps xmm0,[ebx+0x10]
+\c      00000005  670F514320        sqrtps xmm0,[ebx+0x20]
+
+\b Added a bunch of Cyrix-specific instructions.
+
+
+\S{cl-0.98p3.4} Version 0.98p3.4
+
+\b Made at least an attempt to modify all the additional Makefiles (in
+  the Mkfiles directory).  I can't test it, but this was the best I
+  could do.
+
+\b DOS DJGPP+"Opus Make" Makefile from John S. Fine.
+
+\b changes.asm changes from John S. Fine.
+
+
+\S{cl-0.98p3.3} Version 0.98p3.3
+
+\b Patch from Conan Brink to allow nesting of %rep directives.
+
+\b If we're going to allow INT01 as an alias for INT1/ICEBP (one of
+  Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
+  as well.
+
+\b Updated changes.asm to include the latest changes.
+
+\b Tried to clean up the <CR>s that had snuck in from a DOS/Windows
+  environment into my Unix environment, and try to make sure than
+  DOS/Windows users get them back.
+
+\b We would silently generate broken tools if insns.dat wasn't sorted
+  properly.  Change insns.pl so that the order doesn't matter.
+
+\b Fix bug in insns.pl (introduced by me) which would cause conditional
+  instructions to have an extra "cc" in disassembly, e.g. "jnz"
+  disassembled as "jccnz".
+
+
+\S{cl-0.98p3.2} Version 0.98p3.2
+
+\b Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
+  http://www.csoft.net/cz/johnfine/
+
+\b Changed previous "spotless" Makefile target (appropriate for distribution)
+  to "distclean", and added "cleaner" target which is same as "clean"
+  except deletes files generated by Perl scripts; "spotless" is union.
+
+\b Removed BASIC programs from distribution.  Get a Perl interpreter
+  instead (see below.)
+
+\b Calling this "pre-release 3.2" rather than "p3-hpa2" because of
+  John's contributions.
+
+\b Actually link in the IEEE output format (zoutieee.c); fix a bunch of
+  compiler warnings in that file.  Note I don't know what IEEE output
+  is supposed to look like, so these changes were made "blind".
+
+
+\S{cl-0.98p3-hpa} Version 0.98p3-hpa
+
+\b Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
+  buildable version for Unix systems (Makefile.in updates, etc.)
+
+\b Changed insns.pl to create the instruction tables in nasm.h and
+  names.c, so that a new instruction can be added by adding it *only*
+  to insns.dat.
+
+\b Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
+  FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
+  guarantee will never be used; one of them is documented as UD2 in
+  Intel documentation, the other one just as "Undefined Opcode" --
+  calling it UD1 seemed to make sense.)
+
+\b MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
+  characters long.  Now MAX_SYMBOL is derived from insns.dat.
+
+\b A note on the BASIC programs included: forget them.  insns.bas is
+  already out of date.  Get yourself a Perl interpreter for your
+  platform of choice at
+  \W{http://www.cpan.org/ports/index.html}{http://www.cpan.org/ports/index.html}.
+
+
+\S{cl-0.98p3} Version 0.98 pre-release 3
+
+\b added response file support, improved command line handling, new layout
+help screen
+
+\b fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
+related bugs, updated Wishlist; 0.98 Prerelease 3.
+
+
+\S{cl-0.98p2} Version 0.98 pre-release 2
+
+\b fixed bug in outcoff.c to do with truncating section names longer
+than 8 characters, referencing beyond end of string; 0.98 pre-release 2
+
+
+\S{cl-0.98p1} Version 0.98 pre-release 1
+
+\b Fixed a bug whereby STRUC didn't work at all in RDF.
+
+\b Fixed a problem with group specification in PUBDEFs in OBJ.
+
+\b Improved ease of adding new output formats. Contribution due to
+Fox Cutter.
+
+\b Fixed a bug in relocations in the `bin' format: was showing up when
+a relocatable reference crossed an 8192-byte boundary in any output
+section.
+
+\b Fixed a bug in local labels: local-label lookups were inconsistent
+between passes one and two if an EQU occurred between the definition
+of a global label and the subsequent use of a local label local to
+that global.
+
+\b Fixed a seg-fault in the preprocessor (again) which happened when
+you use a blank line as the first line of a multi-line macro
+definition and then defined a label on the same line as a call to
+that macro.
+
+\b Fixed a stale-pointer bug in the handling of the NASM environment
+variable. Thanks to Thomas McWilliams.
+
+\b ELF had a hard limit on the number of sections which caused
+segfaults when transgressed. Fixed.
+
+\b Added ability for ndisasm to read from stdin by using `-' as the
+filename.
+
+\b ndisasm wasn't outputting the TO keyword. Fixed.
+
+\b Fixed error cascade on bogus expression in %if - an error in
+evaluation was causing the entire %if to be discarded, thus creating
+trouble later when the %else or %endif was encountered.
+
+\b Forward reference tracking was instruction-granular not operand-
+granular, which was causing 286-specific code to be generated
+needlessly on code of the form `shr word [forwardref],1'. Thanks to
+Jim Hague for sending a patch.
+
+\b All messages now appear on stdout, as sending them to stderr serves
+no useful purpose other than to make redirection difficult.
+
+\b Fixed the problem with EQUs pointing to an external symbol - this
+now generates an error message.
+
+\b Allowed multiple size prefixes to an operand, of which only the first
+is taken into account.
+
+\b Incorporated John Fine's changes, including fixes of a large number
+of preprocessor bugs, some small problems in OBJ, and a reworking of
+label handling to define labels before their line is assembled, rather
+than after.
+
+\b Reformatted a lot of the source code to be more readable. Included
+'coding.txt' as a guideline for how to format code for contributors.
+
+\b Stopped nested %reps causing a panic - they now cause a slightly more
+friendly error message instead.
+
+\b Fixed floating point constant problems (patch by Pedro Gimeno)
+
+\b Fixed the return value of insn_size() not being checked for -1, indicating
+an error.
+
+\b Incorporated 3Dnow! instructions.
+
+\b Fixed the 'mov eax, eax + ebx' bug.
+
+\b Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
+
+\b Incorporated John Fine's command line parsing changes
+
+\b Incorporated David Lindauer's OMF debug support
+
+\b Made changes for LCC 4.0 support (\c{__NASM_CDecl__}, removed register size
+specification warning when sizes agree).
+
+
+\H{cl-0.9x} NASM 0.9 Series
+
+Revisions before 0.98.
+
+
+\S{cl-0.97} Version 0.97 released December 1997
+
+\b This was entirely a bug-fix release to 0.96, which seems to have got
+cursed. Silly me.
+
+\b Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
+fail. Caused by an error in the `MOV EAX,<segment>' support.
+
+\b ndisasm hung at EOF when compiled with lcc on Linux because lcc on
+Linux somehow breaks feof(). ndisasm now does not rely on feof().
+
+\b A heading in the documentation was missing due to a markup error in
+the indexing. Fixed.
+
+\b Fixed failure to update all pointers on realloc() within extended-
+operand code in parser.c. Was causing wrong behaviour and seg faults
+on lines such as `dd 0.0,0.0,0.0,0.0,...'
+
+\b Fixed a subtle preprocessor bug whereby invoking one multi-line
+macro on the first line of the expansion of another, when the second
+had been invoked with a label defined before it, didn't expand the
+inner macro. 
+
+\b Added internal.doc back in to the distribution archives - it was
+missing in 0.96 *blush*
+
+\b Fixed bug causing 0.96 to be unable to assemble its own test files,
+specifically objtest.asm. *blush again*
+
+\b Fixed seg-faults and bogus error messages caused by mismatching
+%rep and %endrep within multi-line macro definitions.
+
+\b Fixed a problem with buffer overrun in OBJ, which was causing
+corruption at ends of long PUBDEF records.
+
+\b Separated DOS archives into main-program and documentation to reduce
+download size.
+
+
+\S{cl-0.96} Version 0.96 released November 1997
+
+\b Fixed a bug whereby, if `nasm sourcefile' would cause a filename
+collision warning and put output into `nasm.out', then `nasm
+sourcefile -o outputfile' still gave the warning even though the
+`-o' was honoured.
+Fixed name pollution under Digital UNIX: one of its header files
+defined R_SP, which broke the enum in nasm.h.
+
+\b Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
+two-operand forms; NDISASM didn't recognise the longer register
+forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
+flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
+size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
+undocumented because the Intel Architecture reference documents
+them.
+
+\b Fixed a problem with the local-label mechanism, whereby strange
+types of symbol (EQUs, auto-defined OBJ segment base symbols)
+interfered with the `previous global label' value and screwed up
+local labels.
+
+\b Fixed a bug whereby the stub preprocessor didn't communicate with
+the listing file generator, so that the -a and -l options in
+conjunction would produce a useless listing file.
+
+\b Merged `os2' object file format back into `obj', after discovering
+that `obj' _also_ shouldn't have a link pass separator in a module
+containing a non-trivial MODEND. Flat segments are now declared
+using the FLAT attribute. `os2' is no longer a valid object format
+name: use `obj'.
+
+\b Removed the fixed-size temporary storage in the evaluator. Very very
+long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
+so) should now no longer crash NASM.
+
+\b Fixed a bug involving segfaults on disassembly of MMX instructions,
+by changing the meaning of one of the operand-type flags in nasm.h.
+This may cause other apparently unrelated MMX problems; it needs to
+be tested thoroughly.
+
+\b Fixed some buffer overrun problems with large OBJ output files.
+Thanks to DJ Delorie for the bug report and fix.
+
+\b Made preprocess-only mode actually listen to the %line markers as it
+prints them, so that it can report errors more sanely.
+
+\b Re-designed the evaluator to keep more sensible track of expressions
+involving forward references: can now cope with previously-nightmare
+situations such as:
+
+\c   mov ax,foo | bar
+\c   foo equ 1
+\c   bar equ 2
+
+\b Added the ALIGN and ALIGNB standard macros.
+
+\b Added PIC support in ELF: use of WRT to obtain the four extra
+relocation types needed.
+
+\b Added the ability for output file formats to define their own
+extensions to the GLOBAL, COMMON and EXTERN directives.
+
+\b Implemented common-variable alignment, and global-symbol type and
+size declarations, in ELF.
+
+\b Implemented NEAR and FAR keywords for common variables, plus
+far-common element size specification, in OBJ.
+
+\b Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
+default WRT specification (either a segment or a group).
+
+\b Transformed the Unix NASM archive into an auto-configuring package.
+
+\b Added a sanity-check for people applying SEG to things which are
+already segment bases: this previously went unnoticed by the SEG
+processing and caused OBJ-driver panics later.
+
+\b Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
+type references: OBJ doesn't directly support dword-size segment
+base fixups, but as long as the low two bytes of the constant term
+are zero, a word-size fixup can be generated instead and it will
+work.
+
+\b Added the ability to specify sections' alignment requirements in
+Win32 object files and pure binary files.
+
+\b Added preprocess-time expression evaluation: the %assign (and
+%iassign) directive and the bare %if (and %elif) conditional. Added
+relational operators to the evaluator, for use only in %if
+constructs: the standard relationals = < > <= >= <> (and C-like
+synonyms == and !=) plus low-precedence logical operators &&, ^^ and
+||.
+
+\b Added a preprocessor repeat construct: %rep / %exitrep / %endrep.
+
+\b Added the __FILE__ and __LINE__ standard macros.
+
+\b Added a sanity check for number constants being greater than
+0xFFFFFFFF. The warning can be disabled.
+
+\b Added the %0 token whereby a variadic multi-line macro can tell how
+many parameters it's been given in a specific invocation.
+
+\b Added \c{%rotate}, allowing multi-line macro parameters to be cycled.
+
+\b Added the `*' option for the maximum parameter count on multi-line
+macros, allowing them to take arbitrarily many parameters.
+
+\b Added the ability for the user-level forms of EXTERN, GLOBAL and
+COMMON to take more than one argument.
+
+\b Added the IMPORT and EXPORT directives in OBJ format, to deal with
+Windows DLLs.
+
+\b Added some more preprocessor %if constructs: %ifidn / %ifidni (exact
+textual identity), and %ifid / %ifnum / %ifstr (token type testing).
+
+\b Added the ability to distinguish SHL AX,1 (the 8086 version) from
+SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
+be 1).
+
+\b Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
+with PIC shared library features.
+
+\b Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
+FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
+otherwise accepted standard. The previous behaviour, though it was a
+deliberate feature, was a deliberate feature based on a
+misunderstanding. Apologies for the inconvenience.
+
+\b Improved the flexibility of ABSOLUTE: you can now give it an
+expression rather than being restricted to a constant, and it can
+take relocatable arguments as well.
+
+\b Added the ability for a variable to be declared as EXTERN multiple
+times, and the subsequent definitions are just ignored.
+
+\b We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
+alone on a line (without a following instruction).
+
+\b Improved sanity checks on whether the arguments to EXTERN, GLOBAL
+and COMMON are valid identifiers.
+
+\b Added misc/exebin.mac to allow direct generation of .EXE files by
+hacking up an EXE header using DB and DW; also added test/binexe.asm
+to demonstrate the use of this. Thanks to Yann Guidon for
+contributing the EXE header code.
+
+\b ndisasm forgot to check whether the input file had been successfully
+opened. Now it does. Doh!
+
+\b Added the Cyrix extensions to the MMX instruction set.
+
+\b Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
+assembled differently. This is important since [ESI+EBP] and
+[EBP+ESI] have different default base segment registers.
+
+\b Added support for the PharLap OMF extension for 4096-byte segment
+alignment.
+
+
+\S{cl-0.95 released July 1997} Version 0.95 released July 1997
+
+\b Fixed yet another ELF bug. This one manifested if the user relied on
+the default segment, and attempted to define global symbols without
+first explicitly declaring the target segment.
+
+\b Added makefiles (for NASM and the RDF tools) to build Win32 console
+apps under Symantec C++. Donated by Mark Junker.
+
+\b Added `macros.bas' and `insns.bas', QBasic versions of the Perl
+scripts that convert `standard.mac' to `macros.c' and convert
+`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
+Junker.
+
+\b Changed the diassembled forms of the conditional instructions so
+that JB is now emitted as JC, and other similar changes. Suggested
+list by Ulrich Doewich.
+
+\b Added `@' to the list of valid characters to begin an identifier
+with.
+
+\b Documentary changes, notably the addition of the `Common Problems'
+section in nasm.doc.
+
+\b Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
+
+\b Fixed a bug in perm_copy() in labels.c which was causing exceptions
+in cleanup_labels() on some systems.
+
+\b Positivity sanity check in TIMES argument changed from a warning to
+an error following a further complaint.
+
+\b Changed the acceptable limits on byte and word operands to allow
+things like `~10111001b' to work.
+
+\b Fixed a major problem in the preprocessor which caused seg-faults if
+macro definitions contained blank lines or comment-only lines.
+
+\b Fixed inadequate error checking on the commas separating the
+arguments to `db', `dw' etc.
+
+\b Fixed a crippling bug in the handling of macros with operand counts
+defined with a `+' modifier.
+
+\b Fixed a bug whereby object file formats which stored the input file
+name in the output file (such as OBJ and COFF) weren't doing so
+correctly when the output file name was specified on the command
+line.
+
+\b Removed [INC] and [INCLUDE] support for good, since they were
+obsolete anyway.
+
+\b Fixed a bug in OBJ which caused all fixups to be output in 16-bit
+(old-format) FIXUPP records, rather than putting the 32-bit ones in
+FIXUPP32 (new-format) records.
+
+\b Added, tentatively, OS/2 object file support (as a minor variant on
+OBJ).
+
+\b Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
+
+\b Removed a spurious second fclose() on the output file.
+
+\b Added the `-s' command line option to redirect all messages which
+would go to stderr (errors, help text) to stdout instead.
+
+\b Added the `-w' command line option to selectively suppress some
+classes of assembly warning messages.
+
+\b Added the `-p' pre-include and `-d' pre-define command-line options.
+
+\b Added an include file search path: the `-i' command line option.
+
+\b Fixed a silly little preprocessor bug whereby starting a line with a
+`%!' environment-variable reference caused an `unknown directive'
+error.
+
+\b Added the long-awaited listing file support: the `-l' command line
+option.
+
+\b Fixed a problem with OBJ format whereby, in the absence of any
+explicit segment definition, non-global symbols declared in the
+implicit default segment generated spurious EXTDEF records in the
+output.
+
+\b Added the NASM environment variable.
+
+\b From this version forward, Win32 console-mode binaries will be
+included in the DOS distribution in addition to the 16-bit binaries.
+Added Makefile.vc for this purpose.
+
+\b Added `return 0;' to test/objlink.c to prevent compiler warnings.
+
+\b Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
+
+\b Added an alternative memory-reference syntax in which prefixing an
+operand with `&' is equivalent to enclosing it in square brackets,
+at the request of Fox Cutter.
+
+\b Errors in pass two now cause the program to return a non-zero error
+code, which they didn't before.
+
+\b Fixed the single-line macro cycle detection, which didn't work at
+all on macros with no parameters (caused an infinite loop). Also
+changed the behaviour of single-line macro cycle detection to work
+like cpp, so that macros like `extrn' as given in the documentation
+can be implemented.
+
+\b Fixed the implementation of WRT, which was too restrictive in that
+you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
+a relocatable reference.
+
+
+\S{cl-0.94 released April 1997} Version 0.94 released April 1997
+
+
+\b Major item: added the macro processor.
+
+\b Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
+reorganised CMPXCHG instruction into early-486 and Pentium forms.
+Thanks to Thobias Jones for the information.
+
+\b Fixed two more stupid bugs in ELF, which were causing `ld' to
+continue to seg-fault in a lot of non-trivial cases.
+
+\b Fixed a seg-fault in the label manager.
+
+\b Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
+the only option for BCD loads/stores in any case.
+
+\b Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
+anyone bothers to provide it. Previously they complained unless no
+keyword at all was present.
+
+\b Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
+vestige of a bug that I thought had been fixed in 0.92. This was
+fixed, hopefully for good this time...
+
+\b Another minor phase error (insofar as a phase error can _ever_ be
+minor) fixed, this one occurring in code of the form
+
+\c   rol ax,forward_reference
+\c   forward_reference equ 1
+
+\b The number supplied to TIMES is now sanity-checked for positivity,
+and also may be greater than 64K (which previously didn't work on
+16-bit systems).
+
+\b Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
+
+\b Added the INCBIN pseudo-opcode.
+
+\b Due to the advent of the preprocessor, the [INCLUDE] and [INC]
+directives have become obsolete. They are still supported in this
+version, with a warning, but won't be in the next.
+
+\b Fixed a bug in OBJ format, which caused incorrect object records to
+be output when absolute labels were made global.
+
+\b Updates to RDOFF subdirectory, and changes to outrdf.c.
+
+
+\S{cl-0.93 released January 1997} Version 0.93 released January 1997
+
+This release went out in a great hurry after semi-crippling bugs
+were found in 0.92.
+
+\b Really \e{did} fix the stack overflows this time. *blush*
+
+\b Had problems with EA instruction sizes changing between passes, when
+an offset contained a forward reference and so 4 bytes were
+allocated for the offset in pass one; by pass two the symbol had
+been defined and happened to be a small absolute value, so only 1
+byte got allocated, causing instruction size mismatch between passes
+and hence incorrect address calculations. Fixed.
+
+\b Stupid bug in the revised ELF section generation fixed (associated
+string-table section for .symtab was hard-coded as 7, even when this
+didn't fit with the real section table). Was causing `ld' to
+seg-fault under Linux.
+
+\b Included a new Borland C makefile, Makefile.bc2, donated by Fox
+Cutter <lmb@comtch.iea.com>.
+
+
+\S{cl-0.92 released January 1997} Version 0.92 released January 1997
+
+\b The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
+fixed. This also affected the LCC driver.
+
+\b Fixed a bug regarding 32-bit effective addresses of the form
+\c{[other_register+ESP]}.
+
+\b Documentary changes, notably documentation of the fact that Borland
+Win32 compilers use `obj' rather than `win32' object format.
+
+\b Fixed the COMENT record in OBJ files, which was formatted
+incorrectly.
+
+\b Fixed a bug causing segfaults in large RDF files.
+
+\b OBJ format now strips initial periods from segment and group
+definitions, in order to avoid complications with the local label
+syntax.
+
+\b Fixed a bug in disassembling far calls and jumps in NDISASM.
+
+\b Added support for user-defined sections in COFF and ELF files.
+
+\b Compiled the DOS binaries with a sensible amount of stack, to
+prevent stack overflows on any arithmetic expression containing
+parentheses.
+
+\b Fixed a bug in handling of files that do not terminate in a newline.
+
+
+\S{cl-0.91 released November 1996} Version 0.91 released November 1996
+
+\b Loads of bug fixes.
+
+\b Support for RDF added.
+
+\b Support for DBG debugging format added.
+
+\b Support for 32-bit extensions to Microsoft OBJ format added.
+
+\b Revised for Borland C: some variable names changed, makefile added.
+
+\b LCC support revised to actually work.
+
+\b JMP/CALL NEAR/FAR notation added.
+
+\b `a16', `o16', `a32' and `o32' prefixes added.
+
+\b Range checking on short jumps implemented.
+
+\b MMX instruction support added.
+
+\b Negative floating point constant support added.
+
+\b Memory handling improved to bypass 64K barrier under DOS.
+
+\b \c{$} prefix to force treatment of reserved words as identifiers added.
+
+\b Default-size mechanism for object formats added.
+
+\b Compile-time configurability added.
+
+\b \c{#}, \c{@}, \c{~} and c\{?} are now valid characters in labels.
+
+\b \c{-e} and \c{-k} options in NDISASM added.
+
+
+\S{cl-0.90 released October 1996} Version 0.90 released October 1996
+
+First release version. First support for object file output. Other
+changes from previous version (0.3x) too numerous to document.
index bd1a4b9..f75588d 100644 (file)
@@ -7607,3 +7607,7 @@ column shows the processor type in which the instruction was introduced and,
 
 \& inslist.src
 
+\A{changelog} \i{NASM Version History}
+
+\& changes.src
+