Author: hager <sven.ha...@uni-duesseldorf.de> Branch: ppc-jit-backend Changeset: r48311:63cb14dbd14c Date: 2011-10-21 16:05 +0200 http://bitbucket.org/pypy/pypy/changeset/63cb14dbd14c/
Log: Implemented a few guard operations. diff --git a/pypy/jit/backend/ppc/ppcgen/opassembler.py b/pypy/jit/backend/ppc/ppcgen/opassembler.py --- a/pypy/jit/backend/ppc/ppcgen/opassembler.py +++ b/pypy/jit/backend/ppc/ppcgen/opassembler.py @@ -197,6 +197,23 @@ def emit_guard_overflow(self, op, arglocs, regalloc): self._emit_ovf_guard(op, arglocs, c.EQ) + def emit_guard_value(self, op, arglocs, regalloc): + l0 = arglocs[0] + l1 = arglocs[1] + failargs = arglocs[2:] + + if l0.is_reg(): + if l1.is_imm(): + self.mc.cmpi(l0.value, l1.getint()) + else: + self.mc.cmp(l0.value, l1.value) + else: + assert 0, "not implemented yet" + self._emit_guard(op, failargs, c.NE) + + emit_guard_nonnull = emit_guard_true + emit_guard_isnull = emit_guard_false + def emit_finish(self, op, arglocs, regalloc): self.gen_exit_stub(op.getdescr(), op.getarglist(), arglocs) @@ -213,6 +230,7 @@ descr._ppc_frame_manager_depth) regalloc.frame_manager.frame_depth = new_fd + # XXX adjust 64 bit def emit_setfield_gc(self, op, arglocs, regalloc): value_loc, base_loc, ofs, size = arglocs if size.value == 8: @@ -235,6 +253,7 @@ else: assert 0, "size not supported" + # XXX adjust 64 bit def emit_getfield_gc(self, op, arglocs, regalloc): base_loc, ofs, res, size = arglocs if size.value == 8: diff --git a/pypy/jit/backend/ppc/ppcgen/regalloc.py b/pypy/jit/backend/ppc/ppcgen/regalloc.py --- a/pypy/jit/backend/ppc/ppcgen/regalloc.py +++ b/pypy/jit/backend/ppc/ppcgen/regalloc.py @@ -272,6 +272,8 @@ return args prepare_guard_false = prepare_guard_true + prepare_guard_nonnull = prepare_guard_true + prepare_guard_isnull = prepare_guard_true def prepare_guard_no_overflow(self, op): locs = self._prepare_guard(op) @@ -280,6 +282,23 @@ prepare_guard_overflow = prepare_guard_no_overflow + def prepare_guard_value(self, op): + boxes = list(op.getarglist()) + b0, b1 = boxes + imm_b1 = _check_imm_arg(b1) + l0, box = self._ensure_value_is_boxed(b0, boxes) + boxes.append(box) + if not imm_b1: + l1, box = self._ensure_value_is_boxed(b1,boxes) + boxes.append(box) + else: + l1 = self.make_sure_var_in_reg(b1) + assert op.result is None + arglocs = self._prepare_guard(op, [l0, l1]) + self.possibly_free_vars(boxes) + self.possibly_free_vars(op.getfailargs()) + return arglocs + def prepare_jump(self, op): descr = op.getdescr() assert isinstance(descr, LoopToken) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit