[pypy-svn] r74727 - pypy/branch/blackhole-improvement/pypy/jit/metainterp

arigo at codespeak.net arigo at codespeak.net
Tue May 25 12:27:50 CEST 2010


Author: arigo
Date: Tue May 25 12:27:49 2010
New Revision: 74727

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
Log:
Fix pyjitpl for r74726.


Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py	Tue May 25 12:27:49 2010
@@ -114,32 +114,47 @@
             elif argcode == 'f': self.registers_f[index] = None
             self._result_argcode = 'v'     # done
         #
-        self._tmp_count = 0
-        count = self.jitcode.enumerate_live_vars(
-            self.pc, MIFrame._count_boxes, self,
-            self.registers_i, self.registers_r, self.registers_f)
-        #
-        self._tmp_env = [None] * self._tmp_count
-        self._tmp_count = 0
-        self.jitcode.enumerate_live_vars(
-            self.pc, MIFrame._store_in_env, self,
-            self.registers_i, self.registers_r, self.registers_f)
-        #
-        env = self._tmp_env
-        self._tmp_env = None
+        from pypy.jit.codewriter.jitcode import get_register_count_i
+        from pypy.jit.codewriter.jitcode import get_register_count_r
+        from pypy.jit.codewriter.jitcode import get_register_count_f
+        from pypy.jit.codewriter.jitcode import get_register_index_i
+        from pypy.jit.codewriter.jitcode import get_register_index_r
+        from pypy.jit.codewriter.jitcode import get_register_index_f
+        info = self.jitcode.get_live_vars_info(self.pc)
+        # first count how many boxes there are, skipping None
+        total = 0
+        for index in range(get_register_count_i(info)):
+            if self.registers_i[get_register_index_i(info, index)] is not None:
+                total += 1
+        for index in range(get_register_count_r(info)):
+            if self.registers_r[get_register_index_r(info, index)] is not None:
+                total += 1
+        for index in range(get_register_count_f(info)):
+            if self.registers_f[get_register_index_f(info, index)] is not None:
+                total += 1
+        # allocate a list of the correct size
+        env = [None] * total
         make_sure_not_resized(env)
+        # fill it now
+        count = 0
+        for index in range(get_register_count_i(info)):
+            box = self.registers_i[get_register_index_i(info, index)]
+            if box is not None:
+                env[count] = box
+                count += 1
+        for index in range(get_register_count_r(info)):
+            box = self.registers_r[get_register_index_r(info, index)]
+            if box is not None:
+                env[count] = box
+                count += 1
+        for index in range(get_register_count_f(info)):
+            box = self.registers_f[get_register_index_f(info, index)]
+            if box is not None:
+                env[count] = box
+                count += 1
+        assert count == total
         return env
 
-    def _count_boxes(self, box):
-        if box is not None:       # just used to count how many boxes there are
-            self._tmp_count += 1
-
-    def _store_in_env(self, box):
-        if box is not None:
-            index = self._tmp_count
-            self._tmp_env[index] = box
-            self._tmp_count = index + 1
-
     def replace_active_box_in_frame(self, oldbox, newbox):
         if isinstance(oldbox, history.BoxInt):
             count = self.jitcode.num_regs_i()



More information about the Pypy-commit mailing list