summaryrefslogtreecommitdiff
path: root/yjit.c
diff options
context:
space:
mode:
authorAlan Wu <[email protected]>2023-09-29 22:29:24 -0400
committerAlan Wu <[email protected]>2023-10-05 15:53:05 -0400
commit41a6e4bdf9738e2cf1ea356422a429efeeb5a8f0 (patch)
tree1e046d638aca5e1b94e27c4b72391cab821e1cdc /yjit.c
parenta5cc6341c0688c346f70098652b2375c03df40aa (diff)
YJIT: Avoid writing return value to memory in `leave`
Previously, at the end of `leave` we did `*caller_cfp->sp = return_value`, like the interpreter. With future changes that leaves the SP field uninitialized for C frames, this will become problematic. For cases like returning from `rb_funcall()`, the return value was written above the stack and never read anyway (callers use the copy in the return register). Leave the return value in a register at the end of `leave` and have the code at `cfp->jit_return` decide what to do with it. This avoids the unnecessary memory write mentioned above. For JIT-to-JIT returns, it goes through `asm.stack_push()` and benefits from register allocation for stack temporaries. Mostly flat on benchmarks, with maybe some marginal speed improvements. Co-authored-by: Takashi Kokubun <[email protected]>
Diffstat (limited to 'yjit.c')
0 files changed, 0 insertions, 0 deletions