Arm Community
Arm Community
  • Site
  • User
  • Site
  • Search
  • User
Arm Community blogs
Arm Community blogs
Architectures and Processors blog Announcing VIXL: A Dynamic Code Generation Toolkit for ARMv8
  • Blogs
  • Mentions
  • Sub-Groups
  • Tags
  • Jump...
  • Cancel
More blogs in Arm Community blogs
  • AI blog

  • Announcements

  • Architectures and Processors blog

  • Automotive blog

  • Embedded and Microcontrollers blog

  • Internet of Things (IoT) blog

  • Laptops and Desktops blog

  • Mobile, Graphics, and Gaming blog

  • Operating Systems blog

  • Servers and Cloud Computing blog

  • SoC Design and Simulation blog

  • Tools, Software and IDEs blog

Tell us what you think
Tags
  • java
  • jit
  • Armv8
  • javascript
  • 64-bit
Actions
  • RSS
  • More
  • Cancel
Related blog posts
Related forum threads

Announcing VIXL: A Dynamic Code Generation Toolkit for ARMv8

Rod Crawford
Rod Crawford
October 22, 2013
2 minute read time.

This content was initially posted 10 July 2013 on blogs.arm.com

We are pleased to announce the release of VIXL, a dynamic code generation toolkit for ARMv8 that we hope will enable JIT creators to rapidly target the new ARMv8, A64 instruction set.

Over the past few years we (the ARM JIT team) have worked on the code generators of many of the leading JIT compilers for the JavaScript and Java languages. During that time we built up a strong knowledge base on some of the pitfalls and time-sinks involved in creating a good JIT compiler backend. This led us to develop some tools to help improve our productivity. With ARM announcing the new Cortex-A50 range of processors supporting the AArch64 execution state we decided that we would focus our efforts on A64 tooling to enable developers to rapidly port programming language virtual machines for this new processor range, ahead of actual silicon availability.

VIXL is comprised of four main components:

Runtime Macro Assembler

VIXL's MacroAssembler class implements functions that generate A64 code. It supports almost every user-space integer instruction, and most floating-point instructions. These are the instructions we have used to date, to generate code from the JIT compilers we have been working on at ARM. Since we are providing the full source code of the toolkit you are free to extend the assembler in any way you wish.

Disassembler

The disassembler can disassemble any instruction that the assembler can generate.

Instruction Set Simulator/Debugger

The instruction set simulator/debugger allows you to run or single-step your generated code and view registers and memory. The simulator is designed specifically to run your JIT-compiled code without the need to first port your entire virtual machine to run in AArch64 execution state. As a consequence the speed of your virtual machine is not significantly hampered by the speed of the simulator and you can get very rapid turnaround on tests since the rest of your virtual machine runs natively.

Tests and Examples

All of the VIXL components with the exception of the debugger come with tests to ensure that they perform correctly on your platform and we have included several examples on how to use VIXL to generate code sequences.

Using VIXL

Our goal with VIXL is to enable you to start generating A64 code from your JIT compiler as quickly as possible. You can generate, test and run A64 code from your JIT compiler before you have ported the rest of your virtual machine runtime to ARMv8. If your runtime already builds and runs on a different architecture you can plug the VIXL runtime assembler into your JIT compiler, link this to the VIXL simulator and start generating and executing your A64 code.

Where can you get VIXL?

We have released VIXL on github here: https://github.com/armvixl/vixl under a three clause BSD license. We hope you enjoy using it.

Rod Crawford is Director of Software Technology at ARM. He is passionate about empowering people through technology, enabling them to garner and communicate relevant knowledge -- knowledge that relates to the time and place where they are and to the people around them. Rod has been part of the mobile computing revolution for 22 years, 18 of them at ARM. Rod works directly with many of the major open software technologies and companies, helping create new and exciting ways to compute and communicate while on the go, and thus give a voice to the inhabitants of the global village.

Anonymous
Parents
  • Rod Crawford
    Rod Crawford over 10 years ago

    Version 1.8 of VIXL has been release to GitHub, and can be downloaded

    from https://github.com/armvixl/vixl

    Changes:

         + Complete NEON instruction set support.

         + Support long branches using veneers.

         + Improved handling of literal pools.

         + Support some `ic` and `dc` cache op instructions.

         + Support CRC32 instructions.

         + Support half-precision floating point instructions.

         + MacroAssembler support for `bfm`, `ubfm` and `sbfm`.

         + Other small bug fixes and improvements.

    • Cancel
    • Up 0 Down
    • Reply
    • More
    • Cancel
Comment
  • Rod Crawford
    Rod Crawford over 10 years ago

    Version 1.8 of VIXL has been release to GitHub, and can be downloaded

    from https://github.com/armvixl/vixl

    Changes:

         + Complete NEON instruction set support.

         + Support long branches using veneers.

         + Improved handling of literal pools.

         + Support some `ic` and `dc` cache op instructions.

         + Support CRC32 instructions.

         + Support half-precision floating point instructions.

         + MacroAssembler support for `bfm`, `ubfm` and `sbfm`.

         + Other small bug fixes and improvements.

    • Cancel
    • Up 0 Down
    • Reply
    • More
    • Cancel
Children
No Data
Architectures and Processors blog
  • Scalable Matrix Extension: Expanding the Arm Intrinsics Search Engine

    Chris Walsh
    Chris Walsh
    Arm is pleased to announce that the Arm Intrinsics Search Engine has been updated to include the Scalable Matrix Extension (SME) intrinsics, including both SME and SME2 intrinsics.
    • October 3, 2025
  • Arm A-Profile Architecture developments 2025

    Martin Weidmann
    Martin Weidmann
    Each year, Arm publishes updates to the A-Profile architecture alongside full Instruction Set and System Register documentation. In 2025, the update is Armv9.7-A.
    • October 2, 2025
  • When a barrier does not block: The pitfalls of partial order

    Wathsala Vithanage
    Wathsala Vithanage
    Acquire fences aren’t always enough. See how LDAPR exposed unsafe interleavings and what we did to patch the problem.
    • September 15, 2025