Author: Armin Rigo <[email protected]>
Branch: stmgc-c4
Changeset: r65103:f2dc70f514d0
Date: 2013-06-29 20:12 +0200
http://bitbucket.org/pypy/pypy/changeset/f2dc70f514d0/

Log:    in-progress

diff --git a/rpython/rlib/rstm.py b/rpython/rlib/rstm.py
--- a/rpython/rlib/rstm.py
+++ b/rpython/rlib/rstm.py
@@ -1,5 +1,4 @@
 import thread, weakref
-from rpython.translator.stm import stmgcintf
 from rpython.rlib.debug import ll_assert, fatalerror
 from rpython.rlib.objectmodel import keepalive_until_here, specialize
 from rpython.rlib.objectmodel import we_are_translated
diff --git a/rpython/translator/c/funcgen.py b/rpython/translator/c/funcgen.py
--- a/rpython/translator/c/funcgen.py
+++ b/rpython/translator/c/funcgen.py
@@ -592,6 +592,8 @@
     OP_STM_ABORT_INFO_PUSH = _OP_STM
     OP_STM_EXTRAREF_LLCOUNT = _OP_STM
     OP_STM_EXTRAREF_LLADDR = _OP_STM
+    OP_STM_PUSH_ROOT = _OP_STM
+    OP_STM_POP_ROOT_INTO = _OP_STM
 
 
     def OP_PTR_NONZERO(self, op):
diff --git a/rpython/translator/stm/funcgen.py 
b/rpython/translator/stm/funcgen.py
--- a/rpython/translator/stm/funcgen.py
+++ b/rpython/translator/stm/funcgen.py
@@ -1,7 +1,6 @@
-from rpython.translator.c.support import c_string_constant
+from rpython.translator.c.support import c_string_constant, cdecl
 from rpython.translator.c.node import ContainerNode
 from rpython.translator.c.primitive import name_small_integer
-from rpython.translator.stm.stmgcintf import StmOperations
 
 
 class StmHeader_OpaqueNode(ContainerNode):
@@ -50,9 +49,12 @@
 def stm_barrier(funcgen, op):
     category_change = op.args[0].value
     funcname = _STM_BARRIER_FUNCS[category_change]
+    assert op.args[1].concretetype == op.result.concretetype
     arg = funcgen.expr(op.args[1])
     result = funcgen.expr(op.result)
-    return '%s = %s(%s);' % (result, funcname, arg)
+    return '%s = (%s)%s((gcptr)%s);' % (
+        result, cdecl(funcgen.lltypename(op.result), ''),
+        funcname, arg)
 
 def stm_ptr_eq(funcgen, op):
     xxx
@@ -95,6 +97,15 @@
     StmOperations.descriptor_init()
     StmOperations.begin_inevitable_transaction()
 
+def stm_push_root(funcgen, op):
+    arg0 = funcgen.expr(op.args[0])
+    return 'stm_push_root((gcptr)%s);' % (arg0,)
+
+def stm_pop_root_into(funcgen, op):
+    arg0 = funcgen.expr(op.args[0])
+    return '%s = (%s)stm_pop_root();' % (
+        arg0, cdecl(funcgen.lltypename(op.args[0]), ''))
+
 
 def op_stm(funcgen, op):
     func = globals()[op.opname]
diff --git a/rpython/translator/stm/jitdriver.py 
b/rpython/translator/stm/jitdriver.py
--- a/rpython/translator/stm/jitdriver.py
+++ b/rpython/translator/stm/jitdriver.py
@@ -2,7 +2,6 @@
 from rpython.flowspace.model import checkgraph, copygraph
 from rpython.flowspace.model import Block, Link, SpaceOperation, Constant
 from rpython.translator.unsimplify import split_block, varoftype
-from rpython.translator.stm.stmgcintf import StmOperations
 from rpython.annotator.model import lltype_to_annotation, s_Int
 from rpython.rtyper.annlowlevel import (MixLevelHelperAnnotator,
                                       cast_base_ptr_to_instance)
diff --git a/rpython/translator/stm/stmgcintf.py 
b/rpython/translator/stm/stmgcintf.py
--- a/rpython/translator/stm/stmgcintf.py
+++ b/rpython/translator/stm/stmgcintf.py
@@ -1,7 +1,5 @@
-import py, os
-from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
+import os
 from rpython.translator.tool.cbuild import ExternalCompilationInfo
-from rpython.rlib.rarithmetic import LONG_BIT
 from rpython.conftest import cdir as cdir2
 
 
@@ -10,73 +8,4 @@
 eci = ExternalCompilationInfo(
     include_dirs = [cdir, cdir2],
     includes = ['src_stm/stmgc.h'],
-    pre_include_bits = ['#define PYPY_LONG_BIT %d' % LONG_BIT,
-                        '#define RPY_STM 1'],
 )
-
-def _llexternal(name, args, result, **kwds):
-    return rffi.llexternal(name, args, result, compilation_info=eci,
-                           _nowrapper=True, transactionsafe=True,
-                           **kwds)
-
-def smexternal(name, args, result):
-    return staticmethod(_llexternal(name, args, result))
-
-# ____________________________________________________________
-
-
-class StmOperations(object):
-
-    CALLBACK_TX     = lltype.Ptr(lltype.FuncType([rffi.VOIDP, lltype.Signed],
-                                                 lltype.Signed))
-    DUPLICATE       = lltype.Ptr(lltype.FuncType([llmemory.Address],
-                                                 llmemory.Address))
-    CALLBACK_ENUM   = lltype.Ptr(lltype.FuncType([llmemory.Address]*2,
-                                                 lltype.Void))
-
-    def _freeze_(self):
-        return True
-
-    # C part of the implementation of the pypy.rlib.rstm module
-    in_transaction = smexternal('stm_in_transaction', [], lltype.Signed)
-    is_inevitable = smexternal('stm_is_inevitable', [], lltype.Signed)
-    should_break_transaction = smexternal('stm_should_break_transaction',
-                                          [], lltype.Signed)
-    add_atomic = smexternal('stm_add_atomic', [lltype.Signed], lltype.Void)
-    get_atomic = smexternal('stm_get_atomic', [], lltype.Signed)
-    descriptor_init = smexternal('DescriptorInit', [], lltype.Signed)
-    descriptor_done = smexternal('DescriptorDone', [], lltype.Void)
-    begin_inevitable_transaction = smexternal(
-        'BeginInevitableTransaction', [], lltype.Void)
-    commit_transaction = smexternal(
-        'CommitTransaction', [], lltype.Void)
-    perform_transaction = smexternal('stm_perform_transaction',
-                                     [CALLBACK_TX, rffi.VOIDP, 
llmemory.Address],
-                                     lltype.Void)
-
-    # for the GC: store and read a thread-local-storage field
-    set_tls = smexternal('stm_set_tls', [llmemory.Address], llmemory.Address)
-    get_tls = smexternal('stm_get_tls', [], llmemory.Address)
-    del_tls = smexternal('stm_del_tls', [], lltype.Void)
-
-    # calls FindRootsForLocalCollect() and invokes for each such root
-    # the callback set in CALLBACK_ENUM.
-    tldict_enum = smexternal('stm_tldict_enum', [], lltype.Void)
-    tldict_enum_external = smexternal('stm_tldict_enum_external',
-                                      [llmemory.Address], lltype.Void)
-
-    # sets the transaction length, after which should_break_transaction()
-    # returns True
-    set_transaction_length = smexternal('stm_set_transaction_length',
-                                        [lltype.Signed], lltype.Void)
-
-    abort_info_pop = smexternal('stm_abort_info_pop',
-                                [lltype.Signed], lltype.Void)
-    inspect_abort_info = smexternal('stm_inspect_abort_info',
-                                    [], rffi.CCHARP)
-
-    start_single_thread = smexternal('stm_start_single_thread',[], lltype.Void)
-    stop_single_thread  = smexternal('stm_stop_single_thread', [], lltype.Void)
-
-    # for testing
-    abort_and_retry = smexternal('stm_abort_and_retry', [], lltype.Void)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to