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