Author: Richard Plangger <planri...@gmail.com> Branch: s390x-backend Changeset: r81983:228ce776f7f6 Date: 2016-01-27 20:46 +0100 http://bitbucket.org/pypy/pypy/changeset/228ce776f7f6/
Log: added ztranslation call assembler test and some more (hurray, one of them fails and this might be the bug I'm searching for) diff --git a/rpython/jit/backend/zarch/assembler.py b/rpython/jit/backend/zarch/assembler.py --- a/rpython/jit/backend/zarch/assembler.py +++ b/rpython/jit/backend/zarch/assembler.py @@ -278,7 +278,7 @@ if exctploc is not None: mc.LG(exctploc, l.addr(diff, r.SCRATCH)) # Zero out the exception fields - mc.LGHI(r.SCRATCH2, l.imm(0)) + mc.XGR(r.SCRATCH2, r.SCRATCH2) mc.STG(r.SCRATCH2, l.addr(0, r.SCRATCH)) mc.STG(r.SCRATCH2, l.addr(diff, r.SCRATCH)) @@ -1169,10 +1169,8 @@ # to be executed, thus remove the first opcode self.mc.b_offset(descr._ll_loop_code + self.mc.LARL_byte_count) else: - # restore the pool address offset = self.pool.get_descr_offset(descr) + \ JUMPABS_TARGET_ADDR__POOL_OFFSET - offset_pool = offset + JUMPABS_POOL_ADDR_POOL_OFFSET self.mc.LG(r.SCRATCH, l.pool(offset)) self.mc.BCR(c.ANY, r.SCRATCH) diff --git a/rpython/jit/backend/zarch/opassembler.py b/rpython/jit/backend/zarch/opassembler.py --- a/rpython/jit/backend/zarch/opassembler.py +++ b/rpython/jit/backend/zarch/opassembler.py @@ -836,6 +836,22 @@ def emit_restore_exception(self, op, arglocs, regalloc): self._restore_exception(self.mc, arglocs[1], arglocs[0]) + def emit_guard_no_exception(self, op, arglocs, regalloc): + self.mc.load_imm(r.SCRATCH, self.cpu.pos_exception()) + self.mc.LG(r.SCRATCH2, l.addr(0,r.SCRATCH)) + self.mc.cmp_op(r.SCRATCH2, l.imm(0), imm=True) + self.guard_success_cc = c.EQ + self._emit_guard(op, arglocs) + # If the previous operation was a COND_CALL, overwrite its conditional + # jump to jump over this GUARD_NO_EXCEPTION as well, if we can + if self._find_nearby_operation(regalloc,-1).getopnum() == rop.COND_CALL: + jmp_adr, fcond = self.previous_cond_call_jcond + relative_target = self.mc.currpos() - jmp_adr + pmc = OverwritingBuilder(self.mc, jmp_adr, 1) + pmc.BRCL(fcond, l.imm(relative_target)) + pmc.overwrite() + + class MemoryOpAssembler(object): _mixin_ = True @@ -1194,21 +1210,6 @@ def emit_leave_portal_frame(self, op, arglocs, regalloc): self.leave_portal_frame(op) - def emit_guard_no_exception(self, op, arglocs, regalloc): - self.mc.load_imm(r.SCRATCH, self.cpu.pos_exception()) - self.mc.LG(r.SCRATCH2, l.addr(0,r.SCRATCH)) - self.mc.cmp_op(r.SCRATCH2, l.imm(0), imm=True) - self.guard_success_cc = c.EQ - self._emit_guard(op, arglocs) - # If the previous operation was a COND_CALL, overwrite its conditional - # jump to jump over this GUARD_NO_EXCEPTION as well, if we can - if self._find_nearby_operation(regalloc,-1).getopnum() == rop.COND_CALL: - jmp_adr, fcond = self.previous_cond_call_jcond - relative_target = self.mc.currpos() - jmp_adr - pmc = OverwritingBuilder(self.mc, jmp_adr, 1) - pmc.BRCL(fcond, l.imm(relative_target)) - pmc.overwrite() - class OpAssembler(IntOpAssembler, FloatOpAssembler, GuardOpAssembler, CallOpAssembler, AllocOpAssembler, MemoryOpAssembler, diff --git a/rpython/jit/backend/zarch/test/test_tl.py b/rpython/jit/backend/zarch/test/test_tl.py new file mode 100644 --- /dev/null +++ b/rpython/jit/backend/zarch/test/test_tl.py @@ -0,0 +1,9 @@ +import py +from rpython.jit.metainterp.test.test_tl import ToyLanguageTests +from rpython.jit.backend.zarch.test.support import JitZARCHMixin + +class TestTL(JitZARCHMixin, ToyLanguageTests): + # for the individual tests see + # ====> ../../../metainterp/test/test_tl.py + pass + diff --git a/rpython/jit/backend/zarch/test/test_ztranslation_call_assembler.py b/rpython/jit/backend/zarch/test/test_ztranslation_call_assembler.py new file mode 100644 --- /dev/null +++ b/rpython/jit/backend/zarch/test/test_ztranslation_call_assembler.py @@ -0,0 +1,10 @@ +from rpython.jit.backend.llsupport.test.ztranslation_test import TranslationTestCallAssembler +from rpython.translator.translator import TranslationContext +from rpython.config.translationoption import DEFL_GC +from rpython.jit.backend.zarch.arch import WORD +import sys + +class TestTranslationCallAssemblerZARCH(TranslationTestCallAssembler): + def _check_cbuilder(self, cbuilder): + pass + diff --git a/rpython/jit/backend/zarch/test/test_ztranslation_external_exception.py b/rpython/jit/backend/zarch/test/test_ztranslation_external_exception.py new file mode 100644 --- /dev/null +++ b/rpython/jit/backend/zarch/test/test_ztranslation_external_exception.py @@ -0,0 +1,19 @@ +from rpython.jit.backend.llsupport.test.ztranslation_test import TranslationRemoveTypePtrTest +from rpython.translator.translator import TranslationContext +from rpython.config.translationoption import DEFL_GC +from rpython.translator.platform import platform as compiler + +if compiler.name == 'msvc': + _MSVC = True +else: + _MSVC = False + +class TestTranslationRemoveTypePtrX86(TranslationRemoveTypePtrTest): + def _get_TranslationContext(self): + t = TranslationContext() + t.config.translation.gc = DEFL_GC # 'hybrid' or 'minimark' + if not _MSVC: + t.config.translation.gcrootfinder = 'asmgcc' + t.config.translation.list_comprehension_operations = True + t.config.translation.gcremovetypeptr = True + return t _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit