[pypy-commit] pypy resume-refactor: hack enough to start passing some frontend tests
fijal
noreply at buildbot.pypy.org
Wed Jan 22 18:23:26 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68853:06109163139d
Date: 2014-01-18 14:29 +0100
http://bitbucket.org/pypy/pypy/changeset/06109163139d/
Log: hack enough to start passing some frontend tests
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
@@ -13,7 +13,8 @@
from rpython.jit.metainterp.logger import Logger
from rpython.jit.metainterp.optimizeopt.util import args_dict_box
from rpython.jit.metainterp.resoperation import rop
-from rpython.jit.resume.frontend import ResumeRecorder
+from rpython.jit.resume.frontend import ResumeRecorder,\
+ rebuild_from_resumedata
from rpython.rlib import nonconst, rstack
from rpython.rlib.debug import debug_start, debug_stop, debug_print, make_sure_not_resized
from rpython.rlib.jit import Counters
@@ -2479,8 +2480,8 @@
vinfo = self.jitdriver_sd.virtualizable_info
ginfo = self.jitdriver_sd.greenfield_info
self.framestack = []
- inputlocs = resume2.rebuild_from_resumedata(self, deadframe,
- resumedescr)
+ inputlocs = rebuild_from_resumedata(self, deadframe,
+ resumedescr)
virtualizable_boxes = []
virtualref_boxes = []
#
diff --git a/rpython/jit/resume/frontend.py b/rpython/jit/resume/frontend.py
--- a/rpython/jit/resume/frontend.py
+++ b/rpython/jit/resume/frontend.py
@@ -4,7 +4,8 @@
INT, REF, Const
from rpython.jit.metainterp import history
from rpython.jit.resume.reader import AbstractResumeReader
-from rpython.jit.resume.rescode import TAGBOX, TAGCONST, TAGSMALLINT, TAGVIRTUAL
+from rpython.jit.resume.rescode import TAGBOX, TAGCONST, TAGSMALLINT,\
+ TAGVIRTUAL, CLEAR_POSITION
# class AbstractResumeReader(object):
@@ -150,14 +151,28 @@
pos += 1
return curbh
- def store_int_value(self, curbh, i, jitframe_pos):
+ def store_int_value(self, curbh, i, encoded_pos):
+ if encoded_pos == CLEAR_POSITION:
+ return
+ tag, index = self.decode(encoded_pos)
+ if tag & TAGBOX:
+ curbh.registers_i[i] = self.cpu.get_int_value(self.deadframe, index)
+ return
+ xxx
if jitframe_pos >= 0:
curbh.registers_i[i] = self.cpu.get_int_value(
self.deadframe, jitframe_pos)
elif jitframe_pos < -1:
curbh.registers_i[i] = self.consts[-jitframe_pos - 2].getint()
- def store_ref_value(self, curbh, i, jitframe_pos):
+ def store_ref_value(self, curbh, i, encoded_pos):
+ if encoded_pos == CLEAR_POSITION:
+ return
+ tag, index = self.decode(encoded_pos)
+ if tag & TAGBOX:
+ curbh.registers_r[i] = self.cpu.get_ref_value(self.deadframe, index)
+ return
+ xxxx
if jitframe_pos >= 0:
curbh.registers_r[i] = self.cpu.get_ref_value(
self.deadframe, jitframe_pos)
@@ -165,6 +180,7 @@
curbh.registers_r[i] = self.consts[-jitframe_pos - 2].getref_base()
def store_float_value(self, curbh, i, jitframe_pos):
+ xxx
if jitframe_pos >= 0:
curbh.registers_f[i] = self.cpu.get_float_value(
self.deadframe, jitframe_pos)
@@ -182,7 +198,7 @@
AbstractResumeReader.__init__(self, metainterp.staticdata)
def get_box_value(self, encoded_pos, TP):
- if encoded_pos == -1:
+ if encoded_pos == CLEAR_POSITION:
return None
if encoded_pos in self.cache:
return self.cache[encoded_pos]
@@ -314,7 +330,7 @@
#finally:
# rstack._stack_criticalcode_stop()
cpu = metainterp_sd.cpu
- last_bhinterp = DirectResumeReader(interpbuilder, cpu,
+ last_bhinterp = DirectResumeReader(metainterp_sd, interpbuilder, cpu,
deadframe).rebuild(faildescr)
return last_bhinterp
diff --git a/rpython/jit/resume/reader.py b/rpython/jit/resume/reader.py
--- a/rpython/jit/resume/reader.py
+++ b/rpython/jit/resume/reader.py
@@ -1,11 +1,9 @@
-import sys
-from rpython.jit.metainterp.history import ConstInt
from rpython.jit.resume import rescode
class ResumeFrame(object):
def __init__(self, jitcode):
- self.registers = [-1] * jitcode.num_regs()
+ self.registers = [rescode.CLEAR_POSITION] * jitcode.num_regs()
self.jitcode = jitcode
self.pc = -1
@@ -113,6 +111,12 @@
descr = self.staticdata.opcode_descrs[self.read_short(pos + 5)]
self.resume_setfield_gc(structpos, fieldpos, descr)
pos += 7
+ elif op == rescode.RESUME_CLEAR:
+ xxx
+ elif op == rescode.RESUME_SET_PC:
+ pc = self.read_short(pos + 1)
+ self.resume_set_pc(pc)
+ pos += 3
else:
xxx
self.bytecode = None
diff --git a/rpython/jit/resume/rescode.py b/rpython/jit/resume/rescode.py
--- a/rpython/jit/resume/rescode.py
+++ b/rpython/jit/resume/rescode.py
@@ -11,6 +11,8 @@
TAGOFFSET = 2
+CLEAR_POSITION = 0xffff
+
class ResumeBytecode(object):
def __init__(self, opcodes, consts, parent=None, parent_position=-1,
loop=None):
More information about the pypy-commit
mailing list