Ho sentito che l'istruzione di confronto x86: cmp x, y
esegue una sottrazione e imposta vari flag in base al risultato.x86 Istruzione di confronto che utilizza XOR invece di sottrazione
Ora, cosa succede se voglio solo verificare se i due operandi sono uguali? Non fare un XOR invece di una sottrazione è molto più veloce? La mia domanda è, c'è un'istruzione che faccia un confronto con un XOR per dire se i due operandi sono uguali? Forse sarebbe simile a questo: cmpeq x, y
o cmpxor x, y
.
Direi che se voglio solo testare per l'uguaglianza, usare uno sarebbe più veloce dello cmp
, che fa una sottrazione. C'è una tale istruzione come cmpxor
che mi darebbe un aumento di velocità?
Voglio anche dire che sono a conoscenza del fatto che lo xor
imposterà lo zero flag
. Ma se faccio xor x, y
, cambierà x
. Non lo voglio Voglio un'istruzione di confronto che lascerà entrambi gli operandi da soli.
Per quale motivo si suppone che XOR sia "molto più veloce"? – jalf
Non sarebbe "molto più veloce", dato che 'cmp' è già veloce come qualsiasi altra istruzione (incluso' xor'). Su alcuni μarch, l'istruzione 'cmp' può anche essere fusa con un'istruzione derivata dipendente in un singolo μop dal front-end, rendendolo effettivamente ancora più veloce. Tutto questo è documentato nel Manuale di ottimizzazione di Intel, che è liberamente disponibile e vale la pena leggerlo. –
Ira Baxter lo ha detto molto bene: * Tecnicamente un SUB dovrebbe impiegare più tempo di XOR perché il carry deve "ripple" attraverso tutti i bit, mentre XOR è parallelo bit-by-bit. * Questa era la mia logica. – Aaron