summaryrefslogtreecommitdiff
path: root/ujit_iface.c
diff options
context:
space:
mode:
authorMaxime Chevalier-Boisvert <maxime.chevalierboisvert@shopify.com>2020-12-10 00:06:10 -0500
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:26 -0400
commitf7717b1d463548414e607498e84815ac641ce3dc (patch)
tree85b99dc0bbad7fc61f9b5beeabb450b167e76923 /ujit_iface.c
parentf761e9ee641cb4bf9250fa97d119a444d239e7b7 (diff)
Start refactoring JIT engine
Diffstat (limited to 'ujit_iface.c')
-rw-r--r--ujit_iface.c22
1 files changed, 5 insertions, 17 deletions
diff --git a/ujit_iface.c b/ujit_iface.c
index 404c75dbee..ac541b7cdc 100644
--- a/ujit_iface.c
+++ b/ujit_iface.c
@@ -232,25 +232,13 @@ rb_ujit_compile_iseq(const rb_iseq_t *iseq)
RB_VM_LOCK_ENTER();
VALUE *encoded = (VALUE *)iseq->body->iseq_encoded;
- unsigned int insn_idx;
- unsigned int next_ujit_idx = 0;
+ // Compile a block version starting at the first instruction
+ uint8_t* native_code_ptr = ujit_compile_block(iseq, 0);
- for (insn_idx = 0; insn_idx < iseq->body->iseq_size; /* */) {
- int insn = opcode_at_pc(iseq, &encoded[insn_idx]);
- int len = insn_len(insn);
-
- uint8_t *native_code_ptr = NULL;
-
- // If ujit hasn't already compiled this instruction
- if (insn_idx >= next_ujit_idx) {
- native_code_ptr = ujit_compile_insn(iseq, insn_idx, &next_ujit_idx);
- }
-
- if (native_code_ptr) {
- encoded[insn_idx] = (VALUE)native_code_ptr;
- }
- insn_idx += len;
+ if (native_code_ptr) {
+ encoded[0] = (VALUE)native_code_ptr;
}
+
RB_VM_LOCK_LEAVE();
#endif
}