Es stellt sich heraus, dass Apple in seine Apple Silicon-Prozessoren Unterstützung für eine Anweisung eingebaut hat, die für Intels 8080-Prozessor entwickelt wurde, der bereits 1974 debütierte, und eine geheime, nicht dokumentierte Erweiterung verwendet, um die sehr selten verwendeten Anweisungen auszuführen und so die Emulationsleistung zu steigern.
Apples Rosetta 2 ist Teil von macOS, mit dem Anwendungen, die für Intel-Prozessoren geschrieben wurden, auf Apple Silicon ausgeführt werden können (öffnet in neuem Tab)-ausgestattete Macs, und es funktioniert ziemlich gut. Benannt nach dem Rosetta-Stein, der es Ägyptologen ermöglichte, in den 1820er Jahren mit der Entschlüsselung des alten Hieroglyphen-Schriftsystems zu beginnen. Rosetta war ebenso mysteriös, hat aber möglicherweise begonnen, ihre Geheimnisse preiszugeben, wie detailliert beschrieben in einem Blogbeitrag (öffnet in neuem Tab) des australischen Sicherheitsforschers Dougall Johnson, in dem er eine undokumentierte Erweiterung enthüllt und diskutiert, warum Rosetta 2 so schnell ist.
Die geheime Erweiterung scheint die Art und Weise zu ändern, wie der Prozessor die Parität speichert und Flags von einer Anwendung anpasst, um eine genauere Emulation zu ermöglichen. Die Geschichte wird von Webentwicklern und Retro-Computing-Enthusiasten aufgegriffen Blake Patterson (öffnet in neuem Tab)der erklärt, wie und warum er dies tut, mit Hilfe von Johnsons Beiträgen weiter Mastodon (öffnet in neuem Tab).
Das Ganze lässt sich auf den Intel 8080 von 1974 zurückführen, der der zweite Chip des Unternehmens überhaupt war (öffnet in neuem Tab). Dieser 8-Bit-Mikroprozessor handhabte seine Anpassungs- und Paritäts-Flags auf besondere Weise, indem er sie verwendete, um anzuzeigen, ob Zahlen in einer binär codierten Dezimaloperation übertragen werden sollten, und dies hat sich bis zu den heutigen x64-Chips durchgesetzt, obwohl es von modernen Anwendungen kaum verwendet wird .
Die von Apple Silicon verwendete Arm-Architektur, die nichts mit x64 zu tun hat, hat keine solche Funktionalität, daher musste sie emuliert werden. Andernfalls würde einige Intel-Software auf den neuen Macs nicht funktionieren, und die Berechnung der gleichen Operation ohne die Flag-Handhabung des 8080 würde fünfmal so viele Anweisungen erfordern und den Mac verlangsamen.
Rosetta 2 kompiliert beim Start eine für einen Intel-Prozessor bestimmte Binäranwendung neu, anstatt eine Echtzeit-Emulation bereitzustellen, kann jedoch nicht sagen, ob die Anpassungs- und Paritäts-Flags von der Anwendung verwendet werden. Es verwendet die Bits 26 und 27 des Arm-Flags-Registers, um die Handhabung durch den 8080 zu emulieren, um zu vermeiden, jedes Mal den langen Weg gehen zu müssen.
Es würde gegen die ARM-Spezifikation verstoßen, wenn dies die ganze Zeit läuft, also tun die Apple Silicon-Prozessoren dies nur, wenn Rosetta 2 ausgeführt wird – Johnson weist darauf hin, dass es nicht funktioniert, wenn der Apple-Prozessor eine Linux-VM ausführt, da der Prozessor dies nicht tut In dieser Situation nicht so konfigurierbar.
Obwohl es nicht gerade weltbewegende Neuigkeiten sind, ist es ein faszinierender Einblick in die Funktionsweise einer äußerst cleveren und leistungsstarken Software, wenn auch einer, die – auf die gleiche Weise wie die ursprüngliche Rosetta in Mac OS X 10.4 Tiger eingeführt und in 10.7 Lion zurückgezogen wurde – wird wahrscheinlich verblassen, sobald Apple Silicon ein paar Generationen alt ist.