Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: vmprof
Changeset: r75343:3d53ff995d24
Date: 2015-01-15 14:52 +0200
http://bitbucket.org/pypy/pypy/changeset/3d53ff995d24/

Log:    try to make jit entrypoints work

diff --git a/rpython/jit/backend/llsupport/asmmemmgr.py 
b/rpython/jit/backend/llsupport/asmmemmgr.py
--- a/rpython/jit/backend/llsupport/asmmemmgr.py
+++ b/rpython/jit/backend/llsupport/asmmemmgr.py
@@ -7,12 +7,12 @@
 from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
 from rpython.rlib.rbisect import bisect
 from rpython.rlib import rgc
-from rpython.rlib.entrypoint import entrypoint_lowlevel
+from rpython.rlib.entrypoint import jit_entrypoint
 
 _memmngr = None # global reference so we can use @entrypoint :/
 
-@entrypoint_lowlevel('main', [lltype.Signed],
-                     c_name='pypy_jit_stack_depth_at_loc')
+@jit_entrypoint([lltype.Signed], lltype.Signed,
+                c_name='pypy_jit_stack_depth_at_loc')
 @rgc.no_collect
 def stack_depth_at_loc(loc):
     global _memmngr
@@ -22,13 +22,13 @@
         return -1
     return _memmngr.jit_frame_depth_map[pos-1]
 
-@entrypoint_lowlevel('main', [], c_name='pypy_jit_start_addr')
+@jit_entrypoint([], lltype.Signed, c_name='pypy_jit_start_addr')
 def jit_start_addr(loc):
     global _memmngr
 
     return _memmngr.jit_addr_map[0]
 
-@entrypoint_lowlevel('main', [], c_name='pypy_jit_end_addr')
+@jit_entrypoint([], lltype.Signed, c_name='pypy_jit_end_addr')
 def jit_end_addr(loc):
     global _memmngr
 
diff --git a/rpython/jit/metainterp/warmspot.py 
b/rpython/jit/metainterp/warmspot.py
--- a/rpython/jit/metainterp/warmspot.py
+++ b/rpython/jit/metainterp/warmspot.py
@@ -25,6 +25,7 @@
 from rpython.jit.codewriter.policy import JitPolicy
 from rpython.jit.codewriter.effectinfo import EffectInfo
 from rpython.jit.metainterp.optimizeopt import ALL_OPTS_NAMES
+from rpython.rlib.entrypoint import all_jit_entrypoints
 
 
 # ____________________________________________________________
@@ -228,6 +229,7 @@
 
         verbose = False # not self.cpu.translate_support_code
         self.rewrite_access_helpers()
+        self.create_jit_entry_points()
         self.codewriter.make_jitcodes(verbose=verbose)
         self.rewrite_can_enter_jits()
         self.rewrite_set_param_and_get_stats()
@@ -676,6 +678,10 @@
             op = block.operations[index]
             self.rewrite_access_helper(op)
 
+    def create_jit_entry_points(self):
+        for func, args_s, s_result in all_jit_entrypoints:
+            self.helper_func(func, args_s, s_result)
+
     def rewrite_access_helper(self, op):
         # make sure we make a copy of function so it no longer belongs
         # to extregistry
diff --git a/rpython/rlib/entrypoint.py b/rpython/rlib/entrypoint.py
--- a/rpython/rlib/entrypoint.py
+++ b/rpython/rlib/entrypoint.py
@@ -10,6 +10,16 @@
     func.exported_symbol = True
     return func
 
+all_jit_entrypoints = []
+
+def jit_entrypoint(argtypes, restype, c_name):
+    def deco(func):
+        func.c_name = c_name
+        func.relax_sig_check = True
+        export_symbol(func)
+        all_jit_entrypoints.append((func, argtypes, restype))
+        return func
+    return deco
 
 def entrypoint_lowlevel(key, argtypes, c_name=None, relax=False):
     """ Note: entrypoint should call llop.gc_stack_bottom on it's own.
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to