[svn:parrot] r41062 - in trunk: include/parrot src/gc src/pmc
bacek at svn.parrot.org
bacek at svn.parrot.org
Sun Sep 6 11:56:59 UTC 2009
Author: bacek
Date: Sun Sep 6 11:56:58 2009
New Revision: 41062
URL: https://trac.parrot.org/parrot/changeset/41062
Log:
Use fixed-size allocator for Parrot_Context
Modified:
trunk/include/parrot/register.h
trunk/include/parrot/sub.h
trunk/src/gc/alloc_register.c
trunk/src/pmc/context.pmc
Modified: trunk/include/parrot/register.h
==============================================================================
--- trunk/include/parrot/register.h Sun Sep 6 11:35:37 2009 (r41061)
+++ trunk/include/parrot/register.h Sun Sep 6 11:56:58 2009 (r41062)
@@ -171,6 +171,10 @@
__attribute__nonnull__(1)
__attribute__nonnull__(2);
+size_t Parrot_pcc_calculate_context_size(SHIM_INTERP,
+ ARGIN(const UINTVAL *number_regs_used))
+ __attribute__nonnull__(2);
+
PARROT_CANNOT_RETURN_NULL
PARROT_WARN_UNUSED_RESULT
PMC * Parrot_set_new_context(PARROT_INTERP,
@@ -228,6 +232,9 @@
#define ASSERT_ARGS_Parrot_alloc_context __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(number_regs_used)
+#define ASSERT_ARGS_Parrot_pcc_calculate_context_size \
+ __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(number_regs_used)
#define ASSERT_ARGS_Parrot_set_new_context __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(number_regs_used)
Modified: trunk/include/parrot/sub.h
==============================================================================
--- trunk/include/parrot/sub.h Sun Sep 6 11:35:37 2009 (r41061)
+++ trunk/include/parrot/sub.h Sun Sep 6 11:56:58 2009 (r41062)
@@ -232,15 +232,6 @@
PARROT_CAN_RETURN_NULL
PARROT_WARN_UNUSED_RESULT
-PMC* Parrot_find_dynamic_pad(PARROT_INTERP,
- ARGIN(STRING *lex_name),
- ARGIN(PMC *ctx))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- __attribute__nonnull__(3);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
PMC* Parrot_find_pad(PARROT_INTERP,
ARGIN(STRING *lex_name),
ARGIN(PMC *ctx))
Modified: trunk/src/gc/alloc_register.c
==============================================================================
--- trunk/src/gc/alloc_register.c Sun Sep 6 11:35:37 2009 (r41061)
+++ trunk/src/gc/alloc_register.c Sun Sep 6 11:56:58 2009 (r41062)
@@ -294,6 +294,25 @@
CURRENT_CONTEXT(interp) = old;
}
+/*
+
+=item C<size_t Parrot_pcc_calculate_context_size(PARROT_INTERP, const UINTVAL
+*number_regs_used)>
+
+Calculate size of Context.
+
+=cut
+
+*/
+size_t
+Parrot_pcc_calculate_context_size(SHIM_INTERP, ARGIN(const UINTVAL *number_regs_used))
+{
+ return ALIGNED_CTX_SIZE + ROUND_ALLOC_SIZE(
+ sizeof (INTVAL) * number_regs_used[REGNO_INT] +
+ sizeof (FLOATVAL) * number_regs_used[REGNO_NUM] +
+ sizeof (STRING *) * number_regs_used[REGNO_STR] +
+ sizeof (PMC *) * number_regs_used[REGNO_PMC]);
+}
/*
@@ -330,7 +349,12 @@
const size_t reg_alloc = ROUND_ALLOC_SIZE(all_regs_size);
const size_t to_alloc = reg_alloc + ALIGNED_CTX_SIZE;
- ctx = (Parrot_Context *)mem_sys_allocate(to_alloc);
+
+#ifdef GC_USE_FIXED_SIZE_ALLOCATOR
+ ctx = (Parrot_Context *)Parrot_gc_allocate_fixed_size_storage(interp, to_alloc);
+#else
+ ctx = (Parrot_Context *)mem_sys_allocate(to_alloc);
+#endif
ctx->n_regs_used[REGNO_INT] = number_regs_used[REGNO_INT];
ctx->n_regs_used[REGNO_NUM] = number_regs_used[REGNO_NUM];
Modified: trunk/src/pmc/context.pmc
==============================================================================
--- trunk/src/pmc/context.pmc Sun Sep 6 11:35:37 2009 (r41061)
+++ trunk/src/pmc/context.pmc Sun Sep 6 11:56:58 2009 (r41062)
@@ -126,7 +126,18 @@
VTABLE void destroy() {
/* We own this pointer */
Parrot_Context * const ctx = PMC_data_typed(SELF, Parrot_Context*);
+
+ if (!ctx)
+ return;
+
+#ifdef GC_USE_FIXED_SIZE_ALLOCATOR
+ Parrot_gc_free_fixed_size_storage(interp,
+ Parrot_pcc_calculate_context_size(INTERP, ctx->n_regs_used),
+ ctx);
+#else
mem_sys_free(ctx);
+#endif
+ PMC_data(SELF) = NULL;
}
/*
More information about the parrot-commits
mailing list