# Conjunt d'instruccions XOP

El conjunt d'instruccions XOP (eXtended Operations), anunciat per AMD l'1 de maig de 2009, és una extensió de les instruccions bàsiques SSE de 128 bits al conjunt d'instruccions x86 i AMD64 per al nucli del processador Bulldozer, que es va publicar l'octubre. 12 de 2011. Tanmateix, AMD va eliminar el suport per a XOP a partir de Zen (microarquitectura).
El conjunt d'instruccions XOP conté diversos tipus diferents d'instruccions vectorials, ja que originalment estava pensat com una actualització important de SSE. La majoria de les instruccions són instruccions senceres, però també conté instruccions de permutació de coma flotant i d'extracció de fraccions de coma flotant. Consulteu l'índex per obtenir una llista de tipus d'instruccions.

## Història

XOP és un subconjunt revisat del que originàriament es pretenia com a SSE5. Es va canviar per ser similar però no solapada amb AVX, les parts que es superposaven amb AVX es van eliminar o es van traslladar a estàndards separats com ara FMA4 (multiplicació-acumulació de vectors de coma flotant) i CVT16 (conversió de coma flotant de mitja precisió implementada com a F16C per F16C d'Intel).
Totes les instruccions SSE5 que eren equivalents o similars a les instruccions dels conjunts d'instruccions AVX i FMA4 anunciats per Intel s'han canviat per utilitzar la codificació proposada per Intel. Les instruccions senceres without equivalents a AVX es van classificar com a extensió XOP. Les instruccions XOP tenen un byte de codi operatiu 8F (hexadecimal), però d'altra banda, un esquema de codificació gairebé idèntic a AVX amb el prefix VEX de 3 bytes.
Els comentaristes han vist això com una prova que Intel no ha permès que AMD utilitzi cap part del gran espai de codificació VEX. AMD s'ha vist obligat a utilitzar codis diferents per evitar l'ús de qualsevol combinació de codis que Intel podria utilitzar en el seu desenvolupament per a una altra cosa. L'esquema de codificació XOP és el més proper possible a l'esquema VEX tècnicament sense arriscar-se a que els codis AMD se superposin amb els codis Intel futurs. Aquesta inferència és especulativa, ja que no hi ha informació pública disponible sobre les negociacions entre les dues empreses sobre aquest tema.
L'ús del byte 8F requereix que els m-bits (vegeu l'esquema de codificació VEX) tinguin un valor superior o igual a 8 per tal d'evitar la superposició amb les instruccions existents. El byte C4 utilitzat en l'esquema VEX no té aquesta restricció. Això pot impedir l'ús dels m-bits per a altres propòsits en el futur en l'esquema XOP, però no en l'esquema VEX. Un altre possible problema és que els bits pp tenen el valor 00 a l'esquema XOP, mentre que tenen el valor 01 a l'esquema VEX per a instruccions que no tenen cap equivalent heretat. Això pot complicar l'ús dels bits pp per a altres propòsits en el futur.
Un problema de compatibilitat similar és la diferència entre els conjunts d'instruccions FMA3 i FMA4. Intel va proposar inicialment FMA4 a la versió 3 de l'especificació AVX/FMA per substituir l'FMA de 3 operands proposat per AMD a SSE5. Després que AMD adoptés FMA4, Intel va cancel·lar el suport FMA4 i va tornar a FMA3 a la versió 5 de l'especificació AVX/FMA (vegeu l'historial de FMA).
El març de 2015, AMD va revelar explícitament a la descripció del pedaç per al paquet GNU Binutils que Zen, la seva arquitectura x86-64 de tercera generació en la seva primera iteració (znver1 – Zen, versió 1), no admetrà TBM, FMA4, XOP. i instruccions LWP desenvolupades específicament per a la família de microarquitectures "Bulldozer".

## Referències

* ↑ Michael Larabel. «The Impact Of GCC Zen Compiler Tuning On AMD Ryzen Performance» (en anglès). Phoronix, March 3, 2017.
* ↑ «x86 Options (Using the GNU Compiler Collection (GCC))» (en anglès). [Consulta: 8 desembre 2023].
* ↑ «What is the XOP prefix in an instruction?» (en anglès). [Consulta: 8 desembre 2023].
* ↑ «X86-64 Instruction Encoding - OSDev Wiki» (en anglès). [Consulta: 8 desembre 2023].