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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit