summaryrefslogtreecommitdiff
path: root/ujit_codegen.c
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2021-01-12 17:03:54 -0500
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:27 -0400
commitef08af93769982047e59356d76c7e72a67970335 (patch)
tree4835b538e2012d6ad28dba2c1f65afc95159f89c /ujit_codegen.c
parent3a74011ff8e5b9b4bf07ef72d249d08b8c13c57e (diff)
downloadruby-ef08af93769982047e59356d76c7e72a67970335.tar.gz
Progress on code invalidation
Diffstat (limited to 'ujit_codegen.c')
-rw-r--r--ujit_codegen.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/ujit_codegen.c b/ujit_codegen.c
index 8ba71bf37f..4833e4ab1f 100644
--- a/ujit_codegen.c
+++ b/ujit_codegen.c
@@ -133,8 +133,7 @@ uint8_t* ujit_compile_entry(const rb_iseq_t *iseq, uint32_t insn_idx)
ctx_t ctx = { 0 };
// Compile the block starting at this instruction
- uint32_t num_instrs = 0;
- ujit_compile_block(iseq, insn_idx, &ctx, &num_instrs);
+ uint32_t num_instrs = ujit_compile_block(iseq, insn_idx, &ctx);
// If no instructions were compiled
if (num_instrs == 0) {
@@ -154,8 +153,8 @@ uint8_t* ujit_compile_entry(const rb_iseq_t *iseq, uint32_t insn_idx)
/*
Compile a sequence of bytecode instructions starting at `insn_idx`.
*/
-void
-ujit_compile_block(const rb_iseq_t *iseq, uint32_t insn_idx, ctx_t* ctx, uint32_t* num_instrs)
+uint32_t
+ujit_compile_block(/*version_t* version,*/ const rb_iseq_t *iseq, uint32_t insn_idx, ctx_t* ctx)
{
assert (cb != NULL);
VALUE *encoded = iseq->body->iseq_encoded;
@@ -175,10 +174,13 @@ ujit_compile_block(const rb_iseq_t *iseq, uint32_t insn_idx, ctx_t* ctx, uint32_
// Initialize JIT state object
jitstate_t jit = {
+ NULL,
iseq,
insn_idx
};
+ uint32_t num_instrs = 0;
+
// For each instruction to compile
for (;;) {
// Set the current instruction
@@ -209,7 +211,7 @@ ujit_compile_block(const rb_iseq_t *iseq, uint32_t insn_idx, ctx_t* ctx, uint32_
// Move to the next instruction
p_last_op = p_desc;
insn_idx += insn_len(opcode);
- (*num_instrs)++;
+ num_instrs++;
// If this instruction terminates this block
if (p_desc->is_branch) {
@@ -234,6 +236,8 @@ ujit_compile_block(const rb_iseq_t *iseq, uint32_t insn_idx, ctx_t* ctx, uint32_
pc += insn_len(opcode);
}
}
+
+ return num_instrs;
}
static bool