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.

fix jit method-call stack growth regression

+14 -21
+14 -21
src/silver/swarm.c
··· 2587 2587 mir_load_imm(ctx, jit_func, r_args_buf, 0); 2588 2588 } 2589 2589 2590 + MIR_reg_t r_call_out_this = MIR_new_func_reg(ctx, jit_func->u.func, MIR_T_I64, "call_out_this"); 2591 + MIR_append_insn(ctx, jit_func, 2592 + MIR_new_insn(ctx, MIR_ALLOCA, 2593 + MIR_new_reg_op(ctx, r_call_out_this), 2594 + MIR_new_uint_op(ctx, sizeof(ant_value_t)))); 2595 + 2590 2596 MIR_reg_t r_iter_roots = MIR_new_func_reg(ctx, jit_func->u.func, MIR_T_I64, "iter_roots"); 2591 2597 if (feat.needs_iter_roots && vs.max > 0) { 2592 2598 MIR_append_insn(ctx, jit_func, ··· 4806 4812 4807 4813 int cn = call_n++; 4808 4814 4809 - char rn_arr[32], rn_this[32], rn_ccl[32], rn_cfn[32], rn_jptr[32], rn_csup[32], rn_out_this[32]; 4815 + char rn_arr[32], rn_this[32], rn_ccl[32], rn_cfn[32], rn_jptr[32], rn_csup[32]; 4810 4816 snprintf(rn_arr, sizeof(rn_arr), "arg_arr%d", cn); 4811 4817 snprintf(rn_this, sizeof(rn_this), "call_this%d", cn); 4812 4818 snprintf(rn_ccl, sizeof(rn_ccl), "callee_cl%d", cn); 4813 4819 snprintf(rn_cfn, sizeof(rn_cfn), "callee_func%d", cn); 4814 4820 snprintf(rn_jptr, sizeof(rn_jptr), "jit_ptr%d", cn); 4815 4821 snprintf(rn_csup, sizeof(rn_csup), "callee_super%d", cn); 4816 - snprintf(rn_out_this, sizeof(rn_out_this), "call_out_this%d", cn); 4817 4822 4818 4823 MIR_reg_t r_arg_arr = r_args_buf; 4819 4824 ··· 4906 4911 break; 4907 4912 } 4908 4913 4909 - MIR_reg_t r_out_this = MIR_new_func_reg(ctx, jit_func->u.func, MIR_T_I64, rn_out_this); 4910 - MIR_append_insn(ctx, jit_func, 4911 - MIR_new_insn(ctx, MIR_ALLOCA, 4912 - MIR_new_reg_op(ctx, r_out_this), 4913 - MIR_new_uint_op(ctx, sizeof(ant_value_t)))); 4914 - 4915 4914 MIR_label_t lbl_self_call = MIR_new_label(ctx); 4916 4915 MIR_label_t lbl_super_call = MIR_new_label(ctx); 4917 4916 MIR_label_t lbl_interp_call = MIR_new_label(ctx); ··· 5012 5011 MIR_append_insn(ctx, jit_func, lbl_super_call); 5013 5012 MIR_append_insn(ctx, jit_func, 5014 5013 MIR_new_insn(ctx, MIR_MOV, 5015 - MIR_new_mem_op(ctx, MIR_T_I64, 0, r_out_this, 0, 1), 5014 + MIR_new_mem_op(ctx, MIR_T_I64, 0, r_call_out_this, 0, 1), 5016 5015 MIR_new_reg_op(ctx, r_this_curr))); 5017 5016 MIR_append_insn(ctx, jit_func, 5018 5017 MIR_new_call_insn(ctx, 12, ··· 5027 5026 MIR_new_int_op(ctx, (int64_t)call_argc), 5028 5027 MIR_new_reg_op(ctx, r_super_val), 5029 5028 MIR_new_reg_op(ctx, r_new_target), 5030 - MIR_new_reg_op(ctx, r_out_this))); 5029 + MIR_new_reg_op(ctx, r_call_out_this))); 5031 5030 MIR_append_insn(ctx, jit_func, 5032 5031 MIR_new_insn(ctx, MIR_MOV, 5033 5032 MIR_new_reg_op(ctx, r_this_curr), 5034 - MIR_new_mem_op(ctx, MIR_T_I64, 0, r_out_this, 0, 1))); 5033 + MIR_new_mem_op(ctx, MIR_T_I64, 0, r_call_out_this, 0, 1))); 5035 5034 MIR_append_insn(ctx, jit_func, 5036 5035 MIR_new_insn(ctx, MIR_JMP, MIR_new_label_op(ctx, lbl_call_done))); 5037 5036 ··· 7498 7497 7499 7498 int cn = call_n++; 7500 7499 7501 - char rn_arr[32], rn_ccl[32], rn_cfn[32], rn_jptr[32], rn_sup[32], rn_out_this[32]; 7500 + char rn_arr[32], rn_ccl[32], rn_cfn[32], rn_jptr[32], rn_sup[32]; 7502 7501 snprintf(rn_arr, sizeof(rn_arr), "cm_arr%d", cn); 7503 7502 snprintf(rn_ccl, sizeof(rn_ccl), "cm_cl%d", cn); 7504 7503 snprintf(rn_cfn, sizeof(rn_cfn), "cm_fn%d", cn); 7505 7504 snprintf(rn_jptr, sizeof(rn_jptr), "cm_jptr%d", cn); 7506 7505 snprintf(rn_sup, sizeof(rn_sup), "cm_sup%d", cn); 7507 - snprintf(rn_out_this, sizeof(rn_out_this), "cm_out_this%d", cn); 7508 7506 7509 7507 MIR_reg_t r_arg_arr = r_args_buf; 7510 7508 ··· 7522 7520 MIR_reg_t r_call_this = vstack_pop(&vs); 7523 7521 MIR_reg_t r_call_res = vstack_push(&vs); 7524 7522 MIR_reg_t r_callee_super = MIR_new_func_reg(ctx, jit_func->u.func, MIR_JSVAL, rn_sup); 7525 - MIR_reg_t r_out_this = MIR_new_func_reg(ctx, jit_func->u.func, MIR_T_I64, rn_out_this); 7526 - MIR_append_insn(ctx, jit_func, 7527 - MIR_new_insn(ctx, MIR_ALLOCA, 7528 - MIR_new_reg_op(ctx, r_out_this), 7529 - MIR_new_uint_op(ctx, sizeof(ant_value_t)))); 7530 7523 7531 7524 MIR_label_t lbl_cm_self = MIR_new_label(ctx); 7532 7525 MIR_label_t lbl_cm_super = MIR_new_label(ctx); ··· 7618 7611 MIR_append_insn(ctx, jit_func, lbl_cm_super); 7619 7612 MIR_append_insn(ctx, jit_func, 7620 7613 MIR_new_insn(ctx, MIR_MOV, 7621 - MIR_new_mem_op(ctx, MIR_T_I64, 0, r_out_this, 0, 1), 7614 + MIR_new_mem_op(ctx, MIR_T_I64, 0, r_call_out_this, 0, 1), 7622 7615 MIR_new_reg_op(ctx, r_call_this))); 7623 7616 MIR_append_insn(ctx, jit_func, 7624 7617 MIR_new_call_insn(ctx, 12, ··· 7633 7626 MIR_new_int_op(ctx, (int64_t)call_argc), 7634 7627 MIR_new_reg_op(ctx, r_super_val), 7635 7628 MIR_new_reg_op(ctx, r_new_target), 7636 - MIR_new_reg_op(ctx, r_out_this))); 7629 + MIR_new_reg_op(ctx, r_call_out_this))); 7637 7630 MIR_append_insn(ctx, jit_func, 7638 7631 MIR_new_insn(ctx, MIR_MOV, 7639 7632 MIR_new_reg_op(ctx, r_this_curr), 7640 - MIR_new_mem_op(ctx, MIR_T_I64, 0, r_out_this, 0, 1))); 7633 + MIR_new_mem_op(ctx, MIR_T_I64, 0, r_call_out_this, 0, 1))); 7641 7634 MIR_append_insn(ctx, jit_func, 7642 7635 MIR_new_insn(ctx, MIR_JMP, MIR_new_label_op(ctx, lbl_cm_done))); 7643 7636