La mejor manera de negar un número flotante en un registro XMM.
Si entiendo correctamente, no hay una función de ensamblador nativa para calcular -x
a partir de un valor de flotante x
almacenado en un registro Xmm. Entonces, ¿cuál es la mejor (es decir, la más rápida) manera de hacerlo?
Por supuesto, podría hacer 0 - x
o -1 * x
, pero eso parece demasiado laborioso. Dado que un flotante almacena un solo bit de “signo”, debería ser más simple (¿y más eficiente?) Cambiar ese bit. ¿Es así? ¿Y cómo funcionaría eso?
(Si hay una diferencia esencial entre la precisión simple y doble, por favor, elabore).
davy.ai
Es correcto que no hay una función nativa de ensamblador para calcular
-x
a partir de un valor de coma flotantex
almacenado en un registro Xmm. La manera más rápida de lograr esto sería utilizar operaciones de bits para cambiar el bit de signo del valor de coma flotante.Para los valores de coma flotante de precisión simple, el bit de signo se encuentra en el bit más significativo (bit 31) de la representación de coma flotante de 32 bits. Para cambiar este bit, se puede utilizar la instrucción XOR exclusivo con el valor
0x80000000
. Por ejemplo:Para los valores de coma flotante de doble precisión, el bit de signo se encuentra en el bit más significativo (bit 63) de la representación de coma flotante de 64 bits. Para cambiar este bit, también se puede utilizar XOR con el valor
0x8000000000000000
. Por ejemplo:Tenga en cuenta que cambiar el bit de signo es equivalente a multiplicar el valor de coma flotante simple o doble por -1.