The AMD64 architecture supports the full legacy x86 instruction set, with additional instructions to
support long mode (see Table 1-1 on page 2 for a summary of operating modes). The applicationprogramming
instructions are organized into four subsets, as follows:
• General-Purpose Instructions—These are the basic x86 integer instructions used in virtually all
programs. Most of these instructions load, store, or operate on data located in the general-purpose
registers (GPRs) or memory. Some of the instructions alter sequential program flow by branching
to other program locations.
• Streaming SIMD Extensions Instructions (SSE)—These instructions load, store, or operate on data
located primarily in the YMM/XMM registers. 128-bit media instructions operate on the lower
half of the YMM registers. SSE instructions perform integer and floating-point operations on
vector (packed) and scalar data types. Because the vector instructions can independently and
simultaneously perform a single operation on multiple sets of data, they are called singleinstruction,
multiple-data (SIMD) instructions. They are useful for high-performance media and
scientific applications that operate on blocks of data.
• Multimedia Extension Instructions—These include the MMX™ technology and AMD 3DNow!™
technology instructions. These instructions load, store, or operate on data located primarily in the
64-bit MMX registers which are mapped onto the 80-bit x87 floating-point registers. Like the SSE
instructions, they perform integer and floating-point operations on vector (packed) and scalar data
types. These instructions are useful in media applications that do not require high precision.
Multimedia Extension Instructions use saturating mathematical operations that do not generate
operation exceptions. AMD has de-emphasized the use of 3DNow! instructions, which have been
superceded by their more efficient SSE counterparts. Relevant recommendations are provided in
Chapter 5, “64-Bit Media Programming” on page 237, and in the AMD64 Programmer’s Manual
Volume 4: 64-Bit Media and x87 Floating-Point Instructions.
• x87 Floating-Point Instructions—These are the floating-point instructions used in legacy x87
applications. They load, store, or operate on data located in the 80-bit x87 registers.
Some of these application-programming instructions bridge two or more of the above subsets. For
example, there are instructions that move data between the general-purpose registers and the
YMM/XMM or MMX registers, and many of the integer vector (packed) instructions can operate on
either YMM/XMM or MMX registers, although not simultaneously. If instructions bridge two or more
subsets, their descriptions are repeated in all subsets to which they apply.