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