[pypy-svn] r71696 - in pypy/branch/cleanup-warnings/pypy/jit: backend backend/llsupport backend/test metainterp
fijal at codespeak.net
fijal at codespeak.net
Wed Mar 3 04:22:04 CET 2010
Author: fijal
Date: Wed Mar 3 04:22:03 2010
New Revision: 71696
Modified:
pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py
pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py
Log:
Move mutable stuff into CPUMutableContainer and _freeze_ the CPU. Should
speed up stuff a bit (maybe) as well
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/llsupport/llmodel.py Wed Mar 3 04:22:03 2010
@@ -14,6 +14,9 @@
from pypy.jit.backend.llsupport.descr import get_array_descr, BaseArrayDescr
from pypy.jit.backend.llsupport.descr import get_call_descr, BaseCallDescr
+class CPUMutableContainer(object):
+ _overflow_flag = False
+
class AbstractLLCPU(AbstractCPU):
from pypy.jit.metainterp.typesystem import llhelper as ts
@@ -21,6 +24,7 @@
def __init__(self, rtyper, stats, opts, translate_support_code=False,
gcdescr=None):
+ self.mutable = CPUMutableContainer()
assert type(opts) is not bool
self.opts = opts
@@ -52,12 +56,22 @@
self._setup_on_leave_jitted_translated()
else:
self._setup_on_leave_jitted_untranslated()
+ self.class_sizes = {}
+
+ def set_overflow_flag(self, val):
+ self.mutable._overflow_flag = val
+
+ def get_overflow_error(self):
+ return self.mutable._overflow_flag
+
+ def _freeze_(self):
+ return True
def setup(self):
pass
def set_class_sizes(self, class_sizes):
- self.class_sizes = class_sizes
+ self.class_sizes.update(class_sizes)
def _setup_prebuilt_error(self, prefix, Class):
if self.rtyper is not None: # normal case
@@ -107,8 +121,8 @@
v_i = _exception_emulator[1]
_exception_emulator[0] = 0
_exception_emulator[1] = 0
- self.saved_exception = tp_i
- self.saved_exc_value = self._cast_int_to_gcref(v_i)
+ self.mutable.saved_exception = tp_i
+ self.mutable.saved_exc_value = self._cast_int_to_gcref(v_i)
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -135,8 +149,8 @@
# from now on, the state is again consistent -- no more RPython
# exception is set. The following code produces a write barrier
# in the assignment to self.saved_exc_value, as needed.
- self.saved_exception = exception
- self.saved_exc_value = exc_value
+ self.mutable.saved_exception = exception
+ self.mutable.saved_exc_value = exc_value
self.pos_exception = pos_exception
self.pos_exc_value = pos_exc_value
@@ -174,14 +188,14 @@
return rffi.cast(lltype.Signed, f)
def get_exception(self):
- return self.saved_exception
+ return self.mutable.saved_exception
def get_exc_value(self):
- return self.saved_exc_value
+ return self.mutable.saved_exc_value
def clear_exception(self):
- self.saved_exception = 0
- self.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
+ self.mutable.saved_exception = 0
+ self.mutable.saved_exc_value = lltype.nullptr(llmemory.GCREF.TO)
# ------------------- helpers and descriptions --------------------
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/model.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/model.py Wed Mar 3 04:22:03 2010
@@ -10,6 +10,8 @@
CallDescrClass = None # a base class for all CallDescrs
+ _overflow_flag = False
+
def __init__(self):
self.fail_descr_list = []
@@ -115,6 +117,12 @@
def get_zero_division_error(self):
raise NotImplementedError
+ def get_overflow_flag(self):
+ return self._overflow_flag
+
+ def set_overflow_flag(self, val):
+ self._overflow_flag = val
+
@staticmethod
def sizeof(S):
raise NotImplementedError
Modified: pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/backend/test/test_random.py Wed Mar 3 04:22:03 2010
@@ -264,8 +264,8 @@
fail_subset = builder.subset_of_intvars(r)
original_intvars = builder.intvars[:]
super(AbstractOvfOperation, self).produce_into(builder, r)
- if builder.cpu._overflow_flag: # overflow detected
- del builder.cpu._overflow_flag
+ if builder.cpu.get_overflow_flag(): # overflow detected
+ builder.cpu.set_overflow_flag(False)
op = ResOperation(rop.GUARD_OVERFLOW, [], None)
# the overflowed result should not be used any more, but can
# be used on the failure path: recompute fail_subset including
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/executor.py Wed Mar 3 04:22:03 2010
@@ -145,7 +145,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
def do_int_sub_ovf(cpu, box1, box2):
@@ -158,7 +158,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
def do_int_mul_ovf(cpu, box1, box2):
@@ -171,7 +171,7 @@
z = 0
else:
ovf = False
- cpu._overflow_flag = ovf
+ cpu.set_overflow_flag(ovf)
return BoxInt(z)
# ----------
Modified: pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/cleanup-warnings/pypy/jit/metainterp/pyjitpl.py Wed Mar 3 04:22:03 2010
@@ -1899,8 +1899,8 @@
def handle_overflow_error(self):
frame = self.framestack[-1]
- if self.cpu._overflow_flag:
- self.cpu._overflow_flag = False
+ if self.cpu.get_overflow_flag():
+ self.cpu.set_overflow_flag(False)
frame.generate_guard(frame.pc, rop.GUARD_OVERFLOW, None, [])
return self.raise_overflow_error()
else:
More information about the Pypy-commit
mailing list