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