Fix regular expression at doc/rdsrc.pl
[platform/upstream/nasm.git] / doc / changes.src
index 4a15ae7..ec4de21 100644 (file)
@@ -4,9 +4,440 @@
 
 \H{cl-2.xx} NASM 2 Series
 
-The NASM 2 series support x86-64, and is the production version of NASM
+The NASM 2 series supports x86-64, and is the production version of NASM
 since 2007.
 
+\S{cl-2.11.05} Version 2.11.05
+
+\b Add \c{--v} as an alias for \c{-v} (see \k{opt-v}), for
+command-line compatibility with Yasm.
+
+\b Fix a bug introduced in 2.11.03 whereby certain instructions would
+contain multiple REX prefixes, and thus be corrupt.
+
+\S{cl-2.11.04} Version 2.11.04
+
+\b Removed an invalid error checking code. Sometimes a memref only with
+a displacement can also set an evex flag. For example:
+
+\c       vmovdqu32 [0xabcd]{k1}, zmm0
+
+\b Fixed a bug in disassembler that EVEX.L'L vector length was not matched
+when EVEX.b was set because it was simply considered as EVEC.RC.
+Separated EVEX.L'L case from EVEX.RC which is ignored in matching.
+
+\S{cl-2.11.03} Version 2.11.03
+
+\b Fix a bug there REX prefixes were missing on instructions inside a
+\c{TIMES} statement.
+
+\S{cl-2.11.02} Version 2.11.02
+
+\b Add the \c{XSAVEC}, \c{XSAVES} and \c{XRSTORS} family instructions.
+
+\b Add the \c{CLFLUSHOPT} instruction.
+
+\S{cl-2.11.01} Version 2.11.01
+
+\b Allow instructions which implicitly uses \c{XMM0} (\c{VBLENDVPD},
+\c{VBLENDVPS}, \c{PBLENDVB} and \c{SHA256RNDS2}) to be specified
+without an explicit \c{xmm0} on the assembly line.  In other words,
+the following two lines produce the same output:
+
+\c      vblendvpd xmm2,xmm1,xmm0      ; Last operand is fixed xmm0
+\c      vblendvpd xmm2,xmm1           ; Implicit xmm0 omitted
+
+\b In the ELF backends, don't crash the assembler if \c{section align}
+is specified without a value.
+
+\S{cl-2.11} Version 2.11
+
+\b Add support for the Intel AVX-512 instruction set:
+
+\b 16 new, 512-bit SIMD registers. Total 32 \c{(ZMM0 ~ ZMM31)}
+
+\b 8 new opmask registers \c{(K0 ~ K7)}. One of 7 registers \c{(K1 ~ K7)} can
+be used as an opmask for conditional execution.
+
+\b A new EVEX encoding prefix. EVEX is based on VEX and provides more
+capabilities: opmasks, broadcasting, embedded rounding and compressed
+displacements.
+
+\c  - opmask
+\c      VDIVPD zmm0{k1}{z}, zmm1, zmm3  ; conditional vector operation
+\c                                      ; using opmask k1.
+\c                                      ; {z} is for zero-masking
+\c  - broadcasting
+\c      VDIVPS zmm4, zmm5, [rbx]{1to16} ; load single-precision float and
+\c                                      ; replicate it 16 times. 32 * 16 = 512
+\c  - embedded rounding
+\c      VCVTSI2SD xmm6, xmm7, {rz-sae}, rax ; round toward zero. note that it
+\c                                       ; is used as if a separate operand.
+\c                                       ; it comes after the last SIMD operand
+
+\b Add support for \c{ZWORD} (512 bits), \c{DZ} and \c{RESZ}.
+
+\b Add support for the MPX and SHA instruction sets.
+
+\b Better handling of section redefinition.
+
+\b Generate manpages when running \c{'make dist'}.
+
+\b Handle all token chains in mmacro params range.
+
+\b Support split [base,index] effective address:
+
+\c      mov eax,[eax+8,ecx*4]   ; eax=base, ecx=index, 4=scale, 8=disp
+
+This is expected to be most useful for the MPX instructions.
+
+\b Support \c{BND} prefix for branch instructions (for MPX).
+
+\b The \c{DEFAULT} directive can now take \c{BND} and \c{NOBND}
+options to indicate whether all relevant branches should be getting
+\c{BND} prefixes.  This is expected to be the normal for use in MPX
+code.
+
+\b Add \c{{evex}}, \c{{vex3}} and \c{{vex2}} instruction prefixes to
+have NASM encode the corresponding instruction, if possible, with an EVEX,
+3-byte VEX, or 2-byte VEX prefix, respectively.
+
+\b Support for section names longer than 8 bytes in Win32/Win64 COFF.
+
+\b The \c{NOSPLIT} directive by itself no longer forces a single
+register to become an index register, unless it has an explicit
+multiplier.
+
+\c      mov eax,[nosplit eax]       ; eax as base register
+\c      mov eax,[nosplit eax*1]     ; eax as index register
+
+\S{cl-2.10.09} Version 2.10.09
+
+\b Pregenerate man pages.
+
+\S{cl-2.10.08} Version 2.10.08
+
+\b Fix \c{VMOVNTDQA}, \c{MOVNTDQA} and \c{MOVLPD} instructions.
+
+\b Fix collision for \c{VGATHERQPS}, \c{VPGATHERQD} instructions.
+
+\b Fix \c{VPMOVSXBQ}, \c{VGATHERQPD}, \c{VSPLLW} instructions.
+
+\b Add a bunch of AMD TBM instructions.
+
+\b Fix potential stack overwrite in numbers conversion.
+
+\b Allow byte size in \c{PREFETCHTx} instructions.
+
+\b Make manual pages up to date.
+
+\b Make \c{F3} and \c{F2} SSE prefixes to override \c{66}.
+
+\b Support of AMD SVM instructions in 32 bit mode.
+
+\b Fix near offsets code generation for \c{JMP}, \c{CALL} instrictions
+in long mode.
+
+\b Fix preprocessor parse regression when id is expanding to a whitespace.
+
+\S{cl-2.10.07} Version 2.10.07
+
+\b Fix line continuation parsing being broken in previous version.
+
+\S{cl-2.10.06} Version 2.10.06
+
+\b Always quote the dependency source names when using the automatic
+dependency generation options.
+
+\b If no dependency target name is specified via the \c{-MT} or
+\c{-MQ} options, quote the default output name.
+
+\b Fix assembly of shift operations in \c{CPU 8086} mode.
+
+\b Fix incorrect generation of explicit immediate byte for shift by 1
+under certain circumstances.
+
+\b Fix assembly of the \c{VPCMPGTQ} instruction.
+
+\b Fix RIP-relative relocations in the \c{macho64} backend.
+
+\S{cl-2.10.05} Version 2.10.05
+
+\b Add the \c{CLAC} and \c{STAC} instructions.
+
+\S{cl-2.10.04} Version 2.10.04
+
+\b Add back the inadvertently deleted 256-bit version of the \c{VORPD}
+instruction.
+
+\b Correct disassembly of instructions starting with byte \c{82} hex.
+
+\b Fix corner cases in token pasting, for example:
+
+\c    %define N 1e%++%+ 5
+\c            dd N, 1e+5
+
+\S{cl-2.10.03} Version 2.10.03
+
+\b Correct the assembly of the instruction:
+
+\c XRELEASE MOV [absolute],AL
+
+Previous versions would incorrectly generate \c{F3 A2} for this
+instruction and issue a warning; correct behavior is to emit \c{F3 88
+05}.
+
+\S{cl-2.10.02} Version 2.10.02
+
+\b Add the \c{ifunc} macro package with integer functions, currently
+only integer logarithms.  See \k{pkg_ifunc}.
+
+\b Add the \c{RDSEED}, \c{ADCX} and \c{ADOX} instructions.
+
+\S{cl-2.10.01} Version 2.10.01
+
+\b Add missing VPMOVMSKB instruction with reg32, ymmreg operands.
+
+\S{cl-2.10} Version 2.10
+
+\b When optimization is enabled, \c{mov r64,imm} now optimizes to the
+  shortest form possible between:
+
+\c      mov r32,imm32                   ;  5 bytes
+\c      mov r64,imm32                   ;  7 bytes
+\c      mov r64,imm64                   ; 10 bytes
+
+To force a specific form, use the \c{STRICT} keyword, see \k{strict}.
+
+\b Add support for the Intel AVX2 instruction set.
+
+\b Add support for Bit Manipulation Instructions 1 and 2.
+
+\b Add support for Intel Transactional Synchronization Extensions (TSX).
+
+\b Add support for x32 ELF (32-bit ELF with the CPU in 64-bit mode.)
+   See \k{elffmt}.
+
+\b Add support for bigendian UTF-16 and UTF-32.  See \k{unicode}.
+
+\S{cl-2.09.10} Version 2.09.10
+
+\b Fix up NSIS script to protect uninstaller against registry keys
+   absence or corruption. It brings in a few additional questions
+   to a user during deinstallation procedure but still it is better
+   than unpredictable file removal.
+
+\S{cl-2.09.09} Version 2.09.09
+
+\b Fix initialization of section attributes of \c{bin} output format.
+
+\b Fix \c{mach64} output format bug that crashes NASM due to NULL symbols.
+
+
+\S{cl-2.09.08} Version 2.09.08
+
+\b Fix \c{__OUTPUT_FORMAT__} assignment when output driver alias
+   is used. For example when \c{-f elf} is used \c{__OUTPUT_FORMAT__}
+   must be set to \c{elf}, if \c{-f elf32} is used \c{__OUTPUT_FORMAT__}
+   must be assigned accordingly, i.e. to \c{elf32}. The rule applies to
+   all output driver aliases. See \k{ofmtm}.
+
+
+\S{cl-2.09.07} Version 2.09.07
+
+\b Fix attempts to close same file several times
+   when \c{-a} option is used.
+
+\b Fixes for VEXTRACTF128, VMASKMOVPS encoding.
+
+
+\S{cl-2.09.06} Version 2.09.06
+
+\b Fix missed section attribute initialization in \c{bin} output target.
+
+
+\S{cl-2.09.05} Version 2.09.05
+
+\b Fix arguments encoding for VPEXTRW instruction.
+
+\b Remove invalid form of VPEXTRW instruction.
+
+\b Add \c{VLDDQU} as alias for \c{VLDQQU} to
+   match specification.
+
+
+\S{cl-2.09.04} Version 2.09.04
+
+\b Fix incorrect labels offset for VEX intructions.
+
+\b Eliminate bogus warning on implicit operand size override.
+
+\b \c{%if} term could not handle 64 bit numbers.
+
+\b The COFF backend was limiting relocations number to 16 bits even if
+   in real there were a way more relocations.
+
+
+\S{cl-2.09.03} Version 2.09.03
+
+\b Print \c{%macro} name inside \c{%rep} blocks on error.
+
+\b Fix preprocessor expansion behaviour. It happened sometime
+   too early and sometime simply wrong. Move behaviour back to
+   the origins (down to NASM 2.05.01).
+
+\b Fix unitialized data dereference on OMF output format.
+
+\b Issue warning on unterminated \c{%{} construct.
+
+\b Fix for documentation typo.
+
+
+\S{cl-2.09.02} Version 2.09.02
+
+\b Fix reversed tokens when \c{%deftok} produces more than one output token.
+
+\b Fix segmentation fault on disassembling some VEX instructions.
+
+\b Missing \c{%endif} did not always cause error.
+
+\b Fix typo in documentation.
+
+\b Compound context local preprocessor single line macro identifiers
+  were not expanded early enough and as result lead to unresolved
+  symbols.
+
+
+\S{cl-2.09.01} Version 2.09.01
+
+\b Fix NULL dereference on missed %deftok second parameter.
+
+\b Fix NULL dereference on invalid %substr parameters.
+
+
+\S{cl-2.09} Version 2.09
+
+\b Fixed assignment the magnitude of \c{%rep} counter. It is limited
+  to 62 bits now.
+
+\b Fixed NULL dereference if argument of \c{%strlen} resolves
+  to whitespace. For example if nonexistent macro parameter is used.
+
+\b \c{%ifenv}, \c{%elifenv}, \c{%ifnenv}, and \c{%elifnenv} directives
+  introduced.  See \k{ifenv}.
+
+\b Fixed NULL dereference if environment variable is missed.
+
+\b Updates of new AVX v7 Intel instructions.
+
+\b \c{PUSH imm32} is now officially documented.
+
+\b Fix for encoding the LFS, LGS and LSS in 64-bit mode.
+
+\b Fixes for compatibility with OpenWatcom compiler and DOS 8.3 file
+  format limitation.
+
+\b Macros parameters range expansion introduced. See \k{mlmacrange}.
+
+\b Backward compatibility on expanging of local sigle macros restored.
+
+\b 8 bit relocations for \c{elf} and \c{bin} output formats are introduced.
+
+\b Short intersegment jumps are permitted now.
+
+\b An alignment more than 64 bytes are allowed for \c{win32},
+  \c{win64} output formats.
+
+\b \c{SECTALIGN} directive introduced. See \k{sectalign}.
+
+\b \c{nojmp} option introduced in \c{smartalign} package. See
+  \k{pkg_smartalign}.
+
+\b Short aliases \c{win}, \c{elf} and \c{macho} for output formats are
+  introduced.  Each stands for \c{win32}, \c{elf32} and \c{macho32}
+  accordingly.
+
+\b Faster handling of missing directives implemented.
+
+\b Various small improvements in documentation.
+
+\b No hang anymore if unable to open malloc.log file.
+
+\b The environments without vsnprintf function are able to build nasm again.
+
+\b AMD LWP instructions updated.
+
+\b Tighten EA checks. We warn a user if there overflow in EA addressing.
+
+\b Make \c{-Ox} the default optimization level.  For the legacy
+  behavior, specify \c{-O0} explicitly.  See \k{opt-O}.
+
+\b Environment variables read with \c{%!} or tested with \c{%ifenv}
+  can now contain non-identifier characters if surrounded by quotes.
+  See \k{getenv}.
+
+\b Add a new standard macro package \c{%use fp} for floating-point
+  convenience macros.  See \k{pkg_fp}.
+
+
+\S{cl-2.08.02} Version 2.08.02
+
+\b Fix crash under certain circumstances when using the \c{%+} operator.
+
+
+\S{cl-2.08.01} Version 2.08.01
+
+\b Fix the \c{%use} statement, which was broken in 2.08.
+
+
+\S{cl-2.08} Version 2.08
+
+\b A number of enhancements/fixes in macros area.
+
+\b Support for converting strings to tokens.  See \k{deftok}.
+
+\b Fuzzy operand size logic introduced.
+
+\b Fix COFF stack overrun on too long export identifiers.
+
+\b Fix Macho-O alignment bug.
+
+\b Fix crashes with -fwin32 on file with many exports.
+
+\b Fix stack overrun for too long [DEBUG id].
+
+\b Fix incorrect sbyte usage in IMUL (hit only if optimization
+  flag passed).
+
+\b Append ending token for \c{.stabs} records in the ELF output format.
+
+\b New NSIS script which uses ModernUI and MultiUser approach.
+
+\b Visual Studio 2008 NASM integration (rules file).
+
+\b Warn a user if a constant is too long (and as result will be stripped).
+
+\b The obsoleted pre-XOP AMD SSE5 instruction set which was never actualized
+  was removed.
+
+\b Fix stack overrun on too long error file name passed from the command line.
+
+\b Bind symbols to the .text section by default (ie in case if SECTION
+  directive was omitted) in the ELF output format.
+
+\b Fix sync points array index wrapping.
+
+\b A few fixes for FMA4 and XOP instruction templates.
+
+\b Add AMD Lightweight Profiling (LWP) instructions.
+
+\b Fix the offset for \c{%arg} in 64-bit mode.
+
+\b An undefined local macro (\c{%$}) no longer matches a global macro
+  with the same name.
+
+\b Fix NULL dereference on too long local labels.
+
 
 \S{cl-2.07} Version 2.07
 
@@ -37,6 +468,9 @@ since 2007.
 
 \b Support for 64-bit Mach-O output, see \k{machofmt}.
 
+\b Fix assert failure on certain operations that involve strings with
+  high-bit bytes.
+
 
 \S{cl-2.06} Version 2.06