The syntax chapter is supposed to be about concepts or instructions that
either have a lot of different syntaxes or new/odd ones.
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
\I without anything in the curly brackets made the "procedure linkage
table" text disappear.
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
- Fix additional broken rules
- Add some more files to WARNOBJ
- $^ is not supported by POSIX, apparently
- Update warnings.pl to *actually* use the srcdir and list of
passed-in files.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Make a note about the availability of the cccl wrapper for building
with MSVC using GNU make.
Minor tidying up of the building from source section in general.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
It isn't actually required to have $(PERLREQ) to run syncfiles,
so factor it out into a separate target.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Using '' filename protects break the generated alternative makefiles,
but it is also largely useless -- building in relative paths which
require escaping breaks anyway as make and the shell would require
different escaping.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
ISO C before C23 restricted enum ranges to type "int" (not even
"unsigned int"). This limits the usability of enums for bit fields,
but it still covers our main use cases.
On gcc/clang this just produces a warning, but who knows what other
compilers will do.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
The MMX and early SSE PSHUF* instructions were annotated SM0-1, which
is unnecessary (no ambiguity) but broke the tighter SM matching the
assembler now uses.
This is almost certainly underspecified now, but the MMX and early SSE
instruction patterns need to be tidied up anyway, and this is the
least impactful change that seems to fix the problem.
This unbreaks compiling ffmpeg.
Reported-by: Yongjie Sheng (Intel) <sheng.yongjie@outlook.com>
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
PF and CF are always set to the same value; allow the programmer to
specify either or both.
Allow EQU to take a {dfv} expression without needing parens.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Add all the missing instructions / instruction variants that are
specified in the 2025 June Intel ISE.
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
Memory operand size for all VSM4KEY4 versions is specified as 128 bit
long, while the ymm register version should use 256 bit size.
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
Add macros for the R16L-R31L aliases for the corresponding -B
registers.
The order in the file changed to put all the -L registers at the end,
to make it easier to maintain this file.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Currently, the website links directly to appendix C, D, and E by name.
At some point, change the HTML generation to use the chapter names
rather than numbers.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
When dealing with bitmasks/bitfields, definining them in macros tends
to cause a lot of desirable constants out because it is a pain to
create all of them. C macros can't create other macros, but they
*can* be used to create fields in an enum, so provide some neat
convenience macros for doing so.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
An earlier version of the AVX10.2 documentation had support for ER and
SAE in 256-bit vectors using a special encoding. This was never
implemented, and has since been removed from the spec.
Remove from NASM, too.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
The control and debug registers are always using the default operand
size. It is probably easiest to just encode it explicitly for now.
Control registers are particularly weird because of the AMD "lock as
REX.R" hack...
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Far jmp and call are special in many ways... not the least because of
the old legacy syntax of putting the size on the segment instead of
the offset.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
If the user requests a map file, the user needs to be able to
get it!
It should have been an error, not a warning, all along.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Using "extern" or "required" after the definition should be
interpreted as "global", just as if "extern" or "required" had been
specified before the definition.
Unfortunately the code did not correctly handle the case of upgrading
from LOCAL to GLOBAL via an EXTERN or REQUIRED directive, only from
EXTERN or REQUIRED to GLOBAL via definition or a GLOBAL or COMMON
directive.
Fix.
Reported-by: E. C. Masloch <pushbx@ulukai.org>
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Do not force the operand size for K registers and "ko#"
encodings. This resolves BR 3392957.
Reported-by: ig <glucksmann@avast.com>
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
A pattern for XCHG was incompletely macroized. This caused a
fallthrough to the next pattern, reversing the operands, but would
probably have had generated incorrect code in at least some cases.
Beef up the xchg test.
Reported-by: E. C. Masloch <pushbx@ulukai.org>
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Instead of do more ad hoc hacks in preinsns.pl, add explicit macro
flags for the arithmetic instructions. This also allows folding CMP
back into the standard arithmetic instructions.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>