汎用レジスターを増量する「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に割り当てた格好になる。
この連載の記事
-
第807回
PC
Core Ultra 200H/U/Sをあえて組み込み向けに投入するのはあの強敵に対抗するため インテル CPUロードマップ -
第806回
PC
トランジスタ最先端! RibbonFETに最適なゲート長とフィン厚が判明 IEDM 2024レポート -
第805回
PC
1万5000以上のチップレットを数分で構築する新技法SLTは従来比で100倍以上早い! IEDM 2024レポート -
第804回
PC
AI向けシステムの課題は電力とメモリーの膨大な消費量 IEDM 2024レポート -
第803回
PC
トランジスタの当面の目標は電圧を0.3V未満に抑えつつ動作効率を5倍以上に引き上げること IEDM 2024レポート -
第802回
PC
16年間に渡り不可欠な存在であったISA Bus 消え去ったI/F史 -
第801回
PC
光インターコネクトで信号伝送の高速化を狙うインテル Hot Chips 2024で注目を浴びたオモシロCPU -
第800回
PC
プロセッサーから直接イーサネット信号を出せるBroadcomのCPO Hot Chips 2024で注目を浴びたオモシロCPU -
第799回
PC
世界最速に躍り出たスパコンEl Capitanはどうやって性能を改善したのか? 周波数は変えずにあるものを落とす -
第798回
PC
日本が開発したAIプロセッサーMN-Core 2 Hot Chips 2024で注目を浴びたオモシロCPU -
第797回
PC
わずか2年で完成させた韓国FuriosaAIのAIアクセラレーターRNGD Hot Chips 2024で注目を浴びたオモシロCPU - この連載の一覧へ