[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