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