Armin Rigo avatar Armin Rigo committed e2ced9d

Move the _check_sse2() call out of assembler.setup() and into the
very early phases of running the process.

Comments (0)

Files changed (3)

pypy/jit/backend/x86/assembler.py

         self._debug = v
 
     def setup_once(self):
-        self._check_sse2()
         # the address of the function called by 'new'
         gc_ll_descr = self.cpu.gc_ll_descr
         gc_ll_descr.initialize()
     _CHECK_SSE2_FUNC_PTR = lltype.Ptr(lltype.FuncType([], lltype.Signed))
 
     def _check_sse2(self):
+        """This function is called early in the execution of the program.
+        It checks if the CPU really supports SSE2.  It is only invoked in
+        translated versions for now."""
         if WORD == 8:
             return     # all x86-64 CPUs support SSE2
         if not self.cpu.supports_floats:

pypy/jit/backend/x86/runner.py

         self.assembler.finish_once()
         self.profile_agent.shutdown()
 
+    def early_initialization(self):
+        self.assembler._check_sse2()
+
     def dump_loop_token(self, looptoken):
         """
         NOT_RPYTHON

pypy/jit/metainterp/warmspot.py

 from pypy.rlib.debug import fatalerror
 from pypy.rlib.rstackovf import StackOverflow
 from pypy.translator.simplify import get_functype
+from pypy.translator.unsimplify import call_initial_function
 from pypy.translator.unsimplify import call_final_function
 
 from pypy.jit.metainterp import history, pyjitpl, gc, memmgr
         checkgraph(origportalgraph)
 
     def add_finish(self):
+        def start():
+            self.cpu.early_initialization()
+
         def finish():
             if self.metainterp_sd.profiler.initialized:
                 self.metainterp_sd.profiler.finish()
         if self.cpu.translate_support_code:
             call_final_function(self.translator, finish,
                                 annhelper = self.annhelper)
+            if hasattr(self.cpu, 'early_initialization'):
+                call_initial_function(self.translator, start,
+                                      annhelper = self.annhelper)
 
     def rewrite_set_param(self):
         from pypy.rpython.lltypesystem.rstr import STR
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.