[pypy-commit] pypy guard-compatible: implement the boring part of guard_compatible
cfbolz
pypy.commits at gmail.com
Mon Mar 14 05:04:47 EDT 2016
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: guard-compatible
Changeset: r83028:2567141c9d53
Date: 2016-03-14 10:03 +0100
http://bitbucket.org/pypy/pypy/changeset/2567141c9d53/
Log: implement the boring part of guard_compatible (which is exactly like
guard_value :-))
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
@@ -1725,6 +1725,12 @@
self.guard_success_cc = rx86.Conditions['E']
self.implement_guard(guard_token)
+ def genop_guard_guard_compatible(self, guard_op, guard_token, locs, ign):
+ assert guard_op.getarg(0).type == REF # XXX for now?
+ self.mc.CMP(locs[0], locs[1])
+ self.guard_success_cc = rx86.Conditions['E']
+ self.implement_guard(guard_token)
+
def _cmp_guard_class(self, locs):
loc_ptr = locs[0]
loc_classptr = locs[1]
diff --git a/rpython/jit/backend/x86/regalloc.py b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -483,6 +483,13 @@
y = self.loc(op.getarg(1))
self.perform_guard(op, [x, y], None)
+ def consider_guard_compatible(self, op):
+ x = self.make_sure_var_in_reg(op.getarg(0))
+ loc = self.assembler.cpu.all_reg_indexes[x.value]
+ op.getdescr().make_a_counter_per_value(op, loc)
+ y = self.loc(op.getarg(1))
+ self.perform_guard(op, [x, y], None)
+
def consider_guard_class(self, op):
assert not isinstance(op.getarg(0), Const)
x = self.rm.make_sure_var_in_reg(op.getarg(0))
More information about the pypy-commit
mailing list