Internally, bytecode interpreter (i.e. vm_exec() function found in the bytecode.dl dynamic library) uses the following register assignments:
er0 virtual register R0 (accumulator/pointer for indirect loads),
er1 virtual register R1 (aux data register/pointer for indirect saves),
er2 'this' for the object/actor/struct being processed,
er3 scratch register,
er4 table of extension functions (caller-supplied),
er5 table of built-in opcodes,
er6 p-code instruction pointer (static data/code space),
er7 stack pointer.