[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