Revision history for Asm-X86

2026-07-05	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.73
	  Updated the instruction list. Some (invisible) improvements to the
	  build system.
	* lib/Asm/X86.pm (@instr_intel): Updated the instruction list from
	  NASM version 3.02.

2025-11-05	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.72
	  Updated the instruction list. Code simplifications. Other small
	  changes.
	* lib/Asm/X86.pm (@instr_intel): Updated the instruction and register
	  lists from NASM version 3.01.
	* lib/Asm/X86.pm: Simplified parameter assigning in subroutines.
	* lib/Asm/X86.pm (conv_intel_instr_to_att, _add_suffix_if_reg): Moved
	  common code to a subroutine.
	* lib/Asm/X86.pm (conv_intel_instr_to_att): Convert only when a match
	  is found. Simplified regexes.
	* Makefile.PL: Put the version in a variable.
	* lib/Asm/X86.pm, t/zz*.t, Makefile.PL, README: Updated the copyright
	  and version.

2024-06-26	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.70
	  Updated the instruction list. Updated the register list. Fixed
	  converting some instructions. Added support for new data size
	  suffixes. Performance optimizations. Fixed tests for Perl
	  interpreters without taint support. Other small updates.
	* lib/Asm/X86.pm (@instr_intel): Updated the instruction list from
	  NASM version 2.16.02. Removed 'equ' from the instruction list.
	* lib/Asm/X86.pm (@regs_bound_intel, @regs_bound_att, @regs_intel,
	  @regs_att, is_reg_bound_intel, is_reg_bound_att, is_reg_bound),
	  t/zz_regs_att.t, t/zz_regs_intel.t: Added support for the bound
	  registers.
	* lib/Asm/X86.pm: Changed names of some variables. Fixed a typo in
	  the documentation. Updated the copyright and version. Updated the
	  links and deleted the inactive cpanratings.perl.org link (thanks to
	  Peter John Acklam for reporting).
	* lib/Asm/X86.pm (_remove_size_qualifiers_add_dollar,
	  conv_intel_instr_to_att): Added new size suffixes.
	* lib/Asm/X86.pm (conv_att_instr_to_intel): Convert the instructions
	  only if necessary (better performance). Fixed converting jmp/call,
	  FPU and MOV[S/Z]X instructions.
	* t/zz_conv.t: Added tests for the jmp/call, FPU and size conversion
	  (like "cbw", etc.) instructions.
	* t/*.t: Removed "-T" from the command line for Perl interpreters
	  without taint support.
	* lib/Asm/X86.pm, t/zz*.t, Makefile.PL: Added license blocks and
	  mentioned Project Asmosis in them.
	* README: Updated the links and deleted the inactive link pointing to
	  cpanratings.perl.org.

2023-01-08	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.65
	  Updated the instruction list. Simplified and updated the code in
	  address validation, bringing back 100% test coverage. More unit
	  tests. Other small updates.
	* lib/Asm/X86.pm (@instr_intel): Updated the instruction list from
	  NASM version 2.16.01.
	* lib/Asm/X86.pm (_validate_16bit_addr_parts_intel,
	  _validate_16bit_addr_parts_att, _validate_32bit_addr_parts_intel,
	  _validate_32bit_addr_parts_att, _validate_64bit_addr_parts_intel,
	  _validate_64bit_addr_parts_att): Commented-out parameters and
	  statement tests which are always true or are not needed.
	* lib/Asm/X86.pm (_validate_32bit_addr_parts_att,
	  _validate_32bit_addr_parts_intel, _validate_64bit_addr_parts_att,
	  _validate_64bit_addr_parts_intel): Changed testing the scale as a
	  number to testing as a string to prevent errors.
	* lib/Asm/X86.pm, README: Bump the year in the copyright notices.
	* KEY.asc: renamed from "KEY" to help the web POD viewer.
	* t/{zz_addr_att.t,zz_addr_intel.t}: More tests.
	* t/zz_duplicates.t: Display the found duplicates, if any, and
	  changed the message.

2021-09-19	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.62
	* Changes, Makefile.PL, META.*, MYMETA.*: Fix the e-mail addresses.
	* lib/Asm/X86.pm (conv_intel_addr_to_att): remove unnecessary
	  variables, change regexes to variables and qr// for better
	  readability and reduced code duplication.
	* lib/Asm/X86.pm (_change_to_intel_addr_if_applicable): a new private
	  subroutine to convert an applicable expression to an intel memory
	  reference.
	* lib/Asm/X86.pm (conv_att_instr_to_intel): call the new subroutine
	  _change_to_intel_addr_if_applicable to simplify, remove duplicated
	  code, change regexes to variables and qr// for better readability
	  and reduced duplication.
	* lib/Asm/X86.pm (_remove_size_qualifiers_add_dollar): a new private
	  subroutine to remove any size qualifiers and leading or trailing
	  whitespace from the parameter, prefixing it with a dollar-sign when
	  necessary.
	* lib/Asm/X86.pm (conv_intel_instr_to_att): call the new subroutine
	  _remove_size_qualifiers_add_dollar to simplify and remove
	  duplicated code, change regexes to variables and qr// for better
	  readability and reduced duplication.

2021-06-19	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.61
	  Fixed compatibility issues.
	* Makefile.PL: Corrected hash keys and values to be strings.
	* t/zz_regs_{att,intel}.t: Fixed passing parameters and hash usage.

2021-06-16	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.60
	  Fixed compatibility issues. Significant code simplification in the
	  module. Better checks in address validation, especially in AT&T
	  syntax. More code clean-up in unit tests.
	* lib/Asm/X86.pm (is_valid_16bit_addr_intel, is_valid_32bit_addr_intel,
	  is_valid_64bit_addr_intel, is_valid_16bit_addr_att,
	  is_valid_32bit_addr_att, is_valid_64bit_addr_att): moved common
	  validation code to private subroutines, saving on duplication
	* lib/Asm/X86.pm (is_valid_16bit_addr_att): some expressions have been
	  widened to allow more matches.
	* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att,
	  is_valid_64bit_addr_att): disallow sign characters inside
	  parentheses (rejected by GNU as).
	* lib/Asm/X86.pm (_add_percent, _remove_duplicates, _nopluses): removed
	  "my sub" and added an underscore to the name to mark the subroutines
	  as private and still make POD coverage tests skip them.
	* lib/Asm/X86.pm (is_reg_intel, is_reg_att, is_reg8_intel, is_reg8_att,
	  is_reg16_intel, is_reg16_att, is_segreg_intel, is_segreg_att,
	  is_reg32_intel, is_reg32_att, is_addressable32_intel,
	  is_addressable32_att, is_r32_in64_intel, is_r32_in64_att,
	  is_reg64_intel, is_reg64_att, is_reg_mm_intel, is_reg_mm_att,
	  is_reg_fpu_intel, is_reg_fpu_att, is_reg_opmask_intel,
	  is_reg_opmask_att, is_instr_intel, is_instr_att): use new private
	  subroutines to search though the arrays and simplify the code
	* t/{zz_regs_att.t,zz_regs_intel.t}: re-write and simplify the code
	* t/{zz_addr_att.t,zz_addr_intel.t}: added testing the invalidity of
	  addresses containing one of the xmm, ymm, zmm or opmask registers
	* t/zz_{addr_att,addr_intel,conv,duplicates,regs_att,regs_intel}.t:
	  added prototypes to subroutines and fixed the tests where necessary

2021-06-05	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.50
	  Fixed some defects found by comparing new test results and GNU as
	  output. Significant rewrite of the unit tests.
	* lib/Asm/X86.pm (is_valid_16bit_addr_intel): checking the sign in
	  more cases, corrected one regex
	* lib/Asm/X86.pm (is_valid_16bit_addr_att): disallow %segreg:var(var)
	  %segreg:number(number) constructs. Check if %xxx names are registers
	* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att,
	  is_valid_64bit_addr_att): check if %xxx names are registers in some
	  cases
	* lib/Asm/X86.pm (is_valid_32bit_addr_att): disallow %esp as the index
	  register in more cases (following GNU as). Allow 16-bit addressing
	  in 32-bit mode.
	* lib/Asm/X86.pm (is_valid_64bit_addr_att): disallow %rsp and %rip as
	  the index register in more cases (following GNU as).
	* lib/Asm/X86.pm (is_reg_intel, is_reg_att, is_reg8_intel, is_reg8_att,
	  is_reg16_intel, is_reg16_att, is_segreg_intel, is_segreg_att,
	  is_reg32_intel, is_reg32_att, is_addressable32_intel,
	  is_addressable32_att, is_r32_in64_intel, is_r32_in64_att,
	  is_reg64_intel, is_reg64_att, is_reg_mm_intel, is_reg_mm_att,
	  is_reg_fpu_intel, is_reg_fpu_att, is_reg_opmask_intel,
	  is_reg_opmask_att, is_instr_intel, is_instr_att): added a pre-check
	  to check the syntax of the expression before checking the list
	* lib/Asm/X86.pm (is_valid_32bit_addr_att, is_valid_64bit_addr_att):
	  allow '(, reg)' modes
	* lib/Asm/X86.pm (add_percent, remove_duplicates, nopluses): made the
	  subroutines 'my' and removed them from the manual
	* lib/Asm/X86.pm: layout fixes for the POD documentation and man page.
	  Added information that some of the subroutines work best on input
	  after all preprocessing.
	* Makefile.PL: added a variable with the module name
	* MANIFEST, KEY: added the GnuPG key used to sign the module
	* t/*.t, Makefile.PL: fixed the interpreter line
	* t/*.t: significant re-write of tests - using generating procedures,
	  arrays and loops
	* t/zz_addr_mixed.t: partially merged into zz_addr_att.t and
	  zz_addr_intel.t with a possibility to extend
	* t/zz_regs_mixed.t: merged into zz_regs_att.t and zz_regs_intel.t and
	  deleted the file

2021-05-09	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.40
	  Fixed many defects revealed by new unit tests. 100% code is now
	  covered by unit tests. Updated documentation and metadata.
	* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att):
	  fixed accepting invalid addresses: 'zzz(yyy)' and 'zzz(-yyy)',
	  removed unnecessary conditions
	* lib/Asm/X86.pm (is_valid_64bit_addr_intel): allowing valid 64-bit
	  addressing modes: '[r32]', 'segreg:[r32]', '[segreg:r32]'.
	* lib/Asm/X86.pm (is_valid_64bit_addr_att): allowing valid 64-bit
	  addressing modes with only 32-bit registers.
	* lib/Asm/X86.pm (add_att_suffix_instr): added suffixes for 64-bit
	  instructions
	* lib/Asm/X86.pm (conv_intel_addr_to_att): fixed regular expressions
	  and substitutions
	* lib/Asm/X86.pm (conv_att_instr_to_intel): removed unnecessary
	  conditions
	* lib/Asm/X86.pm (conv_intel_instr_to_att): added a missing default
	  case for instruction suffixes, typo fix, improved changing the
	  argument order, moved processing MOV[Z/S]X before removing the size
	  keywords and changing the operand order, added more conditions to
	  processing MOV[Z/S]X, fixed replacing 'byte', 'word' and similar
	  size keywords, added 64-bit suffixes
	* lib/Asm/X86.pm (is_valid_16bit_addr_att, is_valid_32bit_addr_att,
	  is_valid_64bit_addr_intel): removed unnecessary conditions
	* lib/Asm/X86.pm (is_valid_16bit_addr_intel): added checking the sign
	  in some cases
	* t/*.t: many more unit tests, much more complex and covering 100%
	* README: updated the links and copyright

2020-07-19	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.33
	* X86.pm: Updated the instruction list from NASM version 2.15.03.
	* Makefile.PL: added the minimum Perl version of '5.006' (arbitrarily
	  chosen based on the version of the Exporter module on my system)

2020-05-20	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.32
	  Fix some build/distribution errors in the previous version (README,
	  missing META.*). Added a digital signature.
	* Makefile.PL: added detecting the "tar" utility type. In case of
	  detecting BSD tar (default on some systems), use GNU tar mode.
	  Added a parameter to sign the package.
	* CONTRIBUTING: added, for metacpan.

2020-05-13	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.31
	* X86.pm: Updated the instruction list from FASM version 1.73.24.

2019-12-23	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.30
	* X86.pm: Updated the instruction list from FASM version 1.73.21.

2019-11-24	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.29
	* X86.pm: Updated the instruction list from FASM version 1.73.18.

2019-08-16	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.28
	* X86.pm: Updated the instruction list from FASM version 1.73.16.

2019-01-03	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.27
	* Makefile.PL: remove hard-coded INSTALLDIRS, allowing it to be set
	  during the RPM package build or manual installation.
	* X86.pm: Updated copyright inside the module.
	* README: updated copyright inside the file.

2018-11-18	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.26
	* X86.pm: Updated the register and instruction list from NASM version
	  2.14. Updated copyright inside the module.
	* README: updated copyright inside the file.
	* Makefile.PL: fixed some rpmlint errors.

2017-05-06	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.25
	* X86.pm: Updated the register and instruction list from NASM version
	  2.13.01. Updated copyright inside the module.
	* README: updated copyright inside the file.

2016-03-22	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.24
	* X86.pm: Updated the register and instruction list from FASM version
	  1.71.51 and NASM version 2.12.01. Updated copyright inside the
	  module.
	* README: updated copyright inside the file, quoted module names.

2015-11-01	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.23
	* X86.pm: Updated the register and instruction list from FASM version
	  1.71.46. Updated copyright inside the module.

2014-11-15	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.22
	* X86.pm: Updated the register and instruction list from NASM version
	  2.11.06.

2014-03-01	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.21
	* X86.pm: Updated the register and instruction list from NASM version
	  2.11.02.

2014-01-11	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.20
	* X86.pm: Updated the register and instruction list from NASM version
	  2.11. Added more XMM and YMM registers, added ZMM and opmask
	  (K[0-7]) registers. Added subroutines to check for opmask registers.
	  Upgraded tests.

2013-12-07	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.16
	* X86.pm: Updated the register list with YMM registers.

2012-09-16	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.15
	* X86.pm: Updated the instruction list from NASM version 2.10.05.

2012-07-21	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.14
	* X86.pm: Updated the instruction list from NASM version 2.10.02.

2012-03-31	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.13
	* X86.pm: Updated the instruction list from NASM version 2.10 and
	  FASM version 1.69.50. Made is_addressable32_intel,
	  is_addressable32_att, is_addressable32, is_r32_in64_intel
	  is_r32_in64_att, is_r32_in64, is_att_suffixed_instr
	  is_att_suffixed_instr_fpu and add_att_suffix_instr public.
	* X86.pm (conv_intel_instr_to_att): corrected removing double percent
	  character that may be created during the conversion.
	* X86.pm (conv_intel_addr_to_att): removing double percent character
	  that may be created during the conversion.

2012-01-22	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.12
	* X86.pm: Removed duplicates from the instruction and mnemonic list.
	  Fixed the private subroutine add_att_suffix_instr (some AT&T
	  instructions were not generated). Added one new register, CR8
	  (available only in 64-bit mode).
	* X86.pm, README: Bump the year in the copyright notices.
	* README: Update with external dependencies required during manual
	  installation.
	* zz_duplicates.t: a new test to detect duplicate entries in all the
	  arrays exported by the module.

2011-12-30	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.11:
	  Updated the instruction and mnemonic list from FASM version 1.69.35.

2010-09-08	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.10:
	  Updated the instruction list from NASM version 2.09.01.

2010-04-18	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.09:
	  Updated the instruction list from NASM version 2.08.01. Minor
	  whitespace changes in the source, for better readability.

2009-07-05	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.08:
	  Updated the instruction list from NASM version 2.06. Changed one
	  private procedure's name.

2008-11-09	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.07:
	  Documentation fixes.
	  Verified instruction list to be complete with fasm-1.67.28 and
	  updated it from nasm-2.05.01.

2008-10-24	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.06:
	  Updated instruction list from fasm-1.67.27. Changed double to
	  single quotes in one place.

2008-05-18	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.05:
	  A bit better coding style.
	  Added the tests to the package.

2008-04-17	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.04:
	  Added functions checking if the given string represents a register
	   in AT&T syntax. Renamed the previous functions with an "_intel"
	   suffix and the new functions with an "_att" suffix. Old
	   functions (the ones with no suffixes) now check for either Intel
	   or AT&T syntax, so they remain valid.
	  Added return value to function descriptions.
	  Added arrays with AT&T-style register names.
	  Updated instruction list from the latest FASM source.
	  Added AT&T-style instruction mnemonic array.
	  Added functions for checking if a given string represents a
	   valid 16-/32-/64-bit addressing mode in AT&T syntax.
	   Renamed the previous functions with an "_intel" suffix and the
	   new functions with an "_att" suffix. Old functions (the ones
	   with no suffixes) now check for either Intel or AT&T syntax,
	   so they remain valid.
	  Changed Intel syntax addressing analysis to check if the whole given
	   string is correct (using ^ and $ in regular expressions).
	  Added functions to convert an addressing mode or instruction (with
	   all its operands) between AT&T and Intel syntaxes.
	  Added functions to convert an instruction or memory addressing mode
	   between Intel and AT&T syntaxes.
	  Converted subroutine names to prototypes.
	  Added the compile-once flag where applicable.
	  Added PRIVATE to documentation of private non-exported subroutines.

2008-03-29	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.03:
	  Fixed a bug with 64-bit addressing, where valid addresses of the
	   form [ebx+r10d] were not recognised properly.
	  Added the "SUPPORT AND DOCUMENTATION" section from the README file
	   to the module.

2008-03-27	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.02:
	  Fixed a bug with the 'fs' segment register.
	  Added a list of segment registers and a function for checking
	   if a given string represents a segment register.
	  Added functions for checking if a given string represents a
	   valid 16-/32-/64-bit addressing mode.
	  Added a list of FPU registers and a function for checking
	   if a given string represents an FPU register.

2008-03-08	Bogdan Drozdowski <bogdro \at\ cpan . org>

	* Version 0.01:
	  Includes all known by FASM instruction mnemonics and registers.
	  Includes functions that check if a given string is a register
	  (any type or explicit: 8-, 16-, 32-, 64-bit or multimedia) and
	  functions that check if a given string is a mnemonic.
