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
- Binary Arithmetic Instructions
- Decimal Arithmetic Instructions
- Logical Instructions
- Shift and Rotate Instructions
- Bit and Byte Instructions
- I/O and String Instructions
- Control Transfer Instructions
- High Level Procedure Instructions
- Flag Control Instructions
- Miscellaneous Instructions
- Random Number Generator Instructions
- Bit manipulation instructions
- Segment Register Instructions
- System Instructions
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
- Expand Instructions
- Compress Instructions
- 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
- Byte Operands
- Word Operands
- Double Word Operands
- Quad Word Operands
- Single Precision Floating-point Operands
- Double Precision Floating-point Operands
- Permute Instructions
- 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
- Primitives of Functions
- 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
- State Management Instructions
- Agent Synchronization Instructions
- Cacheability Control, Prefetch and Ordering Instructions
AES instructions
AES instructions operate on XMM registers to provide accelerated primitives for block encryption/decryption using Advanced Encryption Standard (AES). The purpose of the instruction set is to improve the speed of applications performing encryption and decryption using the AES.
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.
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.