[pypy-svn] r36331 - pypy/dist/pypy/jit/codegen/i386

arigo at codespeak.net arigo at codespeak.net
Tue Jan 9 12:08:39 CET 2007


Author: arigo
Date: Tue Jan  9 12:08:37 2007
New Revision: 36331

Modified:
   pypy/dist/pypy/jit/codegen/i386/rgenop.py
Log:
(mwh, arigo)

Begin adapt i386/rgenop to the new interface.


Modified: pypy/dist/pypy/jit/codegen/i386/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/rgenop.py	(original)
+++ pypy/dist/pypy/jit/codegen/i386/rgenop.py	Tue Jan  9 12:08:37 2007
@@ -187,9 +187,12 @@
         except CodeBlockOverflow:
             self._reserve_more()
             self._add_case(gv_case, targetbuilder)
+        targetbuilder._open()
         return targetbuilder
     
     def _add_case(self, gv_case, targetbuilder):
+        # XXX this code needs to be simplified, now that we always
+        # have a default case
         start = self.nextfreepos
         end   = self.endfreepos
         mc = self.rgenop.InMemoryCodeBuilder(start, end)
@@ -210,7 +213,7 @@
         self._je_key = 0
         self.nextfreepos = pos
 
-    def add_default(self):
+    def _add_default(self):
         rgenop = self.rgenop
         targetbuilder = Builder._new_from_state(rgenop, self.saved_state)
         self.default_case_builder = targetbuilder
@@ -218,6 +221,7 @@
         end   = self.endfreepos
         mc = self.rgenop.InMemoryCodeBuilder(start, end)
         self.default_case_key = targetbuilder.come_from(mc, 'JMP')
+        targetbuilder._open()
         return targetbuilder
 
 class Builder(GenBuilder):
@@ -268,18 +272,18 @@
                     mc.JMP(rel32(curpos))
                     mc.done()
 
-    def pause(self):
-        if self.mc is None:
-            return
-        start = self.mc.tell()
-        self.mc.JMP(rel32(0))
-        end = self.mc.tell()
-        self.tail = (start, end)
-        self.mc.done()
-        self.rgenop.close_mc(self.mc)
-        self.mc = None
+    def pause_writing(self, alive_vars_gv):
+        if self.mc is not None:
+            start = self.mc.tell()
+            self.mc.JMP(rel32(0))
+            end = self.mc.tell()
+            self.tail = (start, end)
+            self.mc.done()
+            self.rgenop.close_mc(self.mc)
+            self.mc = None
+        return self
         
-    def resume(self):
+    def start_writing(self):
         self._open()
         
     def _emit_come_from(self, mc, insn, addr):
@@ -322,14 +326,14 @@
         self.mc = None
 
     def _fork(self):
-        return self.rgenop.openbuilder(self.stackdepth)
+        return self.rgenop.newbuilder(self.stackdepth)
 
     def _save_state(self):
         return self.stackdepth
 
     @staticmethod
     def _new_from_state(rgenop, stackdepth):
-        return rgenop.openbuilder(stackdepth)
+        return rgenop.newbuilder(stackdepth)
 
     @specialize.arg(1)
     def genop1(self, opname, gv_arg):
@@ -493,13 +497,13 @@
             seen[gv.stackpos] = None
         return Label(self.mc.tell(), arg_positions, self.stackdepth)
 
-    def jump_if_false(self, gv_condition):
+    def jump_if_false(self, gv_condition, args_gv):
         targetbuilder = self._fork()
         self.mc.CMP(gv_condition.operand(self), imm8(0))
         targetbuilder.come_from(self.mc, 'JE')
         return targetbuilder
 
-    def jump_if_true(self, gv_condition):
+    def jump_if_true(self, gv_condition, args_gv):
         targetbuilder = self._fork()
         self.mc.CMP(gv_condition.operand(self), imm8(0))
         targetbuilder.come_from(self.mc, 'JNE')
@@ -519,11 +523,11 @@
         self.mc.JMP(rel32(target.startaddr))
         self._close()
 
-    def flexswitch(self, gv_exitswitch):
+    def flexswitch(self, gv_exitswitch, args_gv):
         result = FlexSwitch(self.rgenop)
         result.initialize(self, gv_exitswitch)
         self._close()
-        return result
+        return result, result._add_default()
 
     def show_incremental_progress(self):
         pass
@@ -1006,11 +1010,11 @@
     def check_no_open_mc(self):
         assert len(self.mcs) == self.total_code_blocks
 
-    def openbuilder(self, stackdepth):
+    def newbuilder(self, stackdepth):
         return Builder(self, stackdepth)
 
     def newgraph(self, sigtoken, name):
-        builder = self.openbuilder(self._initial_stack_depth(sigtoken))
+        builder = self.newbuilder(self._initial_stack_depth(sigtoken))
         builder._open() # Force builder to have an mc
         entrypoint = builder.mc.tell()
         inputargs_gv = builder._write_prologue(sigtoken)



More information about the Pypy-commit mailing list