汎用レジスターを増量する「APX」
Intel APX(Advanced Performance Extensions)は、X86-Sと異なり提案ではなく、将来実装することが明らかにされている。こちらの基本的なアイディアは「64bit環境で利用できる汎用レジスターの数を増やすことで、より効率的にプログラムを実行できるようにしよう」というものだ。
もともとx64(というよりx86-64)になった時、それまで8個だった汎用レジスターが16個に増えている。もっとも8086由来の8個の汎用レジスターのうち、プログラムからある程度自由に使えるレジスターは実質的には4つ(AX/CX/DX/BX)しかなかったので、汎用レジスターが16個に増えたことでプログラムから自由に使えるレジスターは12個になった計算で、3倍に増えたことでこれまでスタックしてカバーしていたレジスター不足の状況が大幅に緩和されることになった。
これに加え、新しくNDD(New Data Destination)を利用した3オペランド命令も定義されることになった。NDDとはなにか? というと、これまでx86の命令セットは基本2オペランドだった。例えば加算(ADD)命令の場合、従来は以下のフォーマットになっていた。
ADD reg1, reg2
この場合の処理は以下の計算式になる。
reg1 = reg1 + reg2
つまりレジスターreg1の内容とレジスターreg2の内容を加算して、その結果をreg1に上書きする格好だ。この時点で、元のreg1の内容は失われる格好になる。これに対してNDDを利用した3オペランド命令では以下のようになる。
ADD reg1, reg2, reg3
処理は以下の計算式になる。
reg1 = reg2 + reg3
今度はレジスターreg2とreg3の内容を加算し、その結果をreg1に保存する。つまりADDを行なってもreg2の内容が上書きされることはなくなった。
もともとx86でこの3オペランド命令がサポートされなかった理由は、8086でレジスターの数を節約するためである。当時の回路規模では、レジスターを多数実装するとそれだけでトランジスタ数が大きく増えてしまい不経済だったからだ。
したがって、仮に命令を実行した後でも元のレジスターの内容を保存しておきたい場合は、あらかじめスタックなどにその値を格納しておいてから命令を実行し、その後スタックから復帰させるという方法が用いられていた。
このあたりはx64の実装で利用できるレジスターの数が増えたことでだいぶ緩和された(スタックに格納しなくても、別の汎用レジスターに格納できる場合が増えた)が、どうせレジスターにコピーするくらいなら最初から3オペランド命令にした方が無駄にレジスター間コピーをする手間が省けて楽である。そこで汎用レジスター数の増加と併せて、この3オペランド命令のサポートが追加された格好だ。
ただこれ、既存のx86/x64とはまるで互換性がない。そこでこの3オペランド命令に関しては、REX2という新しい命令Prefixが付くことになった。もともとx86では、命令Prefixと呼ばれる拡張フォーマットがサポートされている。
例えば80386の場合、0x41では16bitのINC(インクリメント:1加算する)命令だが、0x66 0x41では32bit命令のINCになる。0x41はINCのオペコード(命令を示す値)だが、0x66がOperand Size Prefixで、この場合は32bitのINC命令を実行するようになるというわけだ。
ほかにもAddress Size PrefixやSegment Size Prefix、Repeat Prefix、REX Prefix、VEX Prefixなどがある。このうちREX Prefixはx64に合わせて導入されたもので、これが冒頭に付くと続く命令は64bitとして扱うというものだが、今回はREX2という新しいプレフィックスが用意された格好だ。
余談だが、REX Prefixは0x40~0x47を利用する。この値、オペコードとしては16bitのINC命令であった。つまり64bit拡張を行なう際に16bitのINC命令を潰した格好だ。同様にREX2 Prefixは0xD5を利用するが、これは16bitのAAD(0xD5 0x0A)ないしAAX(0xD5)で使われていたオペコードで、これを潰してREX2に割り当てた格好になる。

この連載の記事
-
第852回
PC
Google最新TPU「Ironwood」は前世代比4.7倍の性能向上かつ160Wの低消費電力で圧倒的省エネを実現 -
第851回
PC
Instinct MI400/MI500登場でAI/HPC向けGPUはどう変わる? CoWoS-L採用の詳細も判明 AMD GPUロードマップ -
第850回
デジタル
Zen 6+Zen 6c、そしてZen 7へ! EPYCは256コアへ向かう AMD CPUロードマップ -
第849回
PC
d-MatrixのAIプロセッサーCorsairはNVIDIA GB200に匹敵する性能を600Wの消費電力で実現 -
第848回
PC
消えたTofinoの残響 Intel IPU E2200がつなぐイーサネットの未来 -
第847回
PC
国産プロセッサーのPEZY-SC4sが消費電力わずか212Wで高効率99.2%を記録! 次世代省電力チップの決定版に王手 -
第846回
PC
Eコア288基の次世代Xeon「Clearwater Forest」に見る効率設計の極意 インテル CPUロードマップ -
第845回
PC
最大256MB共有キャッシュ対応で大規模処理も快適! Cuzcoが実現する高性能・拡張自在なRISC-Vプロセッサーの秘密 -
第844回
PC
耐量子暗号対応でセキュリティ強化! IBMのPower11が叶えた高信頼性と高速AI推論 -
第843回
PC
NVIDIAとインテルの協業発表によりGB10のCPUをx86に置き換えた新世代AIチップが登場する? -
第842回
PC
双方向8Tbps伝送の次世代光インターコネクト! AyarLabsのTeraPHYがもたらす革新的光通信の詳細 - この連載の一覧へ











