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

Reply via email to