x86-64 Instructions Set
CPU instructions
The general-purpose instructions perform basic data movement, arithmetic, logic, program flow, and string operations which programmers commonly use to write application and system software to run on Intel 64 and IA-32 processors. They operate on data contained in memory, in the general-purpose registers (EAX, EBX, ECX, EDX, EDI, ESI, EBP, and ESP) and in the EFLAGS register. They also operate on address information contained in memory, the general-purpose registers, and the segment registers (CS, DS, SS, ES, FS, and GS).
- Data Transfer Instructions
- Conditional Moves
- Stack Operations
- Exchange Operations
- Compare-Exchange Operations
- Compare-Add Operations
- Misc Operations
- Data Conversion Instructions
- Binary Arithmetic Instructions
- Addition
- Subtraction
- Multiplication
- Division
- Negation
- Comparison
- Decimal Arithmetic Instructions
- Packed BCD
- Unpacked BCD
- Logical Instructions
- Shift and Rotate Instructions
- Shift
- Rotation
- Bit and Byte Instructions
- Bit Test
- Bit Scan
- Set Byte on Condition
- Bit manipulation instructions
- Bit Counting
- Bit Shuffling
- LSB Operations
- Performance Improvement
- String Instructions
- Load From Memory
- Store To Memory
- Move Memory Blocks
- Compare Memory Blocks
- Find In Memory Block
- Repeat String Operation
- I/O Instructions
- Input
- Output
- Enqueue Store Instructions
- Control Transfer Instructions
- Conditional Jumps
- Loops
- Procedure Calls
- Interrupts
- Control Transfer Terminating Instructions
- High Level Procedure Instructions
- Shadow Stack Management Instructions
- Busy Bit
- Shadow Stack Pointer (SSP)
- Writes
- Flag Control Instructions
- Set Flags
- Clear Flags
- Complement Flags
- Load Flags
- Store Flags
- User Interrupt (UINTR) Instructions
- User Level Monitor (ULM) Instructions
- Miscellaneous Instructions
- Random Number Generator Instructions
- Segment Register Instructions
- System Instructions
- Descriptor Table Management
- Segmentation
- Privilege Leveling
- Memory Protection/Synchronization
- Task Management
- State Registers
- Control Registers
- Model-Specific Registers
- Performance Registers
- System Management
- Processor Control
- Cache and TLB Management
- System Calls
FPU instructions
The x87 FPU instructions are executed by the so-called "math coprocessor". These instructions operate on floating-point, integer, and binary-coded decimal (BCD) operands. The main purpose of these instructions are to perform floating-point arithmetic. But nowadays we have SIMD instructions that are much faster than FPU. So, please, don't use the FPU in newly written code, because it usage is marked as outdated in Linux 64 ABI. Use SIMD instead.
- Data Transfer Instructions
- Integer Operands
- Binary-coded Decimal Operands
- Floating-point Operands
- Basic Arithmetic Instructions
- Integer Operands
- Floating-point Operands
- Transcendental Instructions
- Load Constants Instructions
- Comparison Instructions
- Integer Operands
- Floating-point Operands
- Control Instructions
- FPU and SIMD State Management Instructions
SIMD instructions
Beginning with the Pentium II and Pentium with Intel MMX technology processor families, many extensions have been introduced into the Intel 64 and IA-32 architectures to perform single-instruction multiple-data (SIMD) operations. These extensions include the MMX technology, SSE, SSE2, SSE3, SSE4, AVX, AVX2 and AVX512 extensions. Each of these extensions provide a group of instructions that perform SIMD operations on packed integer and/or packed floating-point data elements.
- AVX Initialization Instructions
- Data Transfer Instructions
- Integer Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Broadcast Instructions
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- 128-bits Integer Operands
- 128-bits Floating-point Operands
- Expand Instructions
- Integer Operands
- Floating-point Operands
- Compress Instructions
- Integer Operands
- Floating-point Operands
- Insert Instructions
- Integer Operands
- Floating-point Operands
- Extract Instructions
- Integer Operands
- Floating-point Operands
- Gather Instructions
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Scatter Instructions
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Blending Instructions
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Shuffle Instructions
- Bit Operands
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Permute Instructions
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- 128-bits Integer Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- 128-bits Floating-point Operands
- Unpack Instructions
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Pack Instructions
- Words into Bytes
- Double Words into Words
- Conversion Instructions
- Byte to Word
- Byte to Double Word
- Byte to Quad Word
- Word to Byte
- Word to Double Word
- Word to Quad Word
- Double Word to Byte
- Double Word to Word
- Double Word to Quad Word
- Quad Word to Byte
- Quad Word to Word
- Quad Word to Double Word
- Double Word to Single Precision Floating-point
- Double Word to Double Precision Floating-point
- Quad Word to Single Precision Floating-point
- Quad Word to Double Precision Floating-point
- Half Precision Floating-point to Single Precision Floating-point
- Single Precision Floating-point to Double Word
- Single Precision Floating-point to Quad Word
- Single Precision Floating-point to Half Precision Floating-point
- Single Precision Floating-point to Double Precision Floating-point
- Double Precision Floating-point to Double Word
- Double Precision Floating-point to Quad Word
- Double Precision Floating-point to Single Precision Floating-point
- Logical Instructions
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Integer Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Shift and Rotate Instructions
- Word Operands
- Double Word Operands
- Quad Word Operands
- Double Quad Word Operands
- Comparison Instructions
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Packed Arithmetic Instructions
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Fused Arithmetic Instructions
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Function Primitives
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Opmask Instructions
- 8-bit Operands
- 16-bit Operands
- 32-bit Operands
- 64-bit Operands
- String and Text Processing Instructions
- Secure Hash Algorithm Instructions
- SHA-1
- SHA-256
- SHA-512
- SM3
- SM4
- Advanced Encryption Standard (AES) instructions
- Encryption
- Decryption
- Galois Field
- Key Locker Instructions
- State Management Instructions
- Agent Synchronization Instructions
- Cacheability Control, Prefetch and Ordering Instructions
- Read Prefetch
- Write Prefetch
- Cache Line Maintenance
- Non-Temporal Stores
- Direct Loads/Stores
- Memory Barriers (Fences)
- Instruction Serialization
- Spin-Wait Optimization
AMX instructions
Intel Advanced Matrix Extensions (Intel AMX), are extensions to the x86 instruction set architecture (ISA) for microprocessors from Intel designed to work on matrices to accelerate artificial intelligence (AI) and machine learning (ML) workloads.
MPX instructions
Memory Protection Extensions (MPX) is a new capability introduced into Intel Architecture. MPX can increase the robustness of software when it is used in conjunction with compiler changes to check memory references, for those references whose compile-time normal intentions are usurped at runtime due to buffer overflow or underflow. Two of the most important goals of MPX are to provide this capability at low performance overhead for newly compiled code, and to provide compatibility mechanisms with legacy software components. A direct benefit MPX provides is hardening software against malicious attacks designed to cause or exploit buffer overruns.
SGX instructions
Intel Software Guard Extensions (SGX) provide two sets of instruction leaf functions to enable application software to instantiate a protected container, referred to as an enclave. The enclave instructions are organized as leaf functions under two instruction mnemonics: ENCLS (ring 0) and ENCLU (ring 3).
SMX instructions
Safer Mode Extensions (SMX) provides a programming interface for system software to establish a measured environment within the platform to support trust decisions by end users. SMX functionality is provided in an Intel 64 processor through the GETSEC instruction via leaf functions.
TSX instructions
Transactional Synchronization Extensions (TSX) allow the processor to determine dynamically whether threads need to serialize through lock-protected critical sections, and to perform serialization only when required. This lets the hardware expose and exploit concurrency hidden in an application due to dynamically unnecessary synchronization through a technique known as lock elision.
VMX instructions
VM extension allows multiple operating systems to share simultaneously x86 processor resources in a safe and efficient manner. An Intel platform with VMX can function as multiple virtual systems or virtual machines. Each virtual machine can run operating systems and applications in separate partitions. VMX also provides programming interface for a new layer of system software, called the Virtual Machine Monitor (VMM), used to manage the operation of virtual machines.