diff options
| author | Takashi Kokubun <takashikkbn@gmail.com> | 2022-11-29 00:21:27 -0800 |
|---|---|---|
| committer | Takashi Kokubun <takashikkbn@gmail.com> | 2022-11-29 00:23:51 -0800 |
| commit | 27f34eeb5a95263f8669e6998247d83606c3763f (patch) | |
| tree | 4162b11a5f4dafc75369712412f9c19b2b0a26cb | |
| parent | 8a0acbea4cf7be4bfaf329d077b2b4c9a2ad425b (diff) | |
MJIT: Self-contain extern declarations
I'm trying to get rid of mjit_compiler.c, and this helps that migration.
| -rw-r--r-- | mjit_c.rb | 10 | ||||
| -rw-r--r-- | mjit_compiler.c | 5 |
2 files changed, 8 insertions, 7 deletions
@@ -51,7 +51,10 @@ module RubyVM::MJIT def rb_splat_or_kwargs_p(ci) _ci_addr = ci.to_i - Primitive.cexpr! 'RBOOL(rb_splat_or_kwargs_p((CALL_INFO)NUM2PTR(_ci_addr)))' + Primitive.cstmt! %{ + extern bool rb_splat_or_kwargs_p(const struct rb_callinfo *restrict ci); + return RBOOL(rb_splat_or_kwargs_p((CALL_INFO)NUM2PTR(_ci_addr))); + } end def fastpath_applied_iseq_p(ci, cc, iseq) @@ -74,7 +77,10 @@ module RubyVM::MJIT def mjit_capture_cc_entries(compiled_body, captured_body) _compiled_body_addr = compiled_body.to_i _captured_body_addr = captured_body.to_i - Primitive.cexpr! 'INT2NUM(mjit_capture_cc_entries((struct rb_iseq_constant_body *)NUM2PTR(_compiled_body_addr), (struct rb_iseq_constant_body *)NUM2PTR(_captured_body_addr)))' + Primitive.cstmt! %{ + extern int mjit_capture_cc_entries(const struct rb_iseq_constant_body *compiled_iseq, const struct rb_iseq_constant_body *captured_iseq); + return INT2NUM(mjit_capture_cc_entries((struct rb_iseq_constant_body *)NUM2PTR(_compiled_body_addr), (struct rb_iseq_constant_body *)NUM2PTR(_captured_body_addr))); + } end # Convert encoded VM pointers to insn BINs. diff --git a/mjit_compiler.c b/mjit_compiler.c index 549973e057..655c0ecc23 100644 --- a/mjit_compiler.c +++ b/mjit_compiler.c @@ -56,9 +56,6 @@ fastpath_applied_iseq_p(const CALL_INFO ci, const CALL_CACHE cc, const rb_iseq_t #define PTR2NUM(x) ULL2NUM(x) #endif -extern int -mjit_capture_cc_entries(const struct rb_iseq_constant_body *compiled_iseq, const struct rb_iseq_constant_body *captured_iseq); - // Compile ISeq to C code in `f`. It returns true if it succeeds to compile. bool mjit_compile(FILE *f, const rb_iseq_t *iseq, const char *funcname, int id) @@ -103,8 +100,6 @@ has_cache_for_send(rb_execution_context_t *ec, VALUE self, VALUE cc_addr, VALUE return RBOOL(has_cache); } -extern bool rb_splat_or_kwargs_p(const struct rb_callinfo *restrict ci); - // An offsetof implementation that works for unnamed struct and union. // Multiplying 8 for compatibility with libclang's offsetof. #define OFFSETOF(ptr, member) RB_SIZE2NUM(((char *)&ptr.member - (char*)&ptr) * 8) |
