[LLVMdev] LLVM GHC Backend: Tables Next To Code

Simon Marlow simonmar at microsoft.com
Thu Feb 16 01:06:30 PST 2012

> > Since the jmp is a fixed 2 bytes (0xEB, tablesize), all references to
> the table can still be done with trivial pc/RIP-relative addressing within
> the closure, and you just need one pointer for both the table and the
> closure data.
> Only if tablesize fits in 127 bytes. Otherwise it will use 0xE9-based
> encoding which is larger.

The table size is variable - between 2 and 6 32- or 64-bit words, where 2-3 is the common case.  This means Chris's trick of adjusting the pointer by a fixed amount to point directly to the code doesn't work unless we pad the table to the worst-case size all the time, which wastes a lot of space.

Well, perhaps we could split the table into two, with the branch instruction after the first 2 or 3 words.


More information about the llvm-dev mailing list