ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
AMDのXOPで採用されている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バイト目 | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
8F | R | X | B | mmmmm | W | vvvv | L | pp |
4バイト目に命令を表わす1バイト、5バイト目にModR/M、6バイト目以降に必要に応じてイミディエイトが付く。
mmmmmフィールドの頭2ビットが00となるもの(0から7までの8通り)は従来のPOP命令になるため利用できないが、8から31までの24通りが拡張命令として利用できる。
R/X/Bは、それぞれREXプリフィックスの各ビット機能と同様であるが、VEXプリフィックスと同様にビット反転された1の補数となっている。反転させずとも従来命令との衝突は無いが、VEXと命令デコード回路の共通化などが目的と思われる。
2バイト目 | 従来命令 | AMD XOP |
---|---|---|
xx000xxx | POP 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種類の命令が符号化できることになる。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます