[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