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