[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