[pypy-commit] pypy jit-leaner-frontend: another micro-optimization
fijal
pypy.commits at gmail.com
Tue Mar 15 12:46:19 EDT 2016
Author: fijal
Branch: jit-leaner-frontend
Changeset: r83075:5f3c4d1e2f03
Date: 2016-03-15 18:45 +0200
http://bitbucket.org/pypy/pypy/changeset/5f3c4d1e2f03/
Log: another micro-optimization
diff --git a/rpython/jit/metainterp/opencoder.py b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -325,9 +325,12 @@
array[i] = self._encode(boxes[i])
return array
- def create_top_snapshot(self, jitcode, pc, boxes, vable_boxes, vref_boxes):
+ def new_array(self, lgt):
+ return [rffi.cast(rffi.SHORT, 0)] * lgt
+
+ def create_top_snapshot(self, jitcode, pc, frame, flag, vable_boxes, vref_boxes):
self._total_snapshots += 1
- array = self._list_of_boxes(boxes)
+ array = frame.get_list_of_active_boxes(flag, self.new_array, self._encode)
vable_array = self._list_of_boxes(vable_boxes)
vref_array = self._list_of_boxes(vref_boxes)
s = TopSnapshot(combine_uint(jitcode.index, pc), array, vable_array,
@@ -350,9 +353,9 @@
self._ops[self._pos - 1] = rffi.cast(rffi.SHORT, len(self._snapshots) - 1)
return s
- def create_snapshot(self, jitcode, pc, boxes):
+ def create_snapshot(self, jitcode, pc, frame, flag):
self._total_snapshots += 1
- array = self._list_of_boxes(boxes)
+ array = frame.get_list_of_active_boxes(flag, self.new_array, self._encode)
return Snapshot(combine_uint(jitcode.index, pc), array)
def get_iter(self, metainterp_sd=None):
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -127,7 +127,7 @@
def get_current_position_info(self):
return self.jitcode.get_live_vars_info(self.pc)
- def get_list_of_active_boxes(self, in_a_call):
+ def get_list_of_active_boxes(self, in_a_call, new_array, encode):
if in_a_call:
# If we are not the topmost frame, self._result_argcode contains
# the type of the result of the call instruction in the bytecode.
@@ -146,18 +146,18 @@
start_f = start_r + info.get_register_count_r()
total = start_f + info.get_register_count_f()
# allocate a list of the correct size
- env = [None] * total
+ env = new_array(total)
make_sure_not_resized(env)
# fill it now
for i in range(info.get_register_count_i()):
index = info.get_register_index_i(i)
- env[start_i + i] = self.registers_i[index]
+ env[start_i + i] = encode(self.registers_i[index])
for i in range(info.get_register_count_r()):
index = info.get_register_index_r(i)
- env[start_r + i] = self.registers_r[index]
+ env[start_r + i] = encode(self.registers_r[index])
for i in range(info.get_register_count_f()):
index = info.get_register_index_f(i)
- env[start_f + i] = self.registers_f[index]
+ env[start_f + i] = encode(self.registers_f[index])
return env
def replace_active_box_in_frame(self, oldbox, newbox):
diff --git a/rpython/jit/metainterp/resume.py b/rpython/jit/metainterp/resume.py
--- a/rpython/jit/metainterp/resume.py
+++ b/rpython/jit/metainterp/resume.py
@@ -90,8 +90,7 @@
if target.parent_snapshot:
snapshot.prev = target.parent_snapshot
return
- s = t.create_snapshot(back.jitcode, back.pc,
- back.get_list_of_active_boxes(True))
+ s = t.create_snapshot(back.jitcode, back.pc, back, True)
snapshot.prev = s
_ensure_parent_resumedata(framestack, n - 1, t, s)
target.parent_snapshot = s
@@ -108,7 +107,7 @@
if n >= 0:
top = framestack[n]
snapshot = t.create_top_snapshot(top.jitcode, top.pc,
- top.get_list_of_active_boxes(False), virtualizable_boxes,
+ top, False, virtualizable_boxes,
virtualref_boxes)
_ensure_parent_resumedata(framestack, n, t,snapshot)
else:
More information about the pypy-commit
mailing list