Decodificando el campo inmediato de vcmpps y vcmppd en x86

Fuentes: Encoding vcmpps and vcmppd

Las instrucciones SIMD vcmpps y vcmppd comparan pares de números en coma flotante IEEE754 y producen un resultado de un bit por carril. En lugar de escribir flags, codifican en cinco bits (b4…b0) tanto la relación a evaluar como el comportamiento ante NaN. Una codificación ingenua dedicaría un bit a cada uno de los cuatro casos posibles (mayor, igual, menor, no ordenado) y un quinto bit a la 'sonoridad' (signalling o quiet). Sin embargo, Intel eligió un esquema más complejo: la sonoridad depende de la expresión b4 ^ b1 ^ b0, y cada relación se calcula mediante combinaciones de bits compartidos. El artículo demuestra paso a paso cómo reconstruir esos cinco bits a partir del resultado deseado y presenta la tabla completa de las 32 combinaciones, con sus nombres oficiales (vcmpeqps, vcmpltps, vcmptrueps, etc.). Para explicar la aparente extravagancia del diseño, el autor recurre a la historia: si en lugar de cinco bits sólo se dispusiera de dos, habría que elegir cuatro casos fundamentales. Los diseñadores de x86 seleccionaron igualdad, menor, menor-o-igual y no ordenado como las operaciones canónicas, y los bits adicionales se emplearon después para extender la tabla sin romper esa base. El texto termina subrayando la ortogonalidad como propiedad deseable en un conjunto de instrucciones, dejando al lector con la intuición de que el enrevesado esquema de codificación responde a una lógica histórica y de diseño.