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

arigo at codespeak.net arigo at codespeak.net
Wed May 19 16:18:11 CEST 2010


Author: arigo
Date: Wed May 19 16:18:10 2010
New Revision: 74576

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
   pypy/branch/blackhole-improvement/pypy/jit/metainterp/pyjitpl.py
Log:
In-progress.


Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/blackhole.py	Wed May 19 16:18:10 2010
@@ -146,6 +146,9 @@
                         if   argtype == 'I': reg = self.registers_i[index]
                         elif argtype == 'R': reg = self.registers_r[index]
                         elif argtype == 'F': reg = self.registers_f[index]
+                        if not we_are_translated():
+                            assert not isinstance(reg, MissingValue), (
+                                name, self.jitcode, position)
                         value.append(reg)
                     make_sure_not_resized(value)
                     position += length
@@ -165,6 +168,9 @@
                     position += 2
                 else:
                     raise AssertionError("bad argtype: %r" % (argtype,))
+                if not we_are_translated():
+                    assert not isinstance(value, MissingValue), (
+                        name, self.jitcode, position)
                 args = args + (value,)
 
             if verbose and not we_are_translated():
@@ -979,17 +985,19 @@
             pass
         elif opnum == rop.GUARD_NO_EXCEPTION or opnum == rop.GUARD_EXCEPTION:
             pass
+        elif opnum == rop.GUARD_CLASS:
+            pass
         else:
             raise NotImplementedError(opnum)
 
     # connect the return of values from the called frame to the
     # 'xxx_call_yyy' instructions from the caller frame
     def _setup_return_value_i(self, result):
-        self.registers_i[ord(self.jitcode.code[position-1])] = result
+        self.registers_i[ord(self.jitcode.code[self.position-1])] = result
     def _setup_return_value_r(self, result):
-        self.registers_r[ord(self.jitcode.code[position-1])] = result
+        self.registers_r[ord(self.jitcode.code[self.position-1])] = result
     def _setup_return_value_f(self, result):
-        self.registers_f[ord(self.jitcode.code[position-1])] = result
+        self.registers_f[ord(self.jitcode.code[self.position-1])] = result
 
     def _exit_frame_with_exception(self, e):
         xxx

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	Wed May 19 16:18:10 2010
@@ -744,7 +744,7 @@
     opimpl_ref_guard_value = _opimpl_guard_value
     opimpl_float_guard_value = _opimpl_guard_value
 
-    @arguments("box")
+    @arguments("box", "force_initial_pc")
     def opimpl_guard_class(self, box):
         clsbox = self.cls_of_box(box)
         self.generate_guard(rop.GUARD_CLASS, box, [clsbox])
@@ -2005,6 +2005,7 @@
         assert position >= 0
         args = ()
         next_argcode = 0
+        force_initial_pc = False
         code = self.bytecode
         position += 1
         for argtype in argtypes:
@@ -2068,13 +2069,17 @@
                                            argcodes[next_argcode + 2])
                 next_argcode = next_argcode + 3
                 position = position3 + 1 + length3
+            elif argtype == "force_initial_pc":
+                force_initial_pc = True
+                continue
             else:
                 raise AssertionError("bad argtype: %r" % (argtype,))
             args += (value,)
         #
         num_return_args = len(argcodes) - next_argcode
         assert num_return_args == 0 or num_return_args == 1
-        self.pc = position + num_return_args
+        if not force_initial_pc:
+            self.pc = position + num_return_args
         #
         if not we_are_translated():
             print '\tpyjitpl: %s(%s)' % (name, ', '.join(map(repr, args))),
@@ -2095,6 +2100,8 @@
         else:
             resultbox = unboundmethod(self, *args)
         #
+        if force_initial_pc:
+            self.pc = position + num_return_args
         if resultbox is not None:
             self.make_result_of_lastop(resultbox)
     #



More information about the Pypy-commit mailing list