Author: Richard Plangger <planri...@gmail.com>
Branch: s390x-backend
Changeset: r81851:6f01de4c9329
Date: 2016-01-19 11:40 +0100
http://bitbucket.org/pypy/pypy/changeset/6f01de4c9329/

Log:    added overflow test of pool (not yet finished) fixed test in
        test_newgc, it did not write the full return value of libffi, thus
        it left garbage in the return value libffi passes on

diff --git a/rpython/jit/backend/zarch/test/test_pool.py 
b/rpython/jit/backend/zarch/test/test_pool.py
--- a/rpython/jit/backend/zarch/test/test_pool.py
+++ b/rpython/jit/backend/zarch/test/test_pool.py
@@ -1,12 +1,15 @@
+import py
 from rpython.jit.backend.zarch.pool import LiteralPool
 from rpython.jit.metainterp.history import (AbstractFailDescr,
          AbstractDescr, BasicFailDescr, BasicFinalDescr, JitCellToken,
          TargetToken, ConstInt, ConstPtr, Const, ConstFloat)
 from rpython.jit.metainterp.resoperation import (ResOperation, rop,
          InputArgInt)
+from rpython.jit.backend.zarch.codebuilder import InstrBuilder
 from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
 from rpython.jit.backend.zarch.helper.regalloc import check_imm32
-import py
+from rpython.jit.backend.zarch.assembler import AssemblerZARCH
+from rpython.jit.backend.detect_cpu import getcpuclass
 
 class TestPoolZARCH(object):
     def setup_class(self):
@@ -47,3 +50,10 @@
                     assert self.const_in_pool(c2)
                 else:
                     assert not self.const_in_pool(c2)
+
+    def test_pool_overflow(self):
+        cpu = getcpuclass()(None, None)
+        cpu.setup_once()
+        ops = [ResOperation(rop.FLOAT_ADD, [ConstFloat(0.0125), 
ConstFloat(float(i))]) for i in range(100)]
+        cpu.compile_loop([], ops, JitCellToken())
+
diff --git a/rpython/translator/c/test/test_newgc.py 
b/rpython/translator/c/test/test_newgc.py
--- a/rpython/translator/c/test/test_newgc.py
+++ b/rpython/translator/c/test/test_newgc.py
@@ -695,11 +695,15 @@
             p_a2 = rffi.cast(rffi.VOIDPP, ll_args[1])[0]
             a1 = rffi.cast(rffi.SIGNEDP, p_a1)[0]
             a2 = rffi.cast(rffi.SIGNEDP, p_a2)[0]
-            res = rffi.cast(rffi.INTP, ll_res)
+            # related to libffi issue on s390x, we MUST
+            # overwrite the full ffi result which is 64 bit
+            # if not, this leaves garbage in the return value
+            # and qsort does not sorrt correctly
+            res = rffi.cast(rffi.SIGNEDP, ll_res)
             if a1 > a2:
-                res[0] = rffi.cast(rffi.INT, 1)
+                res[0] = 1
             else:
-                res[0] = rffi.cast(rffi.INT, -1)
+                res[0] = -1
 
         def f():
             libc = CDLL(get_libc_name())
@@ -707,7 +711,7 @@
                                               ffi_size_t, ffi_type_pointer],
                                     ffi_type_void)
 
-            ptr = CallbackFuncPtr([ffi_type_pointer, ffi_type_pointer],
+            ptr = CallbackFuncPtr([ffi_type_pointer, ffi_type_pointer, 
ffi_type_pointer],
                                   ffi_type_sint, callback)
 
             TP = rffi.CArray(lltype.Signed)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to