XOPプリフィックス
読み:エックスオウピー-プリフィックス
外語:XOP prefix

 AMDXOPで採用されているSIMD命令セット拡張に関する命令プリフィックス(接頭辞)。
目次

概要
 AMDがIntel AVXで不足するSIMD命令(かつてSSE5として計画されていた)を追加するにあたり、独自の拡張命令を符号化するために設計したプリフィックス。
 Intel AVXで使われるVEXプリフィックスを参考に、Intelのそれとオペコードが重複しないように実装された。
 そもそもIntel AVXは、拡張に次ぐ拡張で複雑化したSSEのオペコードをシンプルな構造に整理し、これにより処理の高速化や更なる拡張性の確保を目指したものである。このために使われるのがVEXプリフィックスである。
 XOPで使われるXOPプリフィックスも、発想はVEXプリフィックスとほぼ同じである。命令のデコーダー回路も多くを共用可能とし、無理のない実装を実現させた。

特徴

オペコード
 XOPのオペコードは、VEXプリフィックスと発想ならびに構造的にはほぼ同じである。
 XOPは、8Fhに続く2バイト目をModR/Mとみなし、regフィールドが0ならPOP命令、それ以外の未定義命令だったものをXOPプリフィックスとみなす。
 2バイト目はMSBから順に、R/X/B/mmmmmとなり、2バイト目の下位5ビットを命令を識別するmmmmmフィールドとする。
1バイト目 2バイト目 3バイト目
76543210 76543210 76543210
8F RXBmmmmm WvvvvLpp
 4バイト目に命令を表わす1バイト、5バイト目にModR/M、6バイト目以降に必要に応じてイミディエイトが付く。

2バイト目
 mmmmmフィールドの頭2ビットが00となるもの(0から7までの8通り)は従来のPOP命令になるため利用できないが、8から31までの24通りが拡張命令として利用できる。
 R/X/Bは、それぞれREXプリフィックスの各ビット機能と同様であるが、VEXプリフィックスと同様にビット反転された1の補数となっている。反転させずとも従来命令との衝突は無いが、VEXと命令デコード回路の共通化などが目的と思われる。
2バイト目従来命令AMD XOP
xx000xxxPOP m16 / POP m32
xx001xxx(#UD)B = 0, mmmmm = 8‐15
xx010xxx(#UD)B = 0, mmmmm = 16‐23
xx011xxx(#UD)B = 0, mmmmm = 24‐31
xx100xxx(#UD)
xx101xxx(#UD)B = 1, mmmmm = 8‐15
xx110xxx(#UD)B = 1, mmmmm = 16‐23
xx111xxx(#UD)B = 1, mmmmm = 24‐31
 実際の命令は4バイト目の1バイトで表わすため、都合、24×256=6,144種類の命令が符号化できることになる。

再検索