[pypy-commit] pypy heapcache-refactor: Allow storing negative numbers in .position_and_flags

arigo pypy.commits at gmail.com
Fri Mar 18 12:53:46 EDT 2016


Author: Armin Rigo <arigo at tunes.org>
Branch: heapcache-refactor
Changeset: r83132:1994d682f8b3
Date: 2016-03-18 17:52 +0100
http://bitbucket.org/pypy/pypy/changeset/1994d682f8b3/

Log:	Allow storing negative numbers in .position_and_flags

diff --git a/rpython/jit/metainterp/heapcache.py b/rpython/jit/metainterp/heapcache.py
--- a/rpython/jit/metainterp/heapcache.py
+++ b/rpython/jit/metainterp/heapcache.py
@@ -1,6 +1,5 @@
 from rpython.jit.metainterp.history import Const, ConstInt
 from rpython.jit.metainterp.history import FrontendOp, RefFrontendOp
-from rpython.jit.metainterp.history import FO_REPLACED_WITH_CONST
 from rpython.jit.metainterp.resoperation import rop, OpHelpers
 from rpython.jit.metainterp.executor import constant_from_op
 from rpython.rlib.rarithmetic import r_uint32, r_uint
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -642,8 +642,8 @@
 # ____________________________________________________________
 
 
-FO_POSITION_MASK       = r_uint(0x7FFFFFFF)
-FO_REPLACED_WITH_CONST = r_uint(0x80000000)
+FO_REPLACED_WITH_CONST = r_uint(1)
+FO_POSITION_SHIFT      = 1
 
 
 class FrontendOp(AbstractResOp):
@@ -651,11 +651,10 @@
     _attrs_ = ('position_and_flags',)
 
     def __init__(self, pos):
-        assert pos >= 0
-        self.position_and_flags = r_uint(pos)
+        self.position_and_flags = r_uint(pos << FO_POSITION_SHIFT)
 
     def get_position(self):
-        return intmask(self.position_and_flags & FO_POSITION_MASK)
+        return intmask(r_uint32(self.position_and_flags)) >> FO_POSITION_SHIFT
 
     def is_replaced_with_const(self):
         return bool(self.position_and_flags & FO_REPLACED_WITH_CONST)


More information about the pypy-commit mailing list