[pypy-commit] pypy jitframe-on-heap: Kill two copies of the same code for make_execute_token
fijal
noreply at buildbot.pypy.org
Wed Feb 13 19:18:51 CET 2013
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: jitframe-on-heap
Changeset: r61179:33f35592a600
Date: 2013-02-13 20:17 +0200
http://bitbucket.org/pypy/pypy/changeset/33f35592a600/
Log: Kill two copies of the same code for make_execute_token
diff --git a/rpython/jit/backend/arm/assembler.py b/rpython/jit/backend/arm/assembler.py
--- a/rpython/jit/backend/arm/assembler.py
+++ b/rpython/jit/backend/arm/assembler.py
@@ -641,7 +641,7 @@
self.write_pending_failure_recoveries()
rawstart = self.materialize_loop(looptoken)
- looptoken._function_addr = looptoken._arm_func_addr = rawstart
+ looptoken._function_addr = looptoken._ll_function_addr = rawstart
self.process_pending_guards(rawstart)
self.fixup_target_tokens(rawstart)
diff --git a/rpython/jit/backend/arm/opassembler.py b/rpython/jit/backend/arm/opassembler.py
--- a/rpython/jit/backend/arm/opassembler.py
+++ b/rpython/jit/backend/arm/opassembler.py
@@ -1112,7 +1112,7 @@
assert isinstance(descr, JitCellToken)
# check value
assert tmploc is r.r0
- self._emit_call(imm(descr._arm_func_addr),
+ self._emit_call(imm(descr._ll_function_addr),
callargs, fcond, resloc=tmploc)
if op.result is None:
value = self.cpu.done_with_this_frame_void_v
@@ -1243,12 +1243,12 @@
new_nbargs = newlooptoken.compiled_loop_token._debug_nbargs
assert old_nbargs == new_nbargs
# we overwrite the instructions at the old _arm_func_adddr
- # to start with a JMP to the new _arm_func_addr.
+ # to start with a JMP to the new _ll_function_addr.
# Ideally we should rather patch all existing CALLs, but well.
XXX # this is wrong, copy the logic from x86, but also, shouldn't
# it live on a base class instead?
- oldadr = oldlooptoken._arm_func_addr
- target = newlooptoken._arm_func_addr
+ oldadr = oldlooptoken._ll_function_addr
+ target = newlooptoken._ll_function_addr
mc = ARMv7Builder()
mc.B(target)
mc.copy_to_raw_memory(oldadr)
diff --git a/rpython/jit/backend/arm/runner.py b/rpython/jit/backend/arm/runner.py
--- a/rpython/jit/backend/arm/runner.py
+++ b/rpython/jit/backend/arm/runner.py
@@ -65,52 +65,6 @@
for index in range(count):
setitem(index, null)
- def make_execute_token(self, *ARGS):
- FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
- llmemory.GCREF))
-
- lst = [(i, history.getkind(ARG)[0]) for i, ARG in enumerate(ARGS)]
- kinds = unrolling_iterable(lst)
-
- def execute_token(executable_token, *args):
- clt = executable_token.compiled_loop_token
- assert len(args) == clt._debug_nbargs
- #
- addr = executable_token._arm_func_addr
- assert addr % 8 == 0
- func = rffi.cast(FUNCPTR, addr)
- #llop.debug_print(lltype.Void, ">>>> Entering", addr)
- frame_info = clt.frame_info
- frame = self.gc_ll_descr.malloc_jitframe(frame_info)
- ll_frame = lltype.cast_opaque_ptr(llmemory.GCREF, frame)
- prev_interpreter = None # help flow space
- if not self.translate_support_code:
- prev_interpreter = LLInterpreter.current_interpreter
- LLInterpreter.current_interpreter = self.debug_ll_interpreter
- try:
- num = JITFRAME_FIXED_SIZE * WORD
- for i, kind in kinds:
- arg = args[i]
- if kind == history.INT:
- self.set_int_value(ll_frame, num, arg)
- elif kind == history.FLOAT:
- self.set_float_value(ll_frame, num, arg)
- num += WORD # on ARM(32 bit) a FLOAT needs two words
- else:
- assert kind == history.REF
- self.set_ref_value(ll_frame, num, arg)
- num += WORD
- # no GC operation between gc_assume_young_pointers and
- # the actual call to assembler!
- llop.gc_assume_young_pointers(lltype.Void, frame)
- ll_frame = func(ll_frame)
- finally:
- if not self.translate_support_code:
- LLInterpreter.current_interpreter = prev_interpreter
- #llop.debug_print(lltype.Void, "<<<< Back")
- return ll_frame
- return execute_token
-
def cast_ptr_to_int(x):
adr = llmemory.cast_ptr_to_adr(x)
return ArmCPU.cast_adr_to_int(adr)
diff --git a/rpython/jit/backend/arm/test/test_regalloc.py b/rpython/jit/backend/arm/test/test_regalloc.py
--- a/rpython/jit/backend/arm/test/test_regalloc.py
+++ b/rpython/jit/backend/arm/test/test_regalloc.py
@@ -791,7 +791,7 @@
large = self.interpret(loop1, range(11), run=False)
large._jitcelltoken.outermost_jitdriver_sd = FakeJitDriverSD()
self.namespace['looptoken'] = large._jitcelltoken
- assert self.namespace['looptoken']._arm_func_addr != 0
+ assert self.namespace['looptoken']._ll_function_addr != 0
loop2 = """
[i0]
i1 = force_token()
diff --git a/rpython/jit/backend/llsupport/llmodel.py b/rpython/jit/backend/llsupport/llmodel.py
--- a/rpython/jit/backend/llsupport/llmodel.py
+++ b/rpython/jit/backend/llsupport/llmodel.py
@@ -15,6 +15,7 @@
FLAG_POINTER, FLAG_FLOAT)
from rpython.jit.backend.llsupport.asmmemmgr import AsmMemoryManager
from rpython.annotator import model as annmodel
+from rpython.rlib.unroll import unrolling_iterable
class AbstractLLCPU(AbstractCPU):
@@ -187,6 +188,47 @@
frame.jf_descr = frame.jf_force_descr
return lltype.cast_opaque_ptr(llmemory.GCREF, frame)
+ def make_execute_token(self, *ARGS):
+ FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
+ llmemory.GCREF))
+
+ lst = [(i, history.getkind(ARG)[0]) for i, ARG in enumerate(ARGS)]
+ kinds = unrolling_iterable(lst)
+
+ def execute_token(executable_token, *args):
+ clt = executable_token.compiled_loop_token
+ assert len(args) == clt._debug_nbargs
+ #
+ addr = executable_token._ll_function_addr
+ func = rffi.cast(FUNCPTR, addr)
+ #llop.debug_print(lltype.Void, ">>>> Entering", addr)
+ frame_info = clt.frame_info
+ frame = self.gc_ll_descr.malloc_jitframe(frame_info)
+ ll_frame = lltype.cast_opaque_ptr(llmemory.GCREF, frame)
+ locs = executable_token.compiled_loop_token._ll_initial_locs
+ prev_interpreter = None # help flow space
+ if not self.translate_support_code:
+ prev_interpreter = LLInterpreter.current_interpreter
+ LLInterpreter.current_interpreter = self.debug_ll_interpreter
+ try:
+ for i, kind in kinds:
+ arg = args[i]
+ num = locs[i]
+ if kind == history.INT:
+ self.set_int_value(ll_frame, num, arg)
+ elif kind == history.FLOAT:
+ self.set_float_value(ll_frame, num, arg)
+ else:
+ assert kind == history.REF
+ self.set_ref_value(ll_frame, num, arg)
+ ll_frame = func(ll_frame)
+ finally:
+ if not self.translate_support_code:
+ LLInterpreter.current_interpreter = prev_interpreter
+ #llop.debug_print(lltype.Void, "<<<< Back")
+ return ll_frame
+ return execute_token
+
# ------------------- helpers and descriptions --------------------
@staticmethod
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -472,7 +472,7 @@
def assemble_loop(self, loopname, inputargs, operations, looptoken, log):
'''adds the following attributes to looptoken:
- _x86_function_addr (address of the generated func, as an int)
+ _ll_function_addr (address of the generated func, as an int)
_x86_loop_code (debug: addr of the start of the ResOps)
_x86_fullsize (debug: full size including failure)
_x86_debug_checksum
@@ -531,7 +531,7 @@
looptoken._x86_rawstart = rawstart
looptoken._x86_fullsize = full_size
looptoken._x86_ops_offset = ops_offset
- looptoken._x86_function_addr = rawstart
+ looptoken._ll_function_addr = rawstart
self.fixup_target_tokens(rawstart)
self.teardown()
@@ -865,11 +865,11 @@
old_nbargs = oldlooptoken.compiled_loop_token._debug_nbargs
new_nbargs = newlooptoken.compiled_loop_token._debug_nbargs
assert old_nbargs == new_nbargs
- # we overwrite the instructions at the old _x86_function_addr
- # to start with a JMP to the new _x86_function_addr.
+ # we overwrite the instructions at the old _ll_function_addr
+ # to start with a JMP to the new _ll_function_addr.
# Ideally we should rather patch all existing CALLs, but well.
- oldadr = oldlooptoken._x86_function_addr
- target = newlooptoken._x86_function_addr
+ oldadr = oldlooptoken._ll_function_addr
+ target = newlooptoken._ll_function_addr
# copy frame-info data
baseofs = self.cpu.get_baseofs_of_frame_field()
newlooptoken.compiled_loop_token.update_frame_info(
@@ -2274,7 +2274,7 @@
# execute_token
jd = descr.outermost_jitdriver_sd
base_ofs = self.cpu.get_baseofs_of_frame_field()
- self._emit_call(imm(descr._x86_function_addr),
+ self._emit_call(imm(descr._ll_function_addr),
[argloc], 0, tmp=eax)
if op.result is None:
assert result_loc is None
diff --git a/rpython/jit/backend/x86/runner.py b/rpython/jit/backend/x86/runner.py
--- a/rpython/jit/backend/x86/runner.py
+++ b/rpython/jit/backend/x86/runner.py
@@ -1,9 +1,6 @@
import py
-from rpython.rlib.unroll import unrolling_iterable
from rpython.rtyper.lltypesystem import lltype, llmemory, rffi
-from rpython.rtyper.llinterp import LLInterpreter
from rpython.rlib.jit_hooks import LOOP_RUN_CONTAINER
-from rpython.jit.metainterp import history
from rpython.jit.backend.x86.assembler import Assembler386
from rpython.jit.backend.x86.profagent import ProfileAgent
from rpython.jit.backend.llsupport.llmodel import AbstractLLCPU
@@ -97,47 +94,6 @@
for index in range(count):
setitem(index, null)
- def make_execute_token(self, *ARGS):
- FUNCPTR = lltype.Ptr(lltype.FuncType([llmemory.GCREF],
- llmemory.GCREF))
-
- lst = [(i, history.getkind(ARG)[0]) for i, ARG in enumerate(ARGS)]
- kinds = unrolling_iterable(lst)
-
- def execute_token(executable_token, *args):
- clt = executable_token.compiled_loop_token
- assert len(args) == clt._debug_nbargs
- #
- addr = executable_token._x86_function_addr
- func = rffi.cast(FUNCPTR, addr)
- #llop.debug_print(lltype.Void, ">>>> Entering", addr)
- frame_info = clt.frame_info
- frame = self.gc_ll_descr.malloc_jitframe(frame_info)
- ll_frame = lltype.cast_opaque_ptr(llmemory.GCREF, frame)
- locs = executable_token.compiled_loop_token._ll_initial_locs
- prev_interpreter = None # help flow space
- if not self.translate_support_code:
- prev_interpreter = LLInterpreter.current_interpreter
- LLInterpreter.current_interpreter = self.debug_ll_interpreter
- try:
- for i, kind in kinds:
- arg = args[i]
- num = locs[i]
- if kind == history.INT:
- self.set_int_value(ll_frame, num, arg)
- elif kind == history.FLOAT:
- self.set_float_value(ll_frame, num, arg)
- else:
- assert kind == history.REF
- self.set_ref_value(ll_frame, num, arg)
- ll_frame = func(ll_frame)
- finally:
- if not self.translate_support_code:
- LLInterpreter.current_interpreter = prev_interpreter
- #llop.debug_print(lltype.Void, "<<<< Back")
- return ll_frame
- return execute_token
-
def cast_ptr_to_int(x):
adr = llmemory.cast_ptr_to_adr(x)
return CPU386.cast_adr_to_int(adr)
More information about the pypy-commit
mailing list