[pypy-svn] r66902 - in pypy/branch/pyjitpl5/pypy/jit: backend backend/llgraph backend/llvm backend/x86 metainterp
fijal at codespeak.net
fijal at codespeak.net
Tue Aug 18 15:53:01 CEST 2009
Author: fijal
Date: Tue Aug 18 15:52:59 2009
New Revision: 66902
Modified:
pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py
pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py
pypy/branch/pyjitpl5/pypy/jit/backend/llvm/runner.py
pypy/branch/pyjitpl5/pypy/jit/backend/model.py
pypy/branch/pyjitpl5/pypy/jit/backend/x86/runner.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
Log:
(pedronis, arigo, fijal) Kill overflow flag interface on the CPU
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/llimpl.py Tue Aug 18 15:52:59 2009
@@ -20,6 +20,7 @@
from pypy.jit.backend.llgraph import symbolic
from pypy.rlib.objectmodel import ComputedIntSymbolic
+from pypy.rlib.rarithmetic import ovfcheck
import py
from pypy.tool.ansi_print import ansi_log
@@ -574,21 +575,50 @@
return res
def op_guard_no_overflow(self, _):
- global _overflow_flag
- flag = _overflow_flag
- assert flag != 'unset'
- _overflow_flag = 'unset'
+ flag = self.overflow_flag
+ del self.overflow_flag
if flag:
raise GuardFailed
def op_guard_overflow(self, _):
- global _overflow_flag
- flag = _overflow_flag
- assert flag != 'unset'
- _overflow_flag = 'unset'
+ flag = self.overflow_flag
+ del self.overflow_flag
if not flag:
raise GuardFailed
+ def op_int_add_ovf(self, _, x, y):
+ try:
+ z = ovfcheck(x + y)
+ except OverflowError:
+ ovf = True
+ z = 0
+ else:
+ ovf = False
+ self.overflow_flag = ovf
+ return z
+
+ def op_int_sub_ovf(self, _, x, y):
+ try:
+ z = ovfcheck(x - y)
+ except OverflowError:
+ ovf = True
+ z = 0
+ else:
+ ovf = False
+ self.overflow_flag = ovf
+ return z
+
+ def op_int_mul_ovf(self, _, x, y):
+ try:
+ z = ovfcheck(x * y)
+ except OverflowError:
+ ovf = True
+ z = 0
+ else:
+ ovf = False
+ self.overflow_flag = ovf
+ return z
+
# ----------
# delegating to the builtins do_xxx() (done automatically for simple cases)
@@ -927,17 +957,6 @@
return lltype.cast_opaque_ptr(llmemory.GCREF,
_get_error(ZeroDivisionError).args[1])
-_overflow_flag = 'unset'
-
-def get_overflow_flag():
- if _overflow_flag == 'unset':
- return False
- return _overflow_flag
-
-def set_overflow_flag(flag):
- global _overflow_flag
- _overflow_flag = flag
-
class MemoCast(object):
def __init__(self):
self.addresses = [llmemory.NULL]
@@ -1301,5 +1320,3 @@
setannotation(do_call_int, annmodel.SomeInteger())
setannotation(do_call_ptr, annmodel.SomePtr(llmemory.GCREF))
setannotation(do_call_void, annmodel.s_None)
-setannotation(get_overflow_flag, annmodel.s_Bool)
-setannotation(set_overflow_flag, annmodel.s_None)
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/llgraph/runner.py Tue Aug 18 15:52:59 2009
@@ -221,12 +221,6 @@
return (self.cast_adr_to_int(llimpl.get_zero_division_error()),
llimpl.get_zero_division_error_value())
- def get_overflow_flag(self):
- return llimpl.get_overflow_flag()
-
- def set_overflow_flag(self, flag):
- llimpl.set_overflow_flag(flag)
-
@staticmethod
def sizeof(S):
return Descr(symbolic.get_size(S))
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/llvm/runner.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/llvm/runner.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/llvm/runner.py Tue Aug 18 15:52:59 2009
@@ -342,6 +342,8 @@
self.backup_exc_type[0] = 0
self.backup_exc_value[0] = lltype.nullptr(llmemory.GCREF.TO)
+ # XXX wrong, but untested
+
def set_overflow_error(self):
self.backup_exc_type[0] = self._ovf_error_type
self.backup_exc_value[0] = self._ovf_error_value
@@ -350,14 +352,6 @@
self.backup_exc_type[0] = self._zer_error_type
self.backup_exc_value[0] = self._zer_error_value
- _overflow_flag = False
-
- def get_overflow_flag(self):
- return self._overflow_flag
-
- def set_overflow_flag(self, flag):
- self._overflow_flag = flag
-
@staticmethod
def cast_adr_to_int(x):
return rffi.cast(lltype.Signed, x)
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/model.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/model.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/model.py Tue Aug 18 15:52:59 2009
@@ -1,6 +1,4 @@
class AbstractCPU(object):
- _overflow_flag = False
-
def set_class_sizes(self, class_sizes):
self.class_sizes = class_sizes
@@ -61,12 +59,6 @@
def get_zero_division_error(self):
raise NotImplementedError
- def get_overflow_flag(self):
- return self._overflow_flag
-
- def set_overflow_flag(self, flag):
- self._overflow_flag = flag
-
@staticmethod
def sizeof(S):
raise NotImplementedError
Modified: pypy/branch/pyjitpl5/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/backend/x86/runner.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/backend/x86/runner.py Tue Aug 18 15:52:59 2009
@@ -154,14 +154,6 @@
self.cast_adr_to_int(self.assembler._zer_error_inst))
return zer_vtable, zer_inst
- _overflow_flag = False
-
- def get_overflow_flag(self):
- return self._overflow_flag
-
- def set_overflow_flag(self, flag):
- self._overflow_flag = flag
-
def compile_operations(self, tree, bridge=None):
old_loop = tree._x86_compiled
if old_loop:
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/executor.py Tue Aug 18 15:52:59 2009
@@ -193,7 +193,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_sub_ovf(cpu, args, descr=None):
@@ -206,7 +206,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
def do_int_mul_ovf(cpu, args, descr=None):
@@ -219,7 +219,7 @@
z = 0
else:
ovf = False
- cpu.set_overflow_flag(ovf)
+ cpu._overflow_flag = ovf
return BoxInt(z)
# ____________________________________________________________
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py Tue Aug 18 15:52:59 2009
@@ -1548,8 +1548,8 @@
def handle_overflow_error(self):
frame = self.framestack[-1]
- if self.cpu.get_overflow_flag():
- self.cpu.set_overflow_flag(False)
+ if self.cpu._overflow_flag:
+ self.cpu._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