MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

disable gc tier while in jit

+29 -1
+1
include/internal.h
··· 124 124 125 125 #ifdef ANT_JIT 126 126 void *jit_ctx; 127 + uint32_t jit_active_depth; 127 128 #endif 128 129 129 130 const char *code;
+13 -1
include/silver/engine.h
··· 470 470 return v == SV_JIT_BAILOUT; 471 471 } 472 472 473 + static inline void sv_jit_enter(ant_t *js) { 474 + if (js) js->jit_active_depth++; 475 + } 476 + 477 + static inline void sv_jit_leave(ant_t *js) { 478 + if (js && js->jit_active_depth > 0) js->jit_active_depth--; 479 + } 480 + 473 481 static inline void sv_jit_on_bailout(sv_func_t *fn) { 474 482 fn->jit_code = NULL; 475 483 fn->back_edge_count = 0; ··· 523 531 if (!closure->func->is_generator) { 524 532 sv_func_t *fn = closure->func; 525 533 if (fn->jit_code) { 526 - ant_value_t result = ((sv_jit_func_t)fn->jit_code)(vm, ctx->this_val, ctx->args, ctx->argc, closure); 534 + sv_jit_enter(js); 535 + ant_value_t result = ((sv_jit_func_t)fn->jit_code)( 536 + vm, ctx->this_val, ctx->args, ctx->argc, closure 537 + ); 538 + sv_jit_leave(js); 527 539 if (sv_is_jit_bailout(result)) { 528 540 sv_jit_on_bailout(fn); 529 541 } else { sv_call_cleanup(js, ctx); return result; }
+3
src/gc.c
··· 1098 1098 } 1099 1099 1100 1100 void js_gc_maybe(ant_t *js) { 1101 + #ifdef ANT_JIT 1102 + if (js->jit_active_depth > 0) return; 1103 + #endif 1101 1104 ant_offset_t thresh = js->brk / 4; 1102 1105 1103 1106 ant_offset_t min_thresh = gc_throttled
+8
src/silver/engine.c
··· 744 744 callee->is_arrow || vtype(closure->bound_this) != T_UNDEF) 745 745 ? closure->bound_this : js_mkundef(); 746 746 frame->ip = ip + 3; 747 + sv_jit_enter(js); 747 748 ant_value_t jit_result = ((sv_jit_func_t)callee->jit_code)( 748 749 vm, jit_this, call_args, (int)call_argc, closure); 750 + sv_jit_leave(js); 749 751 if (sv_is_jit_bailout(jit_result)) { 750 752 sv_jit_on_bailout(callee); 751 753 goto call_fallback; ··· 768 770 callee->is_arrow || vtype(closure->bound_this) != T_UNDEF) 769 771 ? closure->bound_this : js_mkundef(); 770 772 frame->ip = ip + 3; 773 + sv_jit_enter(js); 771 774 ant_value_t jit_result = jit_fn(vm, jit_this, call_args, (int)call_argc, closure); 775 + sv_jit_leave(js); 772 776 if (sv_is_jit_bailout(jit_result)) { 773 777 sv_jit_on_bailout(callee); 774 778 goto call_fallback; ··· 863 867 callee->is_arrow || vtype(closure->bound_this) != T_UNDEF) 864 868 ? closure->bound_this : call_this; 865 869 frame->ip = ip + 3; 870 + sv_jit_enter(js); 866 871 ant_value_t jit_result = ((sv_jit_func_t)callee->jit_code)( 867 872 vm, jit_this, call_args, (int)call_argc, closure); 873 + sv_jit_leave(js); 868 874 if (sv_is_jit_bailout(jit_result)) { 869 875 sv_jit_on_bailout(callee); 870 876 goto call_method_fallback; ··· 887 893 callee->is_arrow || vtype(closure->bound_this) != T_UNDEF) 888 894 ? closure->bound_this : call_this; 889 895 frame->ip = ip + 3; 896 + sv_jit_enter(js); 890 897 ant_value_t jit_result = jit_fn(vm, jit_this, call_args, (int)call_argc, closure); 898 + sv_jit_leave(js); 891 899 if (sv_is_jit_bailout(jit_result)) { 892 900 sv_jit_on_bailout(callee); 893 901 goto call_method_fallback;
+4
src/silver/swarm.c
··· 5347 5347 } 5348 5348 5349 5349 fn->jit_code = (void *)jit; 5350 + sv_jit_enter(js); 5350 5351 ant_value_t result = jit(vm, ctx->this_val, ctx->args, ctx->argc, closure); 5352 + sv_jit_leave(js); 5351 5353 if (sv_is_jit_bailout(result)) { 5352 5354 sv_jit_on_bailout(fn); 5353 5355 return SV_JIT_RETRY_INTERP; ··· 5394 5396 vm->jit_osr.n_locals = nl; 5395 5397 vm->jit_osr.lp = frame->lp; 5396 5398 5399 + sv_jit_enter(js); 5397 5400 ant_value_t result = jit(vm, frame->this, frame->bp, frame->argc, closure); 5401 + sv_jit_leave(js); 5398 5402 5399 5403 if (sv_is_jit_bailout(result)) { 5400 5404 sv_jit_on_bailout(func);