summaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2020-10-13 11:15:22 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:25 -0400
commit8bda11f69065d08284b5990097c45a05076d36bd (patch)
tree74043f49d1534f6d7871020176a554589f1c6746 /compile.c
parentef9eb83cbecb3d7add699c41f713a42c296fe65a (diff)
MicroJIT: compile after ten calls
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c42
1 files changed, 6 insertions, 36 deletions
diff --git a/compile.c b/compile.c
index 5f6bc8476b..aedced7c8d 100644
--- a/compile.c
+++ b/compile.c
@@ -862,46 +862,16 @@ rb_iseq_translate_threaded_code(rb_iseq_t *iseq)
{
#if OPT_DIRECT_THREADED_CODE || OPT_CALL_THREADED_CODE
const void * const *table = rb_vm_get_insns_address_table();
+ unsigned int i;
VALUE *encoded = (VALUE *)iseq->body->iseq_encoded;
- VALUE translated_insns_buf;
-
- unsigned int insn_idx, translated_idx;
- unsigned int next_ujit_idx = 0;
- unsigned int translated_len = 0;
-
- bool ujit_enabled = rb_ujit_enabled_p();
-
- VALUE *translated_insns = ALLOCV_N(VALUE, translated_insns_buf, iseq->body->iseq_size);
- for (insn_idx = 0; insn_idx < iseq->body->iseq_size; /* */) {
- int insn = (int)encoded[insn_idx];
- int len = insn_len(insn);
- VALUE translated;
-
- uint8_t* native_code_ptr = NULL;
- // If ujit is enabled and hasn't already compiled this instruction
- if (ujit_enabled && insn_idx >= next_ujit_idx)
- native_code_ptr = ujit_compile_insn(iseq, insn_idx, &next_ujit_idx);
-
- if (native_code_ptr)
- translated = (VALUE)native_code_ptr;
- else
- translated = (VALUE)table[insn];
- translated_insns[translated_len++] = translated;
-
- insn_idx += len;
+ for (i = 0; i < iseq->body->iseq_size; /* */ ) {
+ int insn = (int)iseq->body->iseq_encoded[i];
+ int len = insn_len(insn);
+ encoded[i] = (VALUE)table[insn];
+ i += len;
}
-
- insn_idx = 0;
- for (translated_idx = 0; translated_idx < translated_len; translated_idx++) {
- int insn = (int)encoded[insn_idx];
- int len = insn_len(insn);
- encoded[insn_idx] = translated_insns[translated_idx];
- insn_idx += len;
- }
-
FL_SET((VALUE)iseq, ISEQ_TRANSLATED);
- ALLOCV_END(translated_insns_buf);
#endif
return COMPILE_OK;
}