[pypy-commit] pypy ppc-vsx-support: defer vector_ext init to a point where release gil is possible

plan_rich pypy.commits at gmail.com
Tue Jul 19 05:55:31 EDT 2016


Author: Richard Plangger <planrichi at gmail.com>
Branch: ppc-vsx-support
Changeset: r85767:15cafdc0f60b
Date: 2016-07-18 17:51 +0200
http://bitbucket.org/pypy/pypy/changeset/15cafdc0f60b/

Log:	defer vector_ext init to a point where release gil is possible

diff --git a/rpython/jit/backend/llsupport/vector_ext.py b/rpython/jit/backend/llsupport/vector_ext.py
--- a/rpython/jit/backend/llsupport/vector_ext.py
+++ b/rpython/jit/backend/llsupport/vector_ext.py
@@ -195,6 +195,13 @@
         self._enabled = False
         self.register_size = 0 # in bytes
         self.horizontal_operations = False
+        self._setup = False
+
+    def is_setup(self):
+        return self._setup
+
+    def setup_once(self):
+        raise NotImplementedError
 
     def enable(self, vec_size, accum=False):
         self._enabled = vec_size != 0
diff --git a/rpython/jit/backend/ppc/runner.py b/rpython/jit/backend/ppc/runner.py
--- a/rpython/jit/backend/ppc/runner.py
+++ b/rpython/jit/backend/ppc/runner.py
@@ -45,9 +45,6 @@
     @rgc.no_release_gil
     def setup_once(self):
         self.assembler.setup_once()
-        if detect_vsx():
-            self.vector_ext.enable(16, accum=True)
-            self.assembler.setup_once_vector()
 
     @rgc.no_release_gil
     def finish_once(self):
diff --git a/rpython/jit/backend/ppc/vector_ext.py b/rpython/jit/backend/ppc/vector_ext.py
--- a/rpython/jit/backend/ppc/vector_ext.py
+++ b/rpython/jit/backend/ppc/vector_ext.py
@@ -20,6 +20,7 @@
 from rpython.jit.backend.llsupport.asmmemmgr import MachineDataBlockWrapper
 from rpython.rtyper.lltypesystem import lltype, rffi
 from rpython.jit.codewriter import longlong
+from rpython.jit.backend.ppc.detect_feature import detect_vsx
 
 def not_implemented(msg):
     msg = '[ppc/vector_ext] %s\n' % msg
@@ -64,7 +65,11 @@
         asm.mc.vsel(resval, zeros, ones, resval)
 
 class AltiVectorExt(VectorExt):
-    pass
+    def setup_once(self, asm):
+        if detect_vsx():
+            self.vector_ext.enable(16, accum=True)
+            asm.setup_once_vector()
+        self._setup = True
 
 class VectorAssembler(object):
     _mixin_ = True
diff --git a/rpython/jit/metainterp/optimizeopt/__init__.py b/rpython/jit/metainterp/optimizeopt/__init__.py
--- a/rpython/jit/metainterp/optimizeopt/__init__.py
+++ b/rpython/jit/metainterp/optimizeopt/__init__.py
@@ -46,6 +46,10 @@
         or 'heap' not in enable_opts or 'pure' not in enable_opts):
         optimizations.append(OptSimplify(unroll))
 
+    cpu = metainterp_sd.cpu
+    if not cpu.vector_ext.is_setup():
+        cpu.vector_ext.setup_once()
+
     return optimizations, unroll
 
 def optimize_trace(metainterp_sd, jitdriver_sd, compile_data, memo=None):


More information about the pypy-commit mailing list