[svn:parrot] r40871 - in branches/context_pmc3: include/parrot src/gc
bacek at svn.parrot.org
bacek at svn.parrot.org
Sun Aug 30 11:17:38 UTC 2009
Author: bacek
Date: Sun Aug 30 11:17:37 2009
New Revision: 40871
URL: https://trac.parrot.org/parrot/changeset/40871
Log:
Steal functions from first commit to context_pmc2 branch for accessing registers. Whiteknight++
Modified:
branches/context_pmc3/include/parrot/register.h
branches/context_pmc3/src/gc/alloc_register.c
Modified: branches/context_pmc3/include/parrot/register.h
==============================================================================
--- branches/context_pmc3/include/parrot/register.h Sun Aug 30 11:17:11 2009 (r40870)
+++ branches/context_pmc3/include/parrot/register.h Sun Aug 30 11:17:37 2009 (r40871)
@@ -20,15 +20,15 @@
* Macros to make accessing registers more convenient/readable.
*/
-#define CTX_REG_NUM(p, x) CONTEXT_FIELD(interp, p, bp.regs_n[-1L-(x)])
-#define CTX_REG_INT(p, x) CONTEXT_FIELD(interp, p, bp.regs_i[x])
-#define CTX_REG_PMC(p, x) CONTEXT_FIELD(interp, p, bp_ps.regs_p[-1L-(x)])
-#define CTX_REG_STR(p, x) CONTEXT_FIELD(interp, p, bp_ps.regs_s[x])
-
-#define REG_NUM(interp, x) CTX_REG_NUM((interp)->ctx, (x))
-#define REG_INT(interp, x) CTX_REG_INT((interp)->ctx, (x))
-#define REG_PMC(interp, x) CTX_REG_PMC((interp)->ctx, (x))
-#define REG_STR(interp, x) CTX_REG_STR((interp)->ctx, (x))
+#define CTX_REG_NUM(p, x) (*Parrot_pcc_get_FLOATVAL_reg(interp, (p), (x)))
+#define CTX_REG_INT(p, x) (*Parrot_pcc_get_INTVAL_reg(interp, (p), (x)))
+#define CTX_REG_PMC(p, x) (*Parrot_pcc_get_PMC_reg(interp, (p), (x)))
+#define CTX_REG_STR(p, x) (*Parrot_pcc_get_STRING_reg(interp, (p), (x)))
+
+#define REG_NUM(interp, x) (*Parrot_pcc_get_FLOATVAL_reg((interp), (interp)->ctx, (x)))
+#define REG_INT(interp, x) (*Parrot_pcc_get_INTVAL_reg((interp), (interp)->ctx, (x)))
+#define REG_PMC(interp, x) (*Parrot_pcc_get_PMC_reg((interp), (interp)->ctx, (x)))
+#define REG_STR(interp, x) (*Parrot_pcc_get_STRING_reg((interp), (interp)->ctx, (x)))
/*
* and a set of macros to access a register by offset, used
@@ -82,6 +82,36 @@
__attribute__nonnull__(1);
PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+FLOATVAL * Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP,
+ ARGIN(PMC *ctx),
+ INTVAL idx)
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+INTVAL * Parrot_pcc_get_INTVAL_reg(PARROT_INTERP,
+ ARGIN(PMC *ctx),
+ INTVAL idx)
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PMC ** Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+STRING ** Parrot_pcc_get_STRING_reg(PARROT_INTERP,
+ ARGIN(PMC *ctx),
+ INTVAL idx)
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+
+PARROT_EXPORT
void Parrot_pop_context(PARROT_INTERP)
__attribute__nonnull__(1);
@@ -120,6 +150,18 @@
PARROT_ASSERT_ARG(interp)
#define ASSERT_ARGS_parrot_gc_context __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_pcc_get_FLOATVAL_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(ctx)
+#define ASSERT_ARGS_Parrot_pcc_get_INTVAL_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(ctx)
+#define ASSERT_ARGS_Parrot_pcc_get_PMC_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(ctx)
+#define ASSERT_ARGS_Parrot_pcc_get_STRING_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(ctx)
#define ASSERT_ARGS_Parrot_pop_context __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp)
#define ASSERT_ARGS_Parrot_push_context __attribute__unused__ int _ASSERT_ARGS_CHECK = \
Modified: branches/context_pmc3/src/gc/alloc_register.c
==============================================================================
--- branches/context_pmc3/src/gc/alloc_register.c Sun Aug 30 11:17:11 2009 (r40870)
+++ branches/context_pmc3/src/gc/alloc_register.c Sun Aug 30 11:17:37 2009 (r40871)
@@ -534,6 +534,43 @@
REG_NUM(interp, i) = 0.0;
}
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+INTVAL *
+Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+{
+ ASSERT_ARGS(Parrot_pcc_get_INTVAL_reg)
+ return &(Parrot_pcc_get_context(interp, ctx)->bp.regs_i[idx]);
+}
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+FLOATVAL *
+Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+{
+ ASSERT_ARGS(Parrot_pcc_get_FLOATVAL_reg)
+ return &(Parrot_pcc_get_context(interp, ctx)->bp.regs_n[-1L - idx]);
+}
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+STRING **
+Parrot_pcc_get_STRING_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+{
+ ASSERT_ARGS(Parrot_pcc_get_STRING_reg)
+ return &(Parrot_pcc_get_context(interp, ctx)->bp_ps.regs_s[idx]);
+}
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PMC **
+Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+{
+ ASSERT_ARGS(Parrot_pcc_get_PMC_reg)
+ return &(Parrot_pcc_get_context(interp, ctx)->bp_ps.regs_p[-1L - idx]);
+}
+
+
/*
More information about the parrot-commits
mailing list