Author: leo
Date: Tue Oct 25 02:42:23 2005
New Revision: 9553
Modified:
trunk/ops/stack.ops
Log:
Variable-sized reg frames 12 - saveall,restoreall
* these 2 opcodes need reloading of the cached base pointer in
predereferenced and JIT runcores
* put in a slow albeit working solution
Modified: trunk/ops/stack.ops
==============================================================================
--- trunk/ops/stack.ops (original)
+++ trunk/ops/stack.ops Tue Oct 25 02:42:23 2005
@@ -38,12 +38,18 @@ Restore all the registers from the regis
inline op saveall() :base_core {
Parrot_push_regs(interpreter);
- goto NEXT();
+ /* these 2 opcodes change the register base pointer
+ * restart NEXT() reloads cached base pointers, and works with
+ * arbitrary branch opcodes too. While it's a bit of overkill,
+ * we don't have an opcode annotation to reload just the base pointers
+ * TODO OPTIMIZE later
+ */
+ restart NEXT();
}
inline op restoreall() :base_core {
Parrot_pop_regs(interpreter);
- goto NEXT();
+ restart NEXT();
}
=back