[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