From c378c7a7cb937cd9fe5814f2838b1d6cd1d177b2 Mon Sep 17 00:00:00 2001 From: Alan Wu Date: Tue, 27 Oct 2020 18:49:17 -0400 Subject: MicroJIT: generate less code for CFUNCs Added UJIT_CHECK_MODE. Set to 1 to double check method dispatch in generated code. It's surprising to me that we need to watch both cc and cme. There might be opportunities to simplify there. --- vm_method.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'vm_method.c') diff --git a/vm_method.c b/vm_method.c index 842c19c12b..55fb2b5337 100644 --- a/vm_method.c +++ b/vm_method.c @@ -3,6 +3,7 @@ */ #include "id_table.h" +#include "ujit_compile.h" #define METHOD_DEBUG 0 @@ -114,6 +115,19 @@ rb_vm_mtbl_dump(const char *msg, VALUE klass, ID target_mid) vm_mtbl_dump(klass, target_mid); } +void +rb_vm_cc_invalidate(const struct rb_callcache *cc) +{ + VM_ASSERT(IMEMO_TYPE_P(cc, imemo_callcache)); + VM_ASSERT(cc != vm_cc_empty()); + VM_ASSERT(cc->klass != 0); // should be enable + + *(VALUE *)&cc->klass = 0; + rb_ujit_method_lookup_change((VALUE)cc); + RB_DEBUG_COUNTER_INC(cc_ent_invalidate); +} + + static inline void vm_cme_invalidate(rb_callable_method_entry_t *cme) { @@ -121,6 +135,7 @@ vm_cme_invalidate(rb_callable_method_entry_t *cme) VM_ASSERT(callable_method_entry_p(cme)); METHOD_ENTRY_INVALIDATED_SET(cme); RB_DEBUG_COUNTER_INC(cc_cme_invalidate); + rb_ujit_method_lookup_change((VALUE)cme); } void -- cgit v1.2.1