[pypy-commit] pypy s390x-backend: merged default
plan_rich
pypy.commits at gmail.com
Mon Dec 28 08:05:45 EST 2015
Author: Richard Plangger <planrichi at gmail.com>
Branch: s390x-backend
Changeset: r81456:18c213bb83f6
Date: 2015-12-28 14:04 +0100
http://bitbucket.org/pypy/pypy/changeset/18c213bb83f6/
Log: merged default
diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
@@ -29,4 +29,4 @@
release/
!pypy/tool/release/
rpython/_cache/
-__pycache__/
+.cache/
diff --git a/lib_pypy/cffi.egg-info/PKG-INFO b/lib_pypy/cffi.egg-info/PKG-INFO
--- a/lib_pypy/cffi.egg-info/PKG-INFO
+++ b/lib_pypy/cffi.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: cffi
-Version: 1.4.1
+Version: 1.4.2
Summary: Foreign Function Interface for Python calling C code.
Home-page: http://cffi.readthedocs.org
Author: Armin Rigo, Maciej Fijalkowski
diff --git a/lib_pypy/cffi/__init__.py b/lib_pypy/cffi/__init__.py
--- a/lib_pypy/cffi/__init__.py
+++ b/lib_pypy/cffi/__init__.py
@@ -4,8 +4,8 @@
from .api import FFI, CDefError, FFIError
from .ffiplatform import VerificationError, VerificationMissing
-__version__ = "1.4.1"
-__version_info__ = (1, 4, 1)
+__version__ = "1.4.2"
+__version_info__ = (1, 4, 2)
# The verifier module file names are based on the CRC32 of a string that
# contains the following version number. It may be older than __version__
diff --git a/pypy/doc/whatsnew-head.rst b/pypy/doc/whatsnew-head.rst
--- a/pypy/doc/whatsnew-head.rst
+++ b/pypy/doc/whatsnew-head.rst
@@ -44,6 +44,9 @@
.. branch: fix-setslice-can-resize
+Make rlist's ll_listsetslice() able to resize the target list to help
+simplify objspace/std/listobject.py. Was issue #2196.
+
.. branch: anntype2
A somewhat random bunch of changes and fixes following up on branch 'anntype'. Highlights:
@@ -83,10 +86,18 @@
Trivial cleanups in flowspace.operation : fix comment & duplicated method
.. branch: test-AF_NETLINK
+
+Add a test for pre-existing AF_NETLINK support. Was part of issue #1942.
+
.. branch: small-cleanups-misc
+
+Trivial misc cleanups: typo, whitespace, obsolete comments
+
.. branch: cpyext-slotdefs
.. branch: fix-missing-canraise
+.. branch: whatsnew
.. branch: fix-2211
-Fix the cryptic exception message when attempting to use extended slicing in rpython
+Fix the cryptic exception message when attempting to use extended slicing
+in rpython. Was issue #2211.
diff --git a/pypy/module/cpyext/slotdefs.py b/pypy/module/cpyext/slotdefs.py
--- a/pypy/module/cpyext/slotdefs.py
+++ b/pypy/module/cpyext/slotdefs.py
@@ -4,7 +4,8 @@
from rpython.rtyper.lltypesystem import rffi, lltype
from pypy.module.cpyext.api import (
- cpython_api, generic_cpy_call, PyObject, Py_ssize_t, Py_TPFLAGS_CHECKTYPES)
+ cpython_api, generic_cpy_call, PyObject, Py_ssize_t, Py_TPFLAGS_CHECKTYPES,
+ CANNOT_FAIL)
from pypy.module.cpyext.typeobjectdefs import (
unaryfunc, wrapperfunc, ternaryfunc, PyTypeObjectPtr, binaryfunc,
getattrfunc, getattrofunc, setattrofunc, lenfunc, ssizeargfunc, inquiry,
@@ -380,6 +381,17 @@
space.call_function(delattr_fn, w_self, w_name)
return 0
api_func = slot_tp_setattro.api_func
+ elif name == 'tp_getattro':
+ getattr_fn = w_type.getdictvalue(space, '__getattribute__')
+ if getattr_fn is None:
+ return
+
+ @cpython_api([PyObject, PyObject], PyObject,
+ error=CANNOT_FAIL, external=True)
+ @func_renamer("cpyext_tp_getattro_%s" % (typedef.name,))
+ def slot_tp_getattro(space, w_self, w_name):
+ return space.call_function(getattr_fn, w_self, w_name)
+ api_func = slot_tp_getattro.api_func
else:
return
diff --git a/pypy/module/cpyext/test/test_typeobject.py b/pypy/module/cpyext/test/test_typeobject.py
--- a/pypy/module/cpyext/test/test_typeobject.py
+++ b/pypy/module/cpyext/test/test_typeobject.py
@@ -385,12 +385,53 @@
PyErr_SetString(PyExc_ValueError, "recursive tp_setattro");
return NULL;
}
+ if (!args->ob_type->tp_getattro)
+ {
+ PyErr_SetString(PyExc_ValueError, "missing tp_getattro");
+ return NULL;
+ }
+ if (args->ob_type->tp_getattro ==
+ args->ob_type->tp_base->tp_getattro)
+ {
+ PyErr_SetString(PyExc_ValueError, "recursive tp_getattro");
+ return NULL;
+ }
Py_RETURN_TRUE;
'''
)
])
assert module.test_type(type(None))
+ def test_tp_getattro(self):
+ module = self.import_extension('foo', [
+ ("test_tp_getattro", "METH_VARARGS",
+ '''
+ PyObject *obj = PyTuple_GET_ITEM(args, 0);
+ PyIntObject *value = PyTuple_GET_ITEM(args, 1);
+ if (!obj->ob_type->tp_getattro)
+ {
+ PyErr_SetString(PyExc_ValueError, "missing tp_getattro");
+ return NULL;
+ }
+ PyObject *name = PyString_FromString("attr1");
+ PyIntObject *attr1 = obj->ob_type->tp_getattro(obj, name);
+ if (attr1->ob_ival != value->ob_ival)
+ {
+ PyErr_SetString(PyExc_ValueError,
+ "tp_getattro returned wrong value");
+ return NULL;
+ }
+ Py_DECREF(name);
+ Py_DECREF(attr1);
+ Py_RETURN_TRUE;
+ '''
+ )
+ ])
+ class C:
+ def __init__(self):
+ self.attr1 = 123
+ assert module.test_tp_getattro(C(), 123)
+
def test_nb_int(self):
module = self.import_extension('foo', [
("nb_int", "METH_O",
diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py
--- a/pypy/module/cpyext/typeobject.py
+++ b/pypy/module/cpyext/typeobject.py
@@ -582,6 +582,8 @@
pto.c_tp_free = base.c_tp_free
if not pto.c_tp_setattro:
pto.c_tp_setattro = base.c_tp_setattro
+ if not pto.c_tp_getattro:
+ pto.c_tp_getattro = base.c_tp_getattro
finally:
Py_DecRef(space, base_pyo)
@@ -651,6 +653,12 @@
PyObject_GenericSetAttr.api_func.functype,
PyObject_GenericSetAttr.api_func.get_wrapper(space))
+ if not pto.c_tp_getattro:
+ from pypy.module.cpyext.object import PyObject_GenericGetAttr
+ pto.c_tp_getattro = llhelper(
+ PyObject_GenericGetAttr.api_func.functype,
+ PyObject_GenericGetAttr.api_func.get_wrapper(space))
+
if w_obj.is_cpytype():
Py_DecRef(space, pto.c_tp_dict)
w_dict = w_obj.getdict(space)
diff --git a/rpython/jit/backend/arm/regalloc.py b/rpython/jit/backend/arm/regalloc.py
--- a/rpython/jit/backend/arm/regalloc.py
+++ b/rpython/jit/backend/arm/regalloc.py
@@ -804,7 +804,7 @@
base_loc = self.make_sure_var_in_reg(boxes[0], boxes)
ofs = boxes[1].getint()
value_loc = self.make_sure_var_in_reg(boxes[2], boxes)
- size = abs(boxes[3].getint())
+ size = boxes[3].getint()
ofs_size = default_imm_size if size < 8 else VMEM_imm_size
if check_imm_arg(ofs, size=ofs_size):
ofs_loc = imm(ofs)
@@ -849,7 +849,7 @@
index_loc = self.make_sure_var_in_reg(boxes[1], boxes)
assert boxes[3].getint() == 1 # scale
ofs = boxes[4].getint()
- size = abs(boxes[5].getint())
+ size = boxes[5].getint()
assert check_imm_arg(ofs)
return [value_loc, base_loc, index_loc, imm(size), imm(ofs)]
diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -126,11 +126,11 @@
def emit_gc_store_or_indexed(self, op, ptr_box, index_box, value_box,
itemsize, factor, offset):
factor, offset, index_box = \
- self._emit_mul_add_if_factor_offset_not_supported(index_box,
+ self._emit_mul_if_factor_offset_not_supported(index_box,
factor, offset)
#
- if factor == 1 and offset == 0:
- args = [ptr_box, index_box, value_box, ConstInt(itemsize)]
+ if index_box is None:
+ args = [ptr_box, ConstInt(offset), value_box, ConstInt(itemsize)]
newload = ResOperation(rop.GC_STORE, args)
else:
args = [ptr_box, index_box, value_box, ConstInt(factor),
@@ -153,18 +153,15 @@
index_box = op.getarg(1)
self.emit_gc_load_or_indexed(op, ptr_box, index_box, itemsize, 1, ofs, sign)
- def _emit_mul_add_if_factor_offset_not_supported(self, index_box, factor, offset):
- orig_factor = factor
- # factor
- must_manually_load_const = False # offset != 0 and not self.cpu.load_constant_offset
- if factor != 1 and (factor not in self.cpu.load_supported_factors or \
- (not index_box.is_constant() and must_manually_load_const)):
- # enter here if the factor is supported by the cpu
- # OR the index is not constant and a new resop must be emitted
- # to add the offset
- if isinstance(index_box, ConstInt):
- index_box = ConstInt(index_box.value * factor)
- else:
+ def _emit_mul_if_factor_offset_not_supported(self, index_box,
+ factor, offset):
+ # Returns (factor, offset, index_box) where index_box is either
+ # a non-constant BoxInt or None.
+ if isinstance(index_box, ConstInt):
+ return 1, index_box.value * factor + offset, None
+ else:
+ if factor != 1 and factor not in self.cpu.load_supported_factors:
+ # the factor is supported by the cpu
# x & (x - 1) == 0 is a quick test for power of 2
assert factor > 0
if (factor & (factor - 1)) == 0:
@@ -174,20 +171,13 @@
index_box = ResOperation(rop.INT_MUL,
[index_box, ConstInt(factor)])
self.emit_op(index_box)
- factor = 1
- # adjust the constant offset
- #if must_manually_load_const:
- # if isinstance(index_box, ConstInt):
- # index_box = ConstInt(index_box.value + offset)
- # else:
- # index_box = ResOperation(rop.INT_ADD, [index_box, ConstInt(offset)])
- # self.emit_op(index_box)
- # offset = 0
- return factor, offset, index_box
+ factor = 1
+ return factor, offset, index_box
- def emit_gc_load_or_indexed(self, op, ptr_box, index_box, itemsize, factor, offset, sign, type='i'):
+ def emit_gc_load_or_indexed(self, op, ptr_box, index_box, itemsize,
+ factor, offset, sign, type='i'):
factor, offset, index_box = \
- self._emit_mul_add_if_factor_offset_not_supported(index_box,
+ self._emit_mul_if_factor_offset_not_supported(index_box,
factor, offset)
#
if sign:
@@ -197,8 +187,8 @@
optype = type
if op is not None:
optype = op.type
- if factor == 1 and offset == 0:
- args = [ptr_box, index_box, ConstInt(itemsize)]
+ if index_box is None:
+ args = [ptr_box, ConstInt(offset), ConstInt(itemsize)]
newload = ResOperation(OpHelpers.get_gc_load(optype), args)
else:
args = [ptr_box, index_box, ConstInt(factor),
@@ -547,9 +537,8 @@
ofs, size, sign = unpack_fielddescr(descrs.jfi_frame_depth)
if sign:
size = -size
- args = [ConstInt(frame_info), ConstInt(0), ConstInt(1),
- ConstInt(ofs), ConstInt(size)]
- size = ResOperation(rop.GC_LOAD_INDEXED_I, args)
+ args = [ConstInt(frame_info), ConstInt(ofs), ConstInt(size)]
+ size = ResOperation(rop.GC_LOAD_I, args)
self.emit_op(size)
frame = ResOperation(rop.NEW_ARRAY, [size],
descr=descrs.arraydescr)
@@ -560,9 +549,8 @@
ofs, size, sign = unpack_fielddescr(descrs.jfi_frame_size)
if sign:
size = -size
- args = [ConstInt(frame_info), ConstInt(0), ConstInt(1),
- ConstInt(ofs), ConstInt(size)]
- size = ResOperation(rop.GC_LOAD_INDEXED_I, args)
+ args = [ConstInt(frame_info), ConstInt(ofs), ConstInt(size)]
+ size = ResOperation(rop.GC_LOAD_I, args)
self.emit_op(size)
frame = self.gen_malloc_nursery_varsize_frame(size)
self.gen_initialize_tid(frame, descrs.arraydescr.tid)
@@ -612,15 +600,12 @@
descr = self.cpu.getarraydescr_for_frame(arg.type)
assert self.cpu.JITFRAME_FIXED_SIZE & 1 == 0
_, itemsize, _ = self.cpu.unpack_arraydescr_size(descr)
- index = index_list[i] // itemsize # index is in bytes
- # emit GC_LOAD_INDEXED
- itemsize, basesize, _ = unpack_arraydescr(descr)
- factor, offset, index_box = \
- self._emit_mul_add_if_factor_offset_not_supported(ConstInt(index),
- itemsize, basesize)
- args = [frame, index_box, arg, ConstInt(factor),
- ConstInt(offset), ConstInt(itemsize)]
- self.emit_op(ResOperation(rop.GC_STORE_INDEXED, args))
+ array_offset = index_list[i] # index, already measured in bytes
+ # emit GC_STORE
+ _, basesize, _ = unpack_arraydescr(descr)
+ offset = basesize + array_offset
+ args = [frame, ConstInt(offset), arg, ConstInt(itemsize)]
+ self.emit_op(ResOperation(rop.GC_STORE, args))
descr = op.getdescr()
assert isinstance(descr, JitCellToken)
diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py b/rpython/jit/backend/llsupport/test/test_rewrite.py
--- a/rpython/jit/backend/llsupport/test/test_rewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_rewrite.py
@@ -30,13 +30,26 @@
class RewriteTests(object):
def check_rewrite(self, frm_operations, to_operations, **namespace):
- def trans_getarray_to_load(descr):
- size = descr.basesize
- if descr.is_item_signed():
- size = -size
- return ','.join([str(n) for n in [descr.itemsize,
- descr.basesize,
- size]])
+ def setfield(baseptr, newvalue, descr):
+ assert isinstance(baseptr, str)
+ assert isinstance(newvalue, (str, int))
+ assert not isinstance(descr, (str, int))
+ return 'gc_store(%s, %d, %s, %d)' % (baseptr, descr.offset,
+ newvalue, descr.field_size)
+ def setarrayitem(baseptr, index, newvalue, descr):
+ assert isinstance(baseptr, str)
+ assert isinstance(index, (str, int))
+ assert isinstance(newvalue, (str, int))
+ assert not isinstance(descr, (str, int))
+ if isinstance(index, int):
+ offset = descr.basesize + index * descr.itemsize
+ return 'gc_store(%s, %d, %s, %d)' % (baseptr, offset,
+ newvalue, descr.itemsize)
+ else:
+ return 'gc_store_indexed(%s, %s, %s, %d, %d, %s)' % (
+ baseptr, index, newvalue,
+ descr.itemsize, descr.basesize, descr.itemsize)
+ #
WORD = globals()['WORD']
S = lltype.GcStruct('S', ('x', lltype.Signed),
('y', lltype.Signed))
@@ -376,7 +389,7 @@
gc_store(p1, 0, 5678, 8)
p2 = nursery_ptr_increment(p1, %(tdescr.size)d)
gc_store(p2, 0, 1234, 8)
- gc_store(p1, %(tdescr.gc_fielddescrs[0].offset)s, 0, %(tdescr.gc_fielddescrs[0].offset)s)
+ %(setfield('p1', 0, tdescr.gc_fielddescrs[0]))s
jump()
""")
@@ -485,7 +498,7 @@
""", """
[i0]
p0 = call_malloc_nursery_varsize(1, 1, i0, descr=strdescr)
- gc_store_indexed(p0, 0, i0, 1, %(strlendescr.offset)s, %(strlendescr.field_size)s)
+ gc_store(p0, %(strlendescr.offset)s, i0, %(strlendescr.field_size)s)
gc_store(p0, 0, 0, %(strlendescr.field_size)s)
jump(i0)
""")
@@ -611,19 +624,19 @@
%(strdescr.basesize + 16 * strdescr.itemsize + \
unicodedescr.basesize + 10 * unicodedescr.itemsize)d)
gc_store(p0, 0, %(strdescr.tid)d, %(tiddescr.field_size)s)
- gc_store_indexed(p0, 0, 14, 1, %(strlendescr.offset)s, %(strlendescr.field_size)s)
+ gc_store(p0, %(strlendescr.offset)s, 14, %(strlendescr.field_size)s)
gc_store(p0, 0, 0, %(strhashdescr.field_size)s)
p1 = nursery_ptr_increment(p0, %(strdescr.basesize + 16 * strdescr.itemsize)d)
gc_store(p1, 0, %(unicodedescr.tid)d, %(tiddescr.field_size)s)
- gc_store_indexed(p1, 0, 10, 1, %(unicodelendescr.offset)s, %(unicodelendescr.field_size)s)
+ gc_store(p1, %(unicodelendescr.offset)s, 10, %(unicodelendescr.field_size)s)
gc_store(p1, 0, 0, %(unicodehashdescr.field_size)s)
p2 = call_malloc_nursery_varsize(2, %(unicodedescr.itemsize)d, i2,\
descr=unicodedescr)
- gc_store_indexed(p2, 0, i2, 1, %(unicodelendescr.offset)s, %(unicodelendescr.field_size)s)
+ gc_store(p2, %(unicodelendescr.offset)s, i2, %(unicodelendescr.field_size)s)
gc_store(p2, 0, 0, %(unicodehashdescr.field_size)s)
p3 = call_malloc_nursery_varsize(1, 1, i2, \
descr=strdescr)
- gc_store_indexed(p3, 0, i2, 1, %(strlendescr.offset)s, %(strlendescr.field_size)s)
+ gc_store(p3, %(strlendescr.offset)s, i2, %(strlendescr.field_size)s)
gc_store(p3, 0, 0, %(strhashdescr.field_size)s)
jump()
""")
@@ -636,7 +649,7 @@
""", """
[p1, p2]
cond_call_gc_wb(p1, descr=wbdescr)
- gc_store_indexed(p1, 0, p2, 1, %(tzdescr.offset)s, %(tzdescr.field_size)s)
+ gc_store(p1, %(tzdescr.offset)s, p2, %(tzdescr.field_size)s)
jump()
""")
@@ -650,7 +663,7 @@
""", """
[p1, i2, p3]
cond_call_gc_wb(p1, descr=wbdescr)
- gc_store_indexed(p1, i2, p3, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p1', 'i2', 'p3', cdescr))s
jump()
""")
@@ -671,7 +684,7 @@
zero_array(p1, 0, 129, descr=cdescr)
call_n(123456)
cond_call_gc_wb(p1, descr=wbdescr)
- gc_store_indexed(p1, i2, p3, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p1', 'i2', 'p3', cdescr))s
jump()
""")
@@ -693,7 +706,7 @@
zero_array(p1, 0, 130, descr=cdescr)
call_n(123456)
cond_call_gc_wb_array(p1, i2, descr=wbdescr)
- gc_store_indexed(p1, i2, p3, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p1', 'i2', 'p3', cdescr))s
jump()
""")
@@ -705,7 +718,7 @@
""", """
[p1, i2, p3]
cond_call_gc_wb_array(p1, i2, descr=wbdescr)
- gc_store_indexed(p1, i2, p3, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p1', 'i2', 'p3', cdescr))s
jump()
""")
@@ -725,7 +738,7 @@
zero_array(p1, 0, 5, descr=cdescr)
label(p1, i2, p3)
cond_call_gc_wb_array(p1, i2, descr=wbdescr)
- gc_store_indexed(p1, i2, p3, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p1', 'i2', 'p3', cdescr))s
jump()
""")
@@ -743,12 +756,12 @@
size = interiorzdescr.arraydescr.itemsize
self.check_rewrite("""
[p1, p2]
- setinteriorfield_gc(p1, 0, p2, descr=interiorzdescr)
+ setinteriorfield_gc(p1, 7, p2, descr=interiorzdescr)
jump(p1, p2)
""", """
[p1, p2]
- cond_call_gc_wb_array(p1, 0, descr=wbdescr)
- gc_store_indexed(p1, 0, p2, %(scale)s, %(offset)s, %(size)s)
+ cond_call_gc_wb_array(p1, 7, descr=wbdescr)
+ gc_store(p1, %(offset + 7 * scale)s, p2, %(size)s)
jump(p1, p2)
""", interiorzdescr=interiorzdescr, scale=scale,
offset=offset, size=size)
@@ -763,7 +776,7 @@
[p1]
p0 = call_malloc_nursery(%(tdescr.size)d)
gc_store(p0, 0, 5678, %(tiddescr.field_size)s)
- gc_store_indexed(p0, 0, p1, 1, %(tzdescr.offset)s, %(tzdescr.field_size)s)
+ gc_store(p0, %(tzdescr.offset)s, p1, %(tzdescr.field_size)s)
jump()
""")
@@ -781,7 +794,7 @@
p1 = nursery_ptr_increment(p0, %(tdescr.size)d)
gc_store(p1, 0, 1234, %(tiddescr.field_size)s)
# <<<no cond_call_gc_wb here>>>
- gc_store_indexed(p0, 0, p1, 1, %(tzdescr.offset)s, %(tzdescr.field_size)s)
+ gc_store(p0, %(tzdescr.offset)s, p1, %(tzdescr.field_size)s)
jump()
""")
@@ -798,7 +811,7 @@
gc_store(p0, 0, 8111, %(tiddescr.field_size)s)
gc_store(p0, 0, 5, %(clendescr.field_size)s)
zero_array(p0, 0, 5, descr=cdescr)
- gc_store_indexed(p0, i2, p1, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 'i2', 'p1', cdescr))s
jump()
""")
@@ -816,8 +829,8 @@
gc_store(p0, 0, 8111, %(tiddescr.field_size)s)
gc_store(p0, 0, 5, %(clendescr.field_size)s)
zero_array(p0, 2, 3, descr=cdescr)
- gc_store_indexed(p0, 1, p1, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 0, p2, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 1, 'p1', cdescr))s
+ %(setarrayitem('p0', 0, 'p2', cdescr))s
jump()
""")
@@ -835,8 +848,8 @@
gc_store(p0, 0, 8111, %(tiddescr.field_size)s)
gc_store(p0, 0, 5, %(clendescr.field_size)s)
zero_array(p0, 0, 3, descr=cdescr)
- gc_store_indexed(p0, 3, p1, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 4, p2, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 3, 'p1', cdescr))s
+ %(setarrayitem('p0', 4, 'p2', cdescr))s
jump()
""")
@@ -855,9 +868,9 @@
gc_store(p0, 0, 8111, %(tiddescr.field_size)s)
gc_store(p0, 0, 5, %(clendescr.field_size)s)
zero_array(p0, 0, 5, descr=cdescr)
- gc_store_indexed(p0, 3, p1, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 2, p2, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 1, p2, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 3, 'p1', cdescr))s
+ %(setarrayitem('p0', 2, 'p2', cdescr))s
+ %(setarrayitem('p0', 1, 'p2', cdescr))s
jump()
""")
@@ -878,11 +891,11 @@
gc_store(p0, 0, 8111, %(tiddescr.field_size)s)
gc_store(p0, 0, 5, %(clendescr.field_size)s)
zero_array(p0, 5, 0, descr=cdescr)
- gc_store_indexed(p0, 3, p1, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 4, p2, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 0, p1, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 2, p2, %(trans_getarray_to_load(cdescr))s)
- gc_store_indexed(p0, 1, p2, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 3, 'p1', cdescr))s
+ %(setarrayitem('p0', 4, 'p2', cdescr))s
+ %(setarrayitem('p0', 0, 'p1', cdescr))s
+ %(setarrayitem('p0', 2, 'p2', cdescr))s
+ %(setarrayitem('p0', 1, 'p2', cdescr))s
jump()
""")
@@ -901,10 +914,10 @@
gc_store(p0, 0, 8111, %(tiddescr.field_size)s)
gc_store(p0, 0, 5, %(clendescr.field_size)s)
zero_array(p0, 1, 4, descr=cdescr)
- gc_store_indexed(p0, 0, p1, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 0, 'p1', cdescr))s
call_n(321321)
cond_call_gc_wb(p0, descr=wbdescr)
- gc_store_indexed(p0, 1, p2, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 1, 'p2', cdescr))s
jump()
""")
@@ -923,10 +936,10 @@
gc_store(p0, 0, 8111, %(tiddescr.field_size)s)
gc_store(p0, 0, 5, %(clendescr.field_size)s)
zero_array(p0, 1, 4, descr=cdescr)
- gc_store_indexed(p0, 0, p1, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 0, 'p1', cdescr))s
label(p0, p2)
cond_call_gc_wb_array(p0, 1, descr=wbdescr)
- gc_store_indexed(p0, 1, p2, %(trans_getarray_to_load(cdescr))s)
+ %(setarrayitem('p0', 1, 'p2', cdescr))s
jump()
""")
@@ -955,7 +968,7 @@
gc_store(p0, 0, i3, %(blendescr.field_size)s)
zero_array(p0, 0, i3, descr=bdescr)
cond_call_gc_wb_array(p0, 0, descr=wbdescr)
- gc_store_indexed(p0, 0, p1, 1, %(bdescr.basesize)s, 1)
+ %(setarrayitem('p0', 0, 'p1', bdescr))s
jump()
""")
@@ -991,10 +1004,10 @@
gc_store(p0, %(tdescr.gc_fielddescrs[0].offset)s, 0, %(tdescr.gc_fielddescrs[0].offset)s)
p1 = call_malloc_nursery_varsize(1, 1, i0, \
descr=strdescr)
- gc_store_indexed(p1, 0, i0, 1, %(strlendescr.offset)s, %(strlendescr.field_size)s)
+ gc_store(p1, %(strlendescr.offset)s, i0, %(strlendescr.field_size)s)
gc_store(p1, 0, 0, %(strhashdescr.field_size)s)
cond_call_gc_wb(p0, descr=wbdescr)
- gc_store_indexed(p0, 0, p1, 1, %(tzdescr.offset)s, %(tzdescr.field_size)s)
+ gc_store(p0, %(tzdescr.offset)s, p1, %(tzdescr.field_size)s)
jump()
""")
@@ -1012,7 +1025,7 @@
gc_store(p0, %(tdescr.gc_fielddescrs[0].offset)s, 0, %(tdescr.gc_fielddescrs[0].offset)s)
label(p0, p1)
cond_call_gc_wb(p0, descr=wbdescr)
- gc_store_indexed(p0, 0, p1, 1, %(tzdescr.offset)s, %(tzdescr.field_size)s)
+ gc_store(p0, %(tzdescr.offset)s, p1, %(tzdescr.field_size)s)
jump()
""")
@@ -1025,8 +1038,8 @@
""", """
[p0, p1, p2]
cond_call_gc_wb(p0, descr=wbdescr)
- gc_store_indexed(p0, 0, p1, 1, %(tzdescr.offset)s, %(tzdescr.field_size)s)
- gc_store_indexed(p0, 0, p2, 1, %(tzdescr.offset)s, %(tzdescr.field_size)s)
+ gc_store(p0, %(tzdescr.offset)s, p1, %(tzdescr.field_size)s)
+ gc_store(p0, %(tzdescr.offset)s, p2, %(tzdescr.field_size)s)
jump(p1, p2, p0)
""")
@@ -1036,20 +1049,20 @@
i2 = call_assembler_i(i0, f0, descr=casmdescr)
""", """
[i0, f0]
- i1 = gc_load_indexed_i(ConstClass(frame_info), 0, 1, 1, %(jfi_frame_size.field_size)s)
+ i1 = gc_load_i(ConstClass(frame_info), %(jfi_frame_size.offset)s, %(jfi_frame_size.field_size)s)
p1 = call_malloc_nursery_varsize_frame(i1)
gc_store(p1, 0, 0, %(tiddescr.field_size)s)
- i2 = gc_load_indexed_i(ConstClass(frame_info), 0, 1, 1, %(jfi_frame_depth.field_size)s)
- gc_store_indexed(p1, 0, 0, 1, 1, %(jf_extra_stack_depth.field_size)s)
- gc_store_indexed(p1, 0, NULL, 1, 1, %(jf_savedata.field_size)s)
- gc_store_indexed(p1, 0, NULL, 1, 1, %(jf_force_descr.field_size)s)
- gc_store_indexed(p1, 0, NULL, 1, 1, %(jf_descr.field_size)s)
- gc_store_indexed(p1, 0, NULL, 1, 1, %(jf_guard_exc.field_size)s)
- gc_store_indexed(p1, 0, NULL, 1, 1, %(jf_forward.field_size)s)
+ i2 = gc_load_i(ConstClass(frame_info), %(jfi_frame_depth.offset)s, %(jfi_frame_depth.field_size)s)
+ %(setfield('p1', 0, jf_extra_stack_depth))s
+ %(setfield('p1', 'NULL', jf_savedata))s
+ %(setfield('p1', 'NULL', jf_force_descr))s
+ %(setfield('p1', 'NULL', jf_descr))s
+ %(setfield('p1', 'NULL', jf_guard_exc))s
+ %(setfield('p1', 'NULL', jf_forward))s
gc_store(p1, 0, i2, %(framelendescr.field_size)s)
- gc_store_indexed(p1, 0, ConstClass(frame_info), 1, 1, %(jf_frame_info.field_size)s)
- gc_store_indexed(p1, 0, i0, 8, 3, 8)
- gc_store_indexed(p1, 1, f0, 8, 5, 8)
+ %(setfield('p1', 'ConstClass(frame_info)', jf_frame_info))s
+ gc_store(p1, 3, i0, 8)
+ gc_store(p1, 13, f0, 8)
i3 = call_assembler_i(p1, descr=casmdescr)
""")
@@ -1101,7 +1114,7 @@
p0 = call_malloc_nursery(%(tdescr.size)d)
gc_store(p0, 0, 5678, %(tiddescr.field_size)s)
gc_store(p0, %(tdescr.gc_fielddescrs[0].offset)s, 0, %(tdescr.gc_fielddescrs[0].offset)s)
- p1 = gc_load_indexed_r(p0, 0, 1, %(tzdescr.field_size)s, %(tzdescr.field_size)s)
+ p1 = gc_load_r(p0, %(tzdescr.offset)s, %(tzdescr.field_size)s)
jump(p1)
""")
@@ -1155,23 +1168,19 @@
# 'i5 = int_add(i1,%(raw_sfdescr.basesize)s);'
# 'gc_store(p0,i5,i2,%(raw_sfdescr.itemsize)s)'],
[True, (1,2,4,8), 'i3 = getfield_gc_f(p0,descr=ydescr)' '->'
- 'i3 = gc_load_indexed_f(p0,0,1,%(ydescr.offset)s,%(ydescr.field_size)s)'],
- [True, (1,2,4,8), 'i3 = getfield_gc_f(p0,descr=ydescr)' '->'
- 'i3 = gc_load_indexed_f(p0,0,1,%(ydescr.offset)s,%(ydescr.field_size)s)'],
- [True, (1,2,4,8), 'i3 = setfield_raw(p0,i1,descr=ydescr)' '->'
- 'i3 = gc_store_indexed(p0,0,i1,1,'
- '%(ydescr.offset)s,%(ydescr.field_size)s)'],
- [True, (1,2,4,8), 'i3 = setfield_gc(p0,p0,descr=zdescr)' '->'
+ 'i3 = gc_load_f(p0,%(ydescr.offset)s,%(ydescr.field_size)s)'],
+ [True, (1,2,4,8), 'setfield_raw(p0,i1,descr=ydescr)' '->'
+ 'gc_store(p0,%(ydescr.offset)s,i1,%(ydescr.field_size)s)'],
+ [True, (1,2,4,8), 'setfield_gc(p0,p0,descr=zdescr)' '->'
'cond_call_gc_wb(p0, descr=wbdescr);'
- 'i3 = gc_store_indexed(p0,0,p0,1,'
- '%(zdescr.offset)s,%(zdescr.field_size)s)'],
+ 'gc_store(p0,%(zdescr.offset)s,p0,%(zdescr.field_size)s)'],
[False, (1,), 'i3 = arraylen_gc(p0, descr=adescr)' '->'
'i3 = gc_load_i(p0,0,%(adescr.itemsize)s)'],
#[False, (1,), 'i3 = strlen(p0)' '->'
# 'i3 = gc_load_i(p0,'
# '%(strlendescr.offset)s,%(strlendescr.field_size)s)'],
[True, (1,), 'i3 = strlen(p0)' '->'
- 'i3 = gc_load_indexed_i(p0,0,1,'
+ 'i3 = gc_load_i(p0,'
'%(strlendescr.offset)s,'
'%(strlendescr.field_size)s)'],
#[False, (1,), 'i3 = unicodelen(p0)' '->'
@@ -1179,7 +1188,7 @@
# '%(unicodelendescr.offset)s,'
# '%(unicodelendescr.field_size)s)'],
[True, (1,), 'i3 = unicodelen(p0)' '->'
- 'i3 = gc_load_indexed_i(p0,0,1,'
+ 'i3 = gc_load_i(p0,'
'%(unicodelendescr.offset)s,'
'%(unicodelendescr.field_size)s)'],
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -1039,7 +1039,8 @@
base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args)
size_box = op.getarg(3)
assert isinstance(size_box, ConstInt)
- size = abs(size_box.value)
+ size = size_box.value
+ assert size >= 1
if size == 1:
need_lower_byte = True
else:
@@ -1061,7 +1062,8 @@
assert isinstance(size_box, ConstInt)
factor = scale_box.value
offset = offset_box.value
- size = abs(size_box.value)
+ size = size_box.value
+ assert size >= 1
if size == 1:
need_lower_byte = True
else:
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
@@ -68,8 +68,8 @@
return box.value
def repr_rpython(box, typechars):
- return '%s/%s%d' % (box._get_hash_(), typechars,
- compute_unique_id(box))
+ return '%s/%s' % (box._get_hash_(), typechars,
+ ) #compute_unique_id(box))
class XxxAbstractValue(object):
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -1204,8 +1204,12 @@
'_NOSIDEEFFECT_LAST', # ----- end of no_side_effect operations -----
# same paramters as GC_LOAD, but one additional for the value to store
- # note that the itemsize is not signed!
+ # note that the itemsize is not signed (always > 0)
# (gcptr, index, value, [scale, base_offset,] itemsize)
+ # invariants for GC_STORE: index is constant, but can be large
+ # invariants for GC_STORE_INDEXED: index is a non-constant box;
+ # scale is a constant;
+ # base_offset is a small constant
'GC_STORE/4d/n',
'GC_STORE_INDEXED/6d/n',
diff --git a/rpython/rlib/rurandom.py b/rpython/rlib/rurandom.py
--- a/rpython/rlib/rurandom.py
+++ b/rpython/rlib/rurandom.py
@@ -86,27 +86,29 @@
else: # Posix implementation
def init_urandom():
"""NOT_RPYTHON
- Return an array of one int, initialized to 0.
- It is filled automatically the first time urandom() is called.
"""
- return lltype.malloc(rffi.CArray(lltype.Signed), 1,
- immortal=True, zero=True)
+ return None
def urandom(context, n):
"Read n bytes from /dev/urandom."
result = ''
if n == 0:
return result
- if not context[0]:
- context[0] = os.open("/dev/urandom", os.O_RDONLY, 0777)
- while n > 0:
- try:
- data = os.read(context[0], n)
- except OSError, e:
- if e.errno != errno.EINTR:
- raise
- data = ''
- result += data
- n -= len(data)
+ # XXX should somehow cache the file descriptor. It's a mess.
+ # CPython has a 99% solution and hopes for the remaining 1%
+ # not to occur. For now, we just don't cache the file
+ # descriptor (any more... 6810f401d08e).
+ fd = os.open("/dev/urandom", os.O_RDONLY, 0777)
+ try:
+ while n > 0:
+ try:
+ data = os.read(fd, n)
+ except OSError, e:
+ if e.errno != errno.EINTR:
+ raise
+ data = ''
+ result += data
+ n -= len(data)
+ finally:
+ os.close(fd)
return result
-
diff --git a/rpython/tool/runsubprocess.py b/rpython/tool/runsubprocess.py
--- a/rpython/tool/runsubprocess.py
+++ b/rpython/tool/runsubprocess.py
@@ -9,6 +9,8 @@
from subprocess import PIPE, Popen
def run_subprocess(executable, args, env=None, cwd=None):
+ if isinstance(args, list):
+ args = [a.encode('latin1') for a in args]
return _run(executable, args, env, cwd)
shell_default = False
More information about the pypy-commit
mailing list