Layout of VM Internals¶
Interpreter Frame¶
This layout is also marshaled as struct cframe
.
Offset | VARIABLE (64 bits by default) |
---|---|
+0x78 |
SAVE_RET |
+0x70 |
SAVE_RBP |
+0x68 |
SAVE_RBX |
+0x60 |
SAVE_R15 |
+0x58 |
SAVE_R14 |
+0x50 |
SAVE_CFRAME |
+0x48 |
SAVE_PC |
+0x40 |
SAVE_L |
+0x38 |
SAVE_ERRF |
+0x30 |
SAVE_NRES |
+0x2c |
MULTRES (uint32_t ) |
+0x28 |
SAVE_VMSTATE (int32_t ) |
+0x20 |
TMPTV_TAG |
+0x18 |
TMPTV |
+0x10 |
TMPa2 |
+0x08 |
TMPa |
+0x04 |
TMP2 (uint32_t ) |
$rsp |
TMP1 (uint32_t ) |
Register Mapping¶
Host Register | Host Callee-saved? | VM State Register | VM Op / Aux Register | VM C Argument Register |
---|---|---|---|---|
%rax |
NO |
RCa , RDa |
CRET |
|
%rbx |
YES |
PC |
||
%rcx |
NO |
RAa |
CARG4 |
|
%rdx |
NO |
CARG3 |
||
%rbp |
YES |
OP |
RBa |
|
%rsp |
YES |
|||
%rsi |
NO |
CARG2 |
||
%rdi |
NO |
CARG1 |
||
%r8 |
NO |
AUX2 |
CARG5 |
|
%r9 |
NO |
AUX1 |
CARG6 |
|
%r10 |
NO |
BASE |
||
%r11 |
NO |
XCHG |
||
%r12 |
YES |
|||
%r13 |
YES |
|||
%r14 |
YES |
DISPATCH |
||
%r15 |
YES |
KBASE |
||
%xmm0 |
NO |
CARG1f |
Notes:
- Internal VM op registers
RA
,RB
andRC
(aliased withRD
) correspond to 32-bit host registers%ecx
,%ebp
and%eax
, respectively. - 32-bit registers for C arguments are denoted as
CARG*d
and correspond to the same host registers as their 64-bit versions.