¿Qué significan los 'prefijos de instrucción' en x86 moderno?
Para comprender por qué Bulldozer estaba por debajo, he estado mirando el excelente libro de microarquitectura de Agner Fog, en la página 178 debajo de bulldozer tiene este párrafo.
Las instrucciones con hasta tres prefijos se pueden decodificar en un ciclo de reloj. Hay una penalización muy grande para las instrucciones con más de tres prefijos. Las instrucciones con prefijos 4-7 toman 14-15 ciclos de reloj adicionales para decodificar. Las instrucciones con prefijos 8-11 toman 20-22 ciclos de reloj adicionales, y las instrucciones con prefijos 12-14 toman 27-28 ciclos de reloj adicionales. Por lo tanto, no se recomienda alargar las instrucciones de NOP con más de tres prefijos. El recuento de prefijos para esta regla incluye tamaño de operando, tamaño de dirección, segmento, repetición, bloqueo, prefijos REX y XOP. Un prefijo VEX de tres bytes cuenta como uno, mientras que un prefijo VEX de dos bytes no cuenta. Los códigos de escape (0F, 0F38, 0F3A) no cuentan.
Cuando buscaba prefijos, recibí definiciones muy técnicas mucho más allá de mis capacidades. O sugirió que estaban limitados a 4 por instrucción, lo cual entra en conflicto con el extracto anterior.
Entonces, en términos simples, ¿alguien puede explicar qué son / hacen y por qué es posible que desee agregar hasta 14+ a una instrucción en lugar de dividirla?