mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Refactor jit_func_t and jit_exec
I closed https://github.com/ruby/ruby/pull/7543, but part of the diff seems useful regardless, so I extracted it.
This commit is contained in:
parent
a8e7fee801
commit
9947574b9c
5 changed files with 18 additions and 33 deletions
28
insns.def
28
insns.def
|
@ -813,12 +813,7 @@ send
|
|||
{
|
||||
VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, false);
|
||||
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
|
||||
|
||||
jit_func_t func;
|
||||
if (val == Qundef && (func = jit_compile(ec))) {
|
||||
val = func(ec, ec->cfp);
|
||||
if (ec->tag->state) THROW_EXCEPTION(val);
|
||||
}
|
||||
JIT_EXEC(ec, val);
|
||||
|
||||
if (val == Qundef) {
|
||||
RESTORE_REGS();
|
||||
|
@ -838,12 +833,7 @@ opt_send_without_block
|
|||
{
|
||||
VALUE bh = VM_BLOCK_HANDLER_NONE;
|
||||
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_method);
|
||||
|
||||
jit_func_t func;
|
||||
if (val == Qundef && (func = jit_compile(ec))) {
|
||||
val = func(ec, ec->cfp);
|
||||
if (ec->tag->state) THROW_EXCEPTION(val);
|
||||
}
|
||||
JIT_EXEC(ec, val);
|
||||
|
||||
if (val == Qundef) {
|
||||
RESTORE_REGS();
|
||||
|
@ -946,12 +936,7 @@ invokesuper
|
|||
{
|
||||
VALUE bh = vm_caller_setup_arg_block(ec, GET_CFP(), cd->ci, blockiseq, true);
|
||||
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_super);
|
||||
|
||||
jit_func_t func;
|
||||
if (val == Qundef && (func = jit_compile(ec))) {
|
||||
val = func(ec, ec->cfp);
|
||||
if (ec->tag->state) THROW_EXCEPTION(val);
|
||||
}
|
||||
JIT_EXEC(ec, val);
|
||||
|
||||
if (val == Qundef) {
|
||||
RESTORE_REGS();
|
||||
|
@ -971,12 +956,7 @@ invokeblock
|
|||
{
|
||||
VALUE bh = VM_BLOCK_HANDLER_NONE;
|
||||
val = vm_sendish(ec, GET_CFP(), cd, bh, mexp_search_invokeblock);
|
||||
|
||||
jit_func_t func;
|
||||
if (val == Qundef && (func = jit_compile(ec))) {
|
||||
val = func(ec, ec->cfp);
|
||||
if (ec->tag->state) THROW_EXCEPTION(val);
|
||||
}
|
||||
JIT_EXEC(ec, val);
|
||||
|
||||
if (val == Qundef) {
|
||||
RESTORE_REGS();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue