Выпуск эмутятора Box64 0.3.0, позволяющего запускать X86-игры на системах ARM64 и RISC-V

Опубликован выпуск эмулятора Box64 0.3.0, предназначенного для запуска Linux-программ, собранных для архитектуры x86_64, на оборудовании с процессорами ARM64, RISC-V и Loongarch64. Проект уделяет большое внимание организации запуска игровых приложений и предоставляет возможность запуска Windows-сборок через wine и Proton. Исходные тексты проекта написаны на языке Си и распространяются под лицензией MIT.

Особенностью проекта является применение гибридной модели выполнения, при которой эмуляция применяется только к машинному коду самого приложения и специфичных библиотек. Типовые системные библиотеки, включая libc, libm, GTK, SDL, Vulkan и OpenGL, подменяются на варианты, родные для целевых платформ. Таким образом, библиотечные вызовы выполняются без эмуляции, что позволяет добиться значительного увеличения производительности.

Эмуляция кода, для которого отсутствуют родные для целевой платформы замены, выполняется с использованием техники динамической перекомпиляции (DynaRec) из одного набора машинных инструкций в другой. По сравнению с интерпретацией машинных инструкций динамическая перекомпиляция демонстрирует в 5-10 раз более высокую производительность.

В новой версии:

  • Реализована поддержка процессорных расширений AVX, AVX2, BMI1, BMI2, ADX, FMA, F16C и RDRAND.
  • Добавлена переменная окружения BOX64_AVX, выставление 1 в которой включает поддержку AVX, BMI1, F16C и VAES, а в 2 – AVX2, BMI2, FMA, ADX, VPCLMULQDQ и RDRAND.
  • Добавлена поддержка динамической перекомпиляции (DynaRec) AVX, AVX2 и подобных инструкций в представление на базе инструкций NEON, предоставляемых в CPU на базе архитектуры ARM64.
  • Добавлена начальная поддержка перекомпиляции инструкций SIMD в инструкции RVV на системах RISC-V.
  • Проведена оптимизация механизма DynaRec, добавлена поддержка новых покодов для RISC-V и Loongarch64.
  • Обновлён список опкодов CPUID, по умолчанию вместо Pentium IV через CPUID теперь выдаётся CPU серии Haswell.
  • Добавлена поддержка Wayland и предосатвлена возможность динамической перекомпиляции связанных с Wayland библиотек, что позволило добиться совместимости с Wine-wayland.
  • Расширено число поддерживаемых игр, например, добавлена совместимость с игрой Death Stranding. Обеспечено определение использования библиотеки UnityPlayer.dll в запускаемых в Wine программах и автоматическое выставление параметра
    BOX64_DYNAREC_STRONGMEM=1.
Release. Ссылка here.