ゼロレジスタ
From Wikipedia, the free encyclopedia
ゼロレジスタ(Zero Register)とは、プロセッサにおいて常に値 0 を返し、書き込みを行っても[1]値が変化しないレジスタのこと。
CDC 6600、ARM64 他の命令セットアーキテクチャで定義されている。
「ゼロ」という定数が命令中に屡々現れ、例えば「ゼロなら分岐(branch if zero)」のような命令において、命令を最適化して、性能向上に寄与する場合がある。一部のアーキテクチャでは、専用のオペコードや基本命令の特例によってこれを実現するが、それを実装するには命令デコーダにロジックを追加する必要がある。ゼロレジスタを用いれば、新たなオペコードを追加することなく同等の効果を得られるが、そのために 1 つのレジスタを専用に割り当てる必要があり、レジスタ数が限られているアーキテクチャでは不利になる可能性がある。
x86 アーキテクチャはゼロレジスタを持たないが、ARM は ARM64 でゼロレジスタを追加した。RISC-V アーキテクチャでは「x0」というレジスタ名、ABI 名「zero」を持つゼロレジスタが含まれており、その採用理由として「ゼロ専用のレジスタを設けることは、RISC-V ISA の単純化に意外なほど大きく寄与する」と説明されている。