doc: document imm64 optimization
[platform/upstream/nasm.git] / doc / changes.src
1 \#
2 \# NASM revision history in nasmdoc format
3 \#
4
5 \H{cl-2.xx} NASM 2 Series
6
7 The NASM 2 series support x86-64, and is the production version of NASM
8 since 2007.
9
10 \S{cl-2.10} Version 2.10
11
12 \b When optimization is enabled, \c{mov r64,imm} now optimizes to the
13   shortest form possible between:
14
15 \c      mov r32,imm32                   ;  5 bytes
16 \c      mov r64,imm32                   ;  7 bytes
17 \c      mov r64,imm64                   ; 10 bytes
18
19
20 \S{cl-2.09} Version 2.09
21
22 \b Fixed assignment the magnitude of \c{%rep} counter. It is limited
23   to 62 bits now.
24
25 \b Fixed NULL dereference if argument of \c{%strlen} resolves
26   to whitespace. For example if nonexistent macro parameter is used.
27
28 \b \c{%ifenv}, \c{%elifenv}, \c{%ifnenv}, and \c{%elifnenv} directives
29   introduced.  See \k{ifenv}.
30
31 \b Fixed NULL dereference if environment variable is missed.
32
33 \b Updates of new AVX v7 Intel instructions.
34
35 \b \c{PUSH imm32} is now officially documented.
36
37 \b Fix for encoding the LFS, LGS and LSS in 64-bit mode.
38
39 \b Fixes for compatibility with OpenWatcom compiler and DOS 8.3 file
40   format limitation.
41
42 \b Macros parameters range expansion introduced. See \k{mlmacrange}.
43
44 \b Backward compatibility on expanging of local sigle macros restored.
45
46 \b 8 bit relocations for \c{elf} and \c{bin} output formats are introduced.
47
48 \b Short intersegment jumps are permitted now.
49
50 \b An alignment more than 64 bytes are allowed for \c{win32},
51   \c{win64} output formats.
52
53 \b \c{SECTALIGN} directive introduced. See \k{sectalign}.
54
55 \b \c{nojmp} option introduced in \c{smartalign} package. See
56   \k{pkg_smartalign}.
57
58 \b Short aliases \c{win}, \c{elf} and \c{macho} for output formats are
59   introduced.  Each stands for \c{win32}, \c{elf32} and \c{macho32}
60   accordingly.
61
62 \b Faster handling of missing directives implemented.
63
64 \b Various small improvements in documentation.
65
66 \b No hang anymore if unable to open malloc.log file.
67
68 \b The environments without vsnprintf function are able to build nasm again.
69
70 \b AMD LWP instructions updated.
71
72 \b Tighten EA checks. We warn a user if there overflow in EA addressing.
73
74 \b Make \c{-Ox} the default optimization level.  For the legacy
75   behavior, specify \c{-O0} explicitly.  See \k{opt-O}.
76
77 \b Environment variables read with \c{%!} or tested with \c{%ifenv}
78   can now contain non-identifier characters if surrounded by quotes.
79   See \k{getenv}.
80
81 \b Add a new standard macro package \c{%use fp} for floating-point
82   convenience macros.  See \k{pkg_fp}.
83
84
85 \S{cl-2.08.02} Version 2.08.02
86
87 \b Fix crash under certain circumstances when using the \c{%+} operator.
88
89
90 \S{cl-2.08.01} Version 2.08.01
91
92 \b Fix the \c{%use} statement, which was broken in 2.08.
93
94
95 \S{cl-2.08} Version 2.08
96
97 \b A number of enhancements/fixes in macros area.
98
99 \#\b Support for arbitrarily terminating macro expansions \c{%exitmacro}.
100 \#  See \k{exitmacro}.
101
102 \#\b Support for recursive macro expansion \c{%rmacro}/\c{%irmacro}.
103 \#  See \k{mlrmacro}.
104
105 \b Support for converting strings to tokens.  See \k{deftok}.
106
107 \b Fuzzy operand size logic introduced.
108
109 \b Fix COFF stack overrun on too long export identifiers.
110
111 \b Fix Macho-O alignment bug.
112
113 \b Fix crashes with -fwin32 on file with many exports.
114
115 \b Fix stack overrun for too long [DEBUG id].
116
117 \b Fix incorrect sbyte usage in IMUL (hit only if optimization
118   flag passed).
119
120 \b Append ending token for \c{.stabs} records in the ELF output format.
121
122 \b New NSIS script which uses ModernUI and MultiUser approach.
123
124 \b Visual Studio 2008 NASM integration (rules file).
125
126 \b Warn a user if a constant is too long (and as result will be stripped).
127
128 \b The obsoleted pre-XOP AMD SSE5 instruction set which was never actualized
129   was removed.
130
131 \b Fix stack overrun on too long error file name passed from the command line.
132
133 \b Bind symbols to the .text section by default (ie in case if SECTION
134   directive was omitted) in the ELF output format.
135
136 \b Fix sync points array index wrapping.
137
138 \b A few fixes for FMA4 and XOP instruction templates.
139
140 \b Add AMD Lightweight Profiling (LWP) instructions.
141
142 \b Fix the offset for \c{%arg} in 64-bit mode.
143
144 \b An undefined local macro (\c{%$}) no longer matches a global macro
145   with the same name.
146
147 \b Fix NULL dereference on too long local labels.
148
149
150 \S{cl-2.07} Version 2.07
151
152 \b NASM is now under the 2-clause BSD license.  See \k{legal}.
153
154 \b Fix the section type for the \c{.strtab} section in the \c{elf64}
155   output format.
156
157 \b Fix the handling of \c{COMMON} directives in the \c{obj} output format.
158
159 \b New \c{ith} and \c{srec} output formats; these are variants of the
160   \c{bin} output format which output Intel hex and Motorola S-records,
161   respectively.  See \k{ithfmt} and \k{srecfmt}.
162
163 \b \c{rdf2ihx} replaced with an enhanced \c{rdf2bin}, which can output
164   binary, COM, Intel hex or Motorola S-records.
165
166 \b The Windows installer now puts the NASM directory first in the
167   \c{PATH} of the "NASM Shell".
168
169 \b Revert the early expansion behavior of \c{%+} to pre-2.06 behavior:
170   \c{%+} is only expanded late.
171
172 \b Yet another Mach-O alignment fix.
173
174 \b Don't delete the list file on errors.  Also, include error and
175   warning information in the list file.
176
177 \b Support for 64-bit Mach-O output, see \k{machofmt}.
178
179 \b Fix assert failure on certain operations that involve strings with
180   high-bit bytes.
181
182
183 \S{cl-2.06} Version 2.06
184
185 \b This release is dedicated to the memory of Charles A. Crayne, long
186   time NASM developer as well as moderator of \c{comp.lang.asm.x86} and
187   author of the book \e{Serious Assembler}.  We miss you, Chuck.
188
189 \b Support for indirect macro expansion (\c{%[...]}).  See \k{indmacro}.
190
191 \b \c{%pop} can now take an argument, see \k{pushpop}.
192
193 \b The argument to \c{%use} is no longer macro-expanded.  Use
194   \c{%[...]} if macro expansion is desired.
195
196 \b Support for thread-local storage in ELF32 and ELF64.  See \k{elftls}.
197
198 \b Fix crash on \c{%ifmacro} without an argument.
199
200 \b Correct the arguments to the \c{POPCNT} instruction.
201
202 \b Fix section alignment in the Mach-O format.
203
204 \b Update AVX support to version 5 of the Intel specification.
205
206 \b Fix the handling of accesses to context-local macros from higher
207   levels in the context stack.
208
209 \b Treat \c{WAIT} as a prefix rather than as an instruction, thereby
210   allowing constructs like \c{O16 FSAVE} to work correctly.
211
212 \b Support for structures with a non-zero base offset. See \k{struc}.
213
214 \b Correctly handle preprocessor token concatenation (see \k{concat})
215    involving floating-point numbers.
216
217 \b The \c{PINSR} series of instructions have been corrected and
218    rationalized.
219
220 \b Removed AMD SSE5, replaced with the new XOP/FMA4/CVT16 (rev 3.03)
221    spec.
222
223 \b The ELF backends no longer automatically generate a \c{.comment} section.
224
225 \b Add additional "well-known" ELF sections with default attributes.  See
226    \k{elfsect}.
227
228
229 \S{cl-2.05.01} Version 2.05.01
230
231 \b Fix the \c{-w}/\c{-W} option parsing, which was broken in NASM 2.05.
232
233
234 \S{cl-2.05} Version 2.05
235
236 \b Fix redundant REX.W prefix on \c{JMP reg64}.
237
238 \b Make the behaviour of \c{-O0} match NASM 0.98 legacy behavior.
239   See \k{opt-O}.
240
241 \b \c{-w-user} can be used to suppress the output of \c{%warning} directives.
242   See \k{opt-w}.
243
244 \b Fix bug where \c{ALIGN} would issue a full alignment datum instead of
245   zero bytes.
246
247 \b Fix offsets in list files.
248
249 \b Fix \c{%include} inside multi-line macros or loops.
250
251 \b Fix error where NASM would generate a spurious warning on valid
252   optimizations of immediate values.
253
254 \b Fix arguments to a number of the \c{CVT} SSE instructions.
255
256 \b Fix RIP-relative offsets when the instruction carries an immediate.
257
258 \b Massive overhaul of the ELF64 backend for spec compliance.
259
260 \b Fix the Geode \c{PFRCPV} and \c{PFRSQRTV} instruction.
261
262 \b Fix the SSE 4.2 \c{CRC32} instruction.
263
264
265 \S{cl-2.04} Version 2.04
266
267 \b Sanitize macro handing in the \c{%error} directive.
268
269 \b New \c{%warning} directive to issue user-controlled warnings.
270
271 \b \c{%error} directives are now deferred to the final assembly phase.
272
273 \b New \c{%fatal} directive to immediately terminate assembly.
274
275 \b New \c{%strcat} directive to join quoted strings together.
276
277 \b New \c{%use} macro directive to support standard macro directives.  See
278   \k{use}.
279
280 \b Excess default parameters to \c{%macro} now issues a warning by default.
281   See \k{mlmacro}.
282
283 \b Fix \c{%ifn} and \c{%elifn}.
284
285 \b Fix nested \c{%else} clauses.
286
287 \b Correct the handling of nested \c{%rep}s.
288
289 \b New \c{%unmacro} directive to undeclare a multi-line macro.
290   See \k{unmacro}.
291
292 \b Builtin macro \c{__PASS__} which expands to the current assembly pass.
293   See \k{pass_macro}.
294
295 \b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32
296   strings.  See \k{unicode}.
297
298 \b Fix bug in case-insensitive matching when compiled on platforms that
299   don't use the \c{configure} script.  Of the official release binaries,
300   that only affected the OS/2 binary.
301
302 \b Support for x87 packed BCD constants.  See \k{bcdconst}.
303
304 \b Correct the \c{LTR} and \c{SLDT} instructions in 64-bit mode.
305
306 \b Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
307
308 \b Add AVX versions of the AES instructions (\c{VAES}...).
309
310 \b Fix the 256-bit FMA instructions.
311
312 \b Add 256-bit AVX stores per the latest AVX spec.
313
314 \b VIA XCRYPT instructions can now be written either with or without
315   \c{REP}, apparently different versions of the VIA spec wrote them
316   differently.
317
318 \b Add missing 64-bit \c{MOVNTI} instruction.
319
320 \b Fix the operand size of \c{VMREAD} and \c{VMWRITE}.
321
322 \b Numerous bug fixes, especially to the AES, AVX and VTX instructions.
323
324 \b The optimizer now always runs until it converges.  It also runs even
325   when disabled, but doesn't optimize.  This allows most forward references
326   to be resolved properly.
327
328 \b \c{%push} no longer needs a context identifier; omitting the context
329   identifier results in an anonymous context.
330
331
332 \S{cl-2.03.01} Version 2.03.01
333
334 \b Fix buffer overflow in the listing module.
335
336 \b Fix the handling of hexadecimal escape codes in `...` strings.
337
338 \b The Postscript/PDF documentation has been reformatted.
339
340 \b The \c{-F} option now implies \c{-g}.
341
342
343 \S{cl-2.03} Version 2.03
344
345 \b Add support for Intel AVX, CLMUL and FMA instructions,
346 including YMM registers.
347
348 \b \c{dy}, \c{resy} and \c{yword} for 32-byte operands.
349
350 \b Fix some SSE5 instructions.
351
352 \b Intel \c{INVEPT}, \c{INVVPID} and \c{MOVBE} instructions.
353
354 \b Fix checking for critical expressions when the optimizer is enabled.
355
356 \b Support the DWARF debugging format for ELF targets.
357
358 \b Fix optimizations of signed bytes.
359
360 \b Fix operation on bigendian machines.
361
362 \b Fix buffer overflow in the preprocessor.
363
364 \b \c{SAFESEH} support for Win32, \c{IMAGEREL} for Win64 (SEH).
365
366 \b \c{%?} and \c{%??} to refer to the name of a macro itself.  In particular,
367 \c{%idefine keyword $%?} can be used to make a keyword "disappear".
368
369 \b New options for dependency generation: \c{-MD}, \c{-MF},
370 \c{-MP}, \c{-MT}, \c{-MQ}.
371
372 \b New preprocessor directives \c{%pathsearch} and \c{%depend}; INCBIN
373 reimplemented as a macro.
374
375 \b \c{%include} now resolves macros in a sane manner.
376
377 \b \c{%substr} can now be used to get other than one-character substrings.
378
379 \b New type of character/string constants, using backquotes (\c{`...`}),
380 which support C-style escape sequences.
381
382 \b \c{%defstr} and \c{%idefstr} to stringize macro definitions before
383 creation.
384
385 \b Fix forward references used in \c{EQU} statements.
386
387
388 \S{cl-2.02} Version 2.02
389
390 \b Additional fixes for MMX operands with explicit \c{qword}, as well as
391   (hopefully) SSE operands with \c{oword}.
392
393 \b Fix handling of truncated strings with \c{DO}.
394
395 \b Fix segfaults due to memory overwrites when floating-point constants
396   were used.
397
398 \b Fix segfaults due to missing include files.
399
400 \b Fix OpenWatcom Makefiles for DOS and OS/2.
401
402 \b Add autogenerated instruction list back into the documentation.
403
404 \b ELF: Fix segfault when generating stabs, and no symbols have been
405   defined.
406
407 \b ELF: Experimental support for DWARF debugging information.
408
409 \b New compile date and time standard macros.
410
411 \b \c{%ifnum} now returns true for negative numbers.
412
413 \b New \c{%iftoken} test for a single token.
414
415 \b New \c{%ifempty} test for empty expansion.
416
417 \b Add support for the \c{XSAVE} instruction group.
418
419 \b Makefile for Netware/gcc.
420
421 \b Fix issue with some warnings getting emitted way too many times.
422
423 \b Autogenerated instruction list added to the documentation.
424
425
426 \S{cl-2.01} Version 2.01
427
428 \b Fix the handling of MMX registers with explicit \c{qword} tags on
429   memory (broken in 2.00 due to 64-bit changes.)
430
431 \b Fix the PREFETCH instructions.
432
433 \b Fix the documentation.
434
435 \b Fix debugging info when using \c{-f elf}
436 (backwards compatibility alias for \c{-f elf32}).
437
438 \b Man pages for rdoff tools (from the Debian project.)
439
440 \b ELF: handle large numbers of sections.
441
442 \b Fix corrupt output when the optimizer runs out of passes.
443
444
445 \S{cl-2.00} Version 2.00
446
447 \b Added c99 data-type compliance.
448
449 \b Added general x86-64 support.
450
451 \b Added win64 (x86-64 COFF) output format.
452
453 \b Added \c{__BITS__} standard macro.
454
455 \b Renamed the \c{elf} output format to \c{elf32} for clarity.
456
457 \b Added \c{elf64} and \c{macho} (MacOS X) output formats.
458
459 \b Added Numeric constants in \c{dq} directive.
460
461 \b Added \c{oword}, \c{do} and \c{reso} pseudo operands.
462
463 \b Allow underscores in numbers.
464
465 \b Added 8-, 16- and 128-bit floating-point formats.
466
467 \b Added binary, octal and hexadecimal floating-point.
468
469 \b Correct the generation of floating-point constants.
470
471 \b Added floating-point option control.
472
473 \b Added Infinity and NaN floating point support.
474
475 \b Added ELF Symbol Visibility support.
476
477 \b Added setting OSABI value in ELF header directive.
478
479 \b Added Generate Makefile Dependencies option.
480
481 \b Added Unlimited Optimization Passes option.
482
483 \b Added \c{%IFN} and \c{%ELIFN} support.
484
485 \b Added Logical Negation Operator.
486
487 \b Enhanced Stack Relative Preprocessor Directives.
488
489 \b Enhanced ELF Debug Formats.
490
491 \b Enhanced Send Errors to a File option.
492
493 \b Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
494
495 \b Added a large number of additional instructions.
496
497 \b Significant performance improvements.
498
499 \b \c{-w+warning} and \c{-w-warning} can now be written as -Wwarning and
500  -Wno-warning, respectively.  See \k{opt-w}.
501
502 \b Add \c{-w+error} to treat warnings as errors.  See \k{opt-w}.
503
504 \b Add \c{-w+all} and \c{-w-all} to enable or disable all suppressible
505  warnings.  See \k{opt-w}.
506
507
508 \H{cl-0.98.xx} NASM 0.98 Series
509
510 The 0.98 series was the production versions of NASM from 1999 to 2007.
511
512
513 \S{cl-0.98.39} Version 0.98.39
514
515 \b fix buffer overflow
516
517 \b fix outas86's \c{.bss} handling
518
519 \b "make spotless" no longer deletes config.h.in.
520
521 \b \c{%(el)if(n)idn} insensitivity to string quotes difference (#809300).
522
523 \b (nasm.c)\c{__OUTPUT_FORMAT__} changed to string value instead of symbol.
524
525 \S{cl-0.98.38} Version 0.98.38
526
527
528 \b Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
529   \c{mkdep.pl} to be able to generate completely pathless dependencies, as
530   required by OpenWatcom wmake (it supports path searches, but not
531   explicit paths.)
532
533 \b Fix the \c{STR} instruction.
534
535 \b Fix the ELF output format, which was broken under certain
536   circumstances due to the addition of stabs support.
537
538 \b Quick-fix Borland format debug-info for \c{-f obj}
539
540 \b Fix for \c{%rep} with no arguments (#560568)
541
542 \b Fix concatenation of preprocessor function call (#794686)
543
544 \b Fix long label causes coredump (#677841)
545
546 \b Use autoheader as well as autoconf to keep configure from generating
547   ridiculously long command lines.
548
549 \b Make sure that all of the formats which support debugging output
550   actually will suppress debugging output when \c{-g} not specified.
551
552 \S{cl-0.98.37} Version 0.98.37
553
554
555 \b Paths given in \c{-I} switch searched for \c{incbin}-ed as
556   well as \c{%include}-ed files.
557
558 \b Added stabs debugging for the ELF output format, patch from
559   Martin Wawro.
560
561 \b Fix \c{output/outbin.c} to allow origin > 80000000h.
562
563 \b Make \c{-U} switch work.
564
565 \b Fix the use of relative offsets with explicit prefixes, e.g.
566 \c{a32 loop foo}.
567
568 \b Remove \c{backslash()}.
569
570 \b Fix the \c{SMSW} and \c{SLDT} instructions.
571
572 \b \c{-O2} and \c{-O3} are no longer aliases for \c{-O10} and \c{-O15}.
573 If you mean the latter, please say so! :)
574
575 \S{cl-0.98.36} Version 0.98.36
576
577
578 \b Update rdoff - librarian/archiver - common rec - docs!
579
580 \b Fix signed/unsigned problems.
581
582 \b Fix \c{JMP FAR label} and \c{CALL FAR label}.
583
584 \b Add new multisection support - map files - fix align bug
585
586 \b Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
587
588 \b \c{Q} or \c{O} suffixes indicate octal
589
590 \b Support Prescott new instructions (PNI).
591
592 \b Cyrix \c{XSTORE} instruction.
593
594
595 \S{cl-0.98.35} Version 0.98.35
596
597 \b Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
598
599 \b Fix dependencies and compiler warnings.
600
601 \b Add "const" in a number of places.
602
603 \b Add -X option to specify error reporting format (use -Xvc to
604   integrate with Microsoft Visual Studio.)
605
606 \b Minor changes for code legibility.
607
608 \b Drop use of tmpnam() in rdoff (security fix.)
609
610
611 \S{cl-0.98.34} Version 0.98.34
612
613 \b Correct additional address-size vs. operand-size confusions.
614
615 \b Generate dependencies for all Makefiles automatically.
616
617 \b Add support for unimplemented (but theoretically available)
618   registers such as tr0 and cr5.  Segment registers 6 and 7 are called
619   segr6 and segr7 for the operations which they can be represented.
620
621 \b Correct some disassembler bugs related to redundant address-size prefixes.
622   Some work still remains in this area.
623
624 \b Correctly generate an error for things like "SEG eax".
625
626 \b Add the JMPE instruction, enabled by "CPU IA64".
627
628 \b Correct compilation on newer gcc/glibc platforms.
629
630 \b Issue an error on things like "jmp far eax".
631
632
633 \S{cl-0.98.33} Version 0.98.33
634
635 \b New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
636   round out the version-query macros.  version.pl now understands
637   X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
638   X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
639
640 \b New keyword "strict" to disable the optimization of specific
641   operands.
642
643 \b Fix the handing of size overrides with JMP instructions
644   (instructions such as "jmp dword foo".)
645
646 \b Fix the handling of "ABSOLUTE label", where "label" points into a
647   relocatable segment.
648
649 \b Fix OBJ output format with lots of externs.
650
651 \b More documentation updates.
652
653 \b Add -Ov option to get verbose information about optimizations.
654
655 \b Undo a braindead change which broke \c{%elif} directives.
656
657 \b Makefile updates.
658
659
660 \S{cl-0.98.32} Version 0.98.32
661
662 \b Fix NASM crashing when \c{%macro} directives were left unterminated.
663
664 \b Lots of documentation updates.
665
666 \b Complete rewrite of the PostScript/PDF documentation generator.
667
668 \b The MS Visual C++ Makefile was updated and corrected.
669
670 \b Recognize .rodata as a standard section name in ELF.
671
672 \b Fix some obsolete Perl4-isms in Perl scripts.
673
674 \b Fix configure.in to work with autoconf 2.5x.
675
676 \b Fix a couple of "make cleaner" misses.
677
678 \b Make the normal "./configure && make" work with Cygwin.
679
680
681 \S{cl-0.98.31} Version 0.98.31
682
683 \b Correctly build in a separate object directory again.
684
685 \b Derive all references to the version number from the version file.
686
687 \b New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
688
689 \b Lots of Makefile updates and bug fixes.
690
691 \b New \c{%ifmacro} directive to test for multiline macros.
692
693 \b Documentation updates.
694
695 \b Fixes for 16-bit OBJ format output.
696
697 \b Changed the NASM environment variable to NASMENV.
698
699
700 \S{cl-0.98.30} Version 0.98.30
701
702 \b Changed doc files a lot: completely removed old READMExx and
703   Wishlist files, incorporating all information in CHANGES and TODO.
704
705 \b I waited a long time to rename zoutieee.c to (original) outieee.c
706
707 \b moved all output modules to output/ subdirectory.
708
709 \b Added 'make strip' target to strip debug info from nasm & ndisasm.
710
711 \b Added INSTALL file with installation instructions.
712
713 \b Added -v option description to nasm man.
714
715 \b Added dist makefile target to produce source distributions.
716
717 \b 16-bit support for ELF output format (GNU extension, but useful.)
718
719
720 \S{cl-0.98.28} Version 0.98.28
721
722 \b Fastcooked this for Debian's Woody release:
723 Frank applied the INCBIN bug patch to 0.98.25alt and called
724 it 0.98.28 to not confuse poor little apt-get.
725
726
727 \S{cl-0.98.26} Version 0.98.26
728
729 \b Reorganised files even better from 0.98.25alt
730
731
732 \S{cl-0.98.25alt} Version 0.98.25alt
733
734 \b Prettified the source tree. Moved files to more reasonable places.
735
736 \b Added findleak.pl script to misc/ directory.
737
738 \b Attempted to fix doc.
739
740
741 \S{cl-0.98.25} Version 0.98.25
742
743 \b Line continuation character \c{\\}.
744
745 \b Docs inadvertantly reverted - "dos packaging".
746
747
748 \S{cl-0.98.24p1} Version 0.98.24p1
749
750 \b FIXME: Someone, document this please.
751
752
753 \S{cl-0.98.24} Version 0.98.24
754
755 \b Documentation - Ndisasm doc added to Nasm.doc.
756
757
758 \S{cl-0.98.23} Version 0.98.23
759
760 \b Attempted to remove rdoff version1
761
762 \b Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
763
764
765 \S{cl-0.98.22} Version 0.98.22
766
767 \b Update rdoff2 - attempt to remove v1.
768
769
770 \S{cl-0.98.21} Version 0.98.21
771
772 \b Optimization fixes.
773
774
775 \S{cl-0.98.20} Version 0.98.20
776
777 \b Optimization fixes.
778
779
780 \S{cl-0.98.19} Version 0.98.19
781
782 \b H. J. Lu's patch back out.
783
784
785 \S{cl-0.98.18} Version 0.98.18
786
787 \b Added ".rdata" to "-f win32".
788
789
790 \S{cl-0.98.17} Version 0.98.17
791
792 \b H. J. Lu's "bogus elf" patch. (Red Hat problem?)
793
794
795 \S{cl-0.98.16} Version 0.98.16
796
797 \b Fix whitespace before "[section ..." bug.
798
799
800 \S{cl-0.98.15} Version 0.98.15
801
802 \b Rdoff changes (?).
803
804 \b Fix fixes to memory leaks.
805
806
807 \S{cl-0.98.14} Version 0.98.14
808
809 \b Fix memory leaks.
810
811
812 \S{cl-0.98.13} Version 0.98.13
813
814 \b There was no 0.98.13
815
816
817 \S{cl-0.98.12} Version 0.98.12
818
819 \b Update optimization (new function of "-O1")
820
821 \b Changes to test/bintest.asm (?).
822
823
824 \S{cl-0.98.11} Version 0.98.11
825
826 \b Optimization changes.
827
828 \b Ndisasm fixed.
829
830
831 \S{cl-0.98.10} Version 0.98.10
832
833 \b There was no 0.98.10
834
835
836 \S{cl-0.98.09} Version 0.98.09
837
838 \b Add multiple sections support to "-f bin".
839
840 \b Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
841
842 \b Add "-v" as an alias to the "-r" switch.
843
844 \b Remove "#ifdef" from Tasm compatibility options.
845
846 \b Remove redundant size-overrides on "mov ds, ex", etc.
847
848 \b Fixes to SSE2, other insns.dat (?).
849
850 \b Enable uppercase "I" and "P" switches.
851
852 \b Case insinsitive "seg" and "wrt".
853
854 \b Update install.sh (?).
855
856 \b Allocate tokens in blocks.
857
858 \b Improve "invalid effective address" messages.
859
860
861 \S{cl-0.98.08} Version 0.98.08
862
863 \b Add "\c{%strlen}" and "\c{%substr}" macro operators
864
865 \b Fixed broken c16.mac.
866
867 \b Unterminated string error reported.
868
869 \b Fixed bugs as per 0.98bf
870
871
872 \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
873
874 Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
875
876 \b More closely compatible with 0.98 when -O0 is implied
877 or specified.  Not strictly identical, since backward 
878 branches in range of short offsets are recognized, and signed
879 byte values with no explicit size specification will be
880 assembled as a single byte.
881
882 \b More forgiving with the PUSH instruction.  0.98 requires
883 a size to be specified always.  0.98.09b will imply the size
884 from the current BITS setting (16 or 32).
885
886 \b Changed definition of the optimization flag:
887
888         -O0     strict two-pass assembly, JMP and Jcc are
889                 handled more like 0.98, except that back-
890                 ward JMPs are short, if possible.
891
892         -O1     strict two-pass assembly, but forward
893                 branches are assembled with code guaranteed
894                 to reach; may produce larger code than
895                 -O0, but will produce successful assembly
896                 more often if branch offset sizes are not
897                 specified.
898
899         -O2     multi-pass optimization, minimize branch
900                 offsets; also will minimize signed immed-
901                 iate bytes, overriding size specification.
902
903         -O3     like -O2, but more passes taken, if needed
904
905
906 \S{cl-0.98.07 released 01/28/01} Version 0.98.07 released 01/28/01
907
908 \b       Added Stepane Denis' SSE2 instructions to a *working*
909         version of the code - some earlier versions were based on
910         broken code - sorry 'bout that. version "0.98.07"
911
912
913 01/28/01
914
915
916 \b       Cosmetic modifications to nasm.c, nasm.h,
917         AUTHORS, MODIFIED
918
919
920 \S{cl-0.98.06f released 01/18/01} Version 0.98.06f released 01/18/01
921
922
923 \b       - Add "metalbrain"s jecxz bug fix in insns.dat
924         - alter nasmdoc.src to match - version "0.98.06f"
925
926
927 \S{cl-0.98.06e released 01/09/01} Version 0.98.06e released 01/09/01
928
929
930 \b       Removed the "outforms.h" file - it appears to be
931         someone's old backup of "outform.h". version "0.98.06e" 
932
933 01/09/01
934
935 \b fbk - finally added the fix for the "multiple %includes bug",
936         known since 7/27/99 - reported originally (?) and sent to
937         us by Austin Lunnen - he reports that John Fine had a fix
938         within the day. Here it is...
939
940 \b Nelson Rush resigns from the group. Big thanks to Nelson for
941   his leadership and enthusiasm in getting these changes
942   incorporated into Nasm!
943
944 \b fbk - [list +], [list -] directives - ineptly implemented, should
945         be re-written or removed, perhaps.
946
947 \b Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
948                        as well - testing might be desirable...
949
950 08/07/00
951
952 \b James Seter - -postfix, -prefix command line switches.
953
954 \b Yuri Zaporogets - rdoff utility changes.
955
956
957 \S{cl-0.98p1} Version 0.98p1
958
959 \b GAS-like palign (Panos Minos)
960
961 \b FIXME: Someone, fill this in with details
962
963
964 \S{cl-0.98bf (bug-fixed)} Version 0.98bf (bug-fixed)
965
966 \b Fixed - elf and aoutb bug - shared libraries
967         - multiple "%include" bug in "-f obj"   
968         - jcxz, jecxz bug
969         - unrecognized option bug in ndisasm 
970
971 \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
972
973 \b Added signed byte optimizations for the 0x81/0x83 class
974 of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
975 when used as 'ADD reg16,imm' or 'ADD reg32,imm.'  Also
976 optimization of signed byte form of 'PUSH imm' and 'IMUL
977 reg,imm'/'IMUL reg,reg,imm.'  No size specification is needed.
978
979 \b Added multi-pass JMP and Jcc offset optimization.  Offsets
980 on forward references will preferentially use the short form,
981 without the need to code a specific size (short or near) for
982 the branch.  Added instructions for 'Jcc label' to use the
983 form 'Jnotcc $+3/JMP label', in cases where a short offset
984 is out of bounds.  If compiling for a 386 or higher CPU, then
985 the 386 form of Jcc will be used instead.
986
987 This feature is controlled by a new command-line switch: "O",
988 (upper case letter O).  "-O0" reverts the assembler to no
989 extra optimization passes, "-O1" allows up to 5 extra passes,
990 and "-O2"(default), allows up to 10 extra optimization passes.
991
992 \b Added a new directive:  'cpu XXX', where XXX is any of: 
993 8086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
994 Katmai.  All are case insensitive.  All instructions will
995 be selected only if they apply to the selected cpu or lower.
996 Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
997
998 \b Added to 'standard.mac', the "use16" and "use32" forms of
999 the "bits 16/32" directive. This is nothing new, just conforms
1000 to a lot of other assemblers. (minor)
1001
1002 \b Changed label allocation from 320/32 (10000 labels @ 200K+) 
1003 to 32/37 (1000 labels); makes running under DOS much easier.
1004 Since additional label space is allocated dynamically, this
1005 should have no effect on large programs with lots of labels.
1006 The 37 is a prime, believed to be better for hashing. (minor)
1007
1008
1009 \S{cl-0.98.03} Version 0.98.03
1010
1011 "Integrated patchfile 0.98-0.98.01.  I call this version 0.98.03 for
1012 historical reasons: 0.98.02 was trashed." --John Coffman
1013 <johninsd@san.rr.com>, 27-Jul-2000
1014
1015 \b Kendall Bennett's SciTech MGL changes
1016
1017 \b Note that you must define "TASM_COMPAT" at compile-time
1018 to get the Tasm Ideal Mode compatibility.
1019
1020 \b All changes can be compiled in and out using the TASM_COMPAT macros,
1021 and when compiled without TASM_COMPAT defined we get the exact same
1022 binary as the unmodified 0.98 sources.
1023
1024 \b standard.mac, macros.c: Added macros to ignore TASM directives before
1025 first include
1026
1027 \b nasm.h: Added extern declaration for tasm_compatible_mode
1028
1029 \b nasm.c: Added global variable tasm_compatible_mode
1030
1031 \b Added command line switch for TASM compatible mode (-t)
1032
1033 \b Changed version command line to reflect when compiled with TASM additions
1034
1035 \b Added response file processing to allow all arguments on a single
1036 line (response file is @resp rather than -@resp for NASM format).
1037
1038 \b labels.c: Changes islocal() macro to support TASM style @@local labels.
1039
1040 \b Added islocalchar() macro to support TASM style @@local labels.
1041
1042 \b parser.c: Added support for TASM style memory references (ie: mov
1043 [DWORD eax],10 rather than the NASM style mov DWORD [eax],10).
1044
1045 \b preproc.c: Added new directives, \c{%arg}, \c{%local}, \c{%stacksize} to directives
1046 table
1047
1048 \b Added support for TASM style directives without a leading % symbol.
1049
1050 \b Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
1051
1052 \b A new keyword \c{%xdefine} and its case-insensitive counterpart \c{%ixdefine}.
1053 They work almost the same way as \c{%define} and \c{%idefine} but expand
1054 the definition immediately, not on the invocation. Something like a cross
1055 between \c{%define} and \c{%assign}. The "x" suffix stands for "eXpand", so
1056 "xdefine" can be deciphered as "expand-and-define". Thus you can do
1057 things like this:
1058
1059 \c      %assign ofs     0
1060 \c
1061 \c      %macro  arg     1
1062 \c              %xdefine %1 dword [esp+ofs]
1063 \c              %assign ofs ofs+4
1064 \c      %endmacro
1065
1066 \b Changed the place where the expansion of %$name macros are expanded.
1067 Now they are converted into ..@ctxnum.name form when detokenizing, so
1068 there are no quirks as before when using %$name arguments to macros,
1069 in macros etc. For example:
1070
1071 \c      %macro  abc     1
1072 \c              %define %1 hello
1073 \c      %endm
1074 \c
1075 \c      abc     %$here
1076 \c      %$here
1077
1078     Now last line will be expanded into "hello" as expected. This also allows
1079     for lots of goodies, a good example are extended "proc" macros included
1080     in this archive.
1081
1082 \b Added a check for "cstk" in smacro_defined() before calling get_ctx() -
1083     this allows for things like:
1084
1085 \c      %ifdef %$abc
1086 \c      %endif
1087
1088     to work without warnings even in no context.
1089
1090 \b Added a check for "cstk" in %if*ctx and %elif*ctx directives -
1091     this allows to use \c{%ifctx} without excessive warnings. If there is
1092     no active context, \c{%ifctx} goes through "false" branch.
1093
1094 \b Removed "user error: " prefix with \c{%error} directive: it just clobbers the
1095     output and has absolutely no functionality. Besides, this allows to write
1096     macros that does not differ from built-in functions in any way.
1097
1098 \b Added expansion of string that is output by \c{%error} directive. Now you
1099     can do things like:
1100
1101 \c      %define hello(x) Hello, x!
1102 \c
1103 \c      %define %$name andy
1104 \c      %error "hello(%$name)"
1105
1106     Same happened with \c{%include} directive.
1107
1108 \b Now all directives that expect an identifier will try to expand and
1109     concatenate everything without whitespaces in between before usage.
1110     For example, with "unfixed" nasm the commands
1111
1112 \c      %define %$abc hello
1113 \c      %define __%$abc goodbye
1114 \c      __%$abc
1115
1116     would produce "incorrect" output: last line will expand to
1117
1118 \c      hello goodbyehello
1119
1120     Not quite what you expected, eh? :-) The answer is that preprocessor
1121     treats the \c{%define} construct as if it would be
1122
1123 \c      %define __ %$abc goodbye
1124
1125     (note the white space between __ and %$abc). After my "fix" it
1126     will "correctly" expand into
1127
1128 \c      goodbye
1129
1130     as expected. Note that I use quotes around words "correct", "incorrect"
1131     etc because this is rather a feature not a bug; however current behaviour
1132     is more logical (and allows more advanced macro usage :-).
1133
1134     Same change was applied to:
1135         \c{%push},\c{%macro},\c{%imacro},\c{%define},\c{%idefine},\c{%xdefine},\c{%ixdefine},
1136         \c{%assign},\c{%iassign},\c{%undef}
1137
1138 \b A new directive [WARNING {+|-}warning-id] have been added. It works only
1139     if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
1140
1141 \b A new warning type: macro-selfref. By default this warning is disabled;
1142     when enabled NASM warns when a macro self-references itself; for example
1143     the following source:
1144
1145 \c        [WARNING macro-selfref]
1146 \c
1147 \c        %macro          push    1-*
1148 \c                %rep    %0
1149 \c                        push    %1
1150 \c                        %rotate 1
1151 \c                %endrep
1152 \c        %endmacro
1153 \c
1154 \c                        push    eax,ebx,ecx
1155
1156     will produce a warning, but if we remove the first line we won't see it
1157     anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
1158     eats such constructs without warnings at all).
1159
1160 \b Added a "error" routine to preprocessor which always will set ERR_PASS1
1161     bit in severity_code. This removes annoying repeated errors on first
1162     and second passes from preprocessor.
1163
1164 \b Added the %+ operator in single-line macros for concatenating two
1165     identifiers. Usage example:
1166
1167 \c        %define _myfunc _otherfunc
1168 \c        %define cextern(x) _ %+ x
1169 \c        cextern (myfunc)
1170
1171     After first expansion, third line will become "_myfunc". After this
1172     expansion is performed again so it becomes "_otherunc".
1173
1174 \b Now if preprocessor is in a non-emitting state, no warning or error
1175     will be emitted. Example:
1176
1177 \c        %if 1
1178 \c                mov     eax,ebx
1179 \c        %else
1180 \c                put anything you want between these two brackets,
1181 \c                even macro-parameter references %1 or local
1182 \c                labels %$zz or macro-local labels %%zz - no
1183 \c                warning will be emitted.
1184 \c        %endif
1185
1186 \b Context-local variables on expansion as a last resort are looked up
1187     in outer contexts. For example, the following piece:
1188
1189 \c        %push   outer
1190 \c        %define %$a [esp]
1191 \c
1192 \c                %push   inner
1193 \c                %$a
1194 \c                %pop
1195 \c        %pop
1196
1197     will expand correctly the fourth line to [esp]; if we'll define another
1198     %$a inside the "inner" context, it will take precedence over outer
1199     definition. However, this modification has been applied only to
1200     expand_smacro and not to smacro_define: as a consequence expansion
1201     looks in outer contexts, but \c{%ifdef} won't look in outer contexts.
1202
1203     This behaviour is needed because we don't want nested contexts to
1204     act on already defined local macros. Example:
1205
1206 \c        %define %$arg1  [esp+4]
1207 \c        test    eax,eax
1208 \c        if      nz
1209 \c                mov     eax,%$arg1
1210 \c        endif
1211
1212     In this example the "if" mmacro enters into the "if" context, so %$arg1
1213     is not valid anymore inside "if". Of course it could be worked around
1214     by using explicitely %$$arg1 but this is ugly IMHO.
1215
1216 \b Fixed memory leak in \c{%undef}. The origline wasn't freed before
1217     exiting on success.
1218
1219 \b Fixed trap in preprocessor when line expanded to empty set of tokens.
1220     This happens, for example, in the following case:
1221
1222 \c        #define SOMETHING
1223 \c        SOMETHING
1224
1225
1226 \S{cl-0.98} Version 0.98
1227
1228 All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
1229
1230 \b The documentation comment delimiter is \# not #.
1231
1232 \b Allow EQU definitions to refer to external labels; reported by
1233   Pedro Gimeno.
1234
1235 \b Re-enable support for RDOFF v1; reported by Pedro Gimeno.
1236
1237 \b Updated License file per OK from Simon and Julian.
1238
1239
1240 \S{cl-0.98p9} Version 0.98p9
1241
1242 \b Update documentation (although the instruction set reference will
1243   have to wait; I don't want to hold up the 0.98 release for it.)
1244
1245 \b Verified that the NASM implementation of the PEXTRW and PMOVMSKB
1246   instructions is correct.  The encoding differs from what the Intel
1247   manuals document, but the Pentium III behaviour matches NASM, not
1248   the Intel manuals.
1249
1250 \b Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
1251   Stefan Hoffmeister.
1252
1253 \b Resurrect the -s option, which was removed when changing the
1254   diagnostic output to stdout.
1255
1256
1257 \S{cl-0.98p8} Version 0.98p8
1258
1259 \b Fix for "DB" when NASM is running on a bigendian machine.
1260
1261 \b Invoke insns.pl once for each output script, making Makefile.in
1262   legal for "make -j".
1263
1264 \b Improve the Unix configure-based makefiles to make package
1265   creation easier.
1266
1267 \b Included an RPM .spec file for building RPM (RedHat Package Manager)
1268   packages on Linux or Unix systems.
1269
1270 \b Fix Makefile dependency problems.
1271
1272 \b Change src/rdsrc.pl to include sectioning information in info
1273   output; required for install-info to work.
1274
1275 \b Updated the RDOFF distribution to version 2 from Jules; minor
1276   massaging to make it compile in my environment.
1277
1278 \b Split doc files that can be built by anyone with a Perl interpreter off
1279   into a separate archive.
1280
1281 \b "Dress rehearsal" release!
1282
1283
1284 \S{cl-0.98p7} Version 0.98p7
1285
1286 \b Fixed opcodes with a third byte-sized immediate argument to not
1287   complain if given "byte" on the immediate.
1288
1289 \b Allow \c{%undef} to remove single-line macros with arguments.  This
1290   matches the behaviour of #undef in the C preprocessor.
1291
1292 \b Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
1293   compatibility with most C compilers and preprocessors.  This allows
1294   Makefile options to be shared between cc and nasm, for example.
1295
1296 \b Minor cleanups.
1297
1298 \b Went through the list of Katmai instructions and hopefully fixed the
1299   (rather few) mistakes in it.
1300
1301 \b (Hopefully) fixed a number of disassembler bugs related to ambiguous
1302   instructions (disambiguated by -p) and SSE instructions with REP.
1303
1304 \b Fix for bug reported by Mark Junger: "call dword 0x12345678" should
1305   work and may add an OSP (affected CALL, JMP, Jcc).
1306
1307 \b Fix for environments when "stderr" isn't a compile-time constant.
1308
1309
1310 \S{cl-0.98p6} Version 0.98p6
1311
1312
1313 \b Took officially over coordination of the 0.98 release; so drop
1314   the p3.x notation. Skipped p4 and p5 to avoid confusion with John
1315   Fine's J4 and J5 releases.
1316
1317 \b Update the documentation; however, it still doesn't include
1318   documentation for the various new instructions.  I somehow wonder if
1319   it makes sense to have an instruction set reference in the assembler
1320   manual when Intel et al have PDF versions of their manuals online.
1321
1322 \b Recognize "idt" or "centaur" for the -p option to ndisasm.
1323
1324 \b Changed error messages back to stderr where they belong, but add an
1325   -E option to redirect them elsewhere (the DOS shell cannot redirect
1326   stderr.)
1327
1328 \b -M option to generate Makefile dependencies (based on code from Alex
1329   Verstak.)
1330
1331 \b \c{%undef} preprocessor directive, and -u option, that undefines a
1332   single-line macro.
1333
1334 \b OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
1335   Chuck Crayne.
1336
1337 \b Various minor bugfixes (reported by):
1338   - Dangling \c{%s} in preproc.c (Martin Junker)
1339
1340 \b THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS.  I am
1341   on a trip and didn't bring the Katmai instruction reference, so I
1342   can't work on them right now.
1343
1344 \b Updated the License file per agreement with Simon and Jules to
1345   include a GPL distribution clause.
1346
1347
1348 \S{cl-0.98p3.7} Version 0.98p3.7
1349
1350 \b (Hopefully) fixed the canned Makefiles to include the outrdf2 and
1351   zoutieee modules.
1352
1353 \b Renamed changes.asm to changed.asm.
1354
1355
1356 \S{cl-0.98p3.6} Version 0.98p3.6
1357
1358 \b Fixed a bunch of instructions that were added in 0.98p3.5 which had
1359   memory operands, and the address-size prefix was missing from the
1360   instruction pattern.
1361
1362
1363 \S{cl-0.98p3.5} Version 0.98p3.5
1364
1365 \b Merged in changes from John S. Fine's 0.98-J5 release.  John's based
1366   0.98-J5 on my 0.98p3.3 release; this merges the changes.
1367
1368 \b Expanded the instructions flag field to a long so we can fit more
1369   flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
1370   such.
1371
1372 \b Fix the "PRIV" flag on a bunch of instructions, and create new
1373   "PROT" flag for protected-mode-only instructions (orthogonal to if
1374   the instruction is privileged!) and new "SMM" flag for SMM-only
1375   instructions.
1376
1377 \b Added AMD-only SYSCALL and SYSRET instructions.
1378
1379 \b Make SSE actually work, and add new Katmai MMX instructions.
1380
1381 \b Added a -p (preferred vendor) option to ndisasm so that it can
1382   distinguish e.g. Cyrix opcodes also used in SSE.  For example:
1383
1384 \c      ndisasm -p cyrix aliased.bin
1385 \c      00000000  670F514310        paddsiw mm0,[ebx+0x10]
1386 \c      00000005  670F514320        paddsiw mm0,[ebx+0x20]
1387 \c      ndisasm -p intel aliased.bin
1388 \c      00000000  670F514310        sqrtps xmm0,[ebx+0x10]
1389 \c      00000005  670F514320        sqrtps xmm0,[ebx+0x20]
1390
1391 \b Added a bunch of Cyrix-specific instructions.
1392
1393
1394 \S{cl-0.98p3.4} Version 0.98p3.4
1395
1396 \b Made at least an attempt to modify all the additional Makefiles (in
1397   the Mkfiles directory).  I can't test it, but this was the best I
1398   could do.
1399
1400 \b DOS DJGPP+"Opus Make" Makefile from John S. Fine.
1401
1402 \b changes.asm changes from John S. Fine.
1403
1404
1405 \S{cl-0.98p3.3} Version 0.98p3.3
1406
1407 \b Patch from Conan Brink to allow nesting of \c{%rep} directives.
1408
1409 \b If we're going to allow INT01 as an alias for INT1/ICEBP (one of
1410   Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
1411   as well.
1412
1413 \b Updated changes.asm to include the latest changes.
1414
1415 \b Tried to clean up the <CR>s that had snuck in from a DOS/Windows
1416   environment into my Unix environment, and try to make sure than
1417   DOS/Windows users get them back.
1418
1419 \b We would silently generate broken tools if insns.dat wasn't sorted
1420   properly.  Change insns.pl so that the order doesn't matter.
1421
1422 \b Fix bug in insns.pl (introduced by me) which would cause conditional
1423   instructions to have an extra "cc" in disassembly, e.g. "jnz"
1424   disassembled as "jccnz".
1425
1426
1427 \S{cl-0.98p3.2} Version 0.98p3.2
1428
1429 \b Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
1430   http://www.csoft.net/cz/johnfine/
1431
1432 \b Changed previous "spotless" Makefile target (appropriate for distribution)
1433   to "distclean", and added "cleaner" target which is same as "clean"
1434   except deletes files generated by Perl scripts; "spotless" is union.
1435
1436 \b Removed BASIC programs from distribution.  Get a Perl interpreter
1437   instead (see below.)
1438
1439 \b Calling this "pre-release 3.2" rather than "p3-hpa2" because of
1440   John's contributions.
1441
1442 \b Actually link in the IEEE output format (zoutieee.c); fix a bunch of
1443   compiler warnings in that file.  Note I don't know what IEEE output
1444   is supposed to look like, so these changes were made "blind".
1445
1446
1447 \S{cl-0.98p3-hpa} Version 0.98p3-hpa
1448
1449 \b Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
1450   buildable version for Unix systems (Makefile.in updates, etc.)
1451
1452 \b Changed insns.pl to create the instruction tables in nasm.h and
1453   names.c, so that a new instruction can be added by adding it *only*
1454   to insns.dat.
1455
1456 \b Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
1457   FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
1458   guarantee will never be used; one of them is documented as UD2 in
1459   Intel documentation, the other one just as "Undefined Opcode" --
1460   calling it UD1 seemed to make sense.)
1461
1462 \b MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
1463   characters long.  Now MAX_SYMBOL is derived from insns.dat.
1464
1465 \b A note on the BASIC programs included: forget them.  insns.bas is
1466   already out of date.  Get yourself a Perl interpreter for your
1467   platform of choice at
1468   \W{http://www.cpan.org/ports/index.html}{http://www.cpan.org/ports/index.html}.
1469
1470
1471 \S{cl-0.98p3} Version 0.98 pre-release 3
1472
1473 \b added response file support, improved command line handling, new layout
1474 help screen
1475
1476 \b fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
1477 related bugs, updated Wishlist; 0.98 Prerelease 3.
1478
1479
1480 \S{cl-0.98p2} Version 0.98 pre-release 2
1481
1482 \b fixed bug in outcoff.c to do with truncating section names longer
1483 than 8 characters, referencing beyond end of string; 0.98 pre-release 2
1484
1485
1486 \S{cl-0.98p1} Version 0.98 pre-release 1
1487
1488 \b Fixed a bug whereby STRUC didn't work at all in RDF.
1489
1490 \b Fixed a problem with group specification in PUBDEFs in OBJ.
1491
1492 \b Improved ease of adding new output formats. Contribution due to
1493 Fox Cutter.
1494
1495 \b Fixed a bug in relocations in the `bin' format: was showing up when
1496 a relocatable reference crossed an 8192-byte boundary in any output
1497 section.
1498
1499 \b Fixed a bug in local labels: local-label lookups were inconsistent
1500 between passes one and two if an EQU occurred between the definition
1501 of a global label and the subsequent use of a local label local to
1502 that global.
1503
1504 \b Fixed a seg-fault in the preprocessor (again) which happened when
1505 you use a blank line as the first line of a multi-line macro
1506 definition and then defined a label on the same line as a call to
1507 that macro.
1508
1509 \b Fixed a stale-pointer bug in the handling of the NASM environment
1510 variable. Thanks to Thomas McWilliams.
1511
1512 \b ELF had a hard limit on the number of sections which caused
1513 segfaults when transgressed. Fixed.
1514
1515 \b Added ability for ndisasm to read from stdin by using `-' as the
1516 filename.
1517
1518 \b ndisasm wasn't outputting the TO keyword. Fixed.
1519
1520 \b Fixed error cascade on bogus expression in \c{%if} - an error in
1521 evaluation was causing the entire \c{%if} to be discarded, thus creating
1522 trouble later when the \c{%else} or \c{%endif} was encountered.
1523
1524 \b Forward reference tracking was instruction-granular not operand-
1525 granular, which was causing 286-specific code to be generated
1526 needlessly on code of the form `shr word [forwardref],1'. Thanks to
1527 Jim Hague for sending a patch.
1528
1529 \b All messages now appear on stdout, as sending them to stderr serves
1530 no useful purpose other than to make redirection difficult.
1531
1532 \b Fixed the problem with EQUs pointing to an external symbol - this
1533 now generates an error message.
1534
1535 \b Allowed multiple size prefixes to an operand, of which only the first
1536 is taken into account.
1537
1538 \b Incorporated John Fine's changes, including fixes of a large number
1539 of preprocessor bugs, some small problems in OBJ, and a reworking of
1540 label handling to define labels before their line is assembled, rather
1541 than after.
1542
1543 \b Reformatted a lot of the source code to be more readable. Included
1544 'coding.txt' as a guideline for how to format code for contributors.
1545
1546 \b Stopped nested \c{%reps} causing a panic - they now cause a slightly more
1547 friendly error message instead.
1548
1549 \b Fixed floating point constant problems (patch by Pedro Gimeno)
1550
1551 \b Fixed the return value of insn_size() not being checked for -1, indicating
1552 an error.
1553
1554 \b Incorporated 3Dnow! instructions.
1555
1556 \b Fixed the 'mov eax, eax + ebx' bug.
1557
1558 \b Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
1559
1560 \b Incorporated John Fine's command line parsing changes
1561
1562 \b Incorporated David Lindauer's OMF debug support
1563
1564 \b Made changes for LCC 4.0 support (\c{__NASM_CDecl__}, removed register size
1565 specification warning when sizes agree).
1566
1567
1568 \H{cl-0.9x} NASM 0.9 Series
1569
1570 Revisions before 0.98.
1571
1572
1573 \S{cl-0.97} Version 0.97 released December 1997
1574
1575 \b This was entirely a bug-fix release to 0.96, which seems to have got
1576 cursed. Silly me.
1577
1578 \b Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
1579 fail. Caused by an error in the `MOV EAX,<segment>' support.
1580
1581 \b ndisasm hung at EOF when compiled with lcc on Linux because lcc on
1582 Linux somehow breaks feof(). ndisasm now does not rely on feof().
1583
1584 \b A heading in the documentation was missing due to a markup error in
1585 the indexing. Fixed.
1586
1587 \b Fixed failure to update all pointers on realloc() within extended-
1588 operand code in parser.c. Was causing wrong behaviour and seg faults
1589 on lines such as `dd 0.0,0.0,0.0,0.0,...'
1590
1591 \b Fixed a subtle preprocessor bug whereby invoking one multi-line
1592 macro on the first line of the expansion of another, when the second
1593 had been invoked with a label defined before it, didn't expand the
1594 inner macro. 
1595
1596 \b Added internal.doc back in to the distribution archives - it was
1597 missing in 0.96 *blush*
1598
1599 \b Fixed bug causing 0.96 to be unable to assemble its own test files,
1600 specifically objtest.asm. *blush again*
1601
1602 \b Fixed seg-faults and bogus error messages caused by mismatching
1603 \c{%rep} and \c{%endrep} within multi-line macro definitions.
1604
1605 \b Fixed a problem with buffer overrun in OBJ, which was causing
1606 corruption at ends of long PUBDEF records.
1607
1608 \b Separated DOS archives into main-program and documentation to reduce
1609 download size.
1610
1611
1612 \S{cl-0.96} Version 0.96 released November 1997
1613
1614 \b Fixed a bug whereby, if `nasm sourcefile' would cause a filename
1615 collision warning and put output into `nasm.out', then `nasm
1616 sourcefile -o outputfile' still gave the warning even though the
1617 `-o' was honoured.
1618 Fixed name pollution under Digital UNIX: one of its header files
1619 defined R_SP, which broke the enum in nasm.h.
1620
1621 \b Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
1622 two-operand forms; NDISASM didn't recognise the longer register
1623 forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
1624 flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
1625 size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
1626 undocumented because the Intel Architecture reference documents
1627 them.
1628
1629 \b Fixed a problem with the local-label mechanism, whereby strange
1630 types of symbol (EQUs, auto-defined OBJ segment base symbols)
1631 interfered with the `previous global label' value and screwed up
1632 local labels.
1633
1634 \b Fixed a bug whereby the stub preprocessor didn't communicate with
1635 the listing file generator, so that the -a and -l options in
1636 conjunction would produce a useless listing file.
1637
1638 \b Merged `os2' object file format back into `obj', after discovering
1639 that `obj' _also_ shouldn't have a link pass separator in a module
1640 containing a non-trivial MODEND. Flat segments are now declared
1641 using the FLAT attribute. `os2' is no longer a valid object format
1642 name: use `obj'.
1643
1644 \b Removed the fixed-size temporary storage in the evaluator. Very very
1645 long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
1646 so) should now no longer crash NASM.
1647
1648 \b Fixed a bug involving segfaults on disassembly of MMX instructions,
1649 by changing the meaning of one of the operand-type flags in nasm.h.
1650 This may cause other apparently unrelated MMX problems; it needs to
1651 be tested thoroughly.
1652
1653 \b Fixed some buffer overrun problems with large OBJ output files.
1654 Thanks to DJ Delorie for the bug report and fix.
1655
1656 \b Made preprocess-only mode actually listen to the \c{%line} markers as it
1657 prints them, so that it can report errors more sanely.
1658
1659 \b Re-designed the evaluator to keep more sensible track of expressions
1660 involving forward references: can now cope with previously-nightmare
1661 situations such as:
1662
1663 \c   mov ax,foo | bar
1664 \c   foo equ 1
1665 \c   bar equ 2
1666
1667 \b Added the ALIGN and ALIGNB standard macros.
1668
1669 \b Added PIC support in ELF: use of WRT to obtain the four extra
1670 relocation types needed.
1671
1672 \b Added the ability for output file formats to define their own
1673 extensions to the GLOBAL, COMMON and EXTERN directives.
1674
1675 \b Implemented common-variable alignment, and global-symbol type and
1676 size declarations, in ELF.
1677
1678 \b Implemented NEAR and FAR keywords for common variables, plus
1679 far-common element size specification, in OBJ.
1680
1681 \b Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
1682 default WRT specification (either a segment or a group).
1683
1684 \b Transformed the Unix NASM archive into an auto-configuring package.
1685
1686 \b Added a sanity-check for people applying SEG to things which are
1687 already segment bases: this previously went unnoticed by the SEG
1688 processing and caused OBJ-driver panics later.
1689
1690 \b Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
1691 type references: OBJ doesn't directly support dword-size segment
1692 base fixups, but as long as the low two bytes of the constant term
1693 are zero, a word-size fixup can be generated instead and it will
1694 work.
1695
1696 \b Added the ability to specify sections' alignment requirements in
1697 Win32 object files and pure binary files.
1698
1699 \b Added preprocess-time expression evaluation: the \c{%assign} (and
1700 \c{%iassign}) directive and the bare \c{%if} (and \c{%elif}) conditional. Added
1701 relational operators to the evaluator, for use only in \c{%if}
1702 constructs: the standard relationals = < > <= >= <> (and C-like
1703 synonyms == and !=) plus low-precedence logical operators &&, ^^ and
1704 ||.
1705
1706 \b Added a preprocessor repeat construct: \c{%rep} / \c{%exitrep} / \c{%endrep}.
1707
1708 \b Added the __FILE__ and __LINE__ standard macros.
1709
1710 \b Added a sanity check for number constants being greater than
1711 0xFFFFFFFF. The warning can be disabled.
1712
1713 \b Added the %0 token whereby a variadic multi-line macro can tell how
1714 many parameters it's been given in a specific invocation.
1715
1716 \b Added \c{%rotate}, allowing multi-line macro parameters to be cycled.
1717
1718 \b Added the `*' option for the maximum parameter count on multi-line
1719 macros, allowing them to take arbitrarily many parameters.
1720
1721 \b Added the ability for the user-level forms of EXTERN, GLOBAL and
1722 COMMON to take more than one argument.
1723
1724 \b Added the IMPORT and EXPORT directives in OBJ format, to deal with
1725 Windows DLLs.
1726
1727 \b Added some more preprocessor \c{%if} constructs: \c{%ifidn} / \c{%ifidni} (exact
1728 textual identity), and \c{%ifid} / \c{%ifnum} / \c{%ifstr} (token type testing).
1729
1730 \b Added the ability to distinguish SHL AX,1 (the 8086 version) from
1731 SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
1732 be 1).
1733
1734 \b Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
1735 with PIC shared library features.
1736
1737 \b Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
1738 FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
1739 otherwise accepted standard. The previous behaviour, though it was a
1740 deliberate feature, was a deliberate feature based on a
1741 misunderstanding. Apologies for the inconvenience.
1742
1743 \b Improved the flexibility of ABSOLUTE: you can now give it an
1744 expression rather than being restricted to a constant, and it can
1745 take relocatable arguments as well.
1746
1747 \b Added the ability for a variable to be declared as EXTERN multiple
1748 times, and the subsequent definitions are just ignored.
1749
1750 \b We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
1751 alone on a line (without a following instruction).
1752
1753 \b Improved sanity checks on whether the arguments to EXTERN, GLOBAL
1754 and COMMON are valid identifiers.
1755
1756 \b Added misc/exebin.mac to allow direct generation of .EXE files by
1757 hacking up an EXE header using DB and DW; also added test/binexe.asm
1758 to demonstrate the use of this. Thanks to Yann Guidon for
1759 contributing the EXE header code.
1760
1761 \b ndisasm forgot to check whether the input file had been successfully
1762 opened. Now it does. Doh!
1763
1764 \b Added the Cyrix extensions to the MMX instruction set.
1765
1766 \b Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
1767 assembled differently. This is important since [ESI+EBP] and
1768 [EBP+ESI] have different default base segment registers.
1769
1770 \b Added support for the PharLap OMF extension for 4096-byte segment
1771 alignment.
1772
1773
1774 \S{cl-0.95 released July 1997} Version 0.95 released July 1997
1775
1776 \b Fixed yet another ELF bug. This one manifested if the user relied on
1777 the default segment, and attempted to define global symbols without
1778 first explicitly declaring the target segment.
1779
1780 \b Added makefiles (for NASM and the RDF tools) to build Win32 console
1781 apps under Symantec C++. Donated by Mark Junker.
1782
1783 \b Added `macros.bas' and `insns.bas', QBasic versions of the Perl
1784 scripts that convert `standard.mac' to `macros.c' and convert
1785 `insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
1786 Junker.
1787
1788 \b Changed the diassembled forms of the conditional instructions so
1789 that JB is now emitted as JC, and other similar changes. Suggested
1790 list by Ulrich Doewich.
1791
1792 \b Added `@' to the list of valid characters to begin an identifier
1793 with.
1794
1795 \b Documentary changes, notably the addition of the `Common Problems'
1796 section in nasm.doc.
1797
1798 \b Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
1799
1800 \b Fixed a bug in perm_copy() in labels.c which was causing exceptions
1801 in cleanup_labels() on some systems.
1802
1803 \b Positivity sanity check in TIMES argument changed from a warning to
1804 an error following a further complaint.
1805
1806 \b Changed the acceptable limits on byte and word operands to allow
1807 things like `~10111001b' to work.
1808
1809 \b Fixed a major problem in the preprocessor which caused seg-faults if
1810 macro definitions contained blank lines or comment-only lines.
1811
1812 \b Fixed inadequate error checking on the commas separating the
1813 arguments to `db', `dw' etc.
1814
1815 \b Fixed a crippling bug in the handling of macros with operand counts
1816 defined with a `+' modifier.
1817
1818 \b Fixed a bug whereby object file formats which stored the input file
1819 name in the output file (such as OBJ and COFF) weren't doing so
1820 correctly when the output file name was specified on the command
1821 line.
1822
1823 \b Removed [INC] and [INCLUDE] support for good, since they were
1824 obsolete anyway.
1825
1826 \b Fixed a bug in OBJ which caused all fixups to be output in 16-bit
1827 (old-format) FIXUPP records, rather than putting the 32-bit ones in
1828 FIXUPP32 (new-format) records.
1829
1830 \b Added, tentatively, OS/2 object file support (as a minor variant on
1831 OBJ).
1832
1833 \b Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
1834
1835 \b Removed a spurious second fclose() on the output file.
1836
1837 \b Added the `-s' command line option to redirect all messages which
1838 would go to stderr (errors, help text) to stdout instead.
1839
1840 \b Added the `-w' command line option to selectively suppress some
1841 classes of assembly warning messages.
1842
1843 \b Added the `-p' pre-include and `-d' pre-define command-line options.
1844
1845 \b Added an include file search path: the `-i' command line option.
1846
1847 \b Fixed a silly little preprocessor bug whereby starting a line with a
1848 `%!' environment-variable reference caused an `unknown directive'
1849 error.
1850
1851 \b Added the long-awaited listing file support: the `-l' command line
1852 option.
1853
1854 \b Fixed a problem with OBJ format whereby, in the absence of any
1855 explicit segment definition, non-global symbols declared in the
1856 implicit default segment generated spurious EXTDEF records in the
1857 output.
1858
1859 \b Added the NASM environment variable.
1860
1861 \b From this version forward, Win32 console-mode binaries will be
1862 included in the DOS distribution in addition to the 16-bit binaries.
1863 Added Makefile.vc for this purpose.
1864
1865 \b Added `return 0;' to test/objlink.c to prevent compiler warnings.
1866
1867 \b Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
1868
1869 \b Added an alternative memory-reference syntax in which prefixing an
1870 operand with `&' is equivalent to enclosing it in square brackets,
1871 at the request of Fox Cutter.
1872
1873 \b Errors in pass two now cause the program to return a non-zero error
1874 code, which they didn't before.
1875
1876 \b Fixed the single-line macro cycle detection, which didn't work at
1877 all on macros with no parameters (caused an infinite loop). Also
1878 changed the behaviour of single-line macro cycle detection to work
1879 like cpp, so that macros like `extrn' as given in the documentation
1880 can be implemented.
1881
1882 \b Fixed the implementation of WRT, which was too restrictive in that
1883 you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
1884 a relocatable reference.
1885
1886
1887 \S{cl-0.94 released April 1997} Version 0.94 released April 1997
1888
1889
1890 \b Major item: added the macro processor.
1891
1892 \b Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
1893 reorganised CMPXCHG instruction into early-486 and Pentium forms.
1894 Thanks to Thobias Jones for the information.
1895
1896 \b Fixed two more stupid bugs in ELF, which were causing `ld' to
1897 continue to seg-fault in a lot of non-trivial cases.
1898
1899 \b Fixed a seg-fault in the label manager.
1900
1901 \b Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
1902 the only option for BCD loads/stores in any case.
1903
1904 \b Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
1905 anyone bothers to provide it. Previously they complained unless no
1906 keyword at all was present.
1907
1908 \b Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
1909 vestige of a bug that I thought had been fixed in 0.92. This was
1910 fixed, hopefully for good this time...
1911
1912 \b Another minor phase error (insofar as a phase error can _ever_ be
1913 minor) fixed, this one occurring in code of the form
1914
1915 \c   rol ax,forward_reference
1916 \c   forward_reference equ 1
1917
1918 \b The number supplied to TIMES is now sanity-checked for positivity,
1919 and also may be greater than 64K (which previously didn't work on
1920 16-bit systems).
1921
1922 \b Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
1923
1924 \b Added the INCBIN pseudo-opcode.
1925
1926 \b Due to the advent of the preprocessor, the [INCLUDE] and [INC]
1927 directives have become obsolete. They are still supported in this
1928 version, with a warning, but won't be in the next.
1929
1930 \b Fixed a bug in OBJ format, which caused incorrect object records to
1931 be output when absolute labels were made global.
1932
1933 \b Updates to RDOFF subdirectory, and changes to outrdf.c.
1934
1935
1936 \S{cl-0.93 released January 1997} Version 0.93 released January 1997
1937
1938 This release went out in a great hurry after semi-crippling bugs
1939 were found in 0.92.
1940
1941 \b Really \e{did} fix the stack overflows this time. *blush*
1942
1943 \b Had problems with EA instruction sizes changing between passes, when
1944 an offset contained a forward reference and so 4 bytes were
1945 allocated for the offset in pass one; by pass two the symbol had
1946 been defined and happened to be a small absolute value, so only 1
1947 byte got allocated, causing instruction size mismatch between passes
1948 and hence incorrect address calculations. Fixed.
1949
1950 \b Stupid bug in the revised ELF section generation fixed (associated
1951 string-table section for .symtab was hard-coded as 7, even when this
1952 didn't fit with the real section table). Was causing `ld' to
1953 seg-fault under Linux.
1954
1955 \b Included a new Borland C makefile, Makefile.bc2, donated by Fox
1956 Cutter <lmb@comtch.iea.com>.
1957
1958
1959 \S{cl-0.92 released January 1997} Version 0.92 released January 1997
1960
1961 \b The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
1962 fixed. This also affected the LCC driver.
1963
1964 \b Fixed a bug regarding 32-bit effective addresses of the form
1965 \c{[other_register+ESP]}.
1966
1967 \b Documentary changes, notably documentation of the fact that Borland
1968 Win32 compilers use `obj' rather than `win32' object format.
1969
1970 \b Fixed the COMENT record in OBJ files, which was formatted
1971 incorrectly.
1972
1973 \b Fixed a bug causing segfaults in large RDF files.
1974
1975 \b OBJ format now strips initial periods from segment and group
1976 definitions, in order to avoid complications with the local label
1977 syntax.
1978
1979 \b Fixed a bug in disassembling far calls and jumps in NDISASM.
1980
1981 \b Added support for user-defined sections in COFF and ELF files.
1982
1983 \b Compiled the DOS binaries with a sensible amount of stack, to
1984 prevent stack overflows on any arithmetic expression containing
1985 parentheses.
1986
1987 \b Fixed a bug in handling of files that do not terminate in a newline.
1988
1989
1990 \S{cl-0.91 released November 1996} Version 0.91 released November 1996
1991
1992 \b Loads of bug fixes.
1993
1994 \b Support for RDF added.
1995
1996 \b Support for DBG debugging format added.
1997
1998 \b Support for 32-bit extensions to Microsoft OBJ format added.
1999
2000 \b Revised for Borland C: some variable names changed, makefile added.
2001
2002 \b LCC support revised to actually work.
2003
2004 \b JMP/CALL NEAR/FAR notation added.
2005
2006 \b `a16', `o16', `a32' and `o32' prefixes added.
2007
2008 \b Range checking on short jumps implemented.
2009
2010 \b MMX instruction support added.
2011
2012 \b Negative floating point constant support added.
2013
2014 \b Memory handling improved to bypass 64K barrier under DOS.
2015
2016 \b \c{$} prefix to force treatment of reserved words as identifiers added.
2017
2018 \b Default-size mechanism for object formats added.
2019
2020 \b Compile-time configurability added.
2021
2022 \b \c{#}, \c{@}, \c{~} and c\{?} are now valid characters in labels.
2023
2024 \b \c{-e} and \c{-k} options in NDISASM added.
2025
2026
2027 \S{cl-0.90 released October 1996} Version 0.90 released October 1996
2028
2029 First release version. First support for object file output. Other
2030 changes from previous version (0.3x) too numerous to document.