After some discussion on #parrot about the slowness of the gcdebug
core with HLL programs, I've done this proof of concept patch: it
skips the gc run the first n opcodes, with n defined by setting an
environment variable.
Example of usage:
PARROT_GCDEBUG_SKIP=85000 ../../parrot --runcore=gcdebug perl6.pbc testprog.p6
--
Salu2
Index: src/runops_cores.c
===================================================================
--- src/runops_cores.c (revisión: 28017)
+++ src/runops_cores.c (copia de trabajo)
@@ -242,13 +242,28 @@
opcode_t *
runops_gc_debug_core(PARROT_INTERP, ARGIN(opcode_t *pc))
{
+ static int flag = 0;
+ static unsigned long counter= 0;
+
+ if (! flag) {
+ flag= 1;
+ char * str = getenv("PARROT_GCDEBUG_SKIP");
+ if (str)
+ counter = strtoul(str, 0, 0);
+ }
+
while (pc) {
if (pc < code_start || pc >= code_end)
real_exception(interp, NULL, 1,
"attempt to access code outside of current code segment");
- Parrot_do_dod_run(interp, 0);
- CONTEXT(interp)->current_pc = pc;
+ if (counter == 0) {
+ Parrot_do_dod_run(interp, 0);
+ CONTEXT(interp)->current_pc = pc;
+ }
+ else {
+ --counter;
+ }
DO_OP(pc, interp);
}