DynASM Toolchain Features
+-
+
- DynASM is a pre-processing assembler. +
- DynASM converts mixed C/Assembler source to plain C code. +
- The primary knowledge about instruction names, operand modes, +registers, opcodes and how to encode them is only +needed in the pre-processor. +
- The generated C code is extremely small and fast. +
- A tiny embeddable C library helps with the process of dynamically +assembling, relocating and linking machine code. +
- There are no outside dependencies on other tools (such as +stand-alone assemblers or linkers). +
- Internal consistency checks catch runtime errors +(e.g. undefined labels). +
- The toolchain is split into a portable subset and +CPU-specific modules. +
- DynASM itself (the pre-processor) is written in Lua. +
- There is no machine-dependency for the pre-processor itself. +It should work everywhere you can get Lua 5.1 up and running +(i.e. Linux, *BSD, Solaris, Windows, ... you name it). +
DynASM Assembler Features
+-
+
- C code and assembler code can be freely mixed. +Readable, too. +
- All the usual syntax for instructions and operand modes +you come to expect from a standard assembler. +
- Access to C variables and CPP defines in assembler statements. +
- Access to C structures and unions via type mapping. +
- Convenient shortcuts for accessing C structures. +
- Local and global labels. +
- Numbered labels (e.g. for mapping bytecode instruction numbers). +
- Multiple code sections (e.g. for tailcode). +
- Defines/substitutions (inline and from command line). +
- Conditionals (translation time) with proper nesting. +
- Macros with parameters. +
- Macros can mix assembler statements and C code. +
- Captures (output diversion for code reordering). +
- Simple and extensible template system for instruction definitions. +
Restrictions
++Currently only a subset of x86 (i386+) instructions is supported. +Unsupported instructions are either not usable in user-mode or +are slow on modern CPUs (i.e. not suited for a code generator). +SSE, SSE2, SSE3 and SSSE3 are fully supported. MMX is not supported. +
++The whole toolchain has been designed to support multiple CPU +architectures. As LuaJIT gets support for more architectures, +DynASM will be extended with new CPU-specific modules. +
++The assembler itself will be extended with more features on an +as-needed basis. E.g. I'm thinking about vararg macros. +
++Note that runtime conditionals are not really needed, since you can +just use plain C code for that (and LuaJIT does this a lot). +It's not going to be more (time-) efficient if conditionals are done +by the embedded C library (maybe a bit more space-efficient). +
+ + ++