Author: Remi Meier <remi.me...@gmail.com> Branch: stmgc-c4 Changeset: r65770:6317510aa84e Date: 2013-07-29 08:38 +0200 http://bitbucket.org/pypy/pypy/changeset/6317510aa84e/
Log: attempt to implement ptr_eq fastpath diff --git a/pypy/tool/jitlogparser/parser.py b/pypy/tool/jitlogparser/parser.py --- a/pypy/tool/jitlogparser/parser.py +++ b/pypy/tool/jitlogparser/parser.py @@ -395,7 +395,7 @@ addr = int(m.group(1), 16) addrs.setdefault(addr, []).append(name) dumps = {} - executables = set() + executables = set(["??"]) symbols = {} for entry in extract_category(log, 'jit-backend-dump'): entry = purge_thread_numbers(entry) 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 @@ -1042,7 +1042,6 @@ assert self.cpu.gc_ll_descr.stm rl = result_loc.lowest8bits() self._stm_ptr_eq_fastpath(self.mc, arglocs, result_loc) - self.mc.TEST_rr(eax.value, eax.value) self.mc.SET_ir(rx86.Conditions['NZ'], rl.value) self.mc.MOVZX8_rr(result_loc.value, rl.value) @@ -1052,7 +1051,6 @@ assert self.cpu.gc_ll_descr.stm rl = result_loc.lowest8bits() self._stm_ptr_eq_fastpath(self.mc, arglocs, result_loc) - self.mc.TEST_rr(eax.value, eax.value) self.mc.SET_ir(rx86.Conditions['Z'], rl.value) self.mc.MOVZX8_rr(result_loc.value, rl.value) @@ -1064,7 +1062,6 @@ assert not self.cpu.gc_ll_descr.stm guard_opnum = guard_op.getopnum() self._stm_ptr_eq_fastpath(self.mc, arglocs, result_loc) - self.mc.TEST_rr(eax.value, eax.value) if guard_opnum == rop.GUARD_FALSE: self.implement_guard(guard_token, "Z") else: @@ -1078,7 +1075,6 @@ assert not self.cpu.gc_ll_descr.stm guard_opnum = guard_op.getopnum() self._stm_ptr_eq_fastpath(self.mc, arglocs, result_loc) - self.mc.TEST_rr(eax.value, eax.value) if guard_opnum == rop.GUARD_FALSE: self.implement_guard(guard_token, "NZ") else: @@ -2173,6 +2169,34 @@ assert self.ptr_eq_slowpath is not None a_base = arglocs[0] b_base = arglocs[1] + + # + # FASTPATH + # + # a == b -> SET NZ + sl = X86_64_SCRATCH_REG.lowest8bits() + mc.MOV(X86_64_SCRATCH_REG, a_base) + 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.J_il8(rx86.Conditions['NZ'], 0) + j_ok1 = mc.get_relative_pos() + + # a == 0 || b == 0 -> SET Z + mc.CMP(a_base, imm(0)) + mc.J_il8(rx86.Conditions['Z'], 0) + j_ok2 = mc.get_relative_pos() + # + mc.CMP(a_base, imm(0)) + mc.J_il8(rx86.Conditions['Z'], 0) + j_ok3 = mc.get_relative_pos() + + # a.type != b.type + # XXX: todo, if it ever happens.. + + # + # SLOWPATH # mc.PUSH(b_base) mc.PUSH(a_base) @@ -2180,7 +2204,22 @@ mc.CALL(imm(func)) # result still on stack assert isinstance(result_loc, RegLoc) - mc.POP_r(result_loc.value) + mc.POP_r(X86_64_SCRATCH_REG.value) + # set flags: + mc.TEST(X86_64_SCRATCH_REG, X86_64_SCRATCH_REG) + # + # END SLOWPATH + # + + # OK: flags already set + offset = mc.get_relative_pos() - j_ok1 + mc.overwrite(j_ok1 - 1, chr(offset)) + offset = mc.get_relative_pos() - j_ok2 + mc.overwrite(j_ok2 - 1, chr(offset)) + offset = mc.get_relative_pos() - j_ok3 + mc.overwrite(j_ok3 - 1, chr(offset)) + + def _get_stm_private_rev_num_addr(self): assert self.cpu.gc_ll_descr.stm _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit