Classes | |
| class | nanojit::AR |
| class | nanojit::AR::Iter |
| class | nanojit::Noise |
| class | nanojit::LabelState |
| class | nanojit::LabelStateMap |
| class | nanojit::Assembler |
| Information about the activation record for the method is built up as we generate machine code. More... | |
Namespaces | |
| namespace | nanojit |
Defines | |
| #define | STACK_GRANULARITY sizeof(void *) |
| Some notes on this Assembler (Emitter). | |
| #define | AVMPLUS_ALIGN16(type) type __attribute__ ((aligned (16))) |
| #define | SWAP(t, a, b) do { t tmp = a; a = b; b = tmp; } while (0) |
Typedefs | |
| typedef SeqBuilder< NIns * > | nanojit::NInsList |
| typedef HashMap< NIns *, LIns * > | nanojit::NInsMap |
| typedef HashMap< SideExit *, RegAlloc * > | nanojit::RegAllocMap |
| map tracking the register allocation state at each bailout point (represented by SideExit*) in a trace fragment. | |
Enumerations | |
| enum | nanojit::AssmError { nanojit::None = 0, nanojit::StackFull, nanojit::UnknownBranch, nanojit::BranchTooFar } |
Functions | |
| int32_t | nanojit::arDisp (LIns *ins) |
| int32_t | nanojit::deprecated_disp (LIns *ins) |
| #define AVMPLUS_ALIGN16 | ( | type | ) | type __attribute__ ((aligned (16))) |
| #define STACK_GRANULARITY sizeof(void *) |
Some notes on this Assembler (Emitter).
The class RegAlloc is essentially the register allocator from MIR
The Assembler class parses the LIR instructions starting at any point and converts them to machine code. It does the translation using expression trees which are simply LIR instructions in the stream that have side-effects. Any other instruction in the stream is simply ignored. This approach is interesting in that dead code elimination occurs for 'free', strength reduction occurs fairly naturally, along with some other optimizations.
A negative is that we require state as we 'push' and 'pop' nodes along the tree. Also, this is most easily performed using recursion which may not be desirable in the mobile environment.
1.7.1