MOVAPD

From Wikipedia, the free encyclopedia

In the x86 assembly programming language, MOVAPD is the name for a specific action performable by modern x86 processors with 2nd-generation Streaming SIMD Extensions (SSE2). This action involves copying a pair of numbers to temporary space in the processor for use in other computations. MOVAPD is one of the fastest ways to accomplish this effect.

Specifically, MOVAPD causes a 16-byte-aligned packed-doubles source to be copied to an XMM register or a 16-byte memory region.

Contents

[edit] Usage

Opcode Assembly (Intel syntax) Assembly (AT&T syntax) icc intrinsic equivalent(s) gcc built-in(s)
66 0F 28 /r MOVAPD xmm1, xmm2/m128 MOVAPD xmm2/m128, xmm1 __m128 _mm_load_pd(double* p)
66 0F 29 /r MOVAPD xmm1/m128, xmm2 MOVAPD xmm2, xmm1/m128 void _mm_store_pd(double* p, __m128 a)

The source operand can be either an XMM register (xmm2) or a memory address (m128).

The destination operand can be either an XMM register (xmm1) or a memory address (m128). Note, however, that the source and destination operands cannot both be memory addresses.

[edit] Potential Exceptions

If a memory address operand is not 16-byte-aligned, a general protection exception (#GP) will be raised.

[edit] References

  • gcc info page.
  • Intel® 64 and IA-32 Architectures Optimization Reference Manual, November, 2006.
  • Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2A: Instruction Set Reference, A-M, November, 2006.

[edit] See Also

  • MOVAPS/MOVAPD
  • MOVDDUP
  • MOVHLPS
  • MOVHPS/MOVHPD
  • MOVLHPS
  • MOVLPS/MOVLPD
  • MOVMSKPS/MOVMSKPD
  • MOVNTPS
  • MOVSHDUP
  • MOVSLDUP
  • MOVSS/MOVSD
  • MOVUPS/MOVUPD

x86 instruction listings