vm_invoke_block: force indirect jump
This changeset slightly speeds up on my machine. Calculating ------------------------------------- before after Optcarrot Lan_Master.nes 38.33488426546287 40.89825082589147 fps 40.91288557922081 41.48687465359386 40.96591995270991 41.98499064664184 41.20461943032173 43.67314690779162 42.38344888176518 44.02777536251875 43.43563728880915 44.88695892714136 43.88082889062643 45.11226186242523
This commit is contained in:
parent
796f9edae0
commit
973883aaa1
Notes:
git
2020-06-03 16:14:17 +09:00
@ -3472,18 +3472,18 @@ vm_invoke_block(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
|
||||
struct rb_calling_info *calling, const struct rb_callinfo *ci,
|
||||
bool is_lambda, VALUE block_handler)
|
||||
{
|
||||
auto VALUE (*func)(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
|
||||
struct rb_calling_info *calling, const struct rb_callinfo *ci,
|
||||
bool is_lambda, VALUE block_handler);
|
||||
|
||||
switch (vm_block_handler_type(block_handler)) {
|
||||
case block_handler_type_iseq:
|
||||
return vm_invoke_iseq_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
|
||||
case block_handler_type_ifunc:
|
||||
return vm_invoke_ifunc_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
|
||||
case block_handler_type_proc:
|
||||
return vm_invoke_proc_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
|
||||
case block_handler_type_symbol:
|
||||
return vm_invoke_symbol_block(ec, reg_cfp, calling, ci, is_lambda, block_handler);
|
||||
case block_handler_type_iseq: func = vm_invoke_iseq_block; break;
|
||||
case block_handler_type_ifunc: func = vm_invoke_ifunc_block; break;
|
||||
case block_handler_type_proc: func = vm_invoke_proc_block; break;
|
||||
case block_handler_type_symbol: func = vm_invoke_symbol_block; break;
|
||||
}
|
||||
VM_UNREACHABLE(vm_invoke_block: unreachable);
|
||||
return Qnil;
|
||||
|
||||
return func(ec, reg_cfp, calling, ci, is_lambda, block_handler);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
Loading…
x
Reference in New Issue
Block a user