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