Выпуск эмулятора FEX 2503, позволяющего запускать x86-программы на системах ARM64
Опубликован релиз проекта FEX 2503, развивающего эмулятор для выполнения игр и приложений, собранных для архитектур x86 и x86–64, в Linux-окружении на системах с процессорами ARM64 (AArch64). Эмулятор FEX применяется проектом Asahi для запуска на системах с ARM-чипами Apple Silicon игр из каталога Steam, собранных для архитектуры x86_64. Код проекта написан на языке С++ с ассемблерными вставками и распространяется под лицензией MIT.
Библиотеки, необходимые для запуска x86-приложений в ARM64-окружении, подключаются в форме overlay-прослойки с образом корневой ФС (rootfs), поставляемой в формате SquashFS. Подобная прослойка даёт возможность обойтись без создания отдельного chroot-окружения. Загрузка уже сформированных проектом образов rootfs производится утилитой FEXRootFSFetcher.
Для доступа к возможностям хост-окружения, таким как средства для работы со звуком и 3D-графикой, в rootfs помещаются thunk-библиотеки, транслирующие обращения к библиотекам и коду на стороне хост-системы (например, могут перенаправляться обращения к OpenGL и Vulkan). Подобные библиотеки также могут использоваться и на стороне хоста для обращения к коду в гостевом окружении. Среди доступных для проброса библиотек: libEGL, libGL, libSDL2, libX11, libVDSO, libasound, libdrm, libfex_malloc, libvulkan, libwayland-client и libxshmfence.
В новой версии:
Улучшена точность вычислений обратных значений и обратного квадратного корня. Проблема в том, что точность инструкций для подобных вычислений в ARM64 — 8 бит, в x86 — 12 бит, а в 3DNow — 14 и 15 бит, что затрудняет эмуляцию подобных инструкций на системах ARM. Для увеличения точности эмуляции x86 задействовано ARM-расширение FEAT_RPRES, поддерживаемое в SoC Qualcomm Snapdragon Elite и Apple M4. Для эмуляции расширения 3DNow необходимая точность получена при помощи уточнения методом Ньютона.
По умолчанию включён режим «multiblock», при котором JIT может компилировать больше кода за один раз, что привело к повышению производительности.
Для ускорения эмуляции x86-инструкций SHA1RNDS4, SHA1MSG2 и SHA256MSG2 задействованы соответствующие SHA-расширения процессоров ARM.
Для отображения через интерфейс MangoHud добавлена статистика о событиях SIGBUS, SMC и oftfloat, а также данные о том, какое время тратится на работу JIT-компиляции, а какое на выполнение сгенерированного кода.
Добавлен бэкенд профилирования производительности, позволяющий формировать статистику для визуализации времени выполнения различных частей кода в профилировщике Tracy.
- Добавлен фреймворк для мультиплексирования ввода/вывода через сетевые сокеты и файловые дескрипторы.
Источник: http://www.opennet.ru/opennews/art.shtml? num=62839
© OpenNet