Skip to content

AsmJit Ports & Future Development #430

@kobalicek

Description

@kobalicek

AsmJit Development Status & Sustainability

AsmJit is currently developed & maintained by a single developer. This issue exists to provide a feature matrix of the ports and features it supports, and to provide in insight into its development, for example what has to be done to just keep it maintained.

AsmJit's future depends on financial support from the companies that rely on it. Unfortunately, that support is almost nonexistent today. Without external backing, the project will remain in maintenance mode and can become unmaintained entirely.

How can you help? If your company uses AsmJit in production or at scale, please raise awareness about AsmJit's funding situation to your leadership. Commercial support and consulting (including training) are also available options, which would help your company use AsmJit the best way possible.

Please don't use this meta-issue to start discussions. Use the Discussions panel instead or create a separate Issue if you would like to discuss something regarding the architectures and extensions supported by AsmJit.

Long Term Commitment

AsmJit's long-term commitment is to maintain support of 32-bit and 64-bit X86 and 64-bit ARM (AArch64), but not to develop new features or add new ports. At the moment bugs will get fixed quickly, but no new features are being developed and no new extensions will be added to existing ports.

List of Supported Architectures

  • X86 & X86_64 - This platform has been supported from the beginning
  • AArch64 - Supported, except SVE/SVE2; recent extensions such as CSSC are not supported yet

List of Unsupported Architectures

  • AArch32 - ARM32 and Thumb are in a32_port branch, testing is welcome, nobody seems to be using this port (Branch: https://github.com/asmjit/asmjit/tree/a32_port - currently not mergeable)
  • RISC-V - Planned in the future, no commercial interest at the moment
  • PPC64 - Considering, but no commercial interest so this port may never happen
  • LoongArch - Considering, little commercial interest, but nobody wants to pay for it (PR: Add loongarch architecture support #441 - currently not mergeable)
  • MIPS - Not planned, no commercial interest

No commercial interest means that there is no company or multiple companies that would want to contribute to the development and maintenance of the port.

Feature Matrix of Supported Architectures / Extensions

  • X86 & X86_64

    • Baseline GP instructions and extensions (ADX, BMI, CMOV, CMPXCHG[8|16]B, POPCNT, ...)
    • System instructions
    • Virtualization instructions
    • FPU instructions
    • MMX extensions (MMX, MMX2, 3DNOW, ...)
    • SSE extensions (SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, PCLMULQDQ, ...)
    • AVX extensions (AVX, AVX2, F16C, FMA, FMA4, XOP, VAES, ...)
    • AVX-512 extensions (AVX512_[F|BW|DQ|CD|VBMI|...)
    • AMX extensions (AMX_TILE, AMX_FP16, AMX_INT8, ...)
    • (future) APX extensions (Intel Diamond Rapids)
    • (future) AMX extensions (AMX_TRANSPOSE, AMX_AVX512, AMX_FP8, ...) (Intel Diamond Rapids)
    • (future) AVX10 extensions (AVX10.1, AVX10.2) (Intel Diamond Rapids)
  • AArch64:

    • Baseline GP instructions
    • System instructions
    • Virtualization instructions
    • Baseline VFP/NEON instructions and extensions (ASIMD, DOTPROD, ...)
    • New GP extensions (CSSC) (Apple M4, possibly cloud CPUs)
    • SVE extensions (SVE, SVE2, ...) (Cloud CPUs)
    • SME extensions (SME, SME2, ...) (Cloud CPUs)
    • (future) extensions not tracked at the moment

Note that APX and AVX10 are future CPU extensions that are not present in today's CPUs, so X86 backend can be considered complete until Diamond Rapids is released.

Maintenance and Development of New Ports and ISA Extensions

AsmJit team is currently 1 person doing all the work, which can be divided into the following categories:

  • Maintenance
    • Build system and CI related work (CMake and CI updates, dealing with CI failures, etc...)
    • Maintaining the current codebase (removing compile-time warnings/errors introduced by new C++ compilers, refactoring, writing more tests, etc...)
    • Bug fixing (there are multiple categories, the most severe bugs are wrongly encoded instructions and crashes - fortunately both are rare thanks to the extensive test suite AsmJit has)
    • Writing more documentation to make https://asmjit.com/doc/index.html better for newcomers
  • New Features
    • Writing new features that were not previously part of AsmJit. Could be supporting more platforms or adding features such as huge-pages support, or simply using some platform API to make something faster, etc...
    • Adding more instructions to existing ports (this work involves updating AsmJit instruction database, assemblers, etc...)
    • Adding new ports (writing whole new ports from scratch - for example the whole AArch64 port)
  • Community
    • Issues, feature requests, bug reports, ...
    • Available to the community on AsmJit's Chat Channel (https://app.gitter.im/#/room/#asmjit:gitter.im)
    • Running the AsmJit website, making AsmJit available for users, possibly supporting AsmJit in package managers such as vcpkg, ...

In a nutshell it's a lot of work to do to just maintain a project such as AsmJit. There is always something that requires the attention even if it's not writing new C++ code - bugs, CI problems, brief documentation, website issues, outdated packages in vcpkg/conan, etc... And this is just about the maintenance and not writing anything new.

But that's not all of it. For example in order to support new CPU extensions of supported architectures, it requires to check and to "process" all the documentation and architecture manuals that are released by Intel, AMD, and ARM, which means hours and hours of work and testing to add new instructions and test cases to verify that AsmJit handles them correctly.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions