From 9947574b9cad74fbf04fa44d49647c591590c511 Mon Sep 17 00:00:00 2001
From: Takashi Kokubun <takashikkbn@gmail.com>
Date: Thu, 16 Mar 2023 10:41:12 -0700
Subject: 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.
---
 insns.def | 28 ++++------------------------
 1 file changed, 4 insertions(+), 24 deletions(-)

(limited to 'insns.def')

diff --git a/insns.def b/insns.def
index 9af64aa4b3..ba16d6365c 100644
--- a/insns.def
+++ b/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();
-- 
cgit v1.2.1

