Author: Remi Meier <remi.me...@gmail.com> Branch: stmgc-c4 Changeset: r65791:796f9faedadc Date: 2013-07-29 16:54 +0200 http://bitbucket.org/pypy/pypy/changeset/796f9faedadc/
Log: fix ptr_eq and add a test for it in zrpy_gc_test.py diff --git a/rpython/config/translationoption.py b/rpython/config/translationoption.py --- a/rpython/config/translationoption.py +++ b/rpython/config/translationoption.py @@ -74,10 +74,10 @@ ("translation.gctransformer", "boehm")], "minimark": [("translation.gctransformer", "framework")], "stmgc": [("translation.gctransformer", "framework"), - ("translation.gcrootfinder", "stm")], + ("translation.gcrootfinder", "stm"), + ("translation.gcremovetypeptr", False)], }, suggests = { - "stmgc": [("translation.gcremovetypeptr", True)], }, cmdline="--gc"), ChoiceOption("gctransformer", "GC transformer that is used - internal", diff --git a/rpython/jit/backend/llsupport/test/zrpy_gc_test.py b/rpython/jit/backend/llsupport/test/zrpy_gc_test.py --- a/rpython/jit/backend/llsupport/test/zrpy_gc_test.py +++ b/rpython/jit/backend/llsupport/test/zrpy_gc_test.py @@ -45,9 +45,11 @@ rgc.collect() rgc.collect(); rgc.collect() freed = 0 - for r in r_list: + for i, r in enumerate(r_list): if r() is None: freed += 1 + else: + print "not freed:", r(), "pos:", i print freed return 0 @@ -79,10 +81,11 @@ if gcrootfinder == 'stm': t.config.translation.stm = True t.config.translation.gc = 'stmgc' + gc = 'stmgc' else: t.config.translation.gc = gc # - if gc != 'boehm': + if gc != 'boehm' and gc != 'stmgc': t.config.translation.gcremovetypeptr = True for name, value in kwds.items(): setattr(t.config.translation, name, value) @@ -777,3 +780,33 @@ def test_compile_framework_call_assembler(self): self.run('compile_framework_call_assembler') + + def define_compile_framework_ptr_eq(cls): + # test ptr_eq + def raiseassert(cond): + if not bool(cond): + raise AssertionError + + def before(n, x): + x0 = X() + x1 = X() + ptrs = [None, x0, x1, X()] + return (n, x, x0, x1, None, None, None, + None, None, None, ptrs, None) + + @unroll_safe + def f(n, x, x0, x1, x2, x3, x4, x5, x6, x7, ptrs, s): + raiseassert(x0 != ptrs[0]) + raiseassert(x0 == ptrs[1]) + raiseassert(x0 != ptrs[2]) + raiseassert(x0 != ptrs[3]) + raiseassert(x1 != ptrs[0]) + raiseassert(x1 != ptrs[1]) + raiseassert(x1 == ptrs[2]) + raiseassert(x1 != ptrs[3]) + # + return n - 1, x, x0, x1, x2, x3, x4, x5, x6, x7, ptrs, s + return before, f, None + + def test_compile_framework_ptr_eq(self): + self.run('compile_framework_ptr_eq') diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py --- a/rpython/jit/backend/x86/assembler.py +++ b/rpython/jit/backend/x86/assembler.py @@ -1059,7 +1059,7 @@ if not self.cpu.gc_ll_descr.stm: self.genop_guard_int_eq(op, guard_op, guard_token, arglocs, result_loc) - assert not self.cpu.gc_ll_descr.stm + assert self.cpu.gc_ll_descr.stm guard_opnum = guard_op.getopnum() self._stm_ptr_eq_fastpath(self.mc, arglocs, result_loc) if guard_opnum == rop.GUARD_FALSE: @@ -1072,7 +1072,7 @@ if not self.cpu.gc_ll_descr.stm: self.genop_guard_int_ne(op, guard_op, guard_token, arglocs, result_loc) - assert not self.cpu.gc_ll_descr.stm + assert self.cpu.gc_ll_descr.stm guard_opnum = guard_op.getopnum() self._stm_ptr_eq_fastpath(self.mc, arglocs, result_loc) if guard_opnum == rop.GUARD_FALSE: @@ -2179,7 +2179,8 @@ mc.CMP(X86_64_SCRATCH_REG, b_base) mc.SET_ir(rx86.Conditions['Z'], sl.value) mc.MOVZX8_rr(X86_64_SCRATCH_REG.value, sl.value) - mc.TEST(X86_64_SCRATCH_REG, X86_64_SCRATCH_REG) + # mc.TEST8_rr() without movzx8 + mc.TEST_rr(X86_64_SCRATCH_REG.value, X86_64_SCRATCH_REG.value) mc.J_il8(rx86.Conditions['NZ'], 0) j_ok1 = mc.get_relative_pos() @@ -2188,7 +2189,7 @@ mc.J_il8(rx86.Conditions['Z'], 0) j_ok2 = mc.get_relative_pos() # - mc.CMP(a_base, imm(0)) + mc.CMP(b_base, imm(0)) mc.J_il8(rx86.Conditions['Z'], 0) j_ok3 = mc.get_relative_pos() @@ -2203,7 +2204,6 @@ func = self.ptr_eq_slowpath mc.CALL(imm(func)) # result still on stack - assert isinstance(result_loc, RegLoc) mc.POP_r(X86_64_SCRATCH_REG.value) # set flags: mc.TEST(X86_64_SCRATCH_REG, X86_64_SCRATCH_REG) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit