2011-12-29 14 views

risposta

10

E 'movapd, movaps, o movdqa

movaps xmm3, xmm0 

fanno tutti la stessa cosa, ma c'è un problema:

  • movapd e movaps operano nel dominio in virgola mobile.
  • movdqa opera nel dominio intero

Utilizzare quella appropriata in base al tipo di dati per evitare stalli dominio evoluzione.

Inoltre, non c'è motivo di utilizzare movapd. Utilizzare sempre movaps invece perché movapd richiede un byte aggiuntivo per la codifica.

+1

movdqa è quello che stavo cercando :) Grazie. È stato veloce :) PS. In che modo le mosse in virgola mobile differiscono effettivamente da quelle integer? Per entrambi dovrei copiare semplicemente ... – lampak

+4

Sui processori Intel, ci sono unità FP e interi separate. Quando esegui un'istruzione che si trova in una unità, il valore viene spostato su quell'unità. Ma quando si impartisce un'istruzione in un dominio diverso a quel valore, deve essere spostato nella nuova unità - con una penalità di 1-2 cicli. Pertanto, è meglio mantenere un valore in un dominio, se possibile, quindi perché ci sono diverse istruzioni 'mov'. Se stai facendo aritmetica dei numeri interi e usi 'movaps', pagherai una penalità per spostare il valore sull'unità FP, e un'altra penalità per spostarla indietro sulla successiva istruzione intera impartita. – Mysticial

+1

Lo stesso vale per gli operatori logici: come: 'por',' orps' e 'orpd' – Mysticial