Go to file
H. Peter Anvin bff94fbd39 Major changes to a number of subsystems to improve matching
Work through a number of changes toward making matching a lot saner,
both to reduce the number of patterns to generate for APX but also to
make a number of code patterns simpler.

This replaces a fair number of byte codes.

Improve a number of error messages, especially related to overflows.

Move process_insn() from nasm.c to assemble.c, as it really is the
primary entry point to the assembler module.

Reorder some prefixes. In particular, F2/F3 override 66 when used as a
mandatory prefix, so it makes more sense for them to be closer to the
opcode.

Move a lot more information into struct insn. It is better to have it
in one place; memory consumption is not an issue because struct insn
is transient information.

Get rid of "optimization levels" and replace it with a mask of
flags. That was already halfway done; complete the job.

Replace seg:offset in struct out_data with a struct location. It would
be better to extend this to more places, too.

The ARx and SMx flags are now explicit bitmasks, instead of having a
couple of hard-coded ranges.

Add __func__ to assert or panic messages.

Because of prefix and message changes, a number of travis tests had to
be audited and updated.

Fix a number of instruction patterns which had .128 when they ought to
be .lig. This is no longer a minor issue with the disassembler: for
AVX10, the pattern vector length determines how SAE/RC are encoded,
and there is no valid 128-bit encoding. However, with .lig the 512-bit
encoding can be used.

Separate "o64nw" into two pieces: opsize 64 and "nw" = "REX.w not necessary". The
latter can be included in non-64-bit patterns. "o64" still set REX.W
since that is still the common thing.

New "osz" bytecode: emit an OSP *or* REX.W depending on the current
mode and operand size. Useful for special cases like "nop" where "o64
nop" probably wants to be encoded as "48 90".

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-07 17:13:44 -07:00
asm Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
autoconf Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
common Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
config autoconf: modernize autoconf and update a lot of m4 macros 2023-10-11 10:19:16 -07:00
contrib
disasm Tidy up handling of modr/m and compressed immediates 2024-08-03 16:24:49 -07:00
doc doc: fix the equivalent description for %cond() 2024-06-01 17:30:27 -07:00
headers headers: Update year 2010-04-25 12:02:38 +04:00
include Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
macros Merge remote-tracking branch 'ElyesH/typos' 2022-11-07 12:39:44 -08:00
misc misc/omfdump: #include <string.h> 2023-10-16 16:53:35 -07:00
Mkfiles Tidy up handling of modr/m and compressed immediates 2024-08-03 16:24:49 -07:00
nasmlib preproc: add %map() function and radix specifiers 2023-10-15 22:43:28 -07:00
nsis nsis: remove references to RDOFF tools 2022-11-08 18:22:25 -08:00
output Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
perllib Fix some typos 2022-01-09 17:34:35 +01:00
stdlib vsnprintf.c: fix printing of a size_t variable 2020-07-09 17:44:21 -07:00
test Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
tools mkdep: handle breakage from srcdir changes 2024-07-27 17:43:34 -07:00
travis Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
win windows host: add embedded manifest file 2024-01-29 17:19:32 -08:00
x86 Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
.editorconfig .editorconfig: hard tabs are still 8 spaces 2024-06-10 21:12:52 -07:00
.gitattributes gitattributes: don't try to merge the version file 2020-06-30 13:48:13 -07:00
.gitignore Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
.travis.yml travis: Disable osx for a while 2018-10-17 21:40:14 +03:00
AUTHORS Correct name spelling and email address 2015-01-18 20:21:14 +02:00
autogen.sh autoconf: unbreak --enable-lto, fix some language macros 2024-04-16 16:31:28 -07:00
ChangeLog Fix some typos 2022-01-09 17:34:35 +01:00
CHANGES
configure.ac Major changes to a number of subsystems to improve matching 2024-08-07 17:13:44 -07:00
INSTALL Fix some typos 2022-01-09 17:34:35 +01:00
LICENSE LICENSE: update year 2010-08-12 20:15:27 -07:00
Makefile.in Makefile.in: fix "make cleaner"/"make spotless" 2024-08-04 16:07:52 -07:00
nasm.spec.in nasm.spec.in: fix mistakes in previous checkin 2024-04-18 15:31:51 -07:00
nasm.spec.sed nasm.spec: use a sed file to insert perl dependencies 2017-04-23 18:54:23 -07:00
nasm.txt Fix some typos 2022-01-09 17:34:35 +01:00
ndisasm.txt ndisasm: man -- Add missing -p option 2013-04-20 20:18:46 +04:00
README.md doc: remove references to sourceforge 2020-07-01 21:48:44 -07:00
SubmittingPatches Add SubmittingPatches file 2010-10-03 21:02:08 +04:00
version NASM 2.16.03 2024-04-17 09:48:27 -07:00
version.pl preproc: standard macros now C-safe, %aliases off, fix %? recursion 2019-08-27 16:42:41 -07:00

NASM, the Netwide Assembler

master

Many many developers all over the net respect NASM for what it is: a widespread (thus netwide), portable (thus netwide!), very flexible and mature assembler tool with support for many output formats (thus netwide!!).

Now we have good news for you: NASM is licensed under the "simplified" (2-clause) BSD license. This means its development is open to even wider society of programmers wishing to improve their lovely assembler.

Visit our nasm.us website for more details.

With best regards, the NASM crew.