16
Apple Silicon、秘密の拡張機能で48年前のIntel 8080をサポート

結局、Apple は 1974 年にデビューした Intel の 8080 プロセッサ用に設計された命令のサポートを Apple Silicon プロセッサに組み込み、文書化されていない秘密の拡張機能を使用して、あまり使用されない命令を実行し、エミュレーション パフォーマンスを向上させたことが判明しました。

AppleのRosetta 2は、Intelプロセッサ向けに開発されたアプリケーションをApple Silicon搭載Macで実行できるようにするmacOSの一部であり、非常にうまく動作しています。1820年代にエジプト学者が古代象形文字の解読に着手したロゼッタ・ストーンにちなんで名付けられました。Rosettaも同様に謎に包まれてきましたが、オーストラリアのセキュリティ研究者Dougall Johnson氏のブログ記事で詳細が明らかになり始めているようです。ジョンソン氏は、Rosetta 2がなぜこれほど高速なのかを解説するとともに、未公開の拡張機能を公開しています。 

M1ウルトラ

(画像提供:Apple)

このすべては、1974年に登場したIntel 8080にまで遡ることができます。これは同社にとって2番目のチップでした。この8ビットマイクロプロセッサは、アジャストフラグとパリティフラグを特殊な方法で処理し、2進化10進演算において数値を桁送りするかどうかを示すために使用していました。この方法は、現代のアプリケーションではほとんど使用されていないにもかかわらず、今日のx64チップにも引き継がれています。 

Apple Siliconで使用されているArmアーキテクチャはx64とは無関係であるため、そのような機能を備えていないため、エミュレーションが必要でした。そうしないと、一部のIntelソフトウェアが新しいMacで動作しなくなり、8080のフラグ処理なしで同じ演算を行うと5倍の命令数が必要になり、Macの速度が低下します。 

Rosetta 2は、リアルタイムエミュレーションを提供するのではなく、Intelプロセッサ向けにリリース時に作成されたバイナリアプリケーションを再コンパイルしますが、アジャストフラグとパリティフラグがアプリで使用されるかどうかを判断できません。Armフラグレジスタのビット26と27を使用して、8080のフラグ処理をエミュレートすることで、毎回面倒な処理を回避しています。

これを常時実行すると Arm 仕様に違反するため、Apple Silicon プロセッサは Rosetta 2 の実行時にのみこれを実行します。ジョンソン氏は、この状況ではプロセッサがそれほど構成可能ではないため、Apple プロセッサが Linux VM を実行しているときは機能しないと指摘しています。 

まったく衝撃的なニュースというわけではないが、非常に賢く高性能なソフトウェアの仕組みを知る上で興味深い洞察である。ただし、オリジナルの Rosetta が Mac OS X 10.4 Tiger で導入され、10.7 Lion で廃止されたのと同じように、Apple Silicon がさらに数世代経つと、このソフトウェアも消え去る可能性が高い。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

イアン・エヴェンデンは、英国を拠点とするTom's Hardware USのニュースライターです。彼はどんなテーマでも執筆しますが、特にRaspberry PiとDIYロボットに関する記事が彼の目に留まることが多いようです。