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