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

Reply via email to