Die Veröffentlichung des Emulators Box64 0.4.0 wurde bekannt gegeben, der für die Ausführung von Linux-Programmen, die für die Architektur x86_64 kompiliert wurden, auf Geräten mit ARM64-, RISC-V- und Loongarch64-Prozessoren gedacht ist. Das Projekt legt großen Wert auf die Organisation des Starts von Spieleanwendungen und bietet die Möglichkeit, Windows-Bauten über Wine und Proton auszuführen. Die Quelltexte des Projekts sind in C geschrieben und stehen unter der MIT-Lizenz.
Eine Besonderheit des Projekts ist die Anwendung eines hybriden Ausführungsmodells, bei dem die Emulation nur für den Maschinencode der Anwendung selbst und spezifische Bibliotheken verwendet wird. Typische Systembibliotheken, einschließlich libc, libm, GTK, SDL, Vulkan und OpenGL, werden durch Varianten ersetzt, die für die Zielplattformen nativ sind. Dadurch werden Bibliotheksaufrufe ohne Emulation ausgeführt, was eine signifikante Steigerung der Leistung ermöglicht.
Die Emulation von Code, für den native Alternativen zur Zielplattform fehlen, erfolgt mittels dynamischer Rekompilierung (DynaRec) von einem Satz Maschinenbefehle zu einem anderen. Im Vergleich zur Interpretation von Maschinenbefehlen zeigt die dynamische Rekompilierung eine 5- bis 10-fache Verbesserung. hohe Leistung.
In der neuen Version:
- Ein einheitlicher Decoder für Op-Code-Präfixe (prefix opcode decoder) wurde vorgestellt, der im Interpreter und in allen Backends der dynamischen Rekompilierung (DynaRec) verwendet wird. Der neue Decoder bearbeitet seltenere Kombinationen von Op-Code-Präfixen universeller und ermöglicht es, ohne spezifische „Hacks“ und ohne Duplizierung von Code im Interpreter und den DynaRec-Backends auszukommen. Die Überarbeitung des Decoders führte zur Entfernung überflüssigen Codes, erleichterte die Wartung der Codebasis und ermöglichte das Arbeiten von DynaRec mit untypischen Kombinationen von Op-Code-Präfixen.
- Die Arbeit an einem Mechanismus zur Entfernung von aus dem nativen Code konvertierten, aber nicht mehr genutzten Codeblöcken aus dem Speicher hat begonnen. Eine solche Optimierung trägt dazu bei, den Speicherverbrauch beim Start von Anwendungen zu reduzieren, die beim Start eine große Anzahl von Operationen durchführen, wie zum Beispiel Steam und Anwendungen, die libcef verwenden.
- Die Unterstützung der Architektur ARM64 wurde verbessert: Ein Build-Profil für CPUs der NVIDIA GB10 wurde implementiert. Im Backend der dynamischen Rekompilierung (DynaRec) wurde die Umsetzung von Techniken zur Optimierung von Schleifen fortgesetzt, wie das Herausnehmen von Setzoperationen für die Register XMM/YMM aus dem Schleifeninhalt.
- Die Stabilität und Leistung des Backends der dynamischen Rekompilierung für die Architektur RISC-V wurden verbessert. Der korrekte Start von Steam, Proton und Wine wurde gewährleistet, aber für die Arbeit mit geschütztem DRM-Inhalt, der die Emulation von Windows-Systemaufrufen erfordert, ist Hardware erforderlich, die einen 48-Bit-Adressraum (SV48) unterstützt, oder die Verwendung modifizierter Builds von Wine und Proton.
- Die Entwicklung des Backends für die Loongarch-Architektur hat erhebliche Fortschritte gemacht und ermöglicht jetzt die Ausführung von Steam, Wine und Proton, steht aber in Bezug auf die Funktionalität hinter dem Backend für ARM64 Systeme zurück. Derzeit ist zum Betrieb die Verwendung eines 4K-Speicherseitenkerns erforderlich (Standardmäßig wird für Loongarch normalerweise 16K eingestellt). Die Leistung reicht bereits aus, um Spiele auf der Loongarch 3A6000 CPU (2,5 GHz mit 4 physischen Kernen) auszuführen.

- Die Stabilität des Box32-Modus wurde erhöht, der die Unterstützung für 32-Bit-Executable-Dateien in Box64 gewährleistet. In diesem Modus wird eine verbesserte Stabilität von Steam auf allen Architekturen und die Möglichkeit der Verwendung von In-Game-Overlays in einigen OpenGL-Spielen festgestellt.
Quelle: opennet.ru

