Project

General

Profile

« Previous | Next » 

Revision d0174d99

Added by tenderlovemaking (Aaron Patterson) about 4 years ago

Always use ret to return to the interpreter

Always using ret to return to the interpreter means that we never have
to check the VM_FRAME_FLAG_FINISH flag.

In the case that we return Qundef, the interpreter will execute the
cfp. We can take advantage of this by setting the PC to the instruction
we can't handle, and let the interpreter pick up the ball from there.

If we return a value other than Qundef, the interpreter will take that
value as the "return value" from the JIT and push that to the SP of the
caller

The leave instruction puts the return value on the top of the calling
frame's stack. YJIT does the same thing for leave instructions.
However, when we're returning back to the interpreter, the leave
instruction should not put the return value on the top of the stack,
but put it in RAX and use RET. This commit pops the last value from the
stack pointer and puts it in RAX so that the interpreter is happy with
SP.