[pypy-commit] pypy gc-incminimark-pinning: introduce pin()/unpin() to the JIT

groggi noreply at buildbot.pypy.org
Wed Jun 25 18:32:03 CEST 2014


Author: Gregor Wegberg <code at gregorwegberg.com>
Branch: gc-incminimark-pinning
Changeset: r72219:cfd8cfed9b5c
Date: 2014-06-24 17:01 +0200
http://bitbucket.org/pypy/pypy/changeset/cfd8cfed9b5c/

Log:	introduce pin()/unpin() to the JIT

diff --git a/rpython/jit/codewriter/jtransform.py b/rpython/jit/codewriter/jtransform.py
--- a/rpython/jit/codewriter/jtransform.py
+++ b/rpython/jit/codewriter/jtransform.py
@@ -493,30 +493,32 @@
 
     # XXX some of the following functions should not become residual calls
     # but be really compiled
-    rewrite_op_int_floordiv_ovf_zer = _do_builtin_call
-    rewrite_op_int_floordiv_ovf     = _do_builtin_call
-    rewrite_op_int_floordiv_zer     = _do_builtin_call
-    rewrite_op_int_mod_ovf_zer = _do_builtin_call
-    rewrite_op_int_mod_ovf     = _do_builtin_call
-    rewrite_op_int_mod_zer     = _do_builtin_call
-    rewrite_op_int_lshift_ovf  = _do_builtin_call
-    rewrite_op_int_abs         = _do_builtin_call
-    rewrite_op_llong_abs          = _do_builtin_call
-    rewrite_op_llong_floordiv     = _do_builtin_call
-    rewrite_op_llong_floordiv_zer = _do_builtin_call
-    rewrite_op_llong_mod          = _do_builtin_call
-    rewrite_op_llong_mod_zer      = _do_builtin_call
-    rewrite_op_ullong_floordiv     = _do_builtin_call
-    rewrite_op_ullong_floordiv_zer = _do_builtin_call
-    rewrite_op_ullong_mod          = _do_builtin_call
-    rewrite_op_ullong_mod_zer      = _do_builtin_call
-    rewrite_op_gc_identityhash = _do_builtin_call
-    rewrite_op_gc_id           = _do_builtin_call
-    rewrite_op_uint_mod        = _do_builtin_call
-    rewrite_op_cast_float_to_uint = _do_builtin_call
-    rewrite_op_cast_uint_to_float = _do_builtin_call
-    rewrite_op_weakref_create = _do_builtin_call
-    rewrite_op_weakref_deref = _do_builtin_call
+    rewrite_op_int_floordiv_ovf_zer   = _do_builtin_call
+    rewrite_op_int_floordiv_ovf       = _do_builtin_call
+    rewrite_op_int_floordiv_zer       = _do_builtin_call
+    rewrite_op_int_mod_ovf_zer        = _do_builtin_call
+    rewrite_op_int_mod_ovf            = _do_builtin_call
+    rewrite_op_int_mod_zer            = _do_builtin_call
+    rewrite_op_int_lshift_ovf         = _do_builtin_call
+    rewrite_op_int_abs                = _do_builtin_call
+    rewrite_op_llong_abs              = _do_builtin_call
+    rewrite_op_llong_floordiv         = _do_builtin_call
+    rewrite_op_llong_floordiv_zer     = _do_builtin_call
+    rewrite_op_llong_mod              = _do_builtin_call
+    rewrite_op_llong_mod_zer          = _do_builtin_call
+    rewrite_op_ullong_floordiv        = _do_builtin_call
+    rewrite_op_ullong_floordiv_zer    = _do_builtin_call
+    rewrite_op_ullong_mod             = _do_builtin_call
+    rewrite_op_ullong_mod_zer         = _do_builtin_call
+    rewrite_op_gc_identityhash        = _do_builtin_call
+    rewrite_op_gc_id                  = _do_builtin_call
+    rewrite_op_gc_pin                 = _do_builtin_call
+    rewrite_op_gc_unpin               = _do_builtin_call
+    rewrite_op_uint_mod               = _do_builtin_call
+    rewrite_op_cast_float_to_uint     = _do_builtin_call
+    rewrite_op_cast_uint_to_float     = _do_builtin_call
+    rewrite_op_weakref_create         = _do_builtin_call
+    rewrite_op_weakref_deref          = _do_builtin_call
     rewrite_op_gc_add_memory_pressure = _do_builtin_call
 
     # ----------
diff --git a/rpython/jit/codewriter/support.py b/rpython/jit/codewriter/support.py
--- a/rpython/jit/codewriter/support.py
+++ b/rpython/jit/codewriter/support.py
@@ -229,6 +229,13 @@
     return llop.gc_id(lltype.Signed, ptr)
 
 
+def _ll_1_gc_pin(ptr):
+    return llop.gc_pin(lltype.Bool, ptr)
+
+def _ll_1_gc_unpin(ptr):
+    llop.gc_unpin(lltype.Void, ptr)
+
+
 @oopspec("jit.force_virtual(inst)")
 def _ll_1_jit_force_virtual(inst):
     return llop.jit_force_virtual(lltype.typeOf(inst), inst)


More information about the pypy-commit mailing list