ゼロレジスタ

ゼロレジスタ（Zero Register）とは、プロセッサにおいて常に値 0 を返し、書き込みを行っても値が変化しないレジスタのこと。

CDC 6600、System/360、ARM64 他の命令セットアーキテクチャで定義されている。

「ゼロ」という定数が命令中に屡々現れ、例えば「ゼロなら分岐（branch if zero）」のような命令において、命令を最適化して、性能向上に寄与する場合がある。一部のアーキテクチャでは、専用のオペコードや基本命令の特例によってこれを実現するが、それを実装するには命令デコーダにロジックを追加する必要がある。ゼロレジスタを用いれば、新たなオペコードを追加することなく同等の効果を得られるが、そのために 1 つのレジスタを専用に割り当てる必要があり、レジスタ数が限られているアーキテクチャでは不利になる可能性がある。

x86 アーキテクチャはゼロレジスタを持たないが、ARM は ARM64 でゼロレジスタを追加した。RISC-V アーキテクチャでは「x0」というレジスタ名、ABI 名「zero」を持つゼロレジスタが含まれており、その採用理由として「ゼロ専用のレジスタを設けることは、RISC-V ISA の単純化に意外なほど大きく寄与する」と説明されている。

注：これは、レジスタを XOR などでゼロにすることとは異なり、物理ハードウェアとして実装されている[1]。

 References 

Category:CPU