Author: Maciej Fijalkowski <[email protected]>
Branch: arm64
Changeset: r96841:31ae58bae243
Date: 2019-06-22 12:15 +0000
http://bitbucket.org/pypy/pypy/changeset/31ae58bae243/

Log:    guard_not_forced_2

diff --git a/rpython/jit/backend/aarch64/opassembler.py 
b/rpython/jit/backend/aarch64/opassembler.py
--- a/rpython/jit/backend/aarch64/opassembler.py
+++ b/rpython/jit/backend/aarch64/opassembler.py
@@ -1,5 +1,6 @@
 
 from rpython.rlib.objectmodel import we_are_translated
+from rpython.rlib.rarithmetic import r_uint
 from rpython.rtyper.lltypesystem import rffi, lltype
 from rpython.jit.metainterp.history import (AbstractFailDescr, ConstInt,
                                             INT, FLOAT, REF)
@@ -823,12 +824,22 @@
         self.load_from_gc_table(r.ip0.value, faildescrindex)
         self.store_reg(self.mc, r.ip0, r.fp, ofs)
 
-    def emit_op_label(self, op, arglocs):
-        pass
+    def emit_op_guard_not_forced_2(self, op, arglocs):
+        self.store_force_descr(op, arglocs[1:], arglocs[0].value)
+
+    def store_force_descr(self, op, fail_locs, frame_depth):
+        pos = self.mc.currpos()
+        guard_token = self.build_guard_token(op, frame_depth, fail_locs, pos, 
c.AL)
+        self._finish_gcmap = guard_token.gcmap
+        self._store_force_index(op)
+        self.store_info_on_descr(pos, guard_token)
 
     def emit_op_force_token(self, op, arglocs):
         self.mc.MOV_rr(arglocs[0].value, r.fp.value)
 
+    def emit_op_label(self, op, arglocs):
+        pass
+
     def emit_op_jump(self, op, arglocs):
         target_token = op.getdescr()
         assert isinstance(target_token, TargetToken)
diff --git a/rpython/jit/backend/aarch64/regalloc.py 
b/rpython/jit/backend/aarch64/regalloc.py
--- a/rpython/jit/backend/aarch64/regalloc.py
+++ b/rpython/jit/backend/aarch64/regalloc.py
@@ -639,6 +639,12 @@
         guard_locs = self._guard_impl(op)
         return arglocs + guard_locs, len(arglocs)
 
+    def prepare_op_guard_not_forced_2(self, op):
+        self.rm.before_call(op.getfailargs(), save_all_regs=True)
+        self.vfprm.before_call(op.getfailargs(), save_all_regs=True)
+        fail_locs = self._guard_impl(op)
+        return fail_locs
+
     def prepare_op_label(self, op):
         descr = op.getdescr()
         assert isinstance(descr, TargetToken)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to