[pypy-svn] r72493 - in pypy/trunk/pypy: rpython/lltypesystem translator/c translator/c/src translator/c/test
arigo at codespeak.net
arigo at codespeak.net
Sun Mar 21 16:22:26 CET 2010
Author: arigo
Date: Sun Mar 21 16:22:25 2010
New Revision: 72493
Modified:
pypy/trunk/pypy/rpython/lltypesystem/llarena.py
pypy/trunk/pypy/translator/c/funcgen.py
pypy/trunk/pypy/translator/c/gc.py
pypy/trunk/pypy/translator/c/src/llgroup.h
pypy/trunk/pypy/translator/c/test/test_newgc.py
Log:
64bit: Fix some tests, avoid a warning, fix a last
forgotten "unsigned short" in gc.py.
Modified: pypy/trunk/pypy/rpython/lltypesystem/llarena.py
==============================================================================
--- pypy/trunk/pypy/rpython/lltypesystem/llarena.py (original)
+++ pypy/trunk/pypy/rpython/lltypesystem/llarena.py Sun Mar 21 16:22:25 2010
@@ -357,12 +357,15 @@
# usage hint but a real command. It guarantees that after MADV_DONTNEED
# the pages are cleared again.
from pypy.rpython.tool import rffi_platform
+ from pypy.translator.tool.cbuild import ExternalCompilationInfo
+ _eci = ExternalCompilationInfo(includes=['sys/mman.h'])
MADV_DONTNEED = rffi_platform.getconstantinteger('MADV_DONTNEED',
'#include <sys/mman.h>')
linux_madvise = rffi.llexternal('madvise',
[llmemory.Address, rffi.SIZE_T, rffi.INT],
rffi.INT,
- sandboxsafe=True, _nowrapper=True)
+ sandboxsafe=True, _nowrapper=True,
+ compilation_info=_eci)
linux_getpagesize = rffi.llexternal('getpagesize', [], rffi.INT,
sandboxsafe=True, _nowrapper=True)
Modified: pypy/trunk/pypy/translator/c/funcgen.py
==============================================================================
--- pypy/trunk/pypy/translator/c/funcgen.py (original)
+++ pypy/trunk/pypy/translator/c/funcgen.py Sun Mar 21 16:22:25 2010
@@ -209,6 +209,7 @@
def cfunction_body(self):
graph = self.graph
+ yield 'goto block0;' # to avoid a warning "this label is not used"
# generate the body of each block
for block in graph.iterblocks():
Modified: pypy/trunk/pypy/translator/c/gc.py
==============================================================================
--- pypy/trunk/pypy/translator/c/gc.py (original)
+++ pypy/trunk/pypy/translator/c/gc.py Sun Mar 21 16:22:25 2010
@@ -364,7 +364,7 @@
typename = funcgen.db.gettype(op.result.concretetype)
fieldname = c_vtableinfo.value[2]
return (
- '%s = (%s)_OP_GET_NEXT_GROUP_MEMBER(%s, (unsigned short)%s->_%s, %s);'
+ '%s = (%s)_OP_GET_NEXT_GROUP_MEMBER(%s, (pypy_halfword_t)%s->_%s, %s);'
% (funcgen.expr(op.result),
cdecl(typename, ''),
funcgen.expr(c_grpptr),
Modified: pypy/trunk/pypy/translator/c/src/llgroup.h
==============================================================================
--- pypy/trunk/pypy/translator/c/src/llgroup.h (original)
+++ pypy/trunk/pypy/translator/c/src/llgroup.h Sun Mar 21 16:22:25 2010
@@ -9,6 +9,8 @@
lower one stores the offset inside the group, divided by 4. The
limitation is to have at most 256KB of data in the whole group. */
+typedef unsigned short pypy_halfword_t;
+
#define GROUP_MEMBER_OFFSET(grouptype, groupname, membername) \
((unsigned short)(((long)&((grouptype*)NULL)->membername) / 4))
@@ -17,13 +19,6 @@
#define _OP_GET_NEXT_GROUP_MEMBER(groupptr, compactoffset, skipoffset) \
((((char*)groupptr) + skipoffset) + ((long)compactoffset)*4)
-
-#define OP_IS_GROUP_MEMBER_NONZERO(compactoffset, r) \
- r = (compactoffset != 0)
-
-#define OP_EXTRACT_USHORT(value, r) r = (unsigned short)value
-#define OP_COMBINE_USHORT(ushort, rest, r) r = ((long)ushort) | rest
-
/* A macro to check at run-time if sizeof(group) is too large. */
#define PYPY_GROUP_CHECK_SIZE(groupname, lastname) \
if (sizeof(groupname) > 65536*4) \
@@ -36,6 +31,8 @@
that this pointer must fit inside 32-bit, i.e. the whole group must
be located in the first 32 bits of address space. */
+typedef unsigned int pypy_halfword_t;
+
#define GROUP_MEMBER_OFFSET(grouptype, groupname, membername) \
((long)(&groupname.membername))
@@ -45,12 +42,6 @@
#define _OP_GET_NEXT_GROUP_MEMBER(groupptr, compactoffset, skipoffset) \
((long)compactoffset + skipoffset)
-#define OP_IS_GROUP_MEMBER_NONZERO(compactoffset, r) \
- r = (compactoffset != 0)
-
-#define OP_EXTRACT_USHORT(value, r) r = (unsigned int)value
-#define OP_COMBINE_USHORT(ushort, rest, r) r = ((long)ushort) | rest
-
/* A macro to check at run-time if the group is below the 32-bit limit. */
#define PYPY_GROUP_CHECK_SIZE(groupname, lastname) \
if ((unsigned long)(&groupname.lastname) > 0xFFFFFFFF) \
@@ -60,4 +51,11 @@
#endif /*****************************************************/
+
+#define OP_IS_GROUP_MEMBER_NONZERO(compactoffset, r) \
+ r = (compactoffset != 0)
+
+#define OP_EXTRACT_USHORT(value, r) r = (pypy_halfword_t)value
+#define OP_COMBINE_USHORT(ushort, rest, r) r = ((long)ushort) | rest
+
#endif /* _PYPY_LL_GROUP_H_ */
Modified: pypy/trunk/pypy/translator/c/test/test_newgc.py
==============================================================================
--- pypy/trunk/pypy/translator/c/test/test_newgc.py (original)
+++ pypy/trunk/pypy/translator/c/test/test_newgc.py Sun Mar 21 16:22:25 2010
@@ -621,7 +621,7 @@
CDLL, ffi_type_void, CallbackFuncPtr, ffi_type_sint
from pypy.rpython.lltypesystem import rffi, ll2ctypes
import gc
- slong = cast_type_to_ffitype(rffi.LONG)
+ ffi_size_t = cast_type_to_ffitype(rffi.SIZE_T)
from pypy.rlib.libffi import get_libc_name
@@ -629,32 +629,32 @@
gc.collect()
p_a1 = rffi.cast(rffi.VOIDPP, ll_args[0])[0]
p_a2 = rffi.cast(rffi.VOIDPP, ll_args[1])[0]
- a1 = rffi.cast(rffi.INTP, p_a1)[0]
- a2 = rffi.cast(rffi.INTP, p_a2)[0]
+ a1 = rffi.cast(rffi.LONGP, p_a1)[0]
+ a2 = rffi.cast(rffi.LONGP, p_a2)[0]
res = rffi.cast(rffi.INTP, ll_res)
if a1 > a2:
- res[0] = 1
+ res[0] = rffi.cast(rffi.INT, 1)
else:
- res[0] = -1
+ res[0] = rffi.cast(rffi.INT, -1)
def f():
libc = CDLL(get_libc_name())
- qsort = libc.getpointer('qsort', [ffi_type_pointer, slong,
- slong, ffi_type_pointer],
- ffi_type_void)
+ qsort = libc.getpointer('qsort', [ffi_type_pointer, ffi_size_t,
+ ffi_size_t, ffi_type_pointer],
+ ffi_type_void)
ptr = CallbackFuncPtr([ffi_type_pointer, ffi_type_pointer],
ffi_type_sint, callback)
- TP = rffi.CArray(rffi.INT)
+ TP = rffi.CArray(rffi.LONG)
to_sort = lltype.malloc(TP, 4, flavor='raw')
to_sort[0] = 4
to_sort[1] = 3
to_sort[2] = 1
to_sort[3] = 2
qsort.push_arg(rffi.cast(rffi.VOIDP, to_sort))
- qsort.push_arg(rffi.sizeof(rffi.INT))
- qsort.push_arg(4)
+ qsort.push_arg(rffi.cast(rffi.SIZE_T, rffi.sizeof(rffi.LONG)))
+ qsort.push_arg(rffi.cast(rffi.SIZE_T, 4))
qsort.push_arg(rffi.cast(rffi.VOIDP, ptr.ll_closure))
qsort.call(lltype.Void)
result = [to_sort[i] for i in range(4)] == [1,2,3,4]
@@ -904,7 +904,7 @@
def f():
from pypy.rpython.lltypesystem import lltype, rffi
alist = [A() for i in range(50000)]
- idarray = lltype.malloc(rffi.INTP.TO, len(alist), flavor='raw')
+ idarray = lltype.malloc(rffi.LONGP.TO, len(alist), flavor='raw')
# Compute the id of all elements of the list. The goal is
# to not allocate memory, so that if the GC needs memory to
# remember the ids, it will trigger some collections itself
More information about the Pypy-commit
mailing list