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