Author: fijal
Branch: heapcache-refactor
Changeset: r83150:61eeb63802a2
Date: 2016-03-18 22:44 +0200
http://bitbucket.org/pypy/pypy/changeset/61eeb63802a2/

Log:    merge (but broken)

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
@@ -155,6 +154,9 @@
         return ref_frontend_op._get_heapc_flags() >= 
self.likely_virtual_version
 
     def update_version(self, ref_frontend_op):
+        """Ensure the version of 'ref_frontend_op' is current.  If not,
+        it will update 'ref_frontend_op' (removing most flags currently set).
+        """
         if not self.test_head_version(ref_frontend_op):
             f = self.head_version
             if (self.test_likely_virtual_version(ref_frontend_op) and
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
@@ -594,8 +594,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):
@@ -603,11 +603,15 @@
     _attrs_ = ('position_and_flags',)
 
     def __init__(self, pos):
-        assert pos >= 0
-        self.position_and_flags = r_uint(pos)
+        # p is the 32-bit position shifted left by one (might be negative,
+        # but casted to the 32-bit UINT type)
+        p = rffi.cast(rffi.UINT, pos << FO_POSITION_SHIFT)
+        self.position_and_flags = r_uint(p)    # zero-extended to a full word
 
     def get_position(self):
-        return intmask(self.position_and_flags & FO_POSITION_MASK)
+        # p is the signed 32-bit position, from self.position_and_flags
+        p = rffi.cast(rffi.INT, self.position_and_flags)
+        return intmask(p) >> FO_POSITION_SHIFT
 
     def set_position(self, new_pos):
         flags = self.position_and_flags & (~FO_POSITION_MASK)
diff --git a/rpython/jit/metainterp/test/test_history.py 
b/rpython/jit/metainterp/test/test_history.py
--- a/rpython/jit/metainterp/test/test_history.py
+++ b/rpython/jit/metainterp/test/test_history.py
@@ -62,6 +62,12 @@
     assert c5.nonnull()
     assert c6.nonnull()
 
+def test_frontendop():
+    f = FrontendOp(42)
+    assert f.get_position() == 42
+    f = FrontendOp(-56)
+    assert f.get_position() == -56
+
 class TestZTranslated(StandaloneTests):
     def test_ztranslated_same_constant_float(self):
         def fn(args):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to