PackageTrack
Sign in Get early access

dynasmrt

A simple runtime for assembling code at runtime. Combined with the plugin crate dynasm it can be used to write JIT compilers easily.

5.1.0 8.2M downloads/mo #3480 most downloaded on crates.io CensoredUsername/dynasm-rs

What this package is like to depend on

Last release 1 months ago

22 Jul 2026

Release timing varies

gaps range from 3 weeks to 1.7 years

Most releases are documented

notes for 30 of 42 stable releases

Nothing withdrawn

no release was ever pulled

10 years old

42 releases · first in 2016

5 releases in the last 12 months

see the full history below

Release timeline

42 releases · Aug 2016 to Jul 2026
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 42
  1. 5.1.0 22 Jul 2026
    Release notes

    Move from proc-macro-error2 to proc-macro-error3, bump version to 5.1.0

    Open source →
  2. 5.0.0 12 Feb 2026
    Release notes

    Add a test for adrp encoding and finalize release notes.

    Open source →
    Release notes

    Plugin

    • Moves error generation from the unmaintaned proc-macro-error2 to the maintained proc-macro-error3
    Open source →
  3. 4.0.2 12 Dec 2025
    Release notes

    Bugfix

    Fixes an issue for the x64 out instruction, where the format out imm8, ax accidentally didn't get a 16-bit operand size override prefix.

    Open source →
  4. 4.0.1 12 Sep 2025
    Release notes

    Bugfix

    This bugfix release fixes a failure to compile the dynasmrt crate on non-unix RISC-V.

    Open source →
  5. 4.0.0 10 Sep 2025
    Release notes

    Edit release notes, and version to v4.0.0.

    Open source →
    Release notes

    Summary

    This release adds ergonomics improvements to dynamic registers. Where it was previously required to explicitly convert the type for dynamic registers as follows:

    let dyn_reg = dynasmrt::x64::Rq::RAX;
    
    dynasm!(ops
        ; add Rq(dyn_reg.into()), 5
    );
    

    This is no longer necessary. Instead, the conversion is now performed implicitly via Into<u8>.

    let dyn_reg = dynasmrt::x64::Rq::RAX;
    
    dynasm!(ops
        ; add Rq(dyn_reg), 5
    );
    

    General

    • dependencies have been updated

    Plugin

    • Dynamic registers now accept any value that is convertible via Into<u8>. This significantly improves the ergonomics of using dynamic register values with custom wrapper types. Unfortunately, this might break code which already does this conversion explicitly, leading to an unknown type error. To remedy this, simply remove the explicit conversion.

    Runtime

    • Assembler has gained a new_with_capacity method.
    Open source →
  6. 3.2.1 20 Jun 2025
    Release notes

    Release notes and version bump for v3.2.1.

    Open source →
    Release notes

    Runtime

    • Cache invalidation on aarch64 Apple hardware now does not crash with an illegal instruction exception.
    Open source →
  7. 3.2.0 13 Mar 2025
    Release notes

    Regenerate tests, update release notes, and bump version to 3.2.0.

    Open source →
    Release notes

    Architecture support

    • RISC-V targets got support for the Zfinx, Zhinx, Zdinx, Zhinxmin and Zfhmin instruction set extensions.
    • RISC-V targets now automatically expand the B collection of ISA EXTENSIONS
    • RISC-V targets now ignore the Ztso extension instead of it causing an error (as it doesn't actually add any new instructions).
    Open source →
  8. 3.1.0 13 Mar 2025
    Release notes

    Final polish of documentation, and version bump to v3.1.0

    Open source →
    Release notes

    Summary

    This release adds support for several architectures from the RISC-V family of instruction sets. These are riscv64i, riscv64e, riscv32i and riscv32e. There's also support for a large set of instruction set extensions. This architecture support is introduced with the same standards as currently supported targets, meaning that they come with full runtime support, immediate checking and cache management support out of the box.

    This architecture support has been sponsored by Wasmer.

    General

    • dependencies have been updated
    • handled many clippy warnings (Thanks to waywardmonkeys!)

    Architecture support

    • added riscv32i, riscv32e, riscv64i and riscv64e architecture targets.
    • x64 gained support for the RDPRU instruction (Thanks to eigenform!).
    Open source →
  9. 3.0.1 29 Oct 2024
    Release notes

    Bugfix

    • x64 immediate const evaluation now handles negative displacements properly again, generating 8-bit displacements where possible.
    Open source →
  10. 3.0.0 09 Oct 2024
    Release notes

    Ensure examples don't fail to compile on aarch64 during testing, and …

    Open source →
    Release notes

    Summary

    This release brings significant improvements to the aarch64 experience. The runtime assemblers now handle cache invalidation internally where necessary. Furthermore, where previously overly large immediates would just wrap during encoding, they are now fully checked and error at compile time, or panic at runtime. One major backwards compatibility break is that the syntax for data directives has changed. This syntax now uses the relevant rust type names, and supports significantly more types. Next to this, several long-standing bugs have been fixed, dependencies have been updated, and the crate has moved to rust edition 2021. The minimum supported rust version is now 1.77.

    General

    • Moved to rust edition 2021
    • Dependencies have been updated.
    • minimum supported rust version increased to 1.77 to allow for the use of mem::offset_of!.
    • data directives now use .u8, .i16, .f32 syntax.
    • Several documentation improvements have been made.
    • More tests have been introduced.

    Architecture support

    • x64 gained support for the MOVDIRI instruction
    • x64 gained support for the ZWORD operand size (needed for AVX512 support in the future)
    • the aarch64 assemblers now handle cache control internally. It is no longer needed for the user to handle this.
    • Immediates in aarch64 assembly are now fully size checked, where possible at compile time. Attempting to assemble an impossible immediate at runtime will cause a panic.

    Bugfixes

    • All documentation/example crates now compile on stable rustc.
    • Worked around a rustc compiler bug that was causing operator precedence issues in emitted code.
    • Fixed x64/x86 register names used in compiler error debug messages.
    • Renamed several documentation bin targets due to artefact name collision errors in the workspace.
    • Fix unneeded parenthesis warnings in emitted code.
    • Eliminated warnings during plugin build.
    • the aarch64 instruction mov w0, immu32 now expects a u32 as immediate instead of an u64.

    Several of these changes were the result of external contributions, we'd like to thank everyone who contributed to this release.

    Open source →
  11. 2.0.0 31 Jan 2023
    Release notes

    Plugin

    • Be stricter on X/W or XSP/WSP differentiation in x64.

    Runtime

    • Significant performance optimization of label processing.
    • Rework of various components.
    • Additional APIs to reuse Assemblers, or to allocate them with pre-reserved buffers.

    Documentation

    • Various fixes
    Open source →
  12. 1.2.3 31 Mar 2022
    Release notes

    Plugin

    • add x64 ud1 opcode.
    • Bugfix the REPNE prefix so it can actually be used.
    Open source →
  13. 1.2.2 31 Mar 2022
    Release notes

    Global

    Fixes travis integration displayed in crates.io

    Open source →
  14. 1.2.1 19 Dec 2021
    Release notes

    Runtime

    • Fix overflow in aarch64 logical immediate encoding at runtime.
    Open source →
  15. 1.2.0 19 Nov 2021
    Release notes

    Runtime

    • update memmap2 version.
    Open source →
  16. 1.1.0 07 May 2021
    Release notes

    Runtime

    • Added missing label management methods to VecAssembler.
    Open source →
  17. 1.0.1 12 Jan 2021
    Release notes

    Runtime

    • Switched from the unmaintained memmap crate to memmap2.
    Open source →
  18. 1.0.0 20 Jul 2020
    Release notes

    Global

    • First release on rust stable (1.45+)!

    Plugin

    • Use new Span::mixed_site hygiene to replace call_site hygiene wherever relevant.
    Open source →
  19. 0.7.1 01 Jul 2020
    Release notes

    Runtime

    • Fixed an issue where calls to Modifier.extend would cause invalid code to be emitted.
    Open source →
  20. 0.7.0 30 Jun 2020
    Release notes

    Global

    • Updated everything to the 2018 edition of rust.
    • The crate will be able to be used on a rust 1.45 stable compiler!

    Plugin

    • File-local directives now requires the filelocal feature and a nightly compiler.
    • Now compiles and is usable on a stable 1.45 rust compiler.
    • Added dynasm_backwards!, which emits templates in reverse order. This allows writing assemblers that compile code backwards.

    Runtime

    • dynasmrt now re-exports the dynasm! macro from dynasm, so projects only need the dynasmrt dependency.
    • Refactoring PatchLoc and Relocation to generalize relocation handling between architectures.
    • Added register family listings, to facilitate dynamic register usage. This feature was contributed by vext01.
    Open source →
  21. 0.6.0 24 Feb 2020
    Release notes

    Runtime

    • Significant internal refactoring: Architectural support is now abstracted through the Relocation trait, that all assemblers are generic over. Aliases for the previous architecture-specific assemblers are kept for backwards compatibility.
    • Made assembler components public to facilitate writing custom assemblers.

    Tests

    • Reduced compile time significantly by migrating simple instruction format tests to SimpleAssembler.
    Open source →
  22. 0.5.2 22 Nov 2019
    Release notes

    Plugin

    • Remove a problematic semicolon that might cause errors in the future.
    • README update.
    Open source →
  23. 0.5.1 15 Sep 2019
    Release notes

    Runtime

    • Fix a bug that caused emitted code corruption corruption in Aarch64's B and ADRP relocation calculations.
    Open source →
  24. 0.5.0 04 Sep 2019
    Release notes

    Plugin

    • We now support an arbitrary offset added to any jump. This feature allows direct addressing of literal pools or arrays of values without generating labels for every single item in them.

    Runtime

    • Added LitPool, a tool to automatically build literal pools.
    • Impossible relocations no longer panic. Instead they cause an error to be emitted from Assembler::commit().
    • Significant refactoring.
    Open source →
  25. 0.4.0 26 Aug 2019
    Release notes

    Architecture support

    • Added Aarch64 support, thanks to sponsoring from Wasmer.

    Plugin

    • Remove use of mem::unitialized when calculating the offsets of members in structs in generated code. -Optimization of opmap and register tables to reduce compile time and file size.

    Documentation

    • Split architecture-specific DSL documentation and generic DSL documentation.
    • Ported examples to Aarch64.
    Open source →
  26. 0.3.1 19 Jan 2019
    Release notes

    Plugin

    • Fixed an issue where dynamic registers caused wrong code generation.

    Runtime

    • Added an API for returning the offset of a dynamic label directly.
    Open source →
  27. 0.3.0 25 Dec 2018
    Release notes

    Architecture support

    • Fixed SETB and SETNB not being present in x64/x86

    Plugin

    • The plugin has been updated to the new procedural macro system. This means it should no longer break when new compiler versions are released.
    • Directives are now scoped file-local instead of crate-local.

    Runtime

    • The alter API can now return values produced by the user-defined closure.

    Versions 0.2.1, 0.2.2 and 0.2.3

    Plugin

    • Updates so it stays compatible with rustc as the plugin API changes.
    Open source →
  28. 0.2.3 11 Oct 2018

    Nothing published for this version

  29. 0.2.2 16 Aug 2018

    Nothing published for this version

  30. 0.2.1 21 May 2018

    Nothing published for this version

  31. 0.2.0 24 Apr 2018
    Release notes

    Architecture support

    • Added support for x86
    • Enabled relocation support in x64 when additional immediate fields are present.

    Plugin

    • Significant refactoring of the x64 backend to also handle x86
    • Added x64 feature selection support.

    Runtime

    • Added managed relocation support to handle non-relative relocations.
    Open source →
  32. 0.1.4 29 Mar 2018
    Release notes

    Plugin

    • Updates so it stays compatible with rustc as the plugin API changes.
    Open source →
  33. 0.1.3 17 Oct 2017

    Nothing published for this version

  34. 0.1.2 21 Aug 2017

    Nothing published for this version

  35. 0.1.1 22 Apr 2017

    Nothing published for this version

  36. 0.1.0 22 Feb 2017
    Release notes

    Global

    • Initial library experiments, starting with basic x64 support, refactoring to support multiple architectures, and cleanup.
    Open source →
  37. 0.0.6 27 Oct 2016

    Nothing published for this version

  38. 0.0.5 16 Oct 2016

    Nothing published for this version

  39. 0.0.4 25 Sep 2016

    Nothing published for this version

  40. 0.0.3 25 Sep 2016

    Nothing published for this version

  41. 0.0.2 01 Sep 2016

    Nothing published for this version

  42. 0.0.1 29 Aug 2016

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive