0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-11-08 23:27:15 -05:00
Commit Graph

271 Commits

Author SHA1 Message Date
Yongjie2017
e56130aeb5 add few missing avx10_1 instructions 2025-09-04 16:32:17 +08:00
Maciej Wieczor-Retman
1ebd820dfc insns: travis: apx: IDIV instruction
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
d79e4bb93a insns: travis: apx: ENQCMD[S] instructions
Add enqcmd and enqcmds to the database.

Add relevant tests.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
13b4160ec8 insns: travis: apx: DIV instruction
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
e91a81d780 x86: preinsns: Fix missing vex.w bits
Looks like the wwflag variable was set for both ww and w1 which caused
some VEX.W bits to not get set. Don't set the wwflag for w0 or w1 cases
in the script.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
74867b7750 insns: travis: apx: DEC instruction
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
ca1228e0dd insns: travis: apx: CRC32 APX, cleanup and tests
Clean up CRC32 with $dq macro and add the APX variants.

Also add tests for legacy and APX variants.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
bfb82694b7 insns: travis: apx: CMPccXADD instruction
Add CMPccXADD variant to the database with some basic testcases.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
429f54a391 insns: travis: apx: CMOVcc instruction
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
276b9d82b8 insns: travis: apx: Add APX extended bitmask instructions
Add APX variants of BLSI, BEXTR, BLSMSK, BLSR, BZHI.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
75b5a4e1aa insns: travis: apx: ANDN instruction
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
dc172d3f82 insns: travis: apx: APX support fo atomic instructions
Add the AOR instruction and use $bwdq macros on the other new atomic
instructions: AADD, AAND and AXOR.

Add tests.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
Maciej Wieczor-Retman
1b9c2f873d x86: Immediate operand longer than byte not possible
Due to ib in the apx arithmetic instruction preprocessed implementation
only byte size immediate operands were possible. Changing ib to i# fixes
the issue.

Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
2025-09-04 08:40:28 +02:00
H. Peter Anvin
f2b6dd6f66 More KMOV pattern fixes
Work even more on KMOV size encodings.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2025-09-02 21:09:20 -07:00
H. Peter Anvin
5a9a15ad18 insns.dat: fix KMOV patterns with GPRs
KMOV with GPR size encodings are "special"; the encoding matches neither
the K register size encodings nor the APX ones.  In the end it seems
that the most straightforward is simply to hand-code the B and W
patterns.

The disassembler still breaks horribly on these patterns....

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-09-02 20:32:33 -07:00
H. Peter Anvin
0852ca5694 disasm: handle NOP disassembly, remove debug message
NOP disassembly is a little "special" because it sits as part of the
XCHG instructions. Add a flag to bail out of the disassembler search
early, and ignore the 0330 bytecode.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-09-02 20:01:36 -07:00
H. Peter Anvin
6f42a3aaf6 (Hopefully) fix kmov and kunpck instructions, disallow "test" for "ktest"
Fix the handling of instruction patterns for KMOV and KUNPCK.
Don't allow K-less versions of KTEST and KORTEST because of
fundmentally different semantics.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-09-02 18:54:27 -07:00
H. Peter Anvin
c6bb32e9d1 preinsns.pl: don't allow KTEST to be just TEST
The semantics for KTEST are so very different from TEST that it would
be a bad idea to allow the TEST spelling.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-09-02 18:18:07 -07:00
H. Peter Anvin
acd01496d7 asm: distinguish between VEX.V as an immediate and a prefix; fix WW
If VEX.V is an immediate, it should not be subject to register range
checks.

If the WW flag is set, REX_W needs to be OR'd in, not XOR'd, because
the map might have the W bit set for matching purposes.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-09-02 15:38:49 -07:00
H. Peter Anvin
e05867ce3d ndisasm: make the assembler (hopefully) work again
- Significantly overhauled the disassembler internals to make
  better use of the information already in the instruction template
  and to reduce the implementation differences with the assembler
- Add APX support to the disassembler
- Fix problem with disassembler truncating addresses of jumps
- Fix generation of invalid EAs in 16-bit mode
- Fix array overrun for types in a few modules
- Fix invalid ND flag on near JMP

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-30 16:16:43 -07:00
H. Peter Anvin
3efdd3cf9a assemble: rex2.w; hinted Jcc in 64-bit mode; UDB
- rex2.w is used as a opcode extension (JMPABS), not rex2.x1 as an
  earlier version of the spec had.
- Segment prefixes used as Jcc hints are valid in 64-bit mode.
- Avoid duplicate warning messages for ignored/invalid prefixes.
  * emit_prefixes() is called twice during code generation.
- Add the UDB #UD opcode in 64-bit mode; SALC is 16/32-bit only.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-08-29 13:55:30 -07:00
H. Peter Anvin
0ab85c391c x86: add Perl script for rex2 compatibility testing (not yet used)
Add a Perl script to try to automate REX2 compatibility flagging. Not
yet integrated into the build process.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2025-03-04 08:43:09 -08:00
H. Peter Anvin
84ae32bf0a insns: add PROT flag if either EVEX or LONG is set
EVEX is not supported in real or v86 modes.
LONG is a submode of PROT.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-08-23 13:15:46 -07:00
H. Peter Anvin
49a56ea9ee Add optimization for operand narrowing; tidy up selector handling
Add a optimization frameword for operand narrowing (where the operand
size doesn't matter beyond a certain range because only certain bits
are referenced.)

Add a macro *and* matching facility for dealing with segment selectors, which are
typically rm16/r32/r64, but exactly how that is applied varies
depending on if a datum is read or written.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-08-23 02:25:21 -07:00
H. Peter Anvin
863bddbdcb iflags: add NOREX flag
Add a NOREX flag to indicate that an instruction pattern is not
compatible with REX encoding.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-08-22 23:41:32 -07:00
H. Peter Anvin
ecbd1c81b3 insns: fix MOVBE CPUID flag, BSWAP 16-bit XCHG patterns
Add the MOVBE CPUID flag, add helper patterns for 16-bit BSWAP
emulation. Unfortunately using ROL/ROR for registers other than the
ones for which XCHG can work clobbers the flags.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-08-22 23:32:42 -07:00
H. Peter Anvin
2b2f1fc98a More macroizing and sorting of instructions into categories
More work on cleaning up instruction patterns, fixing matchig corner
cases, and tidying up the organization of insns.dat.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-08-22 23:22:59 -07:00
H. Peter Anvin
ea90c8f498 insns: macroize CALL
Macroize the CALL instructions.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-22 22:17:39 -07:00
H. Peter Anvin
e515dac43f More matching/macrofication work; now passes "make travis"
More matching and macrofication work.
Improve some error and warning messages.
Update some travis tests for better messages and added optimizations.

Fix duplicated warning messages for the same out-of-range value
problem.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-08-22 22:07:31 -07:00
H. Peter Anvin
253ff4f370 insns: tag pseudo-instructions explicitly; change insnsa.c format
Tag pseudo-instructions explicitly and don't set any CPU level flag
for those.

Change insnsa.c to have (length, pointer) rather than using an ever
increasing in size sentinel at the end of each table. This also means
that empty tables (Dx, INCBIN) can be omitted entirely.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-21 12:50:31 -07:00
H. Peter Anvin
58024b4611 insns: more instruction macroizing/fixups; remote FUTURE tags
Add more instruction macros and fix problems. Adjust some matching
problems.

Remove all FUTURE tags from the instruction list, and add a bunch of
new CPUID tags. Hopefully a small step toward actually getting CPU
feature selection working properly in the future.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-21 11:48:47 -07:00
H. Peter Anvin
cdfe0422b2 x86/insns.dat: macroize the UDx "instructions"
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-20 13:16:20 -07:00
H. Peter Anvin
75f6f4cdb2 WIP: more matching and template work
Further work on a better matching system. Still a work in progress,
however.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
2024-08-20 12:59:07 -07:00
H. Peter Anvin
f114a6276e insns: more macroization and organization
Macroize and update more instruction patterns.

Begin organizing the instructions by functional groups.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-15 22:15:48 -07:00
H. Peter Anvin
ea25d2ebe2 insns: more cleanup and macroization
Checkpoint.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-15 20:00:13 -07:00
H. Peter Anvin
8f97af7d71 insns: more macro fun; handle things like RET, RETW, RETD, RETQ
Add macro handling for patterns with a non-suffixed default operand
and alternative suffixed operands.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-15 19:23:33 -07:00
H. Peter Anvin
05f1b6b658 insns: sanitize the handling of "nw" and "osz"; fix more patterns
"nw" now means: 64-bit operand size is the default, o32 is not
permitted in 64-bit mode.

"osz" means: instruction size determined by prefixes, otherwise the
mode default.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-15 17:52:54 -07:00
H. Peter Anvin
fb74d63180 insns: macroize more instructions
Macroize a few more instructions, and add support for a few more types
of common instruction patterns.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-14 23:57:41 -07:00
H. Peter Anvin
8ee33d2734 insns: more macroized instructions and fix preprocessor bugs
Add more macroized instructions, and fix some bugs in the
instruction preprocessor.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-14 21:26:23 -07:00
H. Peter Anvin
557d99d796 insns: more macro goodness
Even better macro support, add match for the BX register.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-14 20:48:18 -07:00
H. Peter Anvin
1b136eb543 insns: use the pre-existing instruction flags handler for preinsns.pl
There is no reason to reinvent the wheel; reusing the existing code
will be cleaner anyway.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-14 16:45:09 -07:00
H. Peter Anvin
3b55b62f02 apx: implement the mechanism for evex.zu
Implement the mechanism needed to handle {zu} suffixes that actually
set ND (IMUL, SETcc).

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-14 15:44:38 -07:00
H. Peter Anvin
b31f82bf79 insns.dat: add APX SETcc, fix a few more patterns
Add patterns for APX SETcc; fix a few more patterns to work with the
new matcher algorithm.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-14 15:17:24 -07:00
H. Peter Anvin
cb8ca3bb95 insns.pl: for scc encodings, add null string = true
Allow the null string encoding for "true" for scc instructions.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-12 03:16:09 -07:00
H. Peter Anvin
3d24dc6fb9 x86/preinsns.pl: use //g matching instead of split+grep
//g matching is a much better way to positively define tokens. Learn
something new every day!

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-12 02:44:54 -07:00
H. Peter Anvin
b205311fa2 x86/preinsns.pl: correctly handle quoted commas
Don't break a string on a quoted comma, for obvious reasons. Allow an
op argument to be quoted in general.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-12 02:06:54 -07:00
H. Peter Anvin
7ecc9c1f9c insns.dat: more macro feature improvements; now can generate shiftX
Add more improvements to the macro features. Now it is possible to
generate the -X versions of the shift instructions as part of the
macroization, which is highly desirable in order to allow them to be
generated using {nf} syntax.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-12 01:32:17 -07:00
H. Peter Anvin
d5f981e035 WIP: insns.dat: further improve macro facility; use for APX and shifts
Work more on the macro facility. Add the ability to kill an
instruction pattern based on expansion (if the token KILL appears.)
Add APX patterns to the arithmetic macro and macroize the shift and
rotate patterns.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-12 00:28:04 -07:00
H. Peter Anvin
4bb1bc8fe6 x86/preinsns.pl: make the macro facility more general
Make the macro facility in preinsns.pl more general, and relying less
on evaluating Perl constructs. This *might* be practical with some
more work, to move to a data file, but wait until we have a better
idea of the needs.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-11 23:12:25 -07:00
H. Peter Anvin
67339f6965 insns: rename addflags.pl to preinsns.pl; use insns.xda for doc
The former addflags.pl now does more general preprocessing, so rename
it from addflags.pl to preinsns.pl.

To generate the instruction list in the documentation, use the
post-preprocessed insns.xda file.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
2024-08-11 21:34:02 -07:00