assembly x86 sse mov xmm

assembly - ¿Diferencia entre las instrucciones MOVDQA y MOVAPS x86?



xmm (1)

Estoy buscando la hoja de datos de Intel: Manual del desarrollador de software Intel® 64 e IA-32 Architectures y no puedo encontrar la diferencia entre

  • MOVDQA : Mueve la palabra cuadrada doble alineada
  • MOVAPS : Mover Alineado Alineado de una sola precisión

En la hoja de datos de Intel puedo encontrar ambas instrucciones:

Esta instrucción se puede usar para cargar un registro XMM desde una ubicación de memoria de 128 bits, almacenar el contenido de un registro XMM en una ubicación de memoria de 128 bits o mover datos entre dos registros XMM.

La única diferencia es:

Para mover un doble quadword hacia o desde ubicaciones de memoria no alineadas, use la instrucción MOVDQU.

y

Para mover valores empaquetados de coma flotante de precisión simple hacia o desde ubicaciones de memoria no alineadas, use la instrucción MOVUPS.

Pero no puedo encontrar la razón por la cual dos instrucciones diferentes?

Entonces, ¿alguien puede explicar la diferencia?


En funcionalidad, son idénticos.

En algunas microarquitecturas (pero no en todas), existen diferencias temporales debidas a "sanciones de cruce de dominio". Por este motivo, generalmente se debe usar movdqa cuando los datos se usan con instrucciones SSE enteras, y se movaps cuando los datos se usan con instrucciones de coma flotante. Para obtener más información sobre este tema, consulte el Manual de optimización de Intel o la excelente guía de microarquitectura de Agner Fog. Tenga en cuenta que estas demoras se asocian más a menudo con movimientos de registros de registro en lugar de cargas o tiendas.