cvs
Slava Pestov 2005-05-30 01:27:51 +00:00
parent 7ec008947c
commit ed4ba835c4
1 changed files with 49 additions and 0 deletions

49
doc/vops.txt Normal file
View File

@ -0,0 +1,49 @@
VOPs:
%prologue on x86, this does nothing. On PowerPC, at the start of
each word that calls a subroutine, we store the link
register in r0, then push r0 on the C stack.
%call-label on PowerPC, uses near calling convention, where the
caller pushes the return address.
%dispatch compile a piece of code that jumps to an offset in a
jump table indexed by an integer. The jump table must immediately follow this VOP.
%slot the untagged object is in vop-out-1, the tagged slot
number is in vop-in-1.
%fast-slot the tagged object is in vop-out-1, the pointer offset is
in vop-in-1. the offset already takes the type tag into
account, so its just one instruction to load.
%set-slot the new value is vop-in-1, the object is vop-in-2, and
the slot number is vop-in-3.
%fast-set-slot the new value is vop-in-1, the object is vop-in-2, and
the slot offset is vop-in-3.
the offset already takes the type tag into account, so
it's just one instruction to load.
%parameters ignored on x86.
%parameter ignored on x86.
%unbox an unboxer function takes a value from the data stack
and converts it into a C value.
%box a boxer function takes a C value as a parameter and
converts into a Factor value, and pushes it on the data
stack.
on x86, C functions return integers in EAX.
%box-float on x86, C functions return floats on the FP stack.
%box-double on x86, C functions return doubles on the FP stack.
%cleanup ignored on PowerPC.
on x86, in the cdecl ABI, the caller must pop input
parameters off the C stack. In stdcall, the callee does
it, so this node is not used in that case.