Il s’avère qu’Apple a pris en charge dans ses processeurs Apple Silicon une instruction conçue pour le processeur 8080 d’Intel qui a fait ses débuts en 1974, en utilisant une extension secrète non documentée pour exécuter les instructions très rarement utilisées, augmentant ainsi les performances d’émulation.
Rosetta 2 d’Apple fait partie de macOS qui permet aux applications écrites pour les processeurs Intel de s’exécuter sur Apple Silicon (s’ouvre dans un nouvel onglet)-équipés de Mac, et ça marche plutôt bien. Nommé d’après la pierre de Rosette, qui a permis aux égyptologues de commencer à décoder l’ancien système d’écriture hiéroglyphique dans les années 1820. Rosetta a été tout aussi mystérieuse, mais a peut-être commencé à livrer ses secrets, comme détaillé dans un article de blog (s’ouvre dans un nouvel onglet) par le chercheur australien en sécurité Dougall Johnson, dans lequel il révèle une extension non documentée tout en expliquant pourquoi Rosetta 2 est si rapide.
L’extension secrète semble modifier la façon dont le processeur stocke la parité et ajuste les indicateurs d’une application, pour fournir une émulation plus précise. L’histoire est reprise par le développeur Web et passionné d’informatique rétro Blake Patterson (s’ouvre dans un nouvel onglet)qui explique comment et pourquoi il fait cela, avec l’aide des messages de Johnson sur Mastodon (s’ouvre dans un nouvel onglet).
Le tout remonte à l’Intel 8080 de 1974, qui était la deuxième puce de l’entreprise. (s’ouvre dans un nouvel onglet). Ce microprocesseur 8 bits a géré ses indicateurs d’ajustement et de parité d’une manière particulière, les utilisant pour indiquer s’il faut transporter des nombres dans une opération décimale codée binaire, et cela a persisté jusqu’aux puces x64 d’aujourd’hui, même s’il n’est presque jamais utilisé par les applications modernes. .
L’architecture Arm utilisée par Apple Silicon, n’étant pas liée à x64, n’a pas une telle fonctionnalité, elle devait donc être émulée. Sinon, certains logiciels Intel ne fonctionneraient pas sur les nouveaux Mac, et le calcul de la même opération sans la gestion des drapeaux du 8080 utiliserait cinq fois plus d’instructions et ralentirait le Mac.
Rosetta 2 recompile une application binaire destinée à un processeur Intel au lancement plutôt que de fournir une émulation en temps réel, mais ne peut pas dire si les indicateurs d’ajustement et de parité seront utilisés par l’application. Il utilise les bits 26 et 27 du registre des indicateurs d’armement pour émuler leur gestion par le 8080 afin d’éviter d’avoir à parcourir le long chemin à chaque fois.
Cela enfreindrait la spécification Arm pour que cela fonctionne tout le temps, donc les processeurs Apple Silicon ne le font que lors de l’exécution de Rosetta 2 – Johnson souligne que cela ne fonctionne pas lorsque le processeur Apple exécute une machine virtuelle Linux, car le processeur n’est pas ‘t aussi configurable dans cette situation.
Bien que ce ne soit pas exactement une nouvelle bouleversante, c’est un aperçu fascinant du fonctionnement d’un logiciel extrêmement intelligent et performant, même si – de la même manière que le Rosetta original a été introduit dans Mac OS X 10.4 Tiger et retiré dans 10.7 Lion – est susceptible de disparaître une fois qu’Apple Silicon aura quelques générations de plus.