summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2020-12-08 17:19:28 -0500
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:26 -0400
commitf761e9ee641cb4bf9250fa97d119a444d239e7b7 (patch)
treefa2e4137df92029e7b21ef404d9b87fa4a28c2d2
parente4c65ec49c5e2cba537f2d9ee00888c5dfbcac34 (diff)
Move code into ujit_iface.c
-rw-r--r--ujit_codegen.c7
-rw-r--r--ujit_iface.c16
-rw-r--r--ujit_iface.h2
3 files changed, 20 insertions, 5 deletions
diff --git a/ujit_codegen.c b/ujit_codegen.c
index 09a0acd76d..03b72ec2c3 100644
--- a/ujit_codegen.c
+++ b/ujit_codegen.c
@@ -14,7 +14,6 @@
#include "ujit_codegen.h"
#include "ujit_asm.h"
#include "ujit_utils.h"
-#include "ujit_hooks.inc"
// Code generation function signature
typedef bool (*codegen_fn)(codeblock_t* cb, codeblock_t* ocb, ctx_t* ctx);
@@ -34,8 +33,7 @@ static codeblock_t* ocb = NULL;
static void
ujit_gen_entry(codeblock_t* cb)
{
- for (size_t i = 0; i < sizeof(ujit_with_ec_pre_call_bytes); ++i)
- cb_write_byte(cb, ujit_with_ec_pre_call_bytes[i]);
+ cb_write_pre_call_bytes(cb);
}
/**
@@ -57,8 +55,7 @@ ujit_gen_exit(codeblock_t* cb, ctx_t* ctx, VALUE* exit_pc)
mov(cb, member_opnd(REG_CFP, rb_control_frame_t, pc), RAX);
// Write the post call bytes
- for (size_t i = 0; i < sizeof(ujit_with_ec_post_call_bytes); ++i)
- cb_write_byte(cb, ujit_with_ec_post_call_bytes[i]);
+ cb_write_post_call_bytes(cb);
}
/**
diff --git a/ujit_iface.c b/ujit_iface.c
index 9b407c82d1..404c75dbee 100644
--- a/ujit_iface.c
+++ b/ujit_iface.c
@@ -19,6 +19,22 @@ bool rb_ujit_enabled;
// Hash table of encoded instructions
extern st_table *rb_encoded_insn_data;
+// Write the uJIT entry point pre-call bytes
+void
+cb_write_pre_call_bytes(codeblock_t* cb)
+{
+ for (size_t i = 0; i < sizeof(ujit_with_ec_pre_call_bytes); ++i)
+ cb_write_byte(cb, ujit_with_ec_pre_call_bytes[i]);
+}
+
+// Write the uJIT exit post-call bytes
+void
+cb_write_post_call_bytes(codeblock_t* cb)
+{
+ for (size_t i = 0; i < sizeof(ujit_with_ec_post_call_bytes); ++i)
+ cb_write_byte(cb, ujit_with_ec_post_call_bytes[i]);
+}
+
// Keep track of mapping from instructions to generated code
// See comment for rb_encoded_insn_data in iseq.c
void
diff --git a/ujit_iface.h b/ujit_iface.h
index 1e43c7c60c..920dfd5349 100644
--- a/ujit_iface.h
+++ b/ujit_iface.h
@@ -20,6 +20,8 @@ struct rb_callcache;
#define rb_callcache rb_callcache
#endif
+void cb_write_pre_call_bytes(codeblock_t* cb);
+void cb_write_post_call_bytes(codeblock_t* cb);
void map_addr2insn(void *code_ptr, int insn);
int opcode_at_pc(const rb_iseq_t *iseq, const VALUE *pc);
void assume_method_lookup_stable(const struct rb_callcache *cc, const rb_callable_method_entry_t *cme, ctx_t *ctx);