diff --git a/src/call/pcc.c b/src/call/pcc.c index 85a9ed2a2e..b126a7f6ed 100644 --- a/src/call/pcc.c +++ b/src/call/pcc.c @@ -339,16 +339,6 @@ static void too_many(PARROT_INTERP, /* Make sure we don't conflict with any other MAX() macros defined elsewhere */ #define PARROT_MAX(a, b) (((a)) > (b) ? (a) : (b)) -#define SAVE_OFF_REGS(orig, next, save) \ - CONTEXT_FIELD(interp, (save), bp) = CONTEXT_FIELD(interp, (orig), bp);\ - CONTEXT_FIELD(interp, (save), bp_ps) = CONTEXT_FIELD(interp, (orig), bp_ps);\ - CONTEXT_FIELD(interp, (orig), bp) = CONTEXT_FIELD(interp, (next), bp);\ - CONTEXT_FIELD(interp, (orig), bp_ps) = CONTEXT_FIELD(interp, (next), bp_ps); - -#define RESTORE_REGS(orig, save) \ - CONTEXT_FIELD(interp, (orig), bp) = CONTEXT_FIELD(interp, (save), bp);\ - CONTEXT_FIELD(interp, (orig), bp_ps) = CONTEXT_FIELD(interp, (save), bp_ps); - /* =item Cu.key; + sig_pmc = Parrot_pcc_get_pmc_constant(interp, ctx, *indexes); ASSERT_SIG_PMC(sig_pmc); ++indexes; } @@ -614,7 +604,7 @@ Parrot_init_arg_op(PARROT_INTERP, ARGIN(PMC *ctx), if (pc) { ++pc; - sig_pmc = CONTEXT_FIELD(interp, ctx, constants[*pc])->u.key; + sig_pmc = Parrot_pcc_get_pmc_constant(interp, ctx, *pc); ASSERT_SIG_PMC(sig_pmc); ++pc; } diff --git a/src/debug.c b/src/debug.c index 0391323dab..1d87e82f65 100644 --- a/src/debug.c +++ b/src/debug.c @@ -2219,7 +2219,7 @@ PDB_check_condition(PARROT_INTERP, ARGIN(const PDB_condition_t *condition)) if (condition->type & PDB_cond_int) { INTVAL i, j; - if (condition->reg >= CONTEXT_FIELD(interp, ctx, n_regs_used[REGNO_INT])) + if (condition->reg >= Parrot_pcc_get_regs_used(interp, ctx, REGNO_INT)) return 0; i = CTX_REG_INT(ctx, condition->reg); @@ -2241,7 +2241,7 @@ PDB_check_condition(PARROT_INTERP, ARGIN(const PDB_condition_t *condition)) else if (condition->type & PDB_cond_num) { FLOATVAL k, l; - if (condition->reg >= CONTEXT_FIELD(interp, ctx, n_regs_used[REGNO_NUM])) + if (condition->reg >= Parrot_pcc_get_regs_used(interp, ctx, REGNO_NUM)) return 0; k = CTX_REG_NUM(ctx, condition->reg); @@ -2263,7 +2263,7 @@ PDB_check_condition(PARROT_INTERP, ARGIN(const PDB_condition_t *condition)) else if (condition->type & PDB_cond_str) { STRING *m, *n; - if (condition->reg >= CONTEXT_FIELD(interp, ctx, n_regs_used[REGNO_STR])) + if (condition->reg >= Parrot_pcc_get_regs_used(interp, ctx, REGNO_STR)) return 0; m = CTX_REG_STR(ctx, condition->reg); @@ -2294,7 +2294,7 @@ PDB_check_condition(PARROT_INTERP, ARGIN(const PDB_condition_t *condition)) else if (condition->type & PDB_cond_pmc) { PMC *m; - if (condition->reg >= CONTEXT_FIELD(interp, ctx, n_regs_used[REGNO_PMC])) + if (condition->reg >= Parrot_pcc_get_regs_used(interp, ctx, REGNO_PMC)) return 0; m = CTX_REG_PMC(ctx, condition->reg); @@ -3634,7 +3634,7 @@ GDB_print_reg(PARROT_INTERP, int t, int n) ASSERT_ARGS(GDB_print_reg) char * string; - if (n >= 0 && n < CURRENT_CONTEXT_FIELD(interp, n_regs_used[t])) { + if (n >= 0 && n < Parrot_pcc_get_regs_used(interp, CONTEXT(interp), t)) { switch (t) { case REGNO_INT: return Parrot_str_from_int(interp, IREG(n))->strstart; @@ -3699,7 +3699,7 @@ GDB_P(PARROT_INTERP, ARGIN(const char *s)) } if (! s[1]) { /* Print all registers of this type. */ - const int max_reg = CURRENT_CONTEXT_FIELD(interp, n_regs_used[t]); + const int max_reg = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), t); int n; for (n = 0; n < max_reg; n++) { diff --git a/src/jit.c b/src/jit.c index fbb715fed4..96f3b397fa 100644 --- a/src/jit.c +++ b/src/jit.c @@ -396,8 +396,10 @@ init_regusage(PARROT_INTERP, Parrot_jit_optimizer_section_ptr cur_section) { int typ; - cur_section->ru[0].registers_used = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_INT]); - cur_section->ru[3].registers_used = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_NUM]); + cur_section->ru[0].registers_used = Parrot_pcc_get_regs_used(interp, + CONTEXT(interp), REGNO_INT); + cur_section->ru[3].registers_used = Parrot_pcc_get_regs_used(interp, + CONTEXT(interp), REGNO_NUM); cur_section->ru[1].registers_used = cur_section->ru[2].registers_used = 0; for (typ = 0; typ < 4; typ++) { @@ -1304,7 +1306,7 @@ set_reg_usage(PARROT_INTERP, const opcode_t *pc) if (offs >= sub->start_offs && offs < sub->end_offs) { for (i = 0; i < 4; i++) - CURRENT_CONTEXT_FIELD(interp, n_regs_used[i]) = sub->n_regs_used[i]; + Parrot_pcc_set_regs_used(interp, CONTEXT(interp), i, sub->n_regs_used[i]); return; } @@ -1425,7 +1427,7 @@ parrot_build_asm(PARROT_INTERP, ARGIN(opcode_t *code_start), ARGIN(opcode_t *cod /* remember register usage */ for (i = 0; i < 4; i++) - n_regs_used[i] = CURRENT_CONTEXT_FIELD(interp, n_regs_used[i]); + n_regs_used[i] = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), i); set_reg_usage(interp, code_start); @@ -1679,7 +1681,7 @@ parrot_build_asm(PARROT_INTERP, ARGIN(opcode_t *code_start), ARGIN(opcode_t *cod /* restore register usage */ for (i = 0; i < 4; i++) - CURRENT_CONTEXT_FIELD(interp, n_regs_used[i]) = n_regs_used[i]; + Parrot_pcc_set_regs_used(interp, CONTEXT(interp), i, n_regs_used[i]); /* Do fixups before converting offsets */ (arch_info->jit_dofixup)(jit_info, interp); diff --git a/src/jit/i386/jit_defs.c b/src/jit/i386/jit_defs.c index 9cac8c535e..4675116d96 100644 --- a/src/jit/i386/jit_defs.c +++ b/src/jit/i386/jit_defs.c @@ -1268,7 +1268,7 @@ jit_save_regs(Parrot_jit_info_t *jit_info, PARROT_INTERP) int i, used_i, save_i; const jit_arch_regs *reg_info; - used_i = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_INT]); + used_i = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_INT); reg_info = &jit_info->arch_info->regs[jit_info->code_type]; save_i = reg_info->n_preserved_I; for (i = save_i; i < used_i; ++i) { @@ -1284,7 +1284,7 @@ jit_restore_regs(Parrot_jit_info_t *jit_info, PARROT_INTERP) int i, used_i, save_i; const jit_arch_regs *reg_info; - used_i = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_INT]); + used_i = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_INT); reg_info = &jit_info->arch_info->regs[jit_info->code_type]; save_i = reg_info->n_preserved_I; /* note - reversed order of jit_save_regs */ @@ -1308,8 +1308,8 @@ jit_save_regs_call(Parrot_jit_info_t *jit_info, PARROT_INTERP, int skip) int i, used_i, used_n; const jit_arch_regs *reg_info; - used_i = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_INT]); - used_n = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_NUM]); + used_i = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_INT); + used_n = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_NUM); jit_emit_sub_ri_i(interp, jit_info->native_ptr, emit_ESP, (used_i * sizeof (INTVAL) + used_n * sizeof (FLOATVAL))); reg_info = &jit_info->arch_info->regs[jit_info->code_type]; @@ -1339,8 +1339,8 @@ jit_restore_regs_call(Parrot_jit_info_t *jit_info, PARROT_INTERP, int i, used_i, used_n; const jit_arch_regs *reg_info; - used_i = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_INT]); - used_n = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_NUM]); + used_i = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_INT); + used_n = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_NUM); reg_info = &jit_info->arch_info->regs[jit_info->code_type]; for (i = 0; i < used_i; ++i) { @@ -1429,7 +1429,6 @@ jit_set_args_pc(Parrot_jit_info_t *jit_info, PARROT_INTERP, { PMC *sig_args, *sig_params, *sig_result; INTVAL *sig_bits, sig, i, n; - PackFile_Constant ** constants; opcode_t *params, *result; char params_map; int skip, used_n; @@ -1443,13 +1442,12 @@ jit_set_args_pc(Parrot_jit_info_t *jit_info, PARROT_INTERP, Parrot_ex_throw_from_c_args(interp, NULL, 1, "set_args_jit - can't do that yet "); - constants = CURRENT_CONTEXT_FIELD(interp, constants); - sig_args = constants[CUR_OPCODE[1]]->u.key; + sig_args = Parrot_pcc_get_pmc_constant(interp, CONTEXT(interp), CUR_OPCODE[1]); if (!VTABLE_elements(interp, sig_args)) return; params = jit_info->optimizer->sections->begin; - sig_params = constants[params[1]]->u.key; + sig_params = Parrot_pcc_get_pmc_constant(interp, CONTEXT(interp), params[1]); ASSERT_SIG_PMC(sig_params); GETATTR_FixedIntegerArray_int_array(interp, sig_args, sig_bits); n = VTABLE_elements(interp, sig_args); @@ -1459,7 +1457,7 @@ jit_set_args_pc(Parrot_jit_info_t *jit_info, PARROT_INTERP, */ result = CUR_OPCODE + 2 + n + 3; /* set_args, set_p_pc */ PARROT_ASSERT(*result == PARROT_OP_get_results_pc); - sig_result = constants[result[1]]->u.key; + sig_result = Parrot_pcc_get_pmc_constant(interp, CONTEXT(interp), result[1]); ASSERT_SIG_PMC(sig_result); if (!VTABLE_elements(interp, sig_result)) diff --git a/src/packfile.c b/src/packfile.c index b0ed30cc41..314c314733 100644 --- a/src/packfile.c +++ b/src/packfile.c @@ -681,7 +681,7 @@ run_sub(PARROT_INTERP, ARGIN(PMC *sub_pmc)) && interp->run_core != PARROT_FAST_CORE) interp->run_core = PARROT_FAST_CORE; - CURRENT_CONTEXT_FIELD(interp, constants) = interp->code->const_table->constants; + Parrot_pcc_set_constants(interp, CONTEXT(interp), interp->code->const_table->constants); retval = (PMC *)Parrot_runops_fromc_args(interp, sub_pmc, "P"); interp->run_core = old; @@ -3083,9 +3083,9 @@ Parrot_switch_to_cs(PARROT_INTERP, ARGIN(PackFile_ByteCode *new_cs), int really) } interp->code = new_cs; - CURRENT_CONTEXT_FIELD(interp, constants) = really + Parrot_pcc_set_constants(interp, CONTEXT(interp), really ? find_constants(interp, new_cs->const_table) - : new_cs->const_table->constants; + : new_cs->const_table->constants); /* new_cs->const_table->constants; */ Parrot_pcc_set_pred_offset(interp, CONTEXT(interp), diff --git a/src/runcore/main.c b/src/runcore/main.c index da626fcad8..28b1c39ba5 100644 --- a/src/runcore/main.c +++ b/src/runcore/main.c @@ -188,10 +188,10 @@ prederef_args(ARGMOD(void **pc_prederef), PARROT_INTERP, ASSERT_ARGS(prederef_args) const PackFile_ConstTable * const const_table = interp->code->const_table; - const int regs_n = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_NUM]); - const int regs_i = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_INT]); - const int regs_p = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_PMC]); - const int regs_s = CURRENT_CONTEXT_FIELD(interp, n_regs_used[REGNO_STR]); + const int regs_n = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_NUM); + const int regs_i = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_INT); + const int regs_p = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_PMC); + const int regs_s = Parrot_pcc_get_regs_used(interp, CONTEXT(interp), REGNO_STR); /* prederef var part too */ const int m = opinfo->op_count;