diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2023-07-24 13:51:46 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-24 13:51:46 -0700 |
commit | cef60e93e6db859b47c818f745be809feb04ae48 (patch) | |
tree | 60ac5fe6f0c41aa72b152656d6ce426b1c708d70 /vm_insnhelper.c | |
parent | c4e893ceb5811f3436f1e16cab769a16469b56b0 (diff) | |
download | ruby-cef60e93e6db859b47c818f745be809feb04ae48.tar.gz |
YJIT: Fallback send instructions to vm_sendish (#8106)
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r-- | vm_insnhelper.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/vm_insnhelper.c b/vm_insnhelper.c index d33fdb8fa7..c676399c59 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -5528,6 +5528,42 @@ vm_sendish( return val; } +VALUE +rb_vm_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, CALL_DATA cd, ISEQ blockiseq) +{ + VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false); + VALUE val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method); + VM_EXEC(ec, val); + return val; +} + +VALUE +rb_vm_opt_send_without_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, CALL_DATA cd) +{ + VALUE bh = VM_BLOCK_HANDLER_NONE; + VALUE val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method); + VM_EXEC(ec, val); + return val; +} + +VALUE +rb_vm_invokesuper(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, CALL_DATA cd, ISEQ blockiseq) +{ + VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true); + VALUE val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super); + VM_EXEC(ec, val); + return val; +} + +VALUE +rb_vm_invokeblock(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, CALL_DATA cd) +{ + VALUE bh = VM_BLOCK_HANDLER_NONE; + VALUE val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock); + VM_EXEC(ec, val); + return val; +} + /* object.c */ VALUE rb_nil_to_s(VALUE); VALUE rb_true_to_s(VALUE); |