blob: 42fc031641b9d76119bd52b41dccf91738adbc9c [file] [log] [blame]
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001\#
2\# NASM revision history in nasmdoc format
3\#
4
5\H{cl-2.xx} NASM 2 Series
6
H. Peter Anvine55e53d2012-09-09 16:30:07 -07007The NASM 2 series supports x86-64, and is the production version of NASM
H. Peter Anvin04156cd2008-07-14 02:45:57 -04008since 2007.
9
H. Peter Anvin (Intel)6f52ecf2020-07-07 09:33:42 -070010\S{cl-2.15.03} Version 2.15.03
11
12\b Properly display warnings in preprocess-only mode.
13
14\b Fix copy-and-paste of examples from the PDF documentation.
15
16\b Debug information now properly reflect the line numbers of macro
17invocations (unless declared \c{.nolist}).
18
19\b Fix alignment of sections in the \c{coff}/\c{win32}/\c{win64}
20output formats when the desired alignment is less than the default
21alignment for the section or section type.
22
23\b Portability fixes.
24
H. Peter Anvin (Intel)5c85b7f2020-06-30 10:47:34 -070025\S{cl-2.15.02} Version 2.15.02
26
27\b Fix miscompilation when building with \c{clang}.
28
29\b Add \c{db-empty} warning class, see \k{opt-w}.
30
H. Peter Anvin (Intel)fee0db92020-07-01 21:31:32 -070031\b Fix the dependencies in the MSVC NMAKE makefile (\c{Mkfiles/msvc.mak}).
32
H. Peter Anvin (Intel)5c85b7f2020-06-30 10:47:34 -070033\b Some documentation improvements and cleanups.
34
H. Peter Anvin (Intel)a08c0f92020-06-30 12:50:49 -070035\b Fix the handling of macro parameter ranges (\c{%\{:\}}), including
36with brace-enclosed original arguments.
37
H. Peter Anvin (Intel)aa542872020-06-27 16:14:50 -070038\S{cl-2.15.01} Version 2.15.01
39
40\b Fix building the documentation from the release archive. For 2.15,
41the user has to do \c{make warnings} manually in the main directory in
42order to be able to build the documentation, which means Perl needs to
43be installed on the system.
44
45\b Add instructions for Intel Control Flow Enforcement Technology (CET).
46
H. Peter Anvin (Intel)1df72632019-01-11 13:13:03 -080047\S{cl-2.15} Version 2.15
48
H. Peter Anvin (Intel)82fc1be2020-06-25 15:46:09 -070049\b The comparison and booleanizing operators can now be used in any
50expression context, not just \c{%if}. See \k{expr}.
51
52\b New operator \c{?} ... \c{:}. See \k{exptri}.
53
54\b Signed shift operators \c{<<<} and \c{>>>}. See \k{expshift}.
55
56\b The MASM \c{DUP} syntax for data definitions is now supported, in a
57somewhat enhanced form. See \k{db}.
58
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070059\b Warn for strange legacy behavior regarding empty arguments in
60multi-line macro expansion, but try to match legacy behavior in most
61cases. Legacy behavior can be disabled with the directive \c{%pragma
62preproc sane_empty_expansion}, see \k{mlmacro} and
63\k{pragma-preproc}.
64
65\b A much more sensible limit to expression evaluation depth. The
66previously defined limit would rarely trigger before NASM died with a
67stack overrun error on most systems. See \k{opt-limit}.
68
H. Peter Anvin (Intel)1df72632019-01-11 13:13:03 -080069\b The state of warnings can now be saved and restored via the
70\c{[WARNING PUSH]} and \c{[WARNING POP]} directives. See
71\k{asmdir-warning}.
72
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070073\b The \c{sectalign on|off} switch does not affect an explicit directive. See
74\k{sectalign}.
Andrey Matyukov4df13862020-05-06 17:13:02 +000075
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070076\b Added \c{configure} option to enable building with profiling
77(\c{--enable-profiling}).
Andrey Matyukov4df13862020-05-06 17:13:02 +000078
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070079\b Attempt to support of long path names, up to 32767 of UTF-16
80characters, on Windows.
Andrey Matyukov4df13862020-05-06 17:13:02 +000081
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070082\b Fixed 'mismatch in operand sizes' error in the \c{MOVDDUP},
83\c{CMPXCHG8B} and \c{CMPXCHG16B} instructions.
Andrey Matyukov4df13862020-05-06 17:13:02 +000084
85\b Improved error messages in the string transformation routine.
86
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070087\b Removed obsolete \c{gnu-elf-extensions} warning about 8- and 16-bit
88relocation generation. See \k{elf16}
Andrey Matyukov4df13862020-05-06 17:13:02 +000089
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070090\b Added group aliases for all prefixed warnings. See \k{opt-w}.
Andrey Matyukov4df13862020-05-06 17:13:02 +000091
92\b Allowed building with MSVC versions older than 1700.
93
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070094\b Added implicitly sized versions of the \c{K...} instructions, which
95allows the \c{K...} instructions to be specified without a size suffix as
96long as the operands are sized.
Andrey Matyukov4df13862020-05-06 17:13:02 +000097
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -070098\b Added \c{-L} option for additional listing information. See \k{opt-L}.
Andrey Matyukov4df13862020-05-06 17:13:02 +000099
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700100\b Added some warnings for obsolete instructions for a specified CPU.
Andrey Matyukov4df13862020-05-06 17:13:02 +0000101
102\b Deprecated \c{-hf} and \c{-y} options. Use \c{-h} instead.
103
104\b Made DWARF as the default debug format for ELF.
105
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700106\b Added \c{%pragma list} \e{options...} to set or clear listing options
107(see \c{opt-L}).
Andrey Matyukov4df13862020-05-06 17:13:02 +0000108
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700109\b Allowed immediate syntax for \c{LEA} instruction (ignore operand
110size completely).
Andrey Matyukov4df13862020-05-06 17:13:02 +0000111
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700112\b Added limited functionality MASM compatibility package. See
113\k{pkg_masm}.
Andrey Matyukov4df13862020-05-06 17:13:02 +0000114
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700115\b Add single-line macros aliases using \c{%defalias} or
116\c{%idefalias}. These behave like a kind of "symbolic links" for
117single-line macros. See \k{defalias} and \c{clear}.
Andrey Matyukov4df13862020-05-06 17:13:02 +0000118
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700119\b Added support for stringify, nostrip, evaluating, and greedy
120single-line macro arguments. See \k{define}.
121
122\b Unused single-line macro arguments no longer need to have a
123specified name. See \k{define}.
Andrey Matyukov4df13862020-05-06 17:13:02 +0000124
125\b Added conditional comma operator \c{%,}. See \k{cond-comma}.
126
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700127\b Changed private namespace from \c{__foo__} to \c{__?foo?__}, so a user
128namespace starting from underscore is now clean from symbols. For
129backwards compatibility, the previous names are defined as aliases; see
130\k{defalias}, \k{clear} and \k{stdmac}.
Andrey Matyukov4df13862020-05-06 17:13:02 +0000131
132\b Added support of ELF weak symbols and external references. See \k{elfglob}.
133
134\b Changed the behavior of the EXTERN keyword and introduced REQUIRED keyword.
135See \k{required}.
136
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700137\b Added \c{%ifusable} and \c{%ifusing} directives. See \k{macropkg}.
Andrey Matyukov4df13862020-05-06 17:13:02 +0000138
139\b Made various performance improvements and stability fixes in macro
140preprocessor engine.
141
142\b Improved NASM error handling and cleaned up error messages.
143
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700144\b Many, many bug fixes.
Andrey Matyukov4df13862020-05-06 17:13:02 +0000145
H. Peter Anvin8eedebc2018-12-27 11:32:42 -0800146\S{cl-2.14.03} Version 2.14.03
147
148\b Suppress nuisance "\c{label changed during code generation}" messages
149after a real error.
150
H. Peter Anvin88477762018-12-30 07:54:48 -0800151\b Add support for the \c{merge} and \c{strings} attributes on ELF
152sections. See \k{elfsect}.
153
H. Peter Anvindc5939b2019-02-26 01:44:55 -0800154\b Add support for the \c{note}, \c{preinit_array}, \c{init_array},
155and \c{fini_array} sections type in ELF. See \k{elfsect}.
156
H. Peter Anvinb2004512019-02-26 00:02:35 -0800157\b Handle more than 32,633 sections in ELF.
158
H. Peter Anvin6b8765f2018-12-26 04:42:01 -0800159\S{cl-2.14.02} Version 2.14.02
160
161\b Fix crash due to multiple errors or warnings during the code
162generation pass if a list file is specified.
163
H. Peter Anvinbf6230b2018-11-11 13:25:16 -0800164\S{cl-2.14.01} Version 2.14.01
165
166\b Create all system-defined macros defore processing command-line
167given preprocessing directives (\c{-p}, \c{-d}, \c{-u}, \c{--pragma},
168\c{--before}).
169
170\b If debugging is enabled, define a \c{__DEBUG_FORMAT__} predefined
171macro. See \k{dfmtm}.
172
H. Peter Anvin88959912018-11-26 14:38:32 -0800173\b Fix an assert for the case in the \c{obj} format when a \c{SEG}
174operator refers to an \c{EXTERN} symbol declared further down in the
175code.
176
H. Peter Anvind7498062018-11-26 21:38:14 -0800177\b Fix a corner case in the floating-point code where a binary, octal
H. Peter Anvinc06c87d2018-11-28 09:50:14 -0800178or hexadecimal floating-point having at least 32, 11, or 8 mantissa
179digits could produce slightly incorrect results under very specific
180conditions.
H. Peter Anvin88959912018-11-26 14:38:32 -0800181
H. Peter Anvin34754622018-11-28 12:36:53 -0800182\b Support \c{-MD} without a filename, for \c{gcc}
183compatibility. \c{-MF} can be used to set the dependencies output
184filename. See \k{opt-MD}.
185
186\b Fix \c{-E} in combination with \c{-MD}. See \k{opt-E}.
187
H. Peter Anvin5e1d1a82018-12-10 13:36:58 -0800188\b Fix missing errors on redefined labels; would cause convergence
189failure instead which is very slow and not easy to debug.
190
191\b Duplicate definitions of the same label \e{with the same value} is now
192explicitly permitted (2.14 would allow it in some circumstances.)
193
H. Peter Anvin (Intel)800c1682018-12-14 12:22:11 -0800194\b Add the option \c{--no-line} to ignore \c{%line} directives in the
195source. See \k{opt-no-line} and \k{line}.
196
Chang S. Baeef219262018-06-20 17:05:14 -0700197\S{cl-2.14} Version 2.14
198
H. Peter Anvinbf6230b2018-11-11 13:25:16 -0800199\b Changed \c{-I} option semantics by adding a trailing path separator
200 unconditionally.
Cyrill Gorcunov0e7f5112018-10-21 15:45:02 +0300201
Cyrill Gorcunov1cbd48a2018-10-14 21:09:30 +0300202\b Fixed null dereference in corrupted invalid single line macros.
203
204\b Fixed division by zero which may happen if source code is malformed.
205
Cyrill Gorcunovd94402d2018-10-13 23:03:24 +0300206\b Fixed out of bound access in processing of malformed segment override.
207
Cyrill Gorcunova98a84b2018-10-13 18:15:36 +0300208\b Fixed out of bound access in certain \c{EQU} parsing.
209
Cyrill Gorcunov10c0f662018-09-23 23:30:44 +0300210\b Fixed buffer underflow in float parsing.
211
212\b Added \c{SGX} (Intel Software Guard Extensions) instructions.
213
214\b Added \c{+n} syntax for multiple contiguous registers.
215
Chang S. Baeef219262018-06-20 17:05:14 -0700216\b Fixed \c{subsections_via_symbols} for \c{macho} object format.
217
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700218\b Added the \c{--gprefix}, \c{--gpostfix}, \c{--lprefix}, and
219\c{--lpostfix} command line options, to allow command line base symbol
H. Peter Anvin (Intel)d5585982018-06-25 18:19:15 -0700220renaming. See \k{opt-pfix}.
221
222\b Allow label renaming to be specified by \c{%pragma} in addition to
223from the command line. See \k{mangling}.
Chang S. Baeef219262018-06-20 17:05:14 -0700224
225\b Supported generic \c{%pragma} namespaces, \c{output} and \c{debug}. See
H. Peter Anvin (Intel)d4997552020-06-14 22:43:47 -0700226\k{pragma}.
Chang S. Baeef219262018-06-20 17:05:14 -0700227
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700228\b Added the \c{--pragma} command line option to inject a \c{%pragma}
229directive. See \k{opt-pragma}.
Chang S. Baeef219262018-06-20 17:05:14 -0700230
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700231\b Added the \c{--before} command line option to accept preprocess
232statement before input. See \k{opt-before}.
Chang S. Baeef219262018-06-20 17:05:14 -0700233
234\b Added \c{AVX512} \c{VBMI2} (Additional Bit Manipulation), \c{VNNI} (Vector
235Neural Network), \c{BITALG} (Bit Algorithm), and \c{GFNI} (Galois Field New
236Instruction) instructions.
237
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700238\b Added the \c{STATIC} directive for local symbols that should be
239renamed using global-symbol rules. See \k{static}.
Chang S. Baeef219262018-06-20 17:05:14 -0700240
H. Peter Anvin (Intel)d5585982018-06-25 18:19:15 -0700241\b Allow a symbol to be defined as \c{EXTERN} and then later
242overridden as \c{GLOBAL} or \c{COMMON}. Furthermore, a symbol declared
243\c{EXTERN} and then defined will be treated as \c{GLOBAL}. See \k{extern}.
244
245\b The \c{GLOBAL} directive no longer is required to precede the
246definition of the symbol.
247
Chang S. Baeef219262018-06-20 17:05:14 -0700248\b Support \c{private_extern} as \c{macho} specific extension to the
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700249\c{GLOBAL} directive. See \k{macho-pext}.
Chang S. Baeef219262018-06-20 17:05:14 -0700250
251\b Updated \c{UD0} encoding to match with the specification
252
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700253\b Added the \c{--limit-X} command line option to set execution
254limits. See \k{opt-limit}.
Chang S. Baeef219262018-06-20 17:05:14 -0700255
H. Peter Anvin (Intel)d5585982018-06-25 18:19:15 -0700256\b Updated the \c{Codeview} version number to be aligned with \c{MASM}.
Chang S. Baeef219262018-06-20 17:05:14 -0700257
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700258\b Added the \c{--keep-all} command line option to preserve output
259files. See \k{opt-keep-all}.
Chang S. Baeef219262018-06-20 17:05:14 -0700260
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700261\b Added the \c{--include} command line option, an alias to \c{-P} (\k{opt-p}).
Chang S. Baeef219262018-06-20 17:05:14 -0700262
H. Peter Anvin (Intel)b6b4b5d2018-06-25 14:19:39 -0700263\b Added the \c{--help} command line option as an alias to \c{-h} (\k{syntax}).
H. Peter Anvin8524e162018-02-14 11:09:07 -0800264
265\b Added \c{-W}, \c{-D}, and \c{-Q} suffix aliases for \c{RET}
266 instructions so the operand sizes of these instructions can be
267 encoded without using \c{o16}, \c{o32} or \c{o64}.
268
H. Peter Anvin0c2da082018-01-08 12:59:26 -0800269\S{cl-2.13.03} Version 2.13.03
270
271\b Added AVX and AVX512 \c{VAES*} and \c{VPCLMULQDQ} instructions.
H. Peter Anvin73c804c2018-02-07 10:52:50 -0800272
Cyrill Gorcunov92543232018-02-05 20:13:44 +0300273\b Fixed missing dwarf record in x32 ELF output format.
H. Peter Anvin0c2da082018-01-08 12:59:26 -0800274
H. Peter Anvin77c9bf62017-08-16 21:14:33 -0700275\S{cl-2.13.02} Version 2.13.02
276
Cyrill Gorcunov4c171ce2017-11-25 17:41:38 +0300277\b Fix false positive in testing of numeric overflows.
278
Cyrill Gorcunov8e2307c2017-11-25 17:42:45 +0300279\b Fix generation of \c{PEXTRW} instruction.
Cyrill Gorcunov4c171ce2017-11-25 17:41:38 +0300280
H. Peter Anvin075ebe72017-11-29 11:23:08 -0800281\b Fix \c{smartalign} package which could trigger an error during
282 optimization if the alignment code expanded too much due to
283 optimization of the previous code.
Cyrill Gorcunov4c171ce2017-11-25 17:41:38 +0300284
285\b Fix a case where negative value in \c{TIMES} directive causes
H. Peter Anvin075ebe72017-11-29 11:23:08 -0800286 panic instead of an error.
Cyrill Gorcunov4c171ce2017-11-25 17:41:38 +0300287
288\b Always finalize \c{.debug_abbrev} section with a null in
289 \c{dwarf} output format.
290
291\b Support \c{debug} flag in section attributes for \c{macho}
H. Peter Anvin075ebe72017-11-29 11:23:08 -0800292 output format. See \k{machosect}.
Cyrill Gorcunov4c171ce2017-11-25 17:41:38 +0300293
294\b Support up to 16 characters in section names for \c{macho}
295 output format.
296
297\b Fix missing update of global \c{BITS} setting if \c{SECTION}
H. Peter Anvin23b971d2017-11-29 11:05:02 -0800298 directive specified a bit size using output format-specific
299 extensions (e.g. \c{USE32} for the \c{obj} output format.)
Cyrill Gorcunov4c171ce2017-11-25 17:41:38 +0300300
H. Peter Anvinf275ce92017-08-16 22:36:32 -0700301\b Fix the incorrect generation of VEX-encoded instruction when static
302 mode decorators are specified on scalar instructions, losing the
303 decorators as they require EVEX encoding.
304
H. Peter Anvin77c9bf62017-08-16 21:14:33 -0700305\b Option \c{-MW} to quote dependency outputs according to Watcom
H. Peter Anvinf275ce92017-08-16 22:36:32 -0700306 Make conventions instead of POSIX Make conventions. See \k{opt-MW}.
307
308\b The \c{obj} output format now contains embedded dependency file
309 information, unless disabled with \c{%pragma obj nodepend}. See
310 \k{objdepend}.
311
312\b Fix generation of dependency lists.
313
H. Peter Anvin075ebe72017-11-29 11:23:08 -0800314\b Fix a number of null pointer reference and memory allocation errors.
H. Peter Anvinf275ce92017-08-16 22:36:32 -0700315
316\b Always generate symbol-relative relocations for the \c{macho64}
317 output format; at least some versions of the XCode/LLVM linker fails
318 for section-relative relocations.
H. Peter Anvin77c9bf62017-08-16 21:14:33 -0700319
H. Peter Anvin3301ee82017-05-01 15:41:30 -0700320\S{cl-2.13.01} Version 2.13.01
321
322\b Fix incorrect output for some types of \c{FAR} or \c{SEG}
323 references in the \c{obj} output format, and possibly other 16-bit
324 output formats.
325
326\b Fix the address in the list file for an instruction containing a
327 \c{TIMES} directive.
328
H. Peter Anvin4892f952017-05-01 21:16:21 -0700329\b Fix error with \c{TIMES} used together with an instruction which
330 can vary in size, e.g. \c{JMP}.
331
332\b Fix breakage on some uses of the \c{DZ} pseudo-op.
333
H. Peter Anvinf805cde2017-02-23 17:19:56 -0800334\S{cl-2.13} Version 2.13
335
336\b Support the official forms of the \c{UD0} and \c{UD1} instructions.
337
338\b Allow self-segment-relative expressions in immediates and
339 displacements, even when combined with an external or otherwise
340 out-of-segment special symbol, e.g.:
341
342\c extern foo
343\c mov eax,[foo - $ + ebx] ; Now legal
344
345\b Handle a 64-bit origin in NDISASM.
346
347\b NASM can now generate sparse output files for relevant output
348 formats, if the underlying operating system supports them.
349
H. Peter Anvincea308b2017-04-17 14:05:51 -0700350\b The \c{macho} object format now supports the \c{subsections_via_symbols}
H. Peter Anvin37d01d12017-03-28 15:51:45 -0700351 and \c{no_dead_strip} directives, see \k{macho-ssvs}.
352
H. Peter Anvincea308b2017-04-17 14:05:51 -0700353\b The \c{macho} object format now supports the \c{no_dead_strip},
H. Peter Anvin37d01d12017-03-28 15:51:45 -0700354 \c{live_support} and \c{strip_static_syms} section flags, see
355 \k{machosect}.
H. Peter Anvin7fcd9892017-03-07 23:03:11 -0800356
H. Peter Anvincea308b2017-04-17 14:05:51 -0700357\b The \c{macho} object format now supports the \c{dwarf} debugging
358 format, as required by newer toolchains.
359
H. Peter Anvind49a3bf2017-03-08 01:50:08 -0800360\b All warnings can now be suppressed if desired; warnings not
361 otherwise part of any warning class are now considered its own
362 warning class called \c{other} (e.g. \c{-w-other}). Furthermore,
363 warning-as-error can now be controlled on a per warning class
364 basis, using the syntax \c{-w+error=}\e{warning-class} and its
365 equivalent for all other warning control options. See \k{opt-w}
366 for the command-line options and warning classes and
367 \k{asmdir-warning} for the \c{[WARNING]} directive.
H. Peter Anvinb2047cb2017-03-08 01:26:40 -0800368
H. Peter Anvinb1a5b262017-04-02 19:45:35 -0700369\b Fix a number of bugs related to AVX-512 decorators.
370
H. Peter Anvinc5b29162017-04-06 19:10:57 -0700371\b Significant improvements to building NASM with Microsoft Visual
H. Peter Anvin06242962017-04-29 13:09:52 -0700372 Studio via \c{Mkfiles/msvc.mak}. It is now possible to build the
373 full Windows installer binary as long as the necessary
374 prerequisites are installed; see \c{Mkfiles/README}
H. Peter Anvinc5b29162017-04-06 19:10:57 -0700375
H. Peter Anvinb1a5b262017-04-02 19:45:35 -0700376\b To build NASM with custom modifications (table changes) or from the
H. Peter Anvin06242962017-04-29 13:09:52 -0700377 git tree now requires Perl 5.8 at the very minimum, quite possibly
H. Peter Anvinb1a5b262017-04-02 19:45:35 -0700378 a higher version (Perl 5.24.1 tested.) There is no requirement to
379 have Perl on your system at all if all you want to do is build
380 unmodified NASM from source archives.
381
H. Peter Anvinc5b29162017-04-06 19:10:57 -0700382\b Fix the \c{\{z\}} decorator on AVX-512 \c{VMOVDQ*} instructions.
383
H. Peter Anvin5e0d3b72016-10-03 23:01:58 -0700384\b Add new warnings for certain dangerous constructs which never ought
385 to have been allowed. In particular, the \c{RESB} family of
386 instructions should have been taking a critical expression all
387 along.
388
389\b Fix the EVEX (AVX-512) versions of the \c{VPBROADCAST}, \c{VPEXTR},
390 and \c{VPINSR} instructions.
391
392\b Support contracted forms of additional instructions. As a general
393 rule, if an instruction has a non-destructive source immediately
394 after a destination register that isn't used as an input, NASM
395 supports omitting that source register, using the destination
396 register as that value. This among other things makes it easier to
397 convert SSE code to the equivalent AVX code:
398
399\c addps xmm1,xmm0 ; SSE instruction
400\c vaddps ymm1,ymm1,ymm0 ; AVX official long form
401\c vaddps ymm1,ymm0 ; AVX contracted form
402
403\b Fix Codeview malformed compiler version record.
404
H. Peter Anvin6a6a40c2016-10-03 23:37:51 -0700405\b Add the \c{CLWB} and \c{PCOMMIT} instructions. Note that the
406 \c{PCOMMIT} instruction has been deprecated and will never be
407 included in a shipping product; it is included for completeness
408 only.
409
H. Peter Anvin91ac58d2017-04-29 13:34:19 -0700410\b Add the \c{%pragma} preprocessor directive for soft-error directives.
H. Peter Anvin3f87a2a2016-10-04 14:07:19 -0700411
H. Peter Anvin456b1c42016-11-15 11:56:42 -0800412\b Add the \c{RDPID} instruction.
413
H. Peter Anvin8494cc82016-04-05 13:06:14 -0700414\S{cl-2.12.02} Version 2.12.02
415
416\b Fix preprocessor errors, especially \c{%error} and \c{%warning},
417 inside \c{%if} statements.
418
H. Peter Anvinff7ff122016-05-09 11:19:58 -0700419\b Fix relative relocations in 32-bit Mach-O.
420
421\b More Codeview debug format fixes.
422
H. Peter Anvince637832016-10-04 00:04:44 -0700423\b If the MASM \c{PTR} keyword is encountered, issue a warning. This is
H. Peter Anvin19bc9de2016-05-09 12:09:04 -0700424 much more likely to indicate a MASM-ism encountered in NASM than it
H. Peter Anvin77511e32016-05-09 14:36:59 -0700425 is a valid label. This warning can be suppressed with \c{-w-ptr},
426 the \c{[warning]} directive (see \k{opt-w}) or by the macro
H. Peter Anvin964d5022017-03-01 13:35:13 -0800427 definition \c{%idefine ptr $%?} (see \k{selfref%?}).
H. Peter Anvin77511e32016-05-09 14:36:59 -0700428
429\b When an error or a warning comes from the expansion of a multi-line
430 macro, display the file and line numbers for the expanded macros.
431 Macros defined with \c{.nolist} do not get displayed.
H. Peter Anvin19bc9de2016-05-09 12:09:04 -0700432
H. Peter Anvinaa958b12016-05-24 23:03:17 -0700433\b Add macros \c{ilog2fw()} and \c{ilog2cw()} to the \c{ifunc} macro
434 package. See \k{ilog2}.
435
H. Peter Anvinff7ff122016-05-09 11:19:58 -0700436
H. Peter Anvinc5b95dd2016-03-03 12:43:02 -0800437\S{cl-2.12.01} Version 2.12.01
438
439\b Portability fixes for some platforms.
440
H. Peter Anvinc073fc02016-03-04 10:57:01 -0800441\b Fix error when not specifying a list file.
442
H. Peter Anvin2a74d842016-03-07 22:17:10 -0800443\b Correct the handling of macro-local labels in the Codeview
444 debugging format.
445
Cyrill Gorcunov6832acb2016-03-07 22:36:18 +0300446\b Add \c{CLZERO}, \c{MONITORX} and \c{MWAITX} instructions.
Cyrill Gorcunovf34cf392016-03-07 22:32:31 +0300447
H. Peter Anvinc5b95dd2016-03-03 12:43:02 -0800448
Cyrill Gorcunov23386132016-02-17 17:00:06 +0300449\S{cl-2.12} Version 2.12
450
H. Peter Anvin277308f2016-02-18 11:49:33 -0800451\b Major fixes to the \c{macho} backend (\k{machofmt}); earlier versions
452 would produce invalid symbols and relocations on a regular basis.
453
454\b Support for thread-local storage in Mach-O.
455
456\b Support for arbitrary sections in Mach-O.
Cyrill Gorcunov23386132016-02-17 17:00:06 +0300457
458\b Fix wrong negative size treated as a big positive value passed into
H. Peter Anvin277308f2016-02-18 11:49:33 -0800459 backend causing NASM to crash.
Cyrill Gorcunov23386132016-02-17 17:00:06 +0300460
461\b Fix handling of zero-extending unsigned relocations, we have been printing
462 wrong message and forgot to assign segment with predefined value before
463 passing it into output format.
464
465\b Fix potential write of oversized (with size greater than allowed in
466 output format) relative relocations.
467
H. Peter Anvinf15b1252017-02-23 20:20:50 -0800468\b Portability fixes for building NASM with the LLVM compiler.
Cyrill Gorcunov23386132016-02-17 17:00:06 +0300469
H. Peter Anvin277308f2016-02-18 11:49:33 -0800470\b Add support of Codeview version 8 (\c{cv8}) debug format for
471 \c{win32} and \c{win64} formats in the \c{COFF} backend,
472 see \k{codeview}.
H. Peter Anvin9f7c68a2016-02-17 13:44:51 -0800473
474\b Allow 64-bit outputs in 16/32-bit only backends. Unsigned 64-bit
475 relocations are zero-extended from 32-bits with a warning
H. Peter Anvin277308f2016-02-18 11:49:33 -0800476 (suppressible via \c{-w-zext-reloc}); signed 64-bit relocations are
H. Peter Anvind2238e22016-03-17 17:34:49 -0700477 an error.
Cyrill Gorcunov23386132016-02-17 17:00:06 +0300478
H. Peter Anvind2ea49b2016-02-17 15:35:06 -0800479\b Line numbers in list files now correspond to the lines in the source
480 files, instead of simply being sequential.
481
H. Peter Anvina8506052016-02-26 20:47:45 -0800482\b There is now an official 64-bit (x64 a.k.a. x86-64) build for Windows.
483
H. Peter Anvin277308f2016-02-18 11:49:33 -0800484
Cyrill Gorcunov8b4ef2d2015-07-26 14:42:30 +0300485\S{cl-2.11.09} Version 2.11.09
486
487\b Fix potential stack overwrite in \c{macho32} backend.
488
489\b Fix relocation records in \c{macho64} backend.
490
491\b Fix symbol lookup computation in \c{macho64} backend.
492
493\b Adjust \c{.symtab} and \c{.rela.text} sections alignments to 8 bytes
494 in \c{elf64} backed.
495
496\b Fix section length computation in \c{bin} backend which leaded in incorrect
497 relocation records.
498
Cyrill Gorcunov399d29c2015-02-21 22:12:57 +0300499\S{cl-2.11.08} Version 2.11.08
500
501\b Fix section length computation in \c{bin} backend which leaded in incorrect
502 relocation records.
503
504\b Add a warning for numeric preprocessor definitions passed via command
505 line which might have unexpected results otherwise.
506
507\b Add ability to specify a module name record in \c{rdoff} linker with
508 \c{-mn} option.
509
510\b Increase label length capacity up to 256 bytes in \c{rdoff} backend for
511 FreePascal sake, which tends to generate very long labels for procedures.
512
513\b Fix segmentation failure when rip addressing is used in \c{macho64} backend.
514
515\b Fix access on out of memory when handling strings with a single
516 grave. We have sixed similar problem in previous release but not
517 all cases were covered.
518
519\b Fix NULL dereference in disassembled on \c{BND} instruction.
520
Cyrill Gorcunove3131142014-12-09 21:47:23 +0300521\S{cl-2.11.07} Version 2.11.07
522
523\b Fix 256 bit \c{VMOVNTPS} instruction.
524
525\b Fix \c{-MD} option handling, which was rather broken in previous
526release changing command line api.
527
528\b Fix access to unitialized space when handling strings with
529a single grave.
530
531\b Fix nil dereference in handling memory reference parsing.
532
Jim Kukunase3e4f7c2014-10-17 14:51:36 -0700533\S{cl-2.11.06} Version 2.11.06
534
535\b Update AVX512 instructions based on the Extension Reference (319433-021 Sept
5362014).
537
538\b Fix the behavior of \c{-MF} and \c{-MD} options (Bugzilla 3392280)
539
540\b Updated Win32 Makefile to fix issue with build
541
H. Peter Anvin4ac3b022014-05-21 08:28:21 -0700542\S{cl-2.11.05} Version 2.11.05
543
544\b Add \c{--v} as an alias for \c{-v} (see \k{opt-v}), for
545command-line compatibility with Yasm.
546
547\b Fix a bug introduced in 2.11.03 whereby certain instructions would
548contain multiple REX prefixes, and thus be corrupt.
549
Jin Kyu Song3a105c32014-05-07 13:55:58 -0700550\S{cl-2.11.04} Version 2.11.04
551
552\b Removed an invalid error checking code. Sometimes a memref only with
553a displacement can also set an evex flag. For example:
554
555\c vmovdqu32 [0xabcd]{k1}, zmm0
556
557\b Fixed a bug in disassembler that EVEX.L'L vector length was not matched
558when EVEX.b was set because it was simply considered as EVEC.RC.
559Separated EVEX.L'L case from EVEX.RC which is ignored in matching.
560
H. Peter Anvin1a032812014-05-05 11:21:17 -0700561\S{cl-2.11.03} Version 2.11.03
562
563\b Fix a bug there REX prefixes were missing on instructions inside a
564\c{TIMES} statement.
565
H. Peter Anvin0b7db572014-02-19 14:55:54 -0800566\S{cl-2.11.02} Version 2.11.02
567
568\b Add the \c{XSAVEC}, \c{XSAVES} and \c{XRSTORS} family instructions.
569
H. Peter Anvin727eb3f2014-02-19 15:39:57 -0800570\b Add the \c{CLFLUSHOPT} instruction.
571
H. Peter Anvinf2d25692014-02-18 14:05:14 -0800572\S{cl-2.11.01} Version 2.11.01
573
574\b Allow instructions which implicitly uses \c{XMM0} (\c{VBLENDVPD},
575\c{VBLENDVPS}, \c{PBLENDVB} and \c{SHA256RNDS2}) to be specified
576without an explicit \c{xmm0} on the assembly line. In other words,
577the following two lines produce the same output:
578
579\c vblendvpd xmm2,xmm1,xmm0 ; Last operand is fixed xmm0
580\c vblendvpd xmm2,xmm1 ; Implicit xmm0 omitted
581
582\b In the ELF backends, don't crash the assembler if \c{section align}
583is specified without a value.
584
Jin Kyu Song1ab16e42013-11-25 17:59:25 -0800585\S{cl-2.11} Version 2.11
586
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800587\b Add support for the Intel AVX-512 instruction set:
Jin Kyu Song1ab16e42013-11-25 17:59:25 -0800588
589\b 16 new, 512-bit SIMD registers. Total 32 \c{(ZMM0 ~ ZMM31)}
590
591\b 8 new opmask registers \c{(K0 ~ K7)}. One of 7 registers \c{(K1 ~ K7)} can
592be used as an opmask for conditional execution.
593
594\b A new EVEX encoding prefix. EVEX is based on VEX and provides more
595capabilities: opmasks, broadcasting, embedded rounding and compressed
596displacements.
597
598\c - opmask
599\c VDIVPD zmm0{k1}{z}, zmm1, zmm3 ; conditional vector operation
600\c ; using opmask k1.
601\c ; {z} is for zero-masking
602\c - broadcasting
603\c VDIVPS zmm4, zmm5, [rbx]{1to16} ; load single-precision float and
604\c ; replicate it 16 times. 32 * 16 = 512
605\c - embedded rounding
606\c VCVTSI2SD xmm6, xmm7, {rz-sae}, rax ; round toward zero. note that it
607\c ; is used as if a separate operand.
608\c ; it comes after the last SIMD operand
609
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800610\b Add support for \c{ZWORD} (512 bits), \c{DZ} and \c{RESZ}.
611
612\b Add support for the MPX and SHA instruction sets.
613
614\b Better handling of section redefinition.
615
616\b Generate manpages when running \c{'make dist'}.
617
618\b Handle all token chains in mmacro params range.
619
620\b Support split [base,index] effective address:
621
622\c mov eax,[eax+8,ecx*4] ; eax=base, ecx=index, 4=scale, 8=disp
623
624This is expected to be most useful for the MPX instructions.
625
626\b Support \c{BND} prefix for branch instructions (for MPX).
627
H. Peter Anvinb2fcac92013-12-31 10:38:51 -0800628\b The \c{DEFAULT} directive can now take \c{BND} and \c{NOBND}
629options to indicate whether all relevant branches should be getting
630\c{BND} prefixes. This is expected to be the normal for use in MPX
631code.
632
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800633\b Add \c{{evex}}, \c{{vex3}} and \c{{vex2}} instruction prefixes to
634have NASM encode the corresponding instruction, if possible, with an EVEX,
6353-byte VEX, or 2-byte VEX prefix, respectively.
636
H. Peter Anvinebfa6a62013-11-28 21:24:09 -0800637\b Support for section names longer than 8 bytes in Win32/Win64 COFF.
Jin Kyu Song1ab16e42013-11-25 17:59:25 -0800638
H. Peter Anvinbe1d0522013-12-31 10:35:12 -0800639\b The \c{NOSPLIT} directive by itself no longer forces a single
640register to become an index register, unless it has an explicit
641multiplier.
642
643\c mov eax,[nosplit eax] ; eax as base register
644\c mov eax,[nosplit eax*1] ; eax as index register
645
Cyrill Gorcunove74e4942013-07-23 09:36:00 +0400646\S{cl-2.10.09} Version 2.10.09
647
648\b Pregenerate man pages.
649
Cyrill Gorcunov82139da2013-07-21 00:42:47 +0400650\S{cl-2.10.08} Version 2.10.08
651
Cyrill Gorcunov85f734b2013-07-21 11:19:27 +0400652\b Fix \c{VMOVNTDQA}, \c{MOVNTDQA} and \c{MOVLPD} instructions.
653
Cyrill Gorcunov82139da2013-07-21 00:42:47 +0400654\b Fix collision for \c{VGATHERQPS}, \c{VPGATHERQD} instructions.
655
656\b Fix \c{VPMOVSXBQ}, \c{VGATHERQPD}, \c{VSPLLW} instructions.
657
658\b Add a bunch of AMD TBM instructions.
659
660\b Fix potential stack overwrite in numbers conversion.
661
662\b Allow byte size in \c{PREFETCHTx} instructions.
663
664\b Make manual pages up to date.
665
666\b Make \c{F3} and \c{F2} SSE prefixes to override \c{66}.
667
668\b Support of AMD SVM instructions in 32 bit mode.
669
670\b Fix near offsets code generation for \c{JMP}, \c{CALL} instrictions
671in long mode.
672
673\b Fix preprocessor parse regression when id is expanding to a whitespace.
674
Cyrill Gorcunov6cdebb42012-12-27 20:28:02 +0400675\S{cl-2.10.07} Version 2.10.07
676
677\b Fix line continuation parsing being broken in previous version.
678
H. Peter Anvin55340992012-09-09 17:09:00 -0700679\S{cl-2.10.06} Version 2.10.06
680
681\b Always quote the dependency source names when using the automatic
682dependency generation options.
683
684\b If no dependency target name is specified via the \c{-MT} or
685\c{-MQ} options, quote the default output name.
686
H. Peter Anvin4dab7a02012-10-08 12:05:59 +0800687\b Fix assembly of shift operations in \c{CPU 8086} mode.
688
689\b Fix incorrect generation of explicit immediate byte for shift by 1
690under certain circumstances.
691
692\b Fix assembly of the \c{VPCMPGTQ} instruction.
693
H. Peter Anvinf2ded502012-12-04 13:36:42 -0800694\b Fix RIP-relative relocations in the \c{macho64} backend.
695
H. Peter Anvin55f3cb82012-09-09 11:05:35 -0700696\S{cl-2.10.05} Version 2.10.05
697
698\b Add the \c{CLAC} and \c{STAC} instructions.
699
H. Peter Anvin480435c2012-08-17 15:42:24 -0700700\S{cl-2.10.04} Version 2.10.04
701
702\b Add back the inadvertently deleted 256-bit version of the \c{VORPD}
703instruction.
704
705\b Correct disassembly of instructions starting with byte \c{82} hex.
706
707\b Fix corner cases in token pasting, for example:
708
709\c %define N 1e%++%+ 5
710\c dd N, 1e+5
711
H. Peter Anvin7f9a43a2012-07-22 21:08:30 -0700712\S{cl-2.10.03} Version 2.10.03
713
714\b Correct the assembly of the instruction:
715
716\c XRELEASE MOV [absolute],AL
717
H. Peter Anvin5194f772017-04-13 21:54:42 -0700718\> Previous versions would incorrectly generate \c{F3 A2} for this
H. Peter Anvin7f9a43a2012-07-22 21:08:30 -0700719instruction and issue a warning; correct behavior is to emit \c{F3 88
72005}.
721
H. Peter Anvin5c4c5062012-07-20 17:53:55 -0700722\S{cl-2.10.02} Version 2.10.02
723
724\b Add the \c{ifunc} macro package with integer functions, currently
725only integer logarithms. See \k{pkg_ifunc}.
726
727\b Add the \c{RDSEED}, \c{ADCX} and \c{ADOX} instructions.
728
Cyrill Gorcunov45bf92b2012-05-25 00:58:43 +0400729\S{cl-2.10.01} Version 2.10.01
730
731\b Add missing VPMOVMSKB instruction with reg32, ymmreg operands.
732
H. Peter Anvinaf5cb1b2010-08-24 14:13:32 -0700733\S{cl-2.10} Version 2.10
734
735\b When optimization is enabled, \c{mov r64,imm} now optimizes to the
736 shortest form possible between:
737
H. Peter Anvin96e8d962010-08-24 14:20:40 -0700738\c mov r32,imm32 ; 5 bytes
739\c mov r64,imm32 ; 7 bytes
740\c mov r64,imm64 ; 10 bytes
H. Peter Anvinaf5cb1b2010-08-24 14:13:32 -0700741
H. Peter Anvin5194f772017-04-13 21:54:42 -0700742\> To force a specific form, use the \c{STRICT} keyword, see \k{strict}.
H. Peter Anvind68466a2010-08-24 14:14:48 -0700743
H. Peter Anvin8a44aa42012-02-25 13:30:41 -0800744\b Add support for the Intel AVX2 instruction set.
745
746\b Add support for Bit Manipulation Instructions 1 and 2.
747
748\b Add support for Intel Transactional Synchronization Extensions (TSX).
H. Peter Anvin2d3dce22010-08-24 09:55:27 -0700749
H. Peter Anvinc92aaa12012-02-25 15:05:45 -0800750\b Add support for x32 ELF (32-bit ELF with the CPU in 64-bit mode.)
751 See \k{elffmt}.
752
H. Peter Anvin6b8cc122012-02-25 15:34:14 -0800753\b Add support for bigendian UTF-16 and UTF-32. See \k{unicode}.
754
Cyrill Gorcunoved48ab82011-07-16 01:33:00 +0400755\S{cl-2.09.10} Version 2.09.10
756
757\b Fix up NSIS script to protect uninstaller against registry keys
758 absence or corruption. It brings in a few additional questions
759 to a user during deinstallation procedure but still it is better
760 than unpredictable file removal.
761
Cyrill Gorcunov68868b02011-07-04 00:47:08 +0400762\S{cl-2.09.09} Version 2.09.09
763
764\b Fix initialization of section attributes of \c{bin} output format.
765
766\b Fix \c{mach64} output format bug that crashes NASM due to NULL symbols.
767
768
Cyrill Gorcunov47e7ecd2011-04-06 19:08:34 +0400769\S{cl-2.09.08} Version 2.09.08
770
771\b Fix \c{__OUTPUT_FORMAT__} assignment when output driver alias
772 is used. For example when \c{-f elf} is used \c{__OUTPUT_FORMAT__}
773 must be set to \c{elf}, if \c{-f elf32} is used \c{__OUTPUT_FORMAT__}
774 must be assigned accordingly, i.e. to \c{elf32}. The rule applies to
775 all output driver aliases. See \k{ofmtm}.
776
777
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300778\S{cl-2.09.07} Version 2.09.07
779
780\b Fix attempts to close same file several times
781 when \c{-a} option is used.
782
Cyrill Gorcunoveb9b2942011-03-07 12:44:43 +0300783\b Fixes for VEXTRACTF128, VMASKMOVPS encoding.
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300784
Cyrill Gorcunova09fe1e2011-03-12 22:35:42 +0300785
Cyrill Gorcunov16f998e2011-03-07 11:35:18 +0300786\S{cl-2.09.06} Version 2.09.06
Cyrill Gorcunov37dacf02011-02-28 09:58:52 +0300787
788\b Fix missed section attribute initialization in \c{bin} output target.
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400789
Cyrill Gorcunov1616b9d2011-02-28 10:03:53 +0300790
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300791\S{cl-2.09.05} Version 2.09.05
792
Cyrill Gorcunov8fc44e92011-02-20 22:12:32 +0300793\b Fix arguments encoding for VPEXTRW instruction.
794
795\b Remove invalid form of VPEXTRW instruction.
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300796
Cyrill Gorcunovb6c1dca2011-02-23 00:49:13 +0300797\b Add \c{VLDDQU} as alias for \c{VLDQQU} to
798 match specification.
799
Cyrill Gorcunove5c2c492011-02-20 21:22:25 +0300800
Cyrill Gorcunov9348b902010-11-21 19:51:49 +0300801\S{cl-2.09.04} Version 2.09.04
802
803\b Fix incorrect labels offset for VEX intructions.
804
805\b Eliminate bogus warning on implicit operand size override.
806
807\b \c{%if} term could not handle 64 bit numbers.
808
809\b The COFF backend was limiting relocations number to 16 bits even if
810 in real there were a way more relocations.
811
812
Cyrill Gorcunovfdbe8ba2010-10-27 21:50:20 +0400813\S{cl-2.09.03} Version 2.09.03
814
815\b Print \c{%macro} name inside \c{%rep} blocks on error.
816
817\b Fix preprocessor expansion behaviour. It happened sometime
818 too early and sometime simply wrong. Move behaviour back to
819 the origins (down to NASM 2.05.01).
820
821\b Fix unitialized data dereference on OMF output format.
822
823\b Issue warning on unterminated \c{%{} construct.
824
825\b Fix for documentation typo.
826
827
H. Peter Anvin2c11f972010-09-15 08:59:12 -0700828\S{cl-2.09.02} Version 2.09.02
829
830\b Fix reversed tokens when \c{%deftok} produces more than one output token.
831
Cyrill Gorcunov831222f2010-09-15 21:13:48 +0400832\b Fix segmentation fault on disassembling some VEX instructions.
833
834\b Missing \c{%endif} did not always cause error.
835
836\b Fix typo in documentation.
837
Cyrill Gorcunova28db5f2010-09-18 02:55:46 +0400838\b Compound context local preprocessor single line macro identifiers
839 were not expanded early enough and as result lead to unresolved
840 symbols.
841
H. Peter Anvin2c11f972010-09-15 08:59:12 -0700842
Cyrill Gorcunov234e4ed2010-09-07 20:57:36 +0400843\S{cl-2.09.01} Version 2.09.01
844
845\b Fix NULL dereference on missed %deftok second parameter.
846
847\b Fix NULL dereference on invalid %substr parameters.
848
849
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400850\S{cl-2.09} Version 2.09
851
Cyrill Gorcunove091d6e2010-08-09 13:58:22 +0400852\b Fixed assignment the magnitude of \c{%rep} counter. It is limited
853 to 62 bits now.
854
Cyrill Gorcunov088d1512010-07-23 18:57:40 +0400855\b Fixed NULL dereference if argument of \c{%strlen} resolves
856 to whitespace. For example if nonexistent macro parameter is used.
857
H. Peter Anvin077fb932010-07-20 14:56:30 -0700858\b \c{%ifenv}, \c{%elifenv}, \c{%ifnenv}, and \c{%elifnenv} directives
859 introduced. See \k{ifenv}.
Bryant Kellera537d492010-07-13 23:49:39 +0400860
Cyrill Gorcunov702df6d2010-07-13 20:59:46 +0400861\b Fixed NULL dereference if environment variable is missed.
862
Cyrill Gorcunovaed4eaa2010-07-17 18:24:13 +0400863\b Updates of new AVX v7 Intel instructions.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400864
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400865\b \c{PUSH imm32} is now officially documented.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400866
867\b Fix for encoding the LFS, LGS and LSS in 64-bit mode.
868
H. Peter Anvin077fb932010-07-20 14:56:30 -0700869\b Fixes for compatibility with OpenWatcom compiler and DOS 8.3 file
870 format limitation.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400871
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400872\b Macros parameters range expansion introduced. See \k{mlmacrange}.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400873
H. Peter Anvinab5bd052010-07-25 12:43:30 -0700874\b Backward compatibility on expanging of local sigle macros restored.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400875
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400876\b 8 bit relocations for \c{elf} and \c{bin} output formats are introduced.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400877
878\b Short intersegment jumps are permitted now.
879
Cyrill Gorcunov327edcf2010-08-16 13:47:24 +0400880\b An alignment more than 64 bytes are allowed for \c{win32},
H. Peter Anvin077fb932010-07-20 14:56:30 -0700881 \c{win64} output formats.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400882
Cyrill Gorcunov407e6c72010-07-28 17:59:49 +0400883\b \c{SECTALIGN} directive introduced. See \k{sectalign}.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400884
H. Peter Anvin077fb932010-07-20 14:56:30 -0700885\b \c{nojmp} option introduced in \c{smartalign} package. See
886 \k{pkg_smartalign}.
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400887
H. Peter Anvin077fb932010-07-20 14:56:30 -0700888\b Short aliases \c{win}, \c{elf} and \c{macho} for output formats are
889 introduced. Each stands for \c{win32}, \c{elf32} and \c{macho32}
890 accordingly.
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400891
892\b Faster handling of missing directives implemented.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400893
894\b Various small improvements in documentation.
895
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400896\b No hang anymore if unable to open malloc.log file.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400897
Cyrill Gorcunov924df0d2010-07-12 23:15:01 +0400898\b The environments without vsnprintf function are able to build nasm again.
Cyrill Gorcunovf2c1cb02010-07-07 01:48:33 +0400899
900\b AMD LWP instructions updated.
901
902\b Tighten EA checks. We warn a user if there overflow in EA addressing.
903
H. Peter Anvin31387b22010-07-15 18:28:52 -0700904\b Make \c{-Ox} the default optimization level. For the legacy
H. Peter Anvinab5bd052010-07-25 12:43:30 -0700905 behavior, specify \c{-O0} explicitly. See \k{opt-O}.
H. Peter Anvin31387b22010-07-15 18:28:52 -0700906
H. Peter Anvin077fb932010-07-20 14:56:30 -0700907\b Environment variables read with \c{%!} or tested with \c{%ifenv}
908 can now contain non-identifier characters if surrounded by quotes.
909 See \k{getenv}.
910
H. Peter Anvin2d3dce22010-08-24 09:55:27 -0700911\b Add a new standard macro package \c{%use fp} for floating-point
912 convenience macros. See \k{pkg_fp}.
913
Cyrill Gorcunovb9771902009-11-06 11:24:54 +0300914
H. Peter Anvin5bc03272010-07-15 22:44:03 -0700915\S{cl-2.08.02} Version 2.08.02
916
917\b Fix crash under certain circumstances when using the \c{%+} operator.
918
919
920\S{cl-2.08.01} Version 2.08.01
921
922\b Fix the \c{%use} statement, which was broken in 2.08.
923
924
H. Peter Anvin57924832009-11-09 14:58:45 -0800925\S{cl-2.08} Version 2.08
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400926
927\b A number of enhancements/fixes in macros area.
928
Keith Kanios4ea84662009-10-25 14:06:24 -0500929\b Support for converting strings to tokens. See \k{deftok}.
930
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400931\b Fuzzy operand size logic introduced.
932
Cyrill Gorcunov78debd02009-12-13 14:13:35 +0300933\b Fix COFF stack overrun on too long export identifiers.
934
Keith Kanios4ea84662009-10-25 14:06:24 -0500935\b Fix Macho-O alignment bug.
936
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400937\b Fix crashes with -fwin32 on file with many exports.
938
939\b Fix stack overrun for too long [DEBUG id].
940
Cyrill Gorcunovb9771902009-11-06 11:24:54 +0300941\b Fix incorrect sbyte usage in IMUL (hit only if optimization
942 flag passed).
943
Cyrill Gorcunov66ba8cd2009-10-18 01:09:40 +0400944\b Append ending token for \c{.stabs} records in the ELF output format.
945
946\b New NSIS script which uses ModernUI and MultiUser approach.
947
948\b Visual Studio 2008 NASM integration (rules file).
949
Cyrill Gorcunov7a8098c2010-01-03 15:41:22 +0300950\b Warn a user if a constant is too long (and as result will be stripped).
H. Peter Anvin04156cd2008-07-14 02:45:57 -0400951
H. Peter Anvin57924832009-11-09 14:58:45 -0800952\b The obsoleted pre-XOP AMD SSE5 instruction set which was never actualized
953 was removed.
954
Cyrill Gorcunov78debd02009-12-13 14:13:35 +0300955\b Fix stack overrun on too long error file name passed from the command line.
Keith Kanios4ea84662009-10-25 14:06:24 -0500956
Cyrill Gorcunov7a8098c2010-01-03 15:41:22 +0300957\b Bind symbols to the .text section by default (ie in case if SECTION
958 directive was omitted) in the ELF output format.
959
960\b Fix sync points array index wrapping.
961
962\b A few fixes for FMA4 and XOP instruction templates.
963
964\b Add AMD Lightweight Profiling (LWP) instructions.
965
H. Peter Anvin3af37792010-02-15 10:15:53 -0800966\b Fix the offset for \c{%arg} in 64-bit mode.
967
968\b An undefined local macro (\c{%$}) no longer matches a global macro
969 with the same name.
970
Cyrill Gorcunov3dce1e12010-03-03 23:13:48 +0300971\b Fix NULL dereference on too long local labels.
H. Peter Anvin3af37792010-02-15 10:15:53 -0800972
Cyrill Gorcunov90bb2852010-03-03 23:15:25 +0300973
H. Peter Anvinfba06d22009-07-06 11:28:12 -0700974\S{cl-2.07} Version 2.07
975
976\b NASM is now under the 2-clause BSD license. See \k{legal}.
977
978\b Fix the section type for the \c{.strtab} section in the \c{elf64}
979 output format.
980
981\b Fix the handling of \c{COMMON} directives in the \c{obj} output format.
982
983\b New \c{ith} and \c{srec} output formats; these are variants of the
984 \c{bin} output format which output Intel hex and Motorola S-records,
985 respectively. See \k{ithfmt} and \k{srecfmt}.
986
987\b \c{rdf2ihx} replaced with an enhanced \c{rdf2bin}, which can output
988 binary, COM, Intel hex or Motorola S-records.
989
990\b The Windows installer now puts the NASM directory first in the
991 \c{PATH} of the "NASM Shell".
992
H. Peter Anvin83b942d2009-07-06 19:00:08 -0700993\b Revert the early expansion behavior of \c{%+} to pre-2.06 behavior:
994 \c{%+} is only expanded late.
995
H. Peter Anvine227fe62009-07-06 19:27:33 -0700996\b Yet another Mach-O alignment fix.
997
H. Peter Anvina7a14b22009-07-07 16:08:56 -0700998\b Don't delete the list file on errors. Also, include error and
999 warning information in the list file.
1000
H. Peter Anvina6e25b52009-07-08 21:32:28 -07001001\b Support for 64-bit Mach-O output, see \k{machofmt}.
1002
H. Peter Anvina99c9842009-07-15 17:43:32 -04001003\b Fix assert failure on certain operations that involve strings with
1004 high-bit bytes.
H. Peter Anvincc6ee1a2009-07-15 16:31:55 -04001005
H. Peter Anvinfba06d22009-07-06 11:28:12 -07001006
H. Peter Anvinb34fce72008-10-24 16:05:19 -07001007\S{cl-2.06} Version 2.06
1008
H. Peter Anvinc940afc2009-06-28 17:12:37 -07001009\b This release is dedicated to the memory of Charles A. Crayne, long
1010 time NASM developer as well as moderator of \c{comp.lang.asm.x86} and
1011 author of the book \e{Serious Assembler}. We miss you, Chuck.
1012
H. Peter Anvinb34fce72008-10-24 16:05:19 -07001013\b Support for indirect macro expansion (\c{%[...]}). See \k{indmacro}.
1014
H. Peter Anvin0b7d9032008-10-24 16:27:11 -07001015\b \c{%pop} can now take an argument, see \k{pushpop}.
1016
H. Peter Anvin264b7b92008-10-24 16:38:17 -07001017\b The argument to \c{%use} is no longer macro-expanded. Use
1018 \c{%[...]} if macro expansion is desired.
1019
H. Peter Anvine263d042008-11-02 20:41:29 -08001020\b Support for thread-local storage in ELF32 and ELF64. See \k{elftls}.
1021
H. Peter Anvin67a405e2008-11-04 14:26:32 -08001022\b Fix crash on \c{%ifmacro} without an argument.
1023
H. Peter Anvin67478812008-11-06 09:42:11 -08001024\b Correct the arguments to the \c{POPCNT} instruction.
1025
H. Peter Anvinfd925d92008-12-22 16:37:59 -08001026\b Fix section alignment in the Mach-O format.
1027
H. Peter Anvine8a3e622009-02-18 14:13:25 -08001028\b Update AVX support to version 5 of the Intel specification.
1029
H. Peter Anvin87513882009-02-21 18:26:20 -08001030\b Fix the handling of accesses to context-local macros from higher
1031 levels in the context stack.
1032
1033\b Treat \c{WAIT} as a prefix rather than as an instruction, thereby
1034 allowing constructs like \c{O16 FSAVE} to work correctly.
1035
Victor van den Elzenb32536c2009-03-29 03:09:13 +02001036\b Support for structures with a non-zero base offset. See \k{struc}.
1037
H. Peter Anvin9c7f3f52009-04-07 22:09:05 -07001038\b Correctly handle preprocessor token concatenation (see \k{concat})
1039 involving floating-point numbers.
1040
H. Peter Anvin883735f2009-06-25 11:23:37 -07001041\b The \c{PINSR} series of instructions have been corrected and
1042 rationalized.
1043
1044\b Removed AMD SSE5, replaced with the new XOP/FMA4/CVT16 (rev 3.03)
1045 spec.
1046
H. Peter Anvind219a3e2009-06-25 12:30:50 -07001047\b The ELF backends no longer automatically generate a \c{.comment} section.
1048
H. Peter Anvinc4471462009-06-25 14:54:44 -07001049\b Add additional "well-known" ELF sections with default attributes. See
1050 \k{elfsect}.
1051
H. Peter Anvinb34fce72008-10-24 16:05:19 -07001052
H. Peter Anvin7714ced2008-10-29 10:51:51 -07001053\S{cl-2.05.01} Version 2.05.01
1054
1055\b Fix the \c{-w}/\c{-W} option parsing, which was broken in NASM 2.05.
1056
1057
H. Peter Anvindc0bf472008-09-30 16:24:47 -07001058\S{cl-2.05} Version 2.05
1059
H. Peter Anvin1abb9e52008-09-30 17:14:54 -07001060\b Fix redundant REX.W prefix on \c{JMP reg64}.
1061
H. Peter Anvindc0bf472008-09-30 16:24:47 -07001062\b Make the behaviour of \c{-O0} match NASM 0.98 legacy behavior.
1063 See \k{opt-O}.
1064
H. Peter Anvin2f160432008-09-30 16:39:17 -07001065\b \c{-w-user} can be used to suppress the output of \c{%warning} directives.
1066 See \k{opt-w}.
1067
H. Peter Anvina3a60e92008-10-01 10:02:44 -07001068\b Fix bug where \c{ALIGN} would issue a full alignment datum instead of
1069 zero bytes.
1070
1071\b Fix offsets in list files.
1072
1073\b Fix \c{%include} inside multi-line macros or loops.
1074
H. Peter Anvin6c80ab62008-10-04 18:50:47 -07001075\b Fix error where NASM would generate a spurious warning on valid
1076 optimizations of immediate values.
1077
H. Peter Anvin04c60522008-10-06 18:00:13 -07001078\b Fix arguments to a number of the \c{CVT} SSE instructions.
1079
H. Peter Anvin68b41d32008-10-06 19:15:42 -07001080\b Fix RIP-relative offsets when the instruction carries an immediate.
1081
H. Peter Anvin3ffd0fc2008-10-17 23:36:45 -07001082\b Massive overhaul of the ELF64 backend for spec compliance.
H. Peter Anvin8cd1df82008-10-12 21:17:04 -07001083
H. Peter Anvin7766ab02008-10-23 19:29:28 -07001084\b Fix the Geode \c{PFRCPV} and \c{PFRSQRTV} instruction.
1085
1086\b Fix the SSE 4.2 \c{CRC32} instruction.
1087
H. Peter Anvindc0bf472008-09-30 16:24:47 -07001088
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001089\S{cl-2.04} Version 2.04
1090
H. Peter Anvin6477f3d2008-07-14 02:49:52 -04001091\b Sanitize macro handing in the \c{%error} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001092
H. Peter Anvin6477f3d2008-07-14 02:49:52 -04001093\b New \c{%warning} directive to issue user-controlled warnings.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001094
H. Peter Anvin8e3f75e2008-09-24 00:21:58 -07001095\b \c{%error} directives are now deferred to the final assembly phase.
1096
1097\b New \c{%fatal} directive to immediately terminate assembly.
1098
H. Peter Anvindf73e0b2008-09-03 15:16:44 -07001099\b New \c{%strcat} directive to join quoted strings together.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001100
H. Peter Anvindf73e0b2008-09-03 15:16:44 -07001101\b New \c{%use} macro directive to support standard macro directives. See
1102 \k{use}.
1103
1104\b Excess default parameters to \c{%macro} now issues a warning by default.
1105 See \k{mlmacro}.
1106
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -07001107\b Fix \c{%ifn} and \c{%elifn}.
1108
1109\b Fix nested \c{%else} clauses.
1110
1111\b Correct the handling of nested \c{%rep}s.
1112
1113\b New \c{%unmacro} directive to undeclare a multi-line macro.
1114 See \k{unmacro}.
1115
H. Peter Anvin010aee22008-09-24 17:34:37 -07001116\b Builtin macro \c{__PASS__} which expands to the current assembly pass.
1117 See \k{pass_macro}.
1118
H. Peter Anvin13f1f3e2008-09-24 08:59:29 -07001119\b \c{__utf16__} and \c{__utf32__} operators to generate UTF-16 and UTF-32
1120 strings. See \k{unicode}.
1121
1122\b Fix bug in case-insensitive matching when compiled on platforms that
1123 don't use the \c{configure} script. Of the official release binaries,
1124 that only affected the OS/2 binary.
1125
1126\b Support for x87 packed BCD constants. See \k{bcdconst}.
1127
1128\b Correct the \c{LTR} and \c{SLDT} instructions in 64-bit mode.
1129
1130\b Fix unnecessary REX.W prefix on indirect jumps in 64-bit mode.
1131
1132\b Add AVX versions of the AES instructions (\c{VAES}...).
1133
1134\b Fix the 256-bit FMA instructions.
1135
1136\b Add 256-bit AVX stores per the latest AVX spec.
1137
1138\b VIA XCRYPT instructions can now be written either with or without
1139 \c{REP}, apparently different versions of the VIA spec wrote them
1140 differently.
1141
1142\b Add missing 64-bit \c{MOVNTI} instruction.
1143
1144\b Fix the operand size of \c{VMREAD} and \c{VMWRITE}.
1145
H. Peter Anvindf73e0b2008-09-03 15:16:44 -07001146\b Numerous bug fixes, especially to the AES, AVX and VTX instructions.
1147
H. Peter Anvina2d542c2008-09-10 23:04:56 -07001148\b The optimizer now always runs until it converges. It also runs even
1149 when disabled, but doesn't optimize. This allows most forward references
1150 to be resolved properly.
1151
H. Peter Anvinc83f9de2008-10-24 16:53:53 -07001152\b \c{%push} no longer needs a context identifier; omitting the context
1153 identifier results in an anonymous context.
1154
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001155
1156\S{cl-2.03.01} Version 2.03.01
1157
1158\b Fix buffer overflow in the listing module.
1159
1160\b Fix the handling of hexadecimal escape codes in `...` strings.
1161
1162\b The Postscript/PDF documentation has been reformatted.
1163
1164\b The \c{-F} option now implies \c{-g}.
1165
1166
1167\S{cl-2.03} Version 2.03
1168
1169\b Add support for Intel AVX, CLMUL and FMA instructions,
1170including YMM registers.
1171
1172\b \c{dy}, \c{resy} and \c{yword} for 32-byte operands.
1173
1174\b Fix some SSE5 instructions.
1175
1176\b Intel \c{INVEPT}, \c{INVVPID} and \c{MOVBE} instructions.
1177
1178\b Fix checking for critical expressions when the optimizer is enabled.
1179
1180\b Support the DWARF debugging format for ELF targets.
1181
1182\b Fix optimizations of signed bytes.
1183
1184\b Fix operation on bigendian machines.
1185
1186\b Fix buffer overflow in the preprocessor.
1187
1188\b \c{SAFESEH} support for Win32, \c{IMAGEREL} for Win64 (SEH).
1189
1190\b \c{%?} and \c{%??} to refer to the name of a macro itself. In particular,
1191\c{%idefine keyword $%?} can be used to make a keyword "disappear".
1192
1193\b New options for dependency generation: \c{-MD}, \c{-MF},
1194\c{-MP}, \c{-MT}, \c{-MQ}.
1195
1196\b New preprocessor directives \c{%pathsearch} and \c{%depend}; INCBIN
1197reimplemented as a macro.
1198
1199\b \c{%include} now resolves macros in a sane manner.
1200
1201\b \c{%substr} can now be used to get other than one-character substrings.
1202
1203\b New type of character/string constants, using backquotes (\c{`...`}),
1204which support C-style escape sequences.
1205
1206\b \c{%defstr} and \c{%idefstr} to stringize macro definitions before
1207creation.
1208
1209\b Fix forward references used in \c{EQU} statements.
1210
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001211
H. Peter Anvina5e02792009-06-24 16:50:54 -07001212\S{cl-2.02} Version 2.02
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001213
1214\b Additional fixes for MMX operands with explicit \c{qword}, as well as
1215 (hopefully) SSE operands with \c{oword}.
1216
1217\b Fix handling of truncated strings with \c{DO}.
1218
1219\b Fix segfaults due to memory overwrites when floating-point constants
1220 were used.
1221
1222\b Fix segfaults due to missing include files.
1223
1224\b Fix OpenWatcom Makefiles for DOS and OS/2.
1225
1226\b Add autogenerated instruction list back into the documentation.
1227
1228\b ELF: Fix segfault when generating stabs, and no symbols have been
1229 defined.
1230
1231\b ELF: Experimental support for DWARF debugging information.
1232
1233\b New compile date and time standard macros.
1234
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001235\b \c{%ifnum} now returns true for negative numbers.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001236
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001237\b New \c{%iftoken} test for a single token.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001238
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001239\b New \c{%ifempty} test for empty expansion.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001240
1241\b Add support for the \c{XSAVE} instruction group.
1242
1243\b Makefile for Netware/gcc.
1244
1245\b Fix issue with some warnings getting emitted way too many times.
1246
1247\b Autogenerated instruction list added to the documentation.
1248
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001249
H. Peter Anvina5e02792009-06-24 16:50:54 -07001250\S{cl-2.01} Version 2.01
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001251
1252\b Fix the handling of MMX registers with explicit \c{qword} tags on
1253 memory (broken in 2.00 due to 64-bit changes.)
1254
1255\b Fix the PREFETCH instructions.
1256
1257\b Fix the documentation.
1258
1259\b Fix debugging info when using \c{-f elf}
1260(backwards compatibility alias for \c{-f elf32}).
1261
1262\b Man pages for rdoff tools (from the Debian project.)
1263
1264\b ELF: handle large numbers of sections.
1265
1266\b Fix corrupt output when the optimizer runs out of passes.
1267
1268
1269\S{cl-2.00} Version 2.00
1270
1271\b Added c99 data-type compliance.
1272
1273\b Added general x86-64 support.
1274
1275\b Added win64 (x86-64 COFF) output format.
1276
1277\b Added \c{__BITS__} standard macro.
1278
1279\b Renamed the \c{elf} output format to \c{elf32} for clarity.
1280
1281\b Added \c{elf64} and \c{macho} (MacOS X) output formats.
1282
1283\b Added Numeric constants in \c{dq} directive.
1284
1285\b Added \c{oword}, \c{do} and \c{reso} pseudo operands.
1286
1287\b Allow underscores in numbers.
1288
1289\b Added 8-, 16- and 128-bit floating-point formats.
1290
1291\b Added binary, octal and hexadecimal floating-point.
1292
1293\b Correct the generation of floating-point constants.
1294
1295\b Added floating-point option control.
1296
1297\b Added Infinity and NaN floating point support.
1298
1299\b Added ELF Symbol Visibility support.
1300
1301\b Added setting OSABI value in ELF header directive.
1302
1303\b Added Generate Makefile Dependencies option.
1304
1305\b Added Unlimited Optimization Passes option.
1306
1307\b Added \c{%IFN} and \c{%ELIFN} support.
1308
1309\b Added Logical Negation Operator.
1310
1311\b Enhanced Stack Relative Preprocessor Directives.
1312
1313\b Enhanced ELF Debug Formats.
1314
1315\b Enhanced Send Errors to a File option.
1316
1317\b Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
1318
1319\b Added a large number of additional instructions.
1320
1321\b Significant performance improvements.
1322
H. Peter Anvin8a2f1452008-10-29 18:14:03 -07001323\b \c{-w+warning} and \c{-w-warning} can now be written as -Wwarning and
1324 -Wno-warning, respectively. See \k{opt-w}.
1325
1326\b Add \c{-w+error} to treat warnings as errors. See \k{opt-w}.
1327
1328\b Add \c{-w+all} and \c{-w-all} to enable or disable all suppressible
1329 warnings. See \k{opt-w}.
1330
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001331
1332\H{cl-0.98.xx} NASM 0.98 Series
1333
1334The 0.98 series was the production versions of NASM from 1999 to 2007.
1335
1336
1337\S{cl-0.98.39} Version 0.98.39
1338
1339\b fix buffer overflow
1340
1341\b fix outas86's \c{.bss} handling
1342
1343\b "make spotless" no longer deletes config.h.in.
1344
1345\b \c{%(el)if(n)idn} insensitivity to string quotes difference (#809300).
1346
1347\b (nasm.c)\c{__OUTPUT_FORMAT__} changed to string value instead of symbol.
1348
1349\S{cl-0.98.38} Version 0.98.38
1350
1351
1352\b Add Makefile for 16-bit DOS binaries under OpenWatcom, and modify
1353 \c{mkdep.pl} to be able to generate completely pathless dependencies, as
1354 required by OpenWatcom wmake (it supports path searches, but not
1355 explicit paths.)
1356
1357\b Fix the \c{STR} instruction.
1358
1359\b Fix the ELF output format, which was broken under certain
1360 circumstances due to the addition of stabs support.
1361
1362\b Quick-fix Borland format debug-info for \c{-f obj}
1363
1364\b Fix for \c{%rep} with no arguments (#560568)
1365
1366\b Fix concatenation of preprocessor function call (#794686)
1367
1368\b Fix long label causes coredump (#677841)
1369
1370\b Use autoheader as well as autoconf to keep configure from generating
1371 ridiculously long command lines.
1372
1373\b Make sure that all of the formats which support debugging output
1374 actually will suppress debugging output when \c{-g} not specified.
1375
1376\S{cl-0.98.37} Version 0.98.37
1377
1378
1379\b Paths given in \c{-I} switch searched for \c{incbin}-ed as
1380 well as \c{%include}-ed files.
1381
1382\b Added stabs debugging for the ELF output format, patch from
1383 Martin Wawro.
1384
1385\b Fix \c{output/outbin.c} to allow origin > 80000000h.
1386
1387\b Make \c{-U} switch work.
1388
1389\b Fix the use of relative offsets with explicit prefixes, e.g.
1390\c{a32 loop foo}.
1391
1392\b Remove \c{backslash()}.
1393
1394\b Fix the \c{SMSW} and \c{SLDT} instructions.
1395
1396\b \c{-O2} and \c{-O3} are no longer aliases for \c{-O10} and \c{-O15}.
1397If you mean the latter, please say so! :)
1398
1399\S{cl-0.98.36} Version 0.98.36
1400
1401
1402\b Update rdoff - librarian/archiver - common rec - docs!
1403
1404\b Fix signed/unsigned problems.
1405
1406\b Fix \c{JMP FAR label} and \c{CALL FAR label}.
1407
1408\b Add new multisection support - map files - fix align bug
1409
1410\b Fix sysexit, movhps/movlps reg,reg bugs in insns.dat
1411
1412\b \c{Q} or \c{O} suffixes indicate octal
1413
1414\b Support Prescott new instructions (PNI).
1415
1416\b Cyrix \c{XSTORE} instruction.
1417
1418
1419\S{cl-0.98.35} Version 0.98.35
1420
1421\b Fix build failure on 16-bit DOS (Makefile.bc3 workaround for compiler bug.)
1422
1423\b Fix dependencies and compiler warnings.
1424
1425\b Add "const" in a number of places.
1426
1427\b Add -X option to specify error reporting format (use -Xvc to
1428 integrate with Microsoft Visual Studio.)
1429
1430\b Minor changes for code legibility.
1431
1432\b Drop use of tmpnam() in rdoff (security fix.)
1433
1434
1435\S{cl-0.98.34} Version 0.98.34
1436
1437\b Correct additional address-size vs. operand-size confusions.
1438
1439\b Generate dependencies for all Makefiles automatically.
1440
1441\b Add support for unimplemented (but theoretically available)
1442 registers such as tr0 and cr5. Segment registers 6 and 7 are called
1443 segr6 and segr7 for the operations which they can be represented.
1444
1445\b Correct some disassembler bugs related to redundant address-size prefixes.
1446 Some work still remains in this area.
1447
1448\b Correctly generate an error for things like "SEG eax".
1449
1450\b Add the JMPE instruction, enabled by "CPU IA64".
1451
1452\b Correct compilation on newer gcc/glibc platforms.
1453
1454\b Issue an error on things like "jmp far eax".
1455
1456
1457\S{cl-0.98.33} Version 0.98.33
1458
1459\b New __NASM_PATCHLEVEL__ and __NASM_VERSION_ID__ standard macros to
1460 round out the version-query macros. version.pl now understands
1461 X.YYplWW or X.YY.ZZplWW as a version number, equivalent to
1462 X.YY.ZZ.WW (or X.YY.0.WW, as appropriate).
1463
1464\b New keyword "strict" to disable the optimization of specific
1465 operands.
1466
1467\b Fix the handing of size overrides with JMP instructions
1468 (instructions such as "jmp dword foo".)
1469
1470\b Fix the handling of "ABSOLUTE label", where "label" points into a
1471 relocatable segment.
1472
1473\b Fix OBJ output format with lots of externs.
1474
1475\b More documentation updates.
1476
1477\b Add -Ov option to get verbose information about optimizations.
1478
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001479\b Undo a braindead change which broke \c{%elif} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001480
1481\b Makefile updates.
1482
1483
1484\S{cl-0.98.32} Version 0.98.32
1485
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001486\b Fix NASM crashing when \c{%macro} directives were left unterminated.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001487
1488\b Lots of documentation updates.
1489
1490\b Complete rewrite of the PostScript/PDF documentation generator.
1491
1492\b The MS Visual C++ Makefile was updated and corrected.
1493
1494\b Recognize .rodata as a standard section name in ELF.
1495
1496\b Fix some obsolete Perl4-isms in Perl scripts.
1497
1498\b Fix configure.in to work with autoconf 2.5x.
1499
1500\b Fix a couple of "make cleaner" misses.
1501
1502\b Make the normal "./configure && make" work with Cygwin.
1503
1504
1505\S{cl-0.98.31} Version 0.98.31
1506
1507\b Correctly build in a separate object directory again.
1508
1509\b Derive all references to the version number from the version file.
1510
1511\b New standard macros __NASM_SUBMINOR__ and __NASM_VER__ macros.
1512
1513\b Lots of Makefile updates and bug fixes.
1514
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001515\b New \c{%ifmacro} directive to test for multiline macros.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001516
1517\b Documentation updates.
1518
1519\b Fixes for 16-bit OBJ format output.
1520
1521\b Changed the NASM environment variable to NASMENV.
1522
1523
1524\S{cl-0.98.30} Version 0.98.30
1525
1526\b Changed doc files a lot: completely removed old READMExx and
1527 Wishlist files, incorporating all information in CHANGES and TODO.
1528
1529\b I waited a long time to rename zoutieee.c to (original) outieee.c
1530
1531\b moved all output modules to output/ subdirectory.
1532
1533\b Added 'make strip' target to strip debug info from nasm & ndisasm.
1534
1535\b Added INSTALL file with installation instructions.
1536
1537\b Added -v option description to nasm man.
1538
1539\b Added dist makefile target to produce source distributions.
1540
1541\b 16-bit support for ELF output format (GNU extension, but useful.)
1542
1543
1544\S{cl-0.98.28} Version 0.98.28
1545
1546\b Fastcooked this for Debian's Woody release:
1547Frank applied the INCBIN bug patch to 0.98.25alt and called
1548it 0.98.28 to not confuse poor little apt-get.
1549
1550
1551\S{cl-0.98.26} Version 0.98.26
1552
1553\b Reorganised files even better from 0.98.25alt
1554
1555
1556\S{cl-0.98.25alt} Version 0.98.25alt
1557
1558\b Prettified the source tree. Moved files to more reasonable places.
1559
1560\b Added findleak.pl script to misc/ directory.
1561
1562\b Attempted to fix doc.
1563
1564
1565\S{cl-0.98.25} Version 0.98.25
1566
1567\b Line continuation character \c{\\}.
1568
1569\b Docs inadvertantly reverted - "dos packaging".
1570
1571
1572\S{cl-0.98.24p1} Version 0.98.24p1
1573
1574\b FIXME: Someone, document this please.
1575
1576
1577\S{cl-0.98.24} Version 0.98.24
1578
1579\b Documentation - Ndisasm doc added to Nasm.doc.
1580
1581
1582\S{cl-0.98.23} Version 0.98.23
1583
1584\b Attempted to remove rdoff version1
1585
1586\b Lino Mastrodomenico's patches to preproc.c (%$$ bug?).
1587
1588
1589\S{cl-0.98.22} Version 0.98.22
1590
1591\b Update rdoff2 - attempt to remove v1.
1592
1593
1594\S{cl-0.98.21} Version 0.98.21
1595
1596\b Optimization fixes.
1597
1598
1599\S{cl-0.98.20} Version 0.98.20
1600
1601\b Optimization fixes.
1602
1603
1604\S{cl-0.98.19} Version 0.98.19
1605
1606\b H. J. Lu's patch back out.
1607
1608
1609\S{cl-0.98.18} Version 0.98.18
1610
1611\b Added ".rdata" to "-f win32".
1612
1613
1614\S{cl-0.98.17} Version 0.98.17
1615
1616\b H. J. Lu's "bogus elf" patch. (Red Hat problem?)
1617
1618
1619\S{cl-0.98.16} Version 0.98.16
1620
1621\b Fix whitespace before "[section ..." bug.
1622
1623
1624\S{cl-0.98.15} Version 0.98.15
1625
1626\b Rdoff changes (?).
1627
1628\b Fix fixes to memory leaks.
1629
1630
1631\S{cl-0.98.14} Version 0.98.14
1632
1633\b Fix memory leaks.
1634
1635
1636\S{cl-0.98.13} Version 0.98.13
1637
1638\b There was no 0.98.13
1639
1640
1641\S{cl-0.98.12} Version 0.98.12
1642
1643\b Update optimization (new function of "-O1")
1644
1645\b Changes to test/bintest.asm (?).
1646
1647
1648\S{cl-0.98.11} Version 0.98.11
1649
1650\b Optimization changes.
1651
1652\b Ndisasm fixed.
1653
1654
1655\S{cl-0.98.10} Version 0.98.10
1656
1657\b There was no 0.98.10
1658
1659
1660\S{cl-0.98.09} Version 0.98.09
1661
1662\b Add multiple sections support to "-f bin".
1663
1664\b Changed GLOBAL_TEMP_BASE in outelf.c from 6 to 15.
1665
1666\b Add "-v" as an alias to the "-r" switch.
1667
1668\b Remove "#ifdef" from Tasm compatibility options.
1669
1670\b Remove redundant size-overrides on "mov ds, ex", etc.
1671
1672\b Fixes to SSE2, other insns.dat (?).
1673
1674\b Enable uppercase "I" and "P" switches.
1675
1676\b Case insinsitive "seg" and "wrt".
1677
1678\b Update install.sh (?).
1679
1680\b Allocate tokens in blocks.
1681
1682\b Improve "invalid effective address" messages.
1683
1684
1685\S{cl-0.98.08} Version 0.98.08
1686
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001687\b Add "\c{%strlen}" and "\c{%substr}" macro operators
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001688
1689\b Fixed broken c16.mac.
1690
1691\b Unterminated string error reported.
1692
1693\b Fixed bugs as per 0.98bf
1694
1695
1696\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
1697
1698Changes from 0.98.07 release to 98.09b as of 28-Oct-2001
1699
1700\b More closely compatible with 0.98 when -O0 is implied
H. Peter Anvinf805cde2017-02-23 17:19:56 -08001701or specified. Not strictly identical, since backward
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001702branches in range of short offsets are recognized, and signed
1703byte values with no explicit size specification will be
1704assembled as a single byte.
1705
1706\b More forgiving with the PUSH instruction. 0.98 requires
1707a size to be specified always. 0.98.09b will imply the size
1708from the current BITS setting (16 or 32).
1709
1710\b Changed definition of the optimization flag:
1711
H. Peter Anvin5194f772017-04-13 21:54:42 -07001712\c -O0 strict two-pass assembly, JMP and Jcc are
1713\c handled more like 0.98, except that back-
1714\c ward JMPs are short, if possible.
1715\c
1716\c -O1 strict two-pass assembly, but forward
1717\c branches are assembled with code guaranteed
1718\c to reach; may produce larger code than
1719\c -O0, but will produce successful assembly
1720\c more often if branch offset sizes are not
1721\c specified.
1722\c
1723\c -O2 multi-pass optimization, minimize branch
1724\c offsets; also will minimize signed immed-
1725\c iate bytes, overriding size specification.
1726\c
1727\c -O3 like -O2, but more passes taken, if needed
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001728
1729
1730\S{cl-0.98.07 released 01/28/01} Version 0.98.07 released 01/28/01
1731
H. Peter Anvin5194f772017-04-13 21:54:42 -07001732\b Added Stepane Denis' SSE2 instructions to a *working*
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001733 version of the code - some earlier versions were based on
1734 broken code - sorry 'bout that. version "0.98.07"
1735
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001736\b Cosmetic modifications to nasm.c, nasm.h,
1737 AUTHORS, MODIFIED
1738
1739
1740\S{cl-0.98.06f released 01/18/01} Version 0.98.06f released 01/18/01
1741
1742
H. Peter Anvin5194f772017-04-13 21:54:42 -07001743\b Add "metalbrain"s jecxz bug fix in insns.dat
1744
1745\b Alter nasmdoc.src to match - version "0.98.06f"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001746
1747
1748\S{cl-0.98.06e released 01/09/01} Version 0.98.06e released 01/09/01
1749
1750
1751\b Removed the "outforms.h" file - it appears to be
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001752 someone's old backup of "outform.h". version "0.98.06e"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001753
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001754\b fbk - finally added the fix for the "multiple %includes bug",
1755 known since 7/27/99 - reported originally (?) and sent to
1756 us by Austin Lunnen - he reports that John Fine had a fix
1757 within the day. Here it is...
1758
1759\b Nelson Rush resigns from the group. Big thanks to Nelson for
1760 his leadership and enthusiasm in getting these changes
1761 incorporated into Nasm!
1762
1763\b fbk - [list +], [list -] directives - ineptly implemented, should
1764 be re-written or removed, perhaps.
1765
1766\b Brian Raiter / fbk - "elfso bug" fix - applied to aoutb format
1767 as well - testing might be desirable...
1768
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001769\b James Seter - -postfix, -prefix command line switches.
1770
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001771\b Yuri Zaporozhets - rdoff utility changes.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001772
1773
1774\S{cl-0.98p1} Version 0.98p1
1775
1776\b GAS-like palign (Panos Minos)
1777
1778\b FIXME: Someone, fill this in with details
1779
1780
1781\S{cl-0.98bf (bug-fixed)} Version 0.98bf (bug-fixed)
1782
1783\b Fixed - elf and aoutb bug - shared libraries
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001784 - multiple "%include" bug in "-f obj"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001785 - jcxz, jecxz bug
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001786 - unrecognized option bug in ndisasm
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001787
1788\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
1789
1790\b Added signed byte optimizations for the 0x81/0x83 class
1791of instructions: ADC, ADD, AND, CMP, OR, SBB, SUB, XOR:
1792when used as 'ADD reg16,imm' or 'ADD reg32,imm.' Also
1793optimization of signed byte form of 'PUSH imm' and 'IMUL
1794reg,imm'/'IMUL reg,reg,imm.' No size specification is needed.
1795
1796\b Added multi-pass JMP and Jcc offset optimization. Offsets
1797on forward references will preferentially use the short form,
1798without the need to code a specific size (short or near) for
1799the branch. Added instructions for 'Jcc label' to use the
1800form 'Jnotcc $+3/JMP label', in cases where a short offset
1801is out of bounds. If compiling for a 386 or higher CPU, then
1802the 386 form of Jcc will be used instead.
1803
H. Peter Anvin5194f772017-04-13 21:54:42 -07001804\> This feature is controlled by a new command-line switch: "O",
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001805(upper case letter O). "-O0" reverts the assembler to no
1806extra optimization passes, "-O1" allows up to 5 extra passes,
1807and "-O2"(default), allows up to 10 extra optimization passes.
1808
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001809\b Added a new directive: 'cpu XXX', where XXX is any of:
H. Peter Anvin04156cd2008-07-14 02:45:57 -040018108086, 186, 286, 386, 486, 586, pentium, 686, PPro, P2, P3 or
1811Katmai. All are case insensitive. All instructions will
1812be selected only if they apply to the selected cpu or lower.
1813Corrected a couple of bugs in cpu-dependence in 'insns.dat'.
1814
1815\b Added to 'standard.mac', the "use16" and "use32" forms of
1816the "bits 16/32" directive. This is nothing new, just conforms
1817to a lot of other assemblers. (minor)
1818
Yuri Zaporozhets7a33af22015-01-18 20:21:14 +02001819\b Changed label allocation from 320/32 (10000 labels @ 200K+)
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001820to 32/37 (1000 labels); makes running under DOS much easier.
1821Since additional label space is allocated dynamically, this
1822should have no effect on large programs with lots of labels.
1823The 37 is a prime, believed to be better for hashing. (minor)
1824
1825
1826\S{cl-0.98.03} Version 0.98.03
1827
1828"Integrated patchfile 0.98-0.98.01. I call this version 0.98.03 for
1829historical reasons: 0.98.02 was trashed." --John Coffman
1830<johninsd@san.rr.com>, 27-Jul-2000
1831
1832\b Kendall Bennett's SciTech MGL changes
1833
1834\b Note that you must define "TASM_COMPAT" at compile-time
1835to get the Tasm Ideal Mode compatibility.
1836
1837\b All changes can be compiled in and out using the TASM_COMPAT macros,
1838and when compiled without TASM_COMPAT defined we get the exact same
1839binary as the unmodified 0.98 sources.
1840
1841\b standard.mac, macros.c: Added macros to ignore TASM directives before
1842first include
1843
1844\b nasm.h: Added extern declaration for tasm_compatible_mode
1845
1846\b nasm.c: Added global variable tasm_compatible_mode
1847
1848\b Added command line switch for TASM compatible mode (-t)
1849
1850\b Changed version command line to reflect when compiled with TASM additions
1851
1852\b Added response file processing to allow all arguments on a single
1853line (response file is @resp rather than -@resp for NASM format).
1854
1855\b labels.c: Changes islocal() macro to support TASM style @@local labels.
1856
1857\b Added islocalchar() macro to support TASM style @@local labels.
1858
1859\b parser.c: Added support for TASM style memory references (ie: mov
1860[DWORD eax],10 rather than the NASM style mov DWORD [eax],10).
1861
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001862\b preproc.c: Added new directives, \c{%arg}, \c{%local}, \c{%stacksize} to directives
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001863table
1864
1865\b Added support for TASM style directives without a leading % symbol.
1866
1867\b Integrated a block of changes from Andrew Zabolotny <bit@eltech.ru>:
1868
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001869\b A new keyword \c{%xdefine} and its case-insensitive counterpart \c{%ixdefine}.
1870They work almost the same way as \c{%define} and \c{%idefine} but expand
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001871the definition immediately, not on the invocation. Something like a cross
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001872between \c{%define} and \c{%assign}. The "x" suffix stands for "eXpand", so
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001873"xdefine" can be deciphered as "expand-and-define". Thus you can do
1874things like this:
1875
1876\c %assign ofs 0
1877\c
1878\c %macro arg 1
1879\c %xdefine %1 dword [esp+ofs]
1880\c %assign ofs ofs+4
1881\c %endmacro
1882
1883\b Changed the place where the expansion of %$name macros are expanded.
1884Now they are converted into ..@ctxnum.name form when detokenizing, so
1885there are no quirks as before when using %$name arguments to macros,
1886in macros etc. For example:
1887
1888\c %macro abc 1
1889\c %define %1 hello
1890\c %endm
1891\c
1892\c abc %$here
1893\c %$here
1894
H. Peter Anvin5194f772017-04-13 21:54:42 -07001895\> Now last line will be expanded into "hello" as expected. This also allows
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001896 for lots of goodies, a good example are extended "proc" macros included
1897 in this archive.
1898
1899\b Added a check for "cstk" in smacro_defined() before calling get_ctx() -
1900 this allows for things like:
1901
1902\c %ifdef %$abc
1903\c %endif
1904
H. Peter Anvin5194f772017-04-13 21:54:42 -07001905\> to work without warnings even in no context.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001906
1907\b Added a check for "cstk" in %if*ctx and %elif*ctx directives -
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001908 this allows to use \c{%ifctx} without excessive warnings. If there is
1909 no active context, \c{%ifctx} goes through "false" branch.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001910
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001911\b Removed "user error: " prefix with \c{%error} directive: it just clobbers the
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001912 output and has absolutely no functionality. Besides, this allows to write
1913 macros that does not differ from built-in functions in any way.
1914
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001915\b Added expansion of string that is output by \c{%error} directive. Now you
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001916 can do things like:
1917
1918\c %define hello(x) Hello, x!
1919\c
1920\c %define %$name andy
1921\c %error "hello(%$name)"
1922
H. Peter Anvin5194f772017-04-13 21:54:42 -07001923\> Same happened with \c{%include} directive.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001924
1925\b Now all directives that expect an identifier will try to expand and
1926 concatenate everything without whitespaces in between before usage.
1927 For example, with "unfixed" nasm the commands
1928
1929\c %define %$abc hello
1930\c %define __%$abc goodbye
1931\c __%$abc
1932
H. Peter Anvin5194f772017-04-13 21:54:42 -07001933\> would produce "incorrect" output: last line will expand to
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001934
1935\c hello goodbyehello
1936
H. Peter Anvin5194f772017-04-13 21:54:42 -07001937\> Not quite what you expected, eh? :-) The answer is that preprocessor
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001938 treats the \c{%define} construct as if it would be
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001939
1940\c %define __ %$abc goodbye
1941
H. Peter Anvin5194f772017-04-13 21:54:42 -07001942\> (note the white space between __ and %$abc). After my "fix" it
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001943 will "correctly" expand into
1944
1945\c goodbye
1946
H. Peter Anvin5194f772017-04-13 21:54:42 -07001947\> as expected. Note that I use quotes around words "correct", "incorrect"
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001948 etc because this is rather a feature not a bug; however current behaviour
1949 is more logical (and allows more advanced macro usage :-).
1950
1951 Same change was applied to:
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04001952 \c{%push},\c{%macro},\c{%imacro},\c{%define},\c{%idefine},\c{%xdefine},\c{%ixdefine},
1953 \c{%assign},\c{%iassign},\c{%undef}
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001954
1955\b A new directive [WARNING {+|-}warning-id] have been added. It works only
1956 if the assembly phase is enabled (i.e. it doesn't work with nasm -e).
1957
1958\b A new warning type: macro-selfref. By default this warning is disabled;
1959 when enabled NASM warns when a macro self-references itself; for example
1960 the following source:
1961
1962\c [WARNING macro-selfref]
1963\c
1964\c %macro push 1-*
1965\c %rep %0
1966\c push %1
1967\c %rotate 1
1968\c %endrep
1969\c %endmacro
1970\c
1971\c push eax,ebx,ecx
1972
H. Peter Anvin5194f772017-04-13 21:54:42 -07001973\> will produce a warning, but if we remove the first line we won't see it
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001974 anymore (which is The Right Thing To Do {tm} IMHO since C preprocessor
1975 eats such constructs without warnings at all).
1976
1977\b Added a "error" routine to preprocessor which always will set ERR_PASS1
1978 bit in severity_code. This removes annoying repeated errors on first
1979 and second passes from preprocessor.
1980
1981\b Added the %+ operator in single-line macros for concatenating two
1982 identifiers. Usage example:
1983
1984\c %define _myfunc _otherfunc
1985\c %define cextern(x) _ %+ x
1986\c cextern (myfunc)
1987
H. Peter Anvin5194f772017-04-13 21:54:42 -07001988\> After first expansion, third line will become "_myfunc". After this
H. Peter Anvin04156cd2008-07-14 02:45:57 -04001989 expansion is performed again so it becomes "_otherunc".
1990
1991\b Now if preprocessor is in a non-emitting state, no warning or error
1992 will be emitted. Example:
1993
1994\c %if 1
1995\c mov eax,ebx
1996\c %else
1997\c put anything you want between these two brackets,
1998\c even macro-parameter references %1 or local
1999\c labels %$zz or macro-local labels %%zz - no
2000\c warning will be emitted.
2001\c %endif
2002
2003\b Context-local variables on expansion as a last resort are looked up
2004 in outer contexts. For example, the following piece:
2005
2006\c %push outer
2007\c %define %$a [esp]
2008\c
2009\c %push inner
2010\c %$a
2011\c %pop
2012\c %pop
2013
H. Peter Anvin5194f772017-04-13 21:54:42 -07002014\> will expand correctly the fourth line to [esp]; if we'll define another
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002015 %$a inside the "inner" context, it will take precedence over outer
2016 definition. However, this modification has been applied only to
2017 expand_smacro and not to smacro_define: as a consequence expansion
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002018 looks in outer contexts, but \c{%ifdef} won't look in outer contexts.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002019
H. Peter Anvin5194f772017-04-13 21:54:42 -07002020\> This behaviour is needed because we don't want nested contexts to
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002021 act on already defined local macros. Example:
2022
2023\c %define %$arg1 [esp+4]
2024\c test eax,eax
2025\c if nz
2026\c mov eax,%$arg1
2027\c endif
2028
H. Peter Anvin5194f772017-04-13 21:54:42 -07002029\> In this example the "if" mmacro enters into the "if" context, so %$arg1
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002030 is not valid anymore inside "if". Of course it could be worked around
2031 by using explicitely %$$arg1 but this is ugly IMHO.
2032
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002033\b Fixed memory leak in \c{%undef}. The origline wasn't freed before
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002034 exiting on success.
2035
2036\b Fixed trap in preprocessor when line expanded to empty set of tokens.
2037 This happens, for example, in the following case:
2038
2039\c #define SOMETHING
2040\c SOMETHING
2041
2042
2043\S{cl-0.98} Version 0.98
2044
2045All changes since NASM 0.98p3 have been produced by H. Peter Anvin <hpa@zytor.com>.
2046
2047\b The documentation comment delimiter is \# not #.
2048
2049\b Allow EQU definitions to refer to external labels; reported by
2050 Pedro Gimeno.
2051
2052\b Re-enable support for RDOFF v1; reported by Pedro Gimeno.
2053
2054\b Updated License file per OK from Simon and Julian.
2055
2056
2057\S{cl-0.98p9} Version 0.98p9
2058
2059\b Update documentation (although the instruction set reference will
2060 have to wait; I don't want to hold up the 0.98 release for it.)
2061
2062\b Verified that the NASM implementation of the PEXTRW and PMOVMSKB
2063 instructions is correct. The encoding differs from what the Intel
2064 manuals document, but the Pentium III behaviour matches NASM, not
2065 the Intel manuals.
2066
2067\b Fix handling of implicit sizes in PSHUFW and PINSRW, reported by
2068 Stefan Hoffmeister.
2069
2070\b Resurrect the -s option, which was removed when changing the
2071 diagnostic output to stdout.
2072
2073
2074\S{cl-0.98p8} Version 0.98p8
2075
2076\b Fix for "DB" when NASM is running on a bigendian machine.
2077
2078\b Invoke insns.pl once for each output script, making Makefile.in
2079 legal for "make -j".
2080
2081\b Improve the Unix configure-based makefiles to make package
2082 creation easier.
2083
2084\b Included an RPM .spec file for building RPM (RedHat Package Manager)
2085 packages on Linux or Unix systems.
2086
2087\b Fix Makefile dependency problems.
2088
2089\b Change src/rdsrc.pl to include sectioning information in info
2090 output; required for install-info to work.
2091
2092\b Updated the RDOFF distribution to version 2 from Jules; minor
2093 massaging to make it compile in my environment.
2094
2095\b Split doc files that can be built by anyone with a Perl interpreter off
2096 into a separate archive.
2097
2098\b "Dress rehearsal" release!
2099
2100
2101\S{cl-0.98p7} Version 0.98p7
2102
2103\b Fixed opcodes with a third byte-sized immediate argument to not
2104 complain if given "byte" on the immediate.
2105
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002106\b Allow \c{%undef} to remove single-line macros with arguments. This
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002107 matches the behaviour of #undef in the C preprocessor.
2108
2109\b Allow -d, -u, -i and -p to be specified as -D, -U, -I and -P for
2110 compatibility with most C compilers and preprocessors. This allows
2111 Makefile options to be shared between cc and nasm, for example.
2112
2113\b Minor cleanups.
2114
2115\b Went through the list of Katmai instructions and hopefully fixed the
2116 (rather few) mistakes in it.
2117
2118\b (Hopefully) fixed a number of disassembler bugs related to ambiguous
2119 instructions (disambiguated by -p) and SSE instructions with REP.
2120
2121\b Fix for bug reported by Mark Junger: "call dword 0x12345678" should
2122 work and may add an OSP (affected CALL, JMP, Jcc).
2123
2124\b Fix for environments when "stderr" isn't a compile-time constant.
2125
2126
2127\S{cl-0.98p6} Version 0.98p6
2128
2129
2130\b Took officially over coordination of the 0.98 release; so drop
2131 the p3.x notation. Skipped p4 and p5 to avoid confusion with John
2132 Fine's J4 and J5 releases.
2133
2134\b Update the documentation; however, it still doesn't include
2135 documentation for the various new instructions. I somehow wonder if
2136 it makes sense to have an instruction set reference in the assembler
2137 manual when Intel et al have PDF versions of their manuals online.
2138
2139\b Recognize "idt" or "centaur" for the -p option to ndisasm.
2140
2141\b Changed error messages back to stderr where they belong, but add an
2142 -E option to redirect them elsewhere (the DOS shell cannot redirect
2143 stderr.)
2144
2145\b -M option to generate Makefile dependencies (based on code from Alex
2146 Verstak.)
2147
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002148\b \c{%undef} preprocessor directive, and -u option, that undefines a
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002149 single-line macro.
2150
2151\b OS/2 Makefile (Mkfiles/Makefile.os2) for Borland under OS/2; from
2152 Chuck Crayne.
2153
2154\b Various minor bugfixes (reported by):
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002155 - Dangling \c{%s} in preproc.c (Martin Junker)
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002156
2157\b THERE ARE KNOWN BUGS IN SSE AND THE OTHER KATMAI INSTRUCTIONS. I am
2158 on a trip and didn't bring the Katmai instruction reference, so I
2159 can't work on them right now.
2160
2161\b Updated the License file per agreement with Simon and Jules to
2162 include a GPL distribution clause.
2163
2164
2165\S{cl-0.98p3.7} Version 0.98p3.7
2166
2167\b (Hopefully) fixed the canned Makefiles to include the outrdf2 and
2168 zoutieee modules.
2169
2170\b Renamed changes.asm to changed.asm.
2171
2172
2173\S{cl-0.98p3.6} Version 0.98p3.6
2174
2175\b Fixed a bunch of instructions that were added in 0.98p3.5 which had
2176 memory operands, and the address-size prefix was missing from the
2177 instruction pattern.
2178
2179
2180\S{cl-0.98p3.5} Version 0.98p3.5
2181
2182\b Merged in changes from John S. Fine's 0.98-J5 release. John's based
2183 0.98-J5 on my 0.98p3.3 release; this merges the changes.
2184
2185\b Expanded the instructions flag field to a long so we can fit more
2186 flags; mark SSE (KNI) and AMD or Katmai-specific instructions as
2187 such.
2188
2189\b Fix the "PRIV" flag on a bunch of instructions, and create new
2190 "PROT" flag for protected-mode-only instructions (orthogonal to if
2191 the instruction is privileged!) and new "SMM" flag for SMM-only
2192 instructions.
2193
2194\b Added AMD-only SYSCALL and SYSRET instructions.
2195
2196\b Make SSE actually work, and add new Katmai MMX instructions.
2197
2198\b Added a -p (preferred vendor) option to ndisasm so that it can
2199 distinguish e.g. Cyrix opcodes also used in SSE. For example:
2200
2201\c ndisasm -p cyrix aliased.bin
2202\c 00000000 670F514310 paddsiw mm0,[ebx+0x10]
2203\c 00000005 670F514320 paddsiw mm0,[ebx+0x20]
2204\c ndisasm -p intel aliased.bin
2205\c 00000000 670F514310 sqrtps xmm0,[ebx+0x10]
2206\c 00000005 670F514320 sqrtps xmm0,[ebx+0x20]
2207
2208\b Added a bunch of Cyrix-specific instructions.
2209
2210
2211\S{cl-0.98p3.4} Version 0.98p3.4
2212
2213\b Made at least an attempt to modify all the additional Makefiles (in
2214 the Mkfiles directory). I can't test it, but this was the best I
2215 could do.
2216
2217\b DOS DJGPP+"Opus Make" Makefile from John S. Fine.
2218
2219\b changes.asm changes from John S. Fine.
2220
2221
2222\S{cl-0.98p3.3} Version 0.98p3.3
2223
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002224\b Patch from Conan Brink to allow nesting of \c{%rep} directives.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002225
2226\b If we're going to allow INT01 as an alias for INT1/ICEBP (one of
2227 Jules 0.98p3 changes), then we should allow INT03 as an alias for INT3
2228 as well.
2229
2230\b Updated changes.asm to include the latest changes.
2231
2232\b Tried to clean up the <CR>s that had snuck in from a DOS/Windows
2233 environment into my Unix environment, and try to make sure than
2234 DOS/Windows users get them back.
2235
2236\b We would silently generate broken tools if insns.dat wasn't sorted
2237 properly. Change insns.pl so that the order doesn't matter.
2238
2239\b Fix bug in insns.pl (introduced by me) which would cause conditional
2240 instructions to have an extra "cc" in disassembly, e.g. "jnz"
2241 disassembled as "jccnz".
2242
2243
2244\S{cl-0.98p3.2} Version 0.98p3.2
2245
2246\b Merged in John S. Fine's changes from his 0.98-J4 prerelease; see
2247 http://www.csoft.net/cz/johnfine/
2248
2249\b Changed previous "spotless" Makefile target (appropriate for distribution)
2250 to "distclean", and added "cleaner" target which is same as "clean"
2251 except deletes files generated by Perl scripts; "spotless" is union.
2252
2253\b Removed BASIC programs from distribution. Get a Perl interpreter
2254 instead (see below.)
2255
2256\b Calling this "pre-release 3.2" rather than "p3-hpa2" because of
2257 John's contributions.
2258
2259\b Actually link in the IEEE output format (zoutieee.c); fix a bunch of
2260 compiler warnings in that file. Note I don't know what IEEE output
2261 is supposed to look like, so these changes were made "blind".
2262
2263
2264\S{cl-0.98p3-hpa} Version 0.98p3-hpa
2265
2266\b Merged nasm098p3.zip with nasm-0.97.tar.gz to create a fully
2267 buildable version for Unix systems (Makefile.in updates, etc.)
2268
2269\b Changed insns.pl to create the instruction tables in nasm.h and
2270 names.c, so that a new instruction can be added by adding it *only*
2271 to insns.dat.
2272
2273\b Added the following new instructions: SYSENTER, SYSEXIT, FXSAVE,
2274 FXRSTOR, UD1, UD2 (the latter two are two opcodes that Intel
2275 guarantee will never be used; one of them is documented as UD2 in
2276 Intel documentation, the other one just as "Undefined Opcode" --
2277 calling it UD1 seemed to make sense.)
2278
2279\b MAX_SYMBOL was defined to be 9, but LOADALL286 and LOADALL386 are 10
2280 characters long. Now MAX_SYMBOL is derived from insns.dat.
2281
2282\b A note on the BASIC programs included: forget them. insns.bas is
2283 already out of date. Get yourself a Perl interpreter for your
2284 platform of choice at
2285 \W{http://www.cpan.org/ports/index.html}{http://www.cpan.org/ports/index.html}.
2286
2287
2288\S{cl-0.98p3} Version 0.98 pre-release 3
2289
2290\b added response file support, improved command line handling, new layout
2291help screen
2292
2293\b fixed limit checking bug, 'OUT byte nn, reg' bug, and a couple of rdoff
2294related bugs, updated Wishlist; 0.98 Prerelease 3.
2295
2296
2297\S{cl-0.98p2} Version 0.98 pre-release 2
2298
2299\b fixed bug in outcoff.c to do with truncating section names longer
2300than 8 characters, referencing beyond end of string; 0.98 pre-release 2
2301
2302
2303\S{cl-0.98p1} Version 0.98 pre-release 1
2304
2305\b Fixed a bug whereby STRUC didn't work at all in RDF.
2306
2307\b Fixed a problem with group specification in PUBDEFs in OBJ.
2308
2309\b Improved ease of adding new output formats. Contribution due to
2310Fox Cutter.
2311
2312\b Fixed a bug in relocations in the `bin' format: was showing up when
2313a relocatable reference crossed an 8192-byte boundary in any output
2314section.
2315
2316\b Fixed a bug in local labels: local-label lookups were inconsistent
2317between passes one and two if an EQU occurred between the definition
2318of a global label and the subsequent use of a local label local to
2319that global.
2320
2321\b Fixed a seg-fault in the preprocessor (again) which happened when
2322you use a blank line as the first line of a multi-line macro
2323definition and then defined a label on the same line as a call to
2324that macro.
2325
2326\b Fixed a stale-pointer bug in the handling of the NASM environment
2327variable. Thanks to Thomas McWilliams.
2328
2329\b ELF had a hard limit on the number of sections which caused
2330segfaults when transgressed. Fixed.
2331
2332\b Added ability for ndisasm to read from stdin by using `-' as the
2333filename.
2334
2335\b ndisasm wasn't outputting the TO keyword. Fixed.
2336
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002337\b Fixed error cascade on bogus expression in \c{%if} - an error in
2338evaluation was causing the entire \c{%if} to be discarded, thus creating
2339trouble later when the \c{%else} or \c{%endif} was encountered.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002340
2341\b Forward reference tracking was instruction-granular not operand-
2342granular, which was causing 286-specific code to be generated
2343needlessly on code of the form `shr word [forwardref],1'. Thanks to
2344Jim Hague for sending a patch.
2345
2346\b All messages now appear on stdout, as sending them to stderr serves
2347no useful purpose other than to make redirection difficult.
2348
2349\b Fixed the problem with EQUs pointing to an external symbol - this
2350now generates an error message.
2351
2352\b Allowed multiple size prefixes to an operand, of which only the first
2353is taken into account.
2354
2355\b Incorporated John Fine's changes, including fixes of a large number
2356of preprocessor bugs, some small problems in OBJ, and a reworking of
2357label handling to define labels before their line is assembled, rather
2358than after.
2359
2360\b Reformatted a lot of the source code to be more readable. Included
2361'coding.txt' as a guideline for how to format code for contributors.
2362
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002363\b Stopped nested \c{%reps} causing a panic - they now cause a slightly more
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002364friendly error message instead.
2365
2366\b Fixed floating point constant problems (patch by Pedro Gimeno)
2367
2368\b Fixed the return value of insn_size() not being checked for -1, indicating
2369an error.
2370
2371\b Incorporated 3Dnow! instructions.
2372
2373\b Fixed the 'mov eax, eax + ebx' bug.
2374
2375\b Fixed the GLOBAL EQU bug in ELF. Released developers release 3.
2376
2377\b Incorporated John Fine's command line parsing changes
2378
2379\b Incorporated David Lindauer's OMF debug support
2380
2381\b Made changes for LCC 4.0 support (\c{__NASM_CDecl__}, removed register size
2382specification warning when sizes agree).
2383
2384
2385\H{cl-0.9x} NASM 0.9 Series
2386
2387Revisions before 0.98.
2388
2389
2390\S{cl-0.97} Version 0.97 released December 1997
2391
2392\b This was entirely a bug-fix release to 0.96, which seems to have got
2393cursed. Silly me.
2394
2395\b Fixed stupid mistake in OBJ which caused `MOV EAX,<constant>' to
2396fail. Caused by an error in the `MOV EAX,<segment>' support.
2397
2398\b ndisasm hung at EOF when compiled with lcc on Linux because lcc on
2399Linux somehow breaks feof(). ndisasm now does not rely on feof().
2400
2401\b A heading in the documentation was missing due to a markup error in
2402the indexing. Fixed.
2403
2404\b Fixed failure to update all pointers on realloc() within extended-
2405operand code in parser.c. Was causing wrong behaviour and seg faults
2406on lines such as `dd 0.0,0.0,0.0,0.0,...'
2407
2408\b Fixed a subtle preprocessor bug whereby invoking one multi-line
2409macro on the first line of the expansion of another, when the second
2410had been invoked with a label defined before it, didn't expand the
H. Peter Anvinf805cde2017-02-23 17:19:56 -08002411inner macro.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002412
2413\b Added internal.doc back in to the distribution archives - it was
2414missing in 0.96 *blush*
2415
2416\b Fixed bug causing 0.96 to be unable to assemble its own test files,
2417specifically objtest.asm. *blush again*
2418
2419\b Fixed seg-faults and bogus error messages caused by mismatching
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002420\c{%rep} and \c{%endrep} within multi-line macro definitions.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002421
2422\b Fixed a problem with buffer overrun in OBJ, which was causing
2423corruption at ends of long PUBDEF records.
2424
2425\b Separated DOS archives into main-program and documentation to reduce
2426download size.
2427
2428
2429\S{cl-0.96} Version 0.96 released November 1997
2430
2431\b Fixed a bug whereby, if `nasm sourcefile' would cause a filename
2432collision warning and put output into `nasm.out', then `nasm
2433sourcefile -o outputfile' still gave the warning even though the
2434`-o' was honoured.
2435Fixed name pollution under Digital UNIX: one of its header files
2436defined R_SP, which broke the enum in nasm.h.
2437
2438\b Fixed minor instruction table problems: FUCOM and FUCOMP didn't have
2439two-operand forms; NDISASM didn't recognise the longer register
2440forms of PUSH and POP (eg FF F3 for PUSH BX); TEST mem,imm32 was
2441flagged as undocumented; the 32-bit forms of CMOV had 16-bit operand
2442size prefixes; `AAD imm' and `AAM imm' are no longer flagged as
2443undocumented because the Intel Architecture reference documents
2444them.
2445
2446\b Fixed a problem with the local-label mechanism, whereby strange
2447types of symbol (EQUs, auto-defined OBJ segment base symbols)
2448interfered with the `previous global label' value and screwed up
2449local labels.
2450
2451\b Fixed a bug whereby the stub preprocessor didn't communicate with
2452the listing file generator, so that the -a and -l options in
2453conjunction would produce a useless listing file.
2454
2455\b Merged `os2' object file format back into `obj', after discovering
2456that `obj' _also_ shouldn't have a link pass separator in a module
2457containing a non-trivial MODEND. Flat segments are now declared
2458using the FLAT attribute. `os2' is no longer a valid object format
2459name: use `obj'.
2460
2461\b Removed the fixed-size temporary storage in the evaluator. Very very
2462long expressions (like `mov ax,1+1+1+1+...' for two hundred 1s or
2463so) should now no longer crash NASM.
2464
2465\b Fixed a bug involving segfaults on disassembly of MMX instructions,
2466by changing the meaning of one of the operand-type flags in nasm.h.
2467This may cause other apparently unrelated MMX problems; it needs to
2468be tested thoroughly.
2469
2470\b Fixed some buffer overrun problems with large OBJ output files.
2471Thanks to DJ Delorie for the bug report and fix.
2472
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002473\b Made preprocess-only mode actually listen to the \c{%line} markers as it
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002474prints them, so that it can report errors more sanely.
2475
2476\b Re-designed the evaluator to keep more sensible track of expressions
2477involving forward references: can now cope with previously-nightmare
2478situations such as:
2479
2480\c mov ax,foo | bar
2481\c foo equ 1
2482\c bar equ 2
2483
2484\b Added the ALIGN and ALIGNB standard macros.
2485
2486\b Added PIC support in ELF: use of WRT to obtain the four extra
2487relocation types needed.
2488
2489\b Added the ability for output file formats to define their own
2490extensions to the GLOBAL, COMMON and EXTERN directives.
2491
2492\b Implemented common-variable alignment, and global-symbol type and
2493size declarations, in ELF.
2494
2495\b Implemented NEAR and FAR keywords for common variables, plus
2496far-common element size specification, in OBJ.
2497
2498\b Added a feature whereby EXTERNs and COMMONs in OBJ can be given a
2499default WRT specification (either a segment or a group).
2500
2501\b Transformed the Unix NASM archive into an auto-configuring package.
2502
2503\b Added a sanity-check for people applying SEG to things which are
2504already segment bases: this previously went unnoticed by the SEG
2505processing and caused OBJ-driver panics later.
2506
2507\b Added the ability, in OBJ format, to deal with `MOV EAX,<segment>'
2508type references: OBJ doesn't directly support dword-size segment
2509base fixups, but as long as the low two bytes of the constant term
2510are zero, a word-size fixup can be generated instead and it will
2511work.
2512
2513\b Added the ability to specify sections' alignment requirements in
2514Win32 object files and pure binary files.
2515
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002516\b Added preprocess-time expression evaluation: the \c{%assign} (and
2517\c{%iassign}) directive and the bare \c{%if} (and \c{%elif}) conditional. Added
2518relational operators to the evaluator, for use only in \c{%if}
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002519constructs: the standard relationals = < > <= >= <> (and C-like
2520synonyms == and !=) plus low-precedence logical operators &&, ^^ and
2521||.
2522
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002523\b Added a preprocessor repeat construct: \c{%rep} / \c{%exitrep} / \c{%endrep}.
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002524
2525\b Added the __FILE__ and __LINE__ standard macros.
2526
2527\b Added a sanity check for number constants being greater than
25280xFFFFFFFF. The warning can be disabled.
2529
2530\b Added the %0 token whereby a variadic multi-line macro can tell how
2531many parameters it's been given in a specific invocation.
2532
2533\b Added \c{%rotate}, allowing multi-line macro parameters to be cycled.
2534
2535\b Added the `*' option for the maximum parameter count on multi-line
2536macros, allowing them to take arbitrarily many parameters.
2537
2538\b Added the ability for the user-level forms of EXTERN, GLOBAL and
2539COMMON to take more than one argument.
2540
2541\b Added the IMPORT and EXPORT directives in OBJ format, to deal with
2542Windows DLLs.
2543
H. Peter Anvin5506e1f2008-07-14 02:54:00 -04002544\b Added some more preprocessor \c{%if} constructs: \c{%ifidn} / \c{%ifidni} (exact
2545textual identity), and \c{%ifid} / \c{%ifnum} / \c{%ifstr} (token type testing).
H. Peter Anvin04156cd2008-07-14 02:45:57 -04002546
2547\b Added the ability to distinguish SHL AX,1 (the 8086 version) from
2548SHL AX,BYTE 1 (the 286-and-upwards version whose constant happens to
2549be 1).
2550
2551\b Added NetBSD/FreeBSD/OpenBSD's variant of a.out format, complete
2552with PIC shared library features.
2553
2554\b Changed NASM's idiosyncratic handling of FCLEX, FDISI, FENI, FINIT,
2555FSAVE, FSTCW, FSTENV, and FSTSW to bring it into line with the
2556otherwise accepted standard. The previous behaviour, though it was a
2557deliberate feature, was a deliberate feature based on a
2558misunderstanding. Apologies for the inconvenience.
2559
2560\b Improved the flexibility of ABSOLUTE: you can now give it an
2561expression rather than being restricted to a constant, and it can
2562take relocatable arguments as well.
2563
2564\b Added the ability for a variable to be declared as EXTERN multiple
2565times, and the subsequent definitions are just ignored.
2566
2567\b We now allow instruction prefixes (CS, DS, LOCK, REPZ etc) to be
2568alone on a line (without a following instruction).
2569
2570\b Improved sanity checks on whether the arguments to EXTERN, GLOBAL
2571and COMMON are valid identifiers.
2572
2573\b Added misc/exebin.mac to allow direct generation of .EXE files by
2574hacking up an EXE header using DB and DW; also added test/binexe.asm
2575to demonstrate the use of this. Thanks to Yann Guidon for
2576contributing the EXE header code.
2577
2578\b ndisasm forgot to check whether the input file had been successfully
2579opened. Now it does. Doh!
2580
2581\b Added the Cyrix extensions to the MMX instruction set.
2582
2583\b Added a hinting mechanism to allow [EAX+EBX] and [EBX+EAX] to be
2584assembled differently. This is important since [ESI+EBP] and
2585[EBP+ESI] have different default base segment registers.
2586
2587\b Added support for the PharLap OMF extension for 4096-byte segment
2588alignment.
2589
2590
2591\S{cl-0.95 released July 1997} Version 0.95 released July 1997
2592
2593\b Fixed yet another ELF bug. This one manifested if the user relied on
2594the default segment, and attempted to define global symbols without
2595first explicitly declaring the target segment.
2596
2597\b Added makefiles (for NASM and the RDF tools) to build Win32 console
2598apps under Symantec C++. Donated by Mark Junker.
2599
2600\b Added `macros.bas' and `insns.bas', QBasic versions of the Perl
2601scripts that convert `standard.mac' to `macros.c' and convert
2602`insns.dat' to `insnsa.c' and `insnsd.c'. Also thanks to Mark
2603Junker.
2604
2605\b Changed the diassembled forms of the conditional instructions so
2606that JB is now emitted as JC, and other similar changes. Suggested
2607list by Ulrich Doewich.
2608
2609\b Added `@' to the list of valid characters to begin an identifier
2610with.
2611
2612\b Documentary changes, notably the addition of the `Common Problems'
2613section in nasm.doc.
2614
2615\b Fixed a bug relating to 32-bit PC-relative fixups in OBJ.
2616
2617\b Fixed a bug in perm_copy() in labels.c which was causing exceptions
2618in cleanup_labels() on some systems.
2619
2620\b Positivity sanity check in TIMES argument changed from a warning to
2621an error following a further complaint.
2622
2623\b Changed the acceptable limits on byte and word operands to allow
2624things like `~10111001b' to work.
2625
2626\b Fixed a major problem in the preprocessor which caused seg-faults if
2627macro definitions contained blank lines or comment-only lines.
2628
2629\b Fixed inadequate error checking on the commas separating the
2630arguments to `db', `dw' etc.
2631
2632\b Fixed a crippling bug in the handling of macros with operand counts
2633defined with a `+' modifier.
2634
2635\b Fixed a bug whereby object file formats which stored the input file
2636name in the output file (such as OBJ and COFF) weren't doing so
2637correctly when the output file name was specified on the command
2638line.
2639
2640\b Removed [INC] and [INCLUDE] support for good, since they were
2641obsolete anyway.
2642
2643\b Fixed a bug in OBJ which caused all fixups to be output in 16-bit
2644(old-format) FIXUPP records, rather than putting the 32-bit ones in
2645FIXUPP32 (new-format) records.
2646
2647\b Added, tentatively, OS/2 object file support (as a minor variant on
2648OBJ).
2649
2650\b Updates to Fox Cutter's Borland C makefile, Makefile.bc2.
2651
2652\b Removed a spurious second fclose() on the output file.
2653
2654\b Added the `-s' command line option to redirect all messages which
2655would go to stderr (errors, help text) to stdout instead.
2656
2657\b Added the `-w' command line option to selectively suppress some
2658classes of assembly warning messages.
2659
2660\b Added the `-p' pre-include and `-d' pre-define command-line options.
2661
2662\b Added an include file search path: the `-i' command line option.
2663
2664\b Fixed a silly little preprocessor bug whereby starting a line with a
2665`%!' environment-variable reference caused an `unknown directive'
2666error.
2667
2668\b Added the long-awaited listing file support: the `-l' command line
2669option.
2670
2671\b Fixed a problem with OBJ format whereby, in the absence of any
2672explicit segment definition, non-global symbols declared in the
2673implicit default segment generated spurious EXTDEF records in the
2674output.
2675
2676\b Added the NASM environment variable.
2677
2678\b From this version forward, Win32 console-mode binaries will be
2679included in the DOS distribution in addition to the 16-bit binaries.
2680Added Makefile.vc for this purpose.
2681
2682\b Added `return 0;' to test/objlink.c to prevent compiler warnings.
2683
2684\b Added the __NASM_MAJOR__ and __NASM_MINOR__ standard defines.
2685
2686\b Added an alternative memory-reference syntax in which prefixing an
2687operand with `&' is equivalent to enclosing it in square brackets,
2688at the request of Fox Cutter.
2689
2690\b Errors in pass two now cause the program to return a non-zero error
2691code, which they didn't before.
2692
2693\b Fixed the single-line macro cycle detection, which didn't work at
2694all on macros with no parameters (caused an infinite loop). Also
2695changed the behaviour of single-line macro cycle detection to work
2696like cpp, so that macros like `extrn' as given in the documentation
2697can be implemented.
2698
2699\b Fixed the implementation of WRT, which was too restrictive in that
2700you couldn't do `mov ax,[di+abc wrt dgroup]' because (di+abc) wasn't
2701a relocatable reference.
2702
2703
2704\S{cl-0.94 released April 1997} Version 0.94 released April 1997
2705
2706
2707\b Major item: added the macro processor.
2708
2709\b Added undocumented instructions SMI, IBTS, XBTS and LOADALL286. Also
2710reorganised CMPXCHG instruction into early-486 and Pentium forms.
2711Thanks to Thobias Jones for the information.
2712
2713\b Fixed two more stupid bugs in ELF, which were causing `ld' to
2714continue to seg-fault in a lot of non-trivial cases.
2715
2716\b Fixed a seg-fault in the label manager.
2717
2718\b Stopped FBLD and FBSTP from _requiring_ the TWORD keyword, which is
2719the only option for BCD loads/stores in any case.
2720
2721\b Ensured FLDCW, FSTCW and FSTSW can cope with the WORD keyword, if
2722anyone bothers to provide it. Previously they complained unless no
2723keyword at all was present.
2724
2725\b Some forms of FDIV/FDIVR and FSUB/FSUBR were still inverted: a
2726vestige of a bug that I thought had been fixed in 0.92. This was
2727fixed, hopefully for good this time...
2728
2729\b Another minor phase error (insofar as a phase error can _ever_ be
2730minor) fixed, this one occurring in code of the form
2731
2732\c rol ax,forward_reference
2733\c forward_reference equ 1
2734
2735\b The number supplied to TIMES is now sanity-checked for positivity,
2736and also may be greater than 64K (which previously didn't work on
273716-bit systems).
2738
2739\b Added Watcom C makefiles, and misc/pmw.bat, donated by Dominik Behr.
2740
2741\b Added the INCBIN pseudo-opcode.
2742
2743\b Due to the advent of the preprocessor, the [INCLUDE] and [INC]
2744directives have become obsolete. They are still supported in this
2745version, with a warning, but won't be in the next.
2746
2747\b Fixed a bug in OBJ format, which caused incorrect object records to
2748be output when absolute labels were made global.
2749
2750\b Updates to RDOFF subdirectory, and changes to outrdf.c.
2751
2752
2753\S{cl-0.93 released January 1997} Version 0.93 released January 1997
2754
2755This release went out in a great hurry after semi-crippling bugs
2756were found in 0.92.
2757
2758\b Really \e{did} fix the stack overflows this time. *blush*
2759
2760\b Had problems with EA instruction sizes changing between passes, when
2761an offset contained a forward reference and so 4 bytes were
2762allocated for the offset in pass one; by pass two the symbol had
2763been defined and happened to be a small absolute value, so only 1
2764byte got allocated, causing instruction size mismatch between passes
2765and hence incorrect address calculations. Fixed.
2766
2767\b Stupid bug in the revised ELF section generation fixed (associated
2768string-table section for .symtab was hard-coded as 7, even when this
2769didn't fit with the real section table). Was causing `ld' to
2770seg-fault under Linux.
2771
2772\b Included a new Borland C makefile, Makefile.bc2, donated by Fox
2773Cutter <lmb@comtch.iea.com>.
2774
2775
2776\S{cl-0.92 released January 1997} Version 0.92 released January 1997
2777
2778\b The FDIVP/FDIVRP and FSUBP/FSUBRP pairs had been inverted: this was
2779fixed. This also affected the LCC driver.
2780
2781\b Fixed a bug regarding 32-bit effective addresses of the form
2782\c{[other_register+ESP]}.
2783
2784\b Documentary changes, notably documentation of the fact that Borland
2785Win32 compilers use `obj' rather than `win32' object format.
2786
2787\b Fixed the COMENT record in OBJ files, which was formatted
2788incorrectly.
2789
2790\b Fixed a bug causing segfaults in large RDF files.
2791
2792\b OBJ format now strips initial periods from segment and group
2793definitions, in order to avoid complications with the local label
2794syntax.
2795
2796\b Fixed a bug in disassembling far calls and jumps in NDISASM.
2797
2798\b Added support for user-defined sections in COFF and ELF files.
2799
2800\b Compiled the DOS binaries with a sensible amount of stack, to
2801prevent stack overflows on any arithmetic expression containing
2802parentheses.
2803
2804\b Fixed a bug in handling of files that do not terminate in a newline.
2805
2806
2807\S{cl-0.91 released November 1996} Version 0.91 released November 1996
2808
2809\b Loads of bug fixes.
2810
2811\b Support for RDF added.
2812
2813\b Support for DBG debugging format added.
2814
2815\b Support for 32-bit extensions to Microsoft OBJ format added.
2816
2817\b Revised for Borland C: some variable names changed, makefile added.
2818
2819\b LCC support revised to actually work.
2820
2821\b JMP/CALL NEAR/FAR notation added.
2822
2823\b `a16', `o16', `a32' and `o32' prefixes added.
2824
2825\b Range checking on short jumps implemented.
2826
2827\b MMX instruction support added.
2828
2829\b Negative floating point constant support added.
2830
2831\b Memory handling improved to bypass 64K barrier under DOS.
2832
2833\b \c{$} prefix to force treatment of reserved words as identifiers added.
2834
2835\b Default-size mechanism for object formats added.
2836
2837\b Compile-time configurability added.
2838
2839\b \c{#}, \c{@}, \c{~} and c\{?} are now valid characters in labels.
2840
2841\b \c{-e} and \c{-k} options in NDISASM added.
2842
2843
2844\S{cl-0.90 released October 1996} Version 0.90 released October 1996
2845
2846First release version. First support for object file output. Other
2847changes from previous version (0.3x) too numerous to document.